<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ryan norris &#187; delivery</title>
	<atom:link href="http://www.ryannorris.com/tag/delivery/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.ryannorris.com</link>
	<description>managing software teams and delivering great results</description>
	<lastBuildDate>Fri, 25 Jun 2010 13:44:27 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Integrating Your QA Staff with Engineering in SCRUM</title>
		<link>http://www.ryannorris.com/2009/08/14/integrating-your-qa-staff-with-engineering-in-scrum/</link>
		<comments>http://www.ryannorris.com/2009/08/14/integrating-your-qa-staff-with-engineering-in-scrum/#comments</comments>
		<pubDate>Fri, 14 Aug 2009 11:53:24 +0000</pubDate>
		<dc:creator>Ryan Norris</dc:creator>
				<category><![CDATA[Project Teams]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[scrum]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[beck]]></category>
		<category><![CDATA[delivery]]></category>
		<category><![CDATA[fowler]]></category>
		<category><![CDATA[qa]]></category>
		<category><![CDATA[tdd]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://www.ryannorris.com/?p=88</guid>
		<description><![CDATA[As much as I love automated testing, I have come to live with the fact that teams migrating from waterfall approaches to development to SCRUM often try to maintain the team structures they are familiar with.  At times, this typically means an engineering staff that sucks at writing tests, and a QA staff that is [...]]]></description>
			<content:encoded><![CDATA[<p>As much as I love automated testing, I have come to live with the fact that teams migrating from waterfall approaches to development to SCRUM often try to maintain the team structures they are familiar with.  At times, this typically means an engineering staff that sucks at writing tests, and a QA staff that is still very much attuned to the finer grained edge and corner cases.  Each of these parts of your team adds value to a SCRUM project.  Integrating them to avoid bottlenecks, stay lean, and deliver with quality is a clever trick.</p>
<p><span id="more-88"></span>Engineers write code.  QA tests that code.  In the past, this baton model has been derived from extensive functional specifications and use case documents that break down the core, extension, and exception cases so that both the tests and software can be clearly defined.  In a waterfall model, this was functional as it mirrored the sequence of SDLC.  But SCRUM and most Agile processes really shun this kind of thinking and instead target flat teams that collectively own the deliverable.  As in a recent experience of mine, maintaining that same handoff creates all sorts of problems.  Acceptance and rejection of delivered stories occurs late in the game, QA is always in a rush to execute their tests, and product teams and development see QA as a bottleneck.  It&#8217;s tempting for management to look at this and begin to turn SCRUM into a series of miniature waterfalls.  But this is <strong>wrong.</strong> Instead, as with all things in SCRUM, the search for a solution needs to answer a few questions to make the possible actions palatable:</p>
<ol>
<li>Will the solution eliminate dependencies my team has?</li>
<li>Does this solution change the value that one set of skills adds to my team, or does it distribute it?</li>
<li>Will this solution be responsive to change?</li>
<li>Will this solution require extensive infrastructure to implement?</li>
</ol>
<p>Heroes <a title="Kent Beck" href="http://www.threeriversinstitute.org" target="_blank">Kent Beck</a> and <a title="Martin Fowler" href="http://www.martinfowler.org" target="_blank">Martin Fowler</a> will tell you that the best solution is to strive for full, automated testing.  I couldn&#8217;t agree more.  Manual testing, as Fowler recently said, should be considered &#8220;a human rights violation.&#8221;  It&#8217;s error prone, difficult to repeat, and handles regression poorly.  That said, there are some battles simply not worth fighting.  In larger, more established teams &#8211; this type of shift is glacial, largely because of the risk incurred by such a change in paradigm.  Pragmatism dictates that the value of your QA team be repurposed to continue to add value, though potentially in a different way.</p>
<p>If we can concede the anecdotal thought that most engineers are substandard at QA, then we can see a glaring gap on a SCRUM team.  Even full automated testing with xUnits and CI is going to relinquish some level of code coverage, particularly in legacy software that wasn&#8217;t designed to be tested 10 years ago.  It should be mandated in teams in this type of pickle that all future code adopt the best practices of TDD &#8211; even to the extent that older, less TDD-friendly technologies and architectures be phased out.  But as we engage a group of engineers in a methodology in which they may never have been educated, hired, or trained for &#8211; on the sidelines we have a group of people who have been identifying failure and success scenarios their entire careers &#8211; even if they aren&#8217;t engineers.  A QA team can be indispensible in this situation.</p>
<p>In your new, SCRUM-based project &#8211; QA no longer are the gatekeepers.  We can&#8217;t have multiple gatekeepers in SCRUM.  Instead we focus on delivery and acceptance, creating one gatekeeper &#8211; a single keeper of the truth: the product owner.  That role is intended to be their exclusive domain.  They are the most intimate with the domain, the most intimate with the user story, and the most knowledgeable of where value lies.  To vest these judgmental by proxy in a serial part of the development cycle only leads to confusion.  Who is really assessing value?  Who is ultimately going to decide whether or not a story can be delivered?  Who should decide whether it should be accepted?  The demographics of a SCRUM project exist to solve this very question.  Eroding the clarity of role simply detracts value.</p>
<p>So what does this mean?  QA can&#8217;t be relegated to the role of testing system.  They cannot be an analogue for some sort of software framework.  Our goal should be to migrate to full automation, even if that takes time.  This means that the role of QA changes to an engineering role.  Not in the software sense, but in developing the cases which need to be tested.  These will arise from:</p>
<ol>
<li>Conversational contributions to the story, noting and documenting constraints by guiding the product owner through different user experiences.  These can come out of user flows or non-functional prototypes.  But QA can add extensive value simply by contributing their ability to identify edge and corner cases that may not have been considered.  These may well not end up in our <em>confirmation</em> of the story, and it&#8217;s important for QA to recognize, just like with an engineer &#8211; that the value of a contribution in the conversation is to help shape the conversation, and not set requirements in the stead of the product owner.</li>
<li>Test cases derived from the constraints outlined in the conversation.  Take this user story:
<p><em>A user must be able to provide a credit card for payment of their order.  Each credit card must be validated with the issuer, and we will only accept credit cards from Visa and MasterCard.</p>
<p>Try it with Discover card.<br />
Try it with American Express.<br />
Try it with an invalid billing address.</p>
<p></em>This is the way that the product owner will ultimately accept the story.  The QA resource working on this story may write several test cases that test the edge and corner cases of the acceptance criteria, but they need to maintain an open conversation with the team to ensure they aren&#8217;t incidentally increasing scope by applying tests that go outside of the criteria.  So while the following test case is very likely to be something we&#8217;ll want to test:</p>
<p><em>Try a billing address where the street name is provided in all capital letters but matches the address on file which is entirely in lower case.  This is expected to be a positive case, with the validation succeeding.</p>
<p></em>This test would likely be considered an expansion of scope or otherwise invalid:</p>
<p><em>Try charging the card and ensure that we put a $5 hold on the card until the transaction is complete.</em></li>
</ol>
<p>So, in the cycle of the development of the story, the test cases serve as the outline for the engineer &#8211; as they should.  The engineer uses the tests to validate their code &#8211; or more effectively, runs their code against an automated test that implements the test case as defined by the QA specialist.  This helps improve quality and minimize risk by taking those decisions which we earlier agreed that engineers are poor at, out of their hands.  The test cases serve now as the same direction that the rest of the story does.  For those tests which remain manual for whatever reason, the effort to complete those tests can now be load balanced across the team, rather than vested in the hands of one point of failure in delivery.</p>
<p>Ultimately, this is what is so enjoyable about an Agile project.  Because it suggests solutions through it&#8217;s objectives, it&#8217;s possible to solve any execution concern by referring back to the principles that make Agile delivery successful.  Being able to respond to change, emphasize people and interactions, and prefer generalization over specialization is the guidance we can use to look at the role of the heroic QA team in a different light &#8211; a somewhat specialized engineering team that delivers artifacts that infuse delivery with the value that it may not be realizing in engineering, and not acting as a secondary source of truth for the team.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ryannorris.com/2009/08/14/integrating-your-qa-staff-with-engineering-in-scrum/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Some free advice to independent software contractors</title>
		<link>http://www.ryannorris.com/2009/02/28/some-free-advice-to-independent-software-contractors/</link>
		<comments>http://www.ryannorris.com/2009/02/28/some-free-advice-to-independent-software-contractors/#comments</comments>
		<pubDate>Sat, 28 Feb 2009 23:38:48 +0000</pubDate>
		<dc:creator>Ryan Norris</dc:creator>
				<category><![CDATA[Consulting]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[delivery]]></category>
		<category><![CDATA[estimation]]></category>
		<category><![CDATA[freelancing]]></category>
		<category><![CDATA[target cost]]></category>

		<guid isPermaLink="false">http://www.ryannorris.com/?p=51</guid>
		<description><![CDATA[Whether you're moonlighting or you are looking to or currently make your living by being your own boss, here's some fine advice from a professional software consultant on how to take on the best jobs and minimize your risk.]]></description>
			<content:encoded><![CDATA[<p>I saw a post on Craigslist this morning for a software gig that made me shake my head.</p>
<p><em>&#8220;I have been outsourcing and modifying an Open Source project. There is about 50-100hrs of scoped development. Let me know your availability and rate.&#8221;</em></p>
<p>Jobs like this one are poison that really puts all of the burden on your shoulders.  I&#8217;ve been a consultant for several firms, and have lead delivery of many large and small projects.  Here are a few tips to make it so that you maximize the shared risk in a project, maximize your revenue, and ensure the highest possible customer satisfaction.</p>
<p><strong>Always Price on Your Own Estimates</strong></p>
<p>You&#8217;re the one doing the work, and you know how long it might take you to complete a given project.  If a potential client hands you an amount of scope and a timeline (like the real-world example above), I would always request to assess the scope yourself and provide your own estimate before committing to anything.  If the prospect is amenable to this, then it serves you well to give them a good faith estimate and some solutions in the case that your estimate is different.  If the prospect is time sensitive, then work with them on adjusting the scope.  If the scope is driving the project, then encourage them to consider an additional investment of time to ensure the completion of the full scope.  Be willing to make concessions on your rate in these cases &#8211; flexibility from the client should be greeted mutually with your ability to discount your own rate.</p>
<p>If the client is not going to be flexible, then your best bet is to walk away or mitigate your risk through a more premium rate.  Likely even in the latter case, a less saavy contractor will underbid you and find themselves in trouble.  Better them than you.</p>
<p><strong>Avoid Fixed Price/Fixed Time Projects</strong></p>
<p>Clients love fixed price/fixed time projects.  It removes almost all of their risk in the project and places you in the position of likely pulling quite a few late nights and reducing your hourly rate.  Large consulting shops, particularly offshore ones &#8211; have the ability to enter into these arrangements and blend their rate accordingly to account for the need for additional resources in the case that the project falls behind schedule.  For them, the cost of working a project beyond the deadline is significantly higher than it is to simply add more horsepower.  Project management and technical oversight adds overhead in the project, and vendors are more than happy to not keep them on an engagement any longer than they need to.</p>
<p>That said, <em>time and materials</em> (hourly) arrangements are the best for the independent contractor.  They place all of the burden to manage scope upon the client, and the client has to trust the vendor to report hours accordingly and honestly.  Always aim for these projects, but do be honest with your client about hours and estimates around the cost of the engagement to them.  Be willing to discount when your estimates are inaccurate.</p>
<p>Another option is a middle ground called <em>target cost</em>, but these types of projects are typically the result of significant trust between client and vendor.  Simply put, you bill at your hourly rate for the agreed upon scope and any additional scope, and a discounted rate for defects and enhancements.  This typically keeps both parties honest.  Clients look to control scope for the same reasons they do in T&amp;M, and it&#8217;s in your interest to finish on time as to avoid continuing work at a discounted rate (when you could be taking on new projects at your standard rate).</p>
<p><strong>Request Right of First Refusal</strong></p>
<p>Clients are fickle.  No matter how good your work is, when times are tight (as they are now), they will search for less expensive options.  Many times when negotiating with clients, I have asked for <em>right of first refusal</em> in whatever contract we agree to as to ensure exclusivity.  This makes you the preferred vendor and allows you to take all work that you are interested in before it is made available to competing contractors.  Often times, this will require that you discount your rate.  Additionally, this is usually only received well once you have established a track record of delivery with a client.  But if you can negotiate this clause, it can go a long way to ensure you a consistent revenue stream and source of work.</p>
<p>At the end of the day, your client&#8217;s satisfaction will be the best way to maintain business and build a stable relationship built on trust.  Be open and flexible, but protect your position and never take on more risk than is neccessary, regardless of how desperately you want to land a gig.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ryannorris.com/2009/02/28/some-free-advice-to-independent-software-contractors/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
