<?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>Tyner Blain &#187; Outsourcing</title>
	<atom:link href="http://tynerblain.com/blog/category/consulting/outsourcing/feed/" rel="self" type="application/rss+xml" />
	<link>http://tynerblain.com/blog</link>
	<description>Software product success.</description>
	<lastBuildDate>Sun, 26 Feb 2012 15:00:36 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.4</generator>
		<item>
		<title>Making Offshore Design Work</title>
		<link>http://tynerblain.com/blog/2008/05/14/offshore-design/</link>
		<comments>http://tynerblain.com/blog/2008/05/14/offshore-design/#comments</comments>
		<pubDate>Thu, 15 May 2008 03:39:58 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Communication]]></category>
		<category><![CDATA[Consulting]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Outsourcing]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[off-shoring]]></category>
		<category><![CDATA[offshoring]]></category>
		<category><![CDATA[offshoring design]]></category>
		<category><![CDATA[outsourcing design]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/?p=679</guid>
		<description><![CDATA[topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2008%2F05%2F14%2Foffshore-design%2F", "style": "big", "title": "Making Offshore Design Work" }); When companies first start off-shoring, they usually send the &#8220;low level&#8221; implementation work overseas first, to work out the process kinks and manage risk. Over time, your valued, domain-aware developers will perceive a lack of career opportunities with this limited role. Naturally, you will [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Ftynerblain.com%252Fblog%252F2008%252F05%252F14%252Foffshore-design%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Making%20Offshore%20Design%20Work%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2008%2F05%2F14%2Foffshore-design%2F", "style": "big", "title": "Making Offshore Design Work" });</script></div>
<p><img src="http://www.smugmug.com/photos/295434701_AKMnM-L.jpg" alt="offshore oil rig" width="250" height="191" /></p>
<p>When companies first start off-shoring, they usually send the &#8220;low level&#8221; implementation work overseas first, to work out the process kinks and manage risk.  Over time, your valued, domain-aware developers will perceive a lack of career opportunities with this limited role.  Naturally, you will want to consider sending design work offshore too.  You can make it work.  If you do it wrong, you&#8217;re toast.</p>
<p><span id="more-679"></span></p>
<h2>Different Models for Offshore Development</h2>
<p>There are many ways to organize software-creation teams (where creation includes product management, design, development and testing).  When developing an organizational design that incorporates elements of off-shoring, there are <a title="four offshoring models for software development" href="http://tynerblain.com/blog/2006/03/31/four-outsourcing-models-for-software-development/">four primary models for outsourced software creation</a>.</p>
<ol>
<li><strong>No offshore development at all</strong>.  Occasionally referred to as insourcing, this is the traditional &#8220;everyone in one place&#8221; model &#8211; or at least &#8220;everyone in similar time zones.&#8221;</li>
<li><strong><a title="low-level offshore development" href="http://tynerblain.com/blog/2008/05/05/offshore-development/">Low-level outsourcing</a></strong>.  The implementation teams (both coding and testing) are located offshore, with design and product management staying local.</li>
<li><strong>High-level outsourcing</strong>.  The focus of this article.  Keeping product management &#8220;local&#8221; but moving design and development responsibilities offshore.</li>
<li><strong>Complete technical outsourcing</strong>.  Everyone except the product manager is offshore.</li>
</ol>
<p>The models can be most easily compared when the same process is compared in each &#8211; just with different locations.  Co-location of team members has an impact when comparing face-to-face communication with online / phone / remote communication. But this factor is not a primary one in influencing team-decisions &#8211; it is no different than having someone who works from home. The key element in team dynamics is a dramatic shift in timezones.</p>
<p>This timezone shift causes a latency in the communication process, illustrated by the following example:</p>
<blockquote><p>Imagine the following expensive question and answer session:</p>
<ul>
<li>Person A asks person B a question.</li>
<li>12 hours later, person B responds with a request for a clarification.</li>
<li>12 hours later, Person A clarifies the question.</li>
<li>12 hours later, Person B responds with an answer.</li>
<li>12 hours later, Person A acknowledges the answer.</li>
</ul>
<p>When this communication channel happens between an onshore person and an offshore person, it takes <strong>48 hours</strong> instead of 48 minutes. The more this happens, the more expensive it is to outsource. The key to making low-level outsourcing work cost effectively is to minimize the impact of this communication latency, while realizing the benefits of lower salaries in the offshore location.</p>
<p><a title="low-level offshore development" href="../2008/05/05/offshore-development/" target="_blank"><cite>Making Offshore Development Work</cite></a></p></blockquote>
<p>This is why proper communication design is the make-or-break element of making collaborative teams work when using an outsourcing model that involves anyone being offshore.</p>
<h2>High-Level Outsourcing</h2>
<p>Consider the following software development process diagram (from <a title="four offshore development models" href="../2006/03/31/four-outsourcing-models-for-software-development/" target="_blank"><em>Four Application Development Outsourcing Models</em></a>):</p>
<p><img src="http://sehlhorst.smugmug.com/photos/62418699-L.jpg" alt="high level outsourcing process flow" width="401" height="800" /></p>
<p>In this off-shoring process flow diagram, the shaded areas represent the activities that happen offshore. Note that this is the exact same process flow that is used to describe the other outsourcing models. The difference from other models is primarily where resources are located, but also the relevant scope of responsibility. In comparison with <a title="making low-level outsourcing work" href="../2008/05/05/offshore-development/" target="_blank">low-level outsourcing</a>, the only difference in the process flow is that responsibility for test design and solution design is transitioned to the offshore development team.</p>
<h2>Artificial Boundary</h2>
<p>This model creates a bit of an artificial boundary between the “interpret requirement” step and the “design solution” and “design tests” steps. This artificial boundary creates a potentially odd dynamic within the team.</p>
<p>To make reading easier, we’ll talk about the development side of the process flow only, but the same ideas apply on the testing side.</p>
<p>This model has one developer interpreting requirements, and a different developer doing the design work. In an insourcing model, those two developers are usually the same person. In large development teams, a common breakout here is architect versus senior designer. The architect (the figure on top) would be responsible for those design considerations that span the enterprise and the senior designer would be responsible for those design considerations that affect a single application. Here’s a good background article by Scott Ambler on <a title="enterprise architecture approach" href="http://www.enterpriseunifiedprocess.com/essays/enterpriseArchitecture.html" target="_blank">approaching enterprise architecture</a>.</p>
<p>Why have an artificial boundary? Because this model is an emergent design.</p>
<ol>
<li>A company starts with low-level outsourcing.</li>
<li>The offshore developers complain about a lack of growth opportunities (both career and skill).</li>
<li>Executives are not prepared to completely outsource all technical work (risk aversion), or the team is not ready to succeed with that approach.</li>
</ol>
<p>Splitting the “interpret requirements” task from the “design a solution” task is a compromise. It minimizes the risk associated with providing growth opportunities to offshore team members. That risk is minimized by avoiding the high-latency communication channel (from onshore to offshore) when communicating requirements. Instead, the interpretation of the requirements is done onshore, and that interpretation is communicated.</p>
<p>You can argue that this model is the offspring of a trust issue within the organization. A company can absolutely say “We want growth opportunities for our offshore team members” and at the same time say “We are not ready to relinquish complete technical control.” This is definitely a trust issue, and therefore a <em>perceived</em> risk mitigation strategy. The risk may be very real, or non-existent. In either case, it is emotionally present.</p>
<h2>Vague Scope and Role Conflict</h2>
<p>If, while reading this, the notion of splitting interpretation from design feels uncomfortable, that’s because it is. For many teams that are <em>evolving</em> their outsourcing model, it feels uncomfortable, but it feels less uncomfortable than releasing complete technical control.</p>
<p>One problem, which I completely grok as a former developer, is that it is almost impossible to interpret requirements without imagining designs. But this model has different people performing the different tasks. So should the interpreter just discard those designs? Presumably the interpreter is more experienced, certainly more knowledgeable about the domain. It would be a shame to discard those design insights.</p>
<h2>Robbing Peter to Pay Paul</h2>
<p>This approach has clear benefits for the offshore developers who are now presented with growth opportunities. Unfortunately, you run the risk of sucking the fun out of the role of the interpreter &#8211; a senior, experienced developer with domain knowledge. While proper requirements interpretation can be fun, it usually is not fun for a developer. Only requirements people will enjoy those nuances, generally.</p>
<p>You risk eliminating a career path and growth opportunities for your onshore resources with this model.</p>
<h2>Division of Labor</h2>
<p>One approach that keeps the growth opportunities open for your senior onshore technical resources is to have them play multi-product, or architectural roles. This presents an opportunity for these individuals to apply organizational insights across products, finding synergies between applications and driving consistency and consolidation among applications. You essentially split the responsibilities “broad and deep” where the onshore designer is looking across the portfolio and the offshore designer has ownership responsibilities for a single application or scope. This is similar to the division of responsibilities that works well for tackling <a title="enterprise product management is broad and deep" href="../2008/01/23/enterprise-product-management/" target="_blank">enterprise product management</a>.</p>
<p>Instead of preventing communication of requirements across the high-latency channel, it minimizes it. The onshore designer acts as the liaison between multiple offshore designers, fielding interpretation questions, and more effectively, preventing them. Developers have a language all their own. Through a shared perspective on common experiences, they can communicate very efficiently &#8211; by analogy, <a title="symbolism and communication" href="../2006/02/12/symbolism-and-communication/" target="_blank">symbolically</a>, and via design patterns. These communication opportunities (between like-minded individuals) can have very high information density. For example, one developer can say “MVC pattern” to another, and that serves more effectively to communicate an approach to designing a solution (and a context / interpretation of requirements) far more efficiently than a product manager describing requirements that multiple tools and platforms should expose the same set of capabilities or behaviors [and that is overly short, because I don't feel like typing a comprehensive explanation of the <a title="MVC pattern at wikipedia" href="http://en.wikipedia.org/wiki/Model-view-controller" target="_blank">MVC pattern</a>].</p>
<p>Another approach is to <em>silo</em> the developers vertically &#8211; having some applications (or modules) following a low-level outsourcing model, and others practicing complete technical outsourcing. Any given team is operating discretely with a clearly defined set of responsibilities. The teams may just be operating differently. Essentially, you’re saying that your “average” is high level outsourcing, even though it is really a mix of two models. This doesn’t really count, since none of your teams are addressing the communication challenges of this model &#8211; your company is leapfrogging over it, but choosing to mitigate risk by doing it a little bit at a time.</p>
<p>You can also take the approach of having the onshore designer be responsible for over-arching and high-complexity design issues, with offshore designers owning more straightforward and lower risk design activities.</p>
<p>The best approach for maximizing your team’s effectiveness (and your HR goals) will be overwhelmingly determined by the individuals involved. If you’re in a large company, you probably don’t get to maximize team effectiveness &#8211; you are likely to be forced into a particular model. If you’re doing the forcing, recognize that one size does not fit all.</p>
<h2>High Latency Communication And Designing</h2>
<p>When circling back to the main challenge of offshoring &#8211; communication &#8211; you need to look at the nature of the communication that is subject to the high-latency of temporal displacement within the team. The key to making this model work is to leverage the efficiency of cross-talk between developers. That means having experienced people on both the offshore and onshore teams who share common design backgrounds (patterns, analogies, examples) and deep domain understanding (reducing the provision and clarification of <a title="It is all about context" href="../2006/11/09/requirements-context/" target="_blank">context </a>across the communication channel).</p>
<p>Design reviews are also very effective at eliminating the impact of this latency on communication. Design reviews typically happen as follows:</p>
<ol>
<li>Designer A spends time creating design based on an interpretation of requirements.</li>
<li>Designers A &amp; B get together and review the design in a relatively short meeting (or Designer B reviews a design document). Feedback is delivered in a burst.</li>
<li>Designer A spends time updating the design based on feedback from step 2.</li>
<li>Return to step 2 as many times as is needed.</li>
</ol>
<p>There is a big chunk of work involved in incorporating feedback from a design review. This can be folded into the “white space” between communications. In other words, while designer B is sleeping for the night, designer A is making updates. This looks like, <span style="text-decoration: underline;">but is not</span> the <a title="follow the sun" href="http://blogs.computerworld.com/node/1005" target="_blank">follow-the-sun</a> pattern.</p>
<blockquote><p>The follow-the-sun pattern is one where someone is always working. I’ve made this work on a project where there were two teams working 12 hour shifts with a 4 hour overlap (and a 4 hour “blackout”). Note &#8211; that isn’t sustainable, just anecdotal. I think the linked article is right, commonly, follow-the-sun implementation does not work, for the reasons cited in that article.</p></blockquote>
<p>What makes this very different is that we are <em>synchronizing</em> the naturally-occurring time lag between design reviews with the geographically-induced time lag in communication.</p>
<h2>Conclusion</h2>
<p>The strategy for successfully utilizing offshore resources for both implementation and design starts and ends with communication. It also requires attention to your specific people and their career aspirations.</p>
<ul>
<li>Utilize design reviews to take advantage of serendipitous time-lags in the communication cycle.</li>
<li>Assure that your role definitions are clear, and aligned with the aspirations of the people on your team.</li>
<li>Follow the <a title="effective offshore development process" href="../2008/05/05/offshore-development/" target="_blank">tips for effective offshore development</a> &#8211; this strategy builds on that one, it does not replace it.</li>
</ul>

<div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/intent/tweet?text=By+%40sehlhorst%3A+Making+Offshore+Design+Work+http%3A%2F%2Fbit.ly%2FeEDZLK+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-big1.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://tynerblain.com/blog/2008/05/14/offshore-design/&amp;t=Making+Offshore+Design+Work" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/facebook/tt-facebook-big4.png" alt="Post to Facebook" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2008/05/14/offshore-design/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Making Offshore Development Work</title>
		<link>http://tynerblain.com/blog/2008/05/05/offshore-development/</link>
		<comments>http://tynerblain.com/blog/2008/05/05/offshore-development/#comments</comments>
		<pubDate>Tue, 06 May 2008 03:53:37 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Communication]]></category>
		<category><![CDATA[Consulting]]></category>
		<category><![CDATA[Outsourcing]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[continuous integration]]></category>
		<category><![CDATA[offshore]]></category>
		<category><![CDATA[offshore development]]></category>
		<category><![CDATA[offshore testing]]></category>
		<category><![CDATA[outsourced development]]></category>
		<category><![CDATA[requirements testing]]></category>
		<category><![CDATA[testing requirements]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/?p=675</guid>
		<description><![CDATA[topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2008%2F05%2F05%2Foffshore-development%2F", "style": "big", "title": "Making Offshore Development Work" }); Economic pressures are driving most companies in high-developer-salary markets to explore using offshore development teams as part of their approach to developing software. Developing software with a global team presents new challenges as well as new benefits. If you do it right, you can [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Ftynerblain.com%252Fblog%252F2008%252F05%252F05%252Foffshore-development%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Making%20Offshore%20Development%20Work%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2008%2F05%2F05%2Foffshore-development%2F", "style": "big", "title": "Making Offshore Development Work" });</script></div>
<p><img src="http://sehlhorst.smugmug.com/photos/290461665_gH8Un-L.jpg" alt="offshore oil rig" width="250" height="225" /></p>
<p>Economic pressures are driving most companies in high-developer-salary markets to explore using offshore development teams as part of their approach to developing software.  Developing software with a global team presents new challenges as well as new benefits.  If you do it right, you can have a more cost-effective team.  If you do it wrong, you can have a disaster.</p>
<p><span id="more-675"></span></p>
<h2>Different Models for Offshore Development</h2>
<p>There are essentially <a title="offshore software development models" href="http://tynerblain.com/blog/2006/03/31/four-outsourcing-models-for-software-development/">four different models for managing a software development team</a>, with respect to onshore and offshore roles.</p>
<ol>
<li>No offshore development, also known as insourcing.</li>
<li>Low-level outsourcing, having the implementation (but not design) team members offshore.</li>
<li>High-level outsourcing, having the implementation <em>and</em> design team members offshore.</li>
<li>Complete technical outsourcing, having all technical implementation team members offshore.</li>
</ol>
<p>Each different model has the same set of people involved in the process, with the same channels of communication.  The differences are in <em>which</em> communications happen across geographic and temporal boundaries, and which communications happen in the same time zone.</p>
<p>For this article, we are focusing specifically on low-level outsourcing, where the communication channel most affected by different timezones is the one between design and implementation.</p>
<h2>Low-Level Outsourcing</h2>
<p>Consider the following software development process diagram (from <a title="four offshore development models" href="http://tynerblain.com/blog/2006/03/31/four-outsourcing-models-for-software-development/"><em>Four Application Development Outsourcing Models</em></a>):</p>
<p><img src="http://sehlhorst.smugmug.com/photos/62416957-L.jpg" alt="low-level outsourcing" width="401" height="800" /></p>
<p>Each area surrounded by a dashed line represents a different <em>type</em> of work, or a different required dominant skill set.  Every stage in the development process requires a different set of dominant skills, and all areas share a set of common skills.  When exploring different offshoring models, teams are most effective when they identify the distinctions in dominant skill set requirements, and divide responsibilities along those boundaries.  When you create an artificial (or arbitrary) boundary within one of the regions in the diagram, you create opportunities for misunderstanding.  With those misunderstandings, you can have people redundantly working on the same thing, or even worse, you can have tasks that don&#8217;t get accomplished.  You also introduce the possibility of discord within your team as people either proclaim &#8220;that&#8217;s <em>my</em> job&#8221; or &#8220;that&#8217;s <em>not</em> my job.&#8221;  You can split a team within the areas shown above (and we&#8217;ll talk about that in a future article), but it is harder to do successfully.</p>
<p>Low level outsourcing is an approach where the implementation team members who write the code and tests are offshore. The requirements work is done onshore (where salaries are expensive). Interpretation of the requirements is also done onshore. The design of the testing plan is done onshore, and the design of the solution is also done onshore.  The creation of tests and the implementation of the code is done offshore.</p>
<p>In the diagram above, testing of requirements happens on the left, and testing of the implementation happens implicitly on the right.  If you haven&#8217;t been reading Tyner Blain for a couple years, that may not make much sense.  Testing of requirements and implementation are different, and you need to do both.</p>
<h2>Testing: Isolation of Variables Reduces Costs</h2>
<p>Testing is something that can be approached from a few different perspectives, and the word &#8220;testing&#8221; means different things to different people.  In this process flow, we are focusing on two main areas of testing &#8211; testing the requirements and testing the implementation.  When you test the requirements, you are asking the question &#8220;does this solution do what the product manager intended?&#8221;  When you test the implementation, you are asking the question &#8220;does my solution behave as designer intended?&#8221;  This is a nuanced difference, and non-technical people may say &#8220;what is the difference?&#8221;  The designer intends <em>exactly the same thing</em> that the product manager intends.</p>
<p>If you think back to your high school science class, you&#8217;ll remember the concept of &#8220;control of experiments.&#8221;  This is the field of practical application of logic to scientific experimentation.  By taking a logically rigorous approach to designing a science experiment, you can isolate variables, and test each of them independently.  This prevents you from drawing false conclusions from your data.  The same process leads you to test both the requirements and the implementation.  If you&#8217;ve ever submitted a bug and had the implementation team close it out with the statement &#8220;working as designed&#8221;, you  already know the benefit of testing both.  Just because something is designed to do X does not mean it is not <em>supposed</em> to do Y.  By introducing a designer between the product manager and the testing, you introduce the possibility that <a title="people are the source of bugs" href="http://tynerblain.com/blog/2008/01/14/you-are-creating-bugs/">the designer is the source of the bug</a> &#8211; by misinterpreting the requirements.</p>
<p>It is possible to &#8220;test&#8221; the design and then test the implementation &#8211; this will isolate the design from the implementation.  Unfortunately, the only way to &#8220;test&#8221; a design (without also testing the implementation) is conceptually, with a thought experiment.  And that&#8217;s exactly what the designer does as part of designing.  No one else is really going to understand the design well enough to do that.  And if the designer is doing the thought-testing, there is no way to isolate if the designer misinterpreted the requirements in the first place.  That same misinterpretation will influence his testing in the same way that it influenced his design (See <a title="the sources of bugs in software" href="http://tynerblain.com/blog/2006/01/22/where-bugs-come-from/">error source E3 in <em>Where Bugs Come From</em></a> for more details).  This is critical to designing, but it does not work for testing a design.</p>
<p>It is possible to test just the requirements.  You create tests based solely on the documented requirements.  You run those tests against the implemented solution.  When the test passes, every step in the process worked.  These are known as <a title="blackbox testing vs whitebox testing" href="http://tynerblain.com/blog/2006/01/12/foundation-series-black-box-and-white-box-software-testing/">black-box tests</a>, because you can run the tests without any insight into how the software is written (it is a &#8220;black box&#8221;).  The problem comes when a test fails &#8211; you know something is wrong, but you have to do (expensive) research to figure out the source of the problem.  It could be that the implementation failed to do what was designed.  Or it could be that the software design failed to meet the objectives of the requirements.  There is a way to reduce the cost of this analysis &#8211; by testing both the requirements and the implementation.</p>
<p>You can easily test the implementation.  An implementation test, commonly known as a <a title="intro to black-box testing and white-box testing" href="http://tynerblain.com/blog/2006/01/12/foundation-series-black-box-and-white-box-software-testing/">white-box test</a>, and usually implemented as <a title="intro to unit testing" href="http://tynerblain.com/blog/2006/01/19/foundation-series-unit-testing-software/">a unit-test</a>, inspects the effectiveness of a particular implementation at doing what the designer intended.  When you combine implementation testing with requirements testing, you isolate the designer variable.  If a requirements test fails but the implementation tests pass, the problem is with the design (or with the design of the test).  When both requirements and implementation tests fail, you know that <em>at least</em> the implementation is wrong.</p>
<p>In the diagram above, the testing on the left side represents testing of requirements.  The right side of the diagram implicitly includes testing of the implementation as part of implementing.  You need to ingrain your implementation testing into your development philosophy.  Would you deliver code without compiling it?  Why, as a developer, would you consider delivering it without testing it?  Compilation is not just a build step, it is also an implicit test of compilability.  You should also include the implicit test of &#8220;does what I intended it to do.&#8221;</p>
<p>Combining the discipline of <a title="continuous integration explained" href="http://tynerblain.com/blog/2006/05/08/foundation-series-continuous-integration/">continuous integration</a> with <a title="test driven development" href="http://tynerblain.com/blog/2006/09/12/insight-into-tdd/">test driven development</a> is the most effective way to accomplish this.  Note: remember this part, as it is a critical component to making low-level offshore development work.  Without this, you may as well give up &#8211; you certainly aren&#8217;t going to be more cost-effective.</p>
<h2>Communication Across Time And Space</h2>
<p>The key to making offshoring effective, as with any development process, is to make the communication work.  For communication that happens between people in the same location (or at least roughly the same time zone), the problems and solutions are no different than when you have an insourcing model.  What&#8217;s different is the communication that happens between members of the onshore team and the offshore team.  This communication is not just remote (technology helps us solve these problems with instant messaging, phone calls, and other real-time (or near-real-time) techniques), but also phase-shifted in time.  When you have team members working while other team members are sleeping, you slow down the collaborative process.  You introduce a near-crippling latency into the communication channel.</p>
<p>Imagine the following expensive question and answer session:</p>
<ul>
<li>Person A asks person B a question.</li>
<li>12 hours later, person B responds with a request for a clarification.</li>
<li>12 hours later, Person A clarifies the question.</li>
<li>12 hours later, Person B responds with an answer.</li>
<li>12 hours later, Person A acknowledges the answer.</li>
</ul>
<p>When this communication channel happens between an onshore person and an offshore person, it takes <strong>48 hours</strong> instead of 48 minutes.  The more this happens, the more expensive it is to outsource.  The key to making low-level outsourcing work cost effectively is to minimize the impact of this communication latency, while realizing the benefits of lower salaries in the offshore location.</p>
<h2>Communications On Which To Focus</h2>
<p>The &#8220;happy path&#8221; communication channels (shown with blue arrows in the diagram) are the transfer from &#8220;test design&#8221; to test, and from &#8220;implementation design&#8221; to implementation.  You have to communicate the designs in such a way as to minimize misinterpretation of the design.  <em>Never prevent needed communication</em>.  Your goal is NOT to stop communication, but to preempt it by eliminating the need.  The only thing worse than taking too long because you have a lot of communication is failing to communicate enough.  Your goal is NOT to prevent communication, but to minimize the need for it.</p>
<p>The &#8220;trust but verify&#8221; communication involves making sure that the implementation meets the design.  In (requirements) testing, it means reviewing that the tests exhaustively cover everything identified in the test design.  It also means reviewing that each test (implementation) actually (effectively) tests what it is designed to test.  As team members demonstrate their capabilities, they require less oversight &#8211; which is true of any mentoring relationship.  In implementation, it means verifying that the code does what the design requires.  You could read the code and make a determination, but that is a manual inspection of the code, and manual inspections have been shown to be at best 80% effective as a testing method.  What you need to do is create a unit test suite, run it continuously, and only allow developers to check-in their code (to the trunk) when the entire suite passes.  Then all you have to do is review the test suite to assure that it will test the design effectively.  It wouldn&#8217;t hurt to also run the test suite locally (onshore) as a verification, but fundamentally, you are trusting that your developers will follow this continuous integration process.</p>
<p>You are using testing and test design as a mechanism to validate effective communication.  You can think of it as <a title="active listening" href="http://tynerblain.com/blog/2007/03/15/ten-active-listening-skills/">a form of active listening</a>.  When you (or more appropriately, your design document) says &#8220;X&#8221;, you can review the test design to confirm that your listener designed tests that assure &#8220;X&#8221; will happen.  Do not just rely on informal communication and acknowledgement.  Cross-cultural communication introduces a lot of <a title="misinterpreting cultural cues" href="http://tynerblain.com/blog/2005/12/11/when-%E2%80%98no%E2%80%99-means-%E2%80%98yes%E2%80%99/">complexity and misinterpretation</a>.  People who do not share a common language or culture also tend to <a title="symbols and communication" href="http://tynerblain.com/blog/2006/02/12/symbolism-and-communication/">interpret symbols very differently</a>, and will rarely have the same connotations for given interpretable words.</p>
<p>Definition of tests and validation of testing is important beyond the immediate communication of design.  There are also the feedback loops that come from the &#8220;unhappy path&#8221; when something goes wrong (and a bug is introduced).  Each of these &#8220;where was the bug introduced, and how do we fix it?&#8221; cycles is also affected by the latency of cross-shore communication.  Good testing reduces the number of these otherwise unwarranted communication cycles.</p>
<p>Developing good design docs is also critical to the success of this communication.  The definition of &#8220;good&#8221; for a design doc is so dependent on the exact circumstances that it is impractical to try and define what that is (at least within this article).  A design doc needs to be <a title="writing for the reader" href="http://tynerblain.com/blog/2006/10/04/writing-for-the-purpose-of-reading/">written with the reader in mind</a>, not the author.  Beyond that, we won&#8217;t try and make any statements of truth.</p>
<h2>Conclusion</h2>
<p>The strategy to successful utilization of offshore resources for development and test implementation work starts with communication.  The strategy also ends with communication.</p>
<ul>
<li>Create artifacts (good design docs) that minimize the clarification cycle across the onshore-offshore time boundary.</li>
<li>Review implementation tests as an active-listening mechanism to confirm that communication of design intent was effective.</li>
<li>Practice continuous integration (both as an offshore developer and as an onshore designer or development manager) to assure that your solution stays true to the design and the requirements.</li>
</ul>
<p>And, as always, have great people &#8211; because people trump process.</p>

<div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/intent/tweet?text=By+%40sehlhorst%3A+Making+Offshore+Development+Work+http%3A%2F%2Fbit.ly%2FgKykZU+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-big1.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://tynerblain.com/blog/2008/05/05/offshore-development/&amp;t=Making+Offshore+Development+Work" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/facebook/tt-facebook-big4.png" alt="Post to Facebook" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2008/05/05/offshore-development/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Writing Unambiguous Requirements</title>
		<link>http://tynerblain.com/blog/2006/06/12/writing-unambiguous-requirements/</link>
		<comments>http://tynerblain.com/blog/2006/06/12/writing-unambiguous-requirements/#comments</comments>
		<pubDate>Tue, 13 Jun 2006 03:25:58 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Outsourcing]]></category>
		<category><![CDATA[Product Management]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Software requirements specification]]></category>
		<category><![CDATA[Writing]]></category>
		<category><![CDATA[ambiguous requirements]]></category>
		<category><![CDATA[business requirements documentation]]></category>
		<category><![CDATA[clear requirements]]></category>
		<category><![CDATA[good requirements]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[product requirements]]></category>
		<category><![CDATA[requirements documentation]]></category>
		<category><![CDATA[software requirements]]></category>
		<category><![CDATA[unambiguous requirements]]></category>
		<category><![CDATA[vague requirements]]></category>
		<category><![CDATA[writing business requirements]]></category>
		<category><![CDATA[writing requirements]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2006/06/12/writing-unambiguous-requirements/</guid>
		<description><![CDATA[One of the ten big rules of writing a good MRD is writing unambiguous requirements. Ambiguity is a function of communication. The writing can be generically ambiguous, or ambiguous to the writer. A requirement could be precise in intent, but ambiguous in interpretation by the reader. Understanding our audience is as important as precision in language. We write unambiguous requirements because misinterpretation of requirements is the source of 40% of all bugs in delivered software.]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Ftynerblain.com%252Fblog%252F2006%252F06%252F12%252Fwriting-unambiguous-requirements%252F%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2FclVMru%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Writing%20Unambiguous%20Requirements%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2006%2F06%2F12%2Fwriting-unambiguous-requirements%2F", "shorturl": "http://bit.ly/clVMru", "style": "big", "title": "Writing Unambiguous Requirements" });</script></div>
<p><img title="big ten logo" src="http://sehlhorst.smugmug.com/photos/128628634-M.png" alt="big ten logo" /></p>
<p>One of the ten big rules of writing a good MRD is writing unambiguous requirements.  Ambiguity is a function of communication.  The writing can be generically ambiguous, or ambiguous to the writer.  A requirement could be precise in intent, but ambiguous in interpretation by the reader.  Understanding our audience is as important as precision in language.  We write unambiguous requirements because <a title="Requirements errors exceed 40% of all bugs" href="http://tynerblain.com/blog/2005/12/28/why-we-should-invest-in-requirements-management/">misinterpretation of requirements is the source of 40% of all bugs</a> in delivered software.</p>
<p><strong>The Big Rule of Writing Unambiguous Requirements<br /> </strong></p>
<p>From our previous article, <a title="The Big Ten Rules of Writing MRDs" href="http://tynerblain.com/blog/2006/05/25/writing-good-requirements-the-big-ten-rules/"><em>Writing  Good Requirements &#8211; Big Ten Rules</em></a>:</p>
<blockquote><p>A great requirement has a single interpretation. A good requirement has a  single <em>reasonable</em> interpretation. As part of our development process,  we will <a title="Top five ways to be a better listener" href="http://tynerblain.com/blog/2006/01/27/top-five-ways-to-be-a-better-listener/">use  listening skills like active listening</a> to make sure that our engineering  team understands the requirement we intended to write. The better the  requirements, the less expensive and risky this communication process will be.  <a title="Writing Requirements Unambiguously" href="http://tynerblain.com/blog/2006/02/14/writing-requirements-unambiguously/">Writing  unambiguously</a> is critically important when using outsourcing models that  limit our interactions with other team members.</p>
</blockquote>
<p><strong>Ambiguous to the Writer</strong></p>
<p>We introduce ambiguity with imprecise language.  Using <em>shall</em> instead of <em>should</em> is one of the first things people suggest (or require!) when writing requirements. [Added 2010.08.17 - <em><a title="You must not use shall" href="http://tynerblain.com/blog/2009/04/22/dont-use-shall/">shall</a></em><a title="You must not use shall" href="http://tynerblain.com/blog/2009/04/22/dont-use-shall/"> is ambiguous too - use </a><em><a title="You must not use shall" href="http://tynerblain.com/blog/2009/04/22/dont-use-shall/">must</a></em><a title="You must not use shall" href="http://tynerblain.com/blog/2009/04/22/dont-use-shall/">!</a>]  Red flags are also raised with words like <em>can</em> and <em>might</em>.  Marcus wrote a good post about vague requirements language</p>
<blockquote><p>What do the terms: <em>user-friendly</em>, <em>flexible</em>,  <em>easy-to-use</em>, <em>fast</em>, and <em>intuitive</em> mean to you? Do you  think these terms mean the same thing to someone else? Generally, no!</p>
<p><cite>from <a title="Bad Practices part 4" href="http://rationalizedthoughts.blogspot.com/2005/12/bad-practices-part-iv-speculative.html">Speculative and Vague Terms</a></cite></p>
</blockquote>
<p>These are examples where the language is ambiguous, both to the writer and the reader.  Any uninformed third party could read these requirements and identify the amiguity in the language.  This makes these mistakes easy to catch &#8211; all that is required is a good working knowledge of the language.</p>
<p><strong>Ambiguous to the Reader</strong></p>
<p>Even precisely written, grammatically correct prose can be ambiguous to the reader.  This ambiguity can come either from lack of expertice with the language, or from incompleteness of the requirement.</p>
<p><strong>Language Ambiguity </strong></p>
<p>With the ever-increasing <a title="Outsourcing conversation" href="http://tynerblain.com/blog/2006/04/05/outsourcing-conversation-one-topic-two-blogs-three-cs/">outsourcing </a>of teams, we have to think about writing requirements for outsourced team members.  When we use a <a title="Four models for outsourcing" href="http://tynerblain.com/blog/2006/03/31/four-outsourcing-models-for-software-development/"><em>complete technical outsourcing</em></a> model, we have to consider the possibility (or <em>certainty</em> in some cases) that the primary language of the readers of the MRD is not the language it is written in.  Making a document easy to read (short sentences, common words) can be at odds with making the language of the requirements <em>precise</em>.</p>
<p>Some good research on vocabulary size data for comprehension of english can be found <a title="Vocabulary Size " href="http://www.wordhacker.com/en/article/vocabularysizewordlists.htm">here</a>.  The average native english speaker knows 20,000 word families.  With a vocabulary of 5,000 english words, only 98.5% of the words in a given text will be understood.  5,000 words is a lot for a speaker of a second language (3,000 words is considered a <em>working knowledge</em>).</p>
<p>An <a title="Readability and Requirements" href="http://tynerblain.com/blog/2005/12/30/readability-and-requirements/">analysis of the reading-level</a> at which a document is written can be helpfull in identifying if the language is likely to be challenging for readers with limited vocabularies.  The <a title="Gunning Fog measure of Readability" href="http://tynerblain.com/blog/2005/12/30/readability-and-requirements/">Gunning-Fog Index</a> provides a measure of the education level at which a text is written.</p>
<p><strong>Incompleteness Ambiguity</strong></p>
<p>When the language is both precise and understood, we still face challenges in ambiguity by failing to <a title="Writing Complete Requirements" href="http://tynerblain.com/blog/2006/06/08/writing-complete-requirements/">provide all the information</a>.  When we find ourselves wanting to say <em>&#8220;That was implied, you should have known that!&#8221;,</em> we are still being ambiguous.  Clarity exists not only in language but in intent.  Should the reader assume that when we specified <em>user-authentication</em> and <em>role-based functionality</em> that we intended users to have roles?  If we specify that the best-matching search results must be presented within 1 second, is it ok if the rest of the results are presented later?  And how many of the best-matches must be found?</p>
<p>Writing requirements like this is definitely a risk, and <em>probably</em> ambiguous.  If we have a history, a rapport, and synchronous feedback cycles with the readers of the document, this may not be vague.  We may be able to rely on them to assume the same things we assume.  The language in the document may be serving effectively as <em>shorthand</em> for this communication.  If we are working as a team with a shorter history of working together, this almost certainly will not communicate what we intended.  There is also a risk of going too far.</p>
<p><strong>Conclusion</strong></p>
<p>Writing unambiguous requirements requires us to write complete requirements.  It also requires us to use precise language that communicates information across domains to our readers.  To determine the right level of effort, we need to monitor the effectiveness of our communication, and balance that with the amount of time we can afford to dedicate to word-smithing instead of other product management activities.</p>

<div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/intent/tweet?text=By+%40sehlhorst%3A+Writing+Unambiguous+Requirements+http%3A%2F%2Fbit.ly%2FclVMru+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-big1.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://tynerblain.com/blog/2006/06/12/writing-unambiguous-requirements/&amp;t=Writing+Unambiguous+Requirements" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/facebook/tt-facebook-big4.png" alt="Post to Facebook" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2006/06/12/writing-unambiguous-requirements/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Maine Mangles Medicaid &#8211; Charges CIO</title>
		<link>http://tynerblain.com/blog/2006/04/21/maine-mangles-medicaid-charges-cio/</link>
		<comments>http://tynerblain.com/blog/2006/04/21/maine-mangles-medicaid-charges-cio/#comments</comments>
		<pubDate>Sat, 22 Apr 2006 05:37:27 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Communication]]></category>
		<category><![CDATA[Consulting]]></category>
		<category><![CDATA[Outsourcing]]></category>
		<category><![CDATA[Project Management]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Requirements gathering]]></category>
		<category><![CDATA[bad requirements]]></category>
		<category><![CDATA[failed project example]]></category>
		<category><![CDATA[hipaa]]></category>
		<category><![CDATA[hipaa project failure]]></category>
		<category><![CDATA[maine hipaa]]></category>
		<category><![CDATA[maine medicaid]]></category>
		<category><![CDATA[maine medicaid application]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[medicaid application]]></category>
		<category><![CDATA[medicaid maine]]></category>
		<category><![CDATA[requirements disaster]]></category>
		<category><![CDATA[requirements elicitation]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2006/04/21/maine-mangles-medicaid-charges-cio/</guid>
		<description><![CDATA[Allan Holmes, for CIO Magazine just posted a scathing and detailed autopsy of the disastrous Medicaid Claims System project run by CSNI and launched in January of 2005.  Requirements elicitation failures combined with incompetent vendor selection and project mismanagement lead to a $30,000,000 oops for the state of Maine, jeopardizing its credit rating.  The system failed to process 300,000 claims in the first 3 months of operations, causing many health care providers to close their doors - and presumably causing citizens of Maine to go without needed services.  Maine is the only state in the union (as of April 2005) not complying with federal HIPAA regulations.]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Ftynerblain.com%252Fblog%252F2006%252F04%252F21%252Fmaine-mangles-medicaid-charges-cio%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Maine%20Mangles%20Medicaid%20-%20Charges%20CIO%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2006%2F04%2F21%2Fmaine-mangles-medicaid-charges-cio%2F", "style": "big", "title": "Maine Mangles Medicaid - Charges CIO" });</script></div>
<p><img alt="child crying" title="child crying" src="http://sehlhorst.smugmug.com/photos/65616672-M.jpg" /></p>
<p>Allan Holmes, for CIO Magazine just posted a <a style="border-bottom-style: groove" title="CIO Magazine article" href="http://www.cio.com/archive/041506/maine.html">scathing and detailed autopsy</a> of the disastrous Medicaid Claims System project run by CSNI and launched in January of 2005.  Requirements elicitation failures combined with incompetent vendor selection and project mismanagement lead to a $30,000,000 oops for the state of Maine, jeopardizing its credit rating.  The system failed to process 300,000 claims in the first 3 months of operations, causing many health care providers to close their doors &#8211; and presumably causing citizens of Maine to go without needed services.  Maine is the only state in the union (as of April 2005) not complying with federal HIPAA regulations.</p>
<p><strong>Autopsy results</strong></p>
<p>There were crucial failures in essentially every step of the project.  We&#8217;ll look at each of the following areas:</p>
<ol>
<li>Defining requirements and creating an RFP (request for proposal)</li>
<li>Vendor selection</li>
<li>Requirements validation</li>
<li>Risk management</li>
<li>Execution (Project management and development)</li>
<li>Testing</li>
<li>Deployment / Change Management / Training</li>
</ol>
<p><strong>Defining requirements</strong></p>
<p>April 2001.  Maine issued an RFP for the new HIPPA compliant system.  By the end of the year, only two bids were placed &#8211; one for $15 million and one for $30 million.  Holmes tells us that this is  a sign of a bad RFP:</p>
<blockquote><p>&#8230;says J. Davidson Frame, dean of the University of Management and Technology in Arlington, Va. &#8220;Only two bidders is a dangerous sign,&#8221; he says, adding that the low response rate indicated that potential bidders knew the requirements of the RFP were unreasonable.</p></blockquote>
<p>Requirements elicitation done poorly is <a title="Why we should invest in requirements management" href="http://tynerblain.com/blog/2005/12/28/why-we-should-invest-in-requirements-management/">the major source of defects in any project</a>.</p>
<p>Taking a step back, we see from Holmes that Maine decided to use a new (to them) technology and develop the software themselves instead of outsourcing.  The justification being that it would be easier to adapt to changing requirements (this becomes ironic later &#8211; read on).</p>
<blockquote><p>The development of the new system was assigned to the IT staff in the DHS, which decided it wanted a system built on a rules-based engine so that as Medicaid rules changed, the changes could be programmed easily into the system.</p></blockquote>
<p><strong>Vendor selection</strong></p>
<p>Quoting Holmes:</p>
<blockquote><p>In this case, the low bidder, CNSI, had no experience in building Medicaid claims processing systems. In contrast, Keane had some experience in developing Medicaid systems, and the company had worked on the Maine system for Medicaid eligibility.</p></blockquote>
<p>OK, maybe not so bad, but wait &#8211; more irony.  The final costs (to the State) of going with the low-cost vendor exceed the bid from the high cost vendor.</p>
<p><strong>Requirements validation</strong></p>
<blockquote><p>To begin with, the 65-person team composed of DHS IT staffers and CNSI representatives assigned to the project had difficulty securing time with the dozen Medicaid experts in the Bureau of Medical Services to get detailed information about how to code for Medicaid rules. As a result, <strong>the contractors had to make their own decisions</strong> on how to meet Medicaid requirements. And then they had to reprogram the system after consulting with a Medicaid expert, further slowing development. [<em>emphasis ours</em>]</p></blockquote>
<p>We wouldn&#8217;t use the same language as Holmes, we would say &#8220;&#8230; the contractors decided to make their own interpretations of how to meet Medicaid requirements.&#8221;  They never <em>had to</em> do it &#8211; they <em>chose to </em>do it.  In <a title="Feedback loops prevent bugs" href="http://tynerblain.com/blog/2006/01/22/where-bugs-come-from/"><em>Where bugs come from</em></a> we show the impact of having or not having a feedback loop for validating requirements. Not having that feedback loop was either a decision of incompetence or hubris.</p>
<p>No one is blameless for this mistake.  Maine&#8217;s IT department is responsible for making sure the contractors are doing what they really want.  The contractors are responsible for doing what Maine wants.  At a minimum, <a title="How to interview when gathering requirements" href="http://tynerblain.com/blog/2006/01/15/how-to-interview-when-gathering-requirements/">the SMEs should have been interviewe</a>d, and the contractors should have at least used <a title="Top five ways to be a better listener" href="http://tynerblain.com/blog/2006/01/27/top-five-ways-to-be-a-better-listener/">active listening techniques</a> to validate their interpretations of the statutes.  All the way down to the developers, who should have <em>required</em> that they understand the context in which they are coding.  They should have said &#8220;why?&#8221; until they got answers.</p>
<p><strong>Risk Management</strong></p>
<p>New vendor.  New technology.  Maine knew that the requirements were not good.</p>
<blockquote><p>Thompson decided that the six months that would have been needed to redo the RFP was too much. &#8220;We had a requirement to get something in place soon,&#8221; Thompson says.</p></blockquote>
<p>No access to SMEs (subject matter experts).  No system tests (more on that later).  No backup system.  No contingency plans if the system didn&#8217;t work.<br />
If there was a risk management plan in place, it certainly didn&#8217;t change the course of events.</p>
<p><strong>Execution</strong></p>
<p>Starting with project management:</p>
<ul>
<li>Oct 2001.  CNSI is selected as vendor &#8211; project length: 12 months.</li>
<li>Fall 2002.  Project timeline <em>doubled</em> to an Oct 2003 delivery.</li>
<li>Fall 2003.  No delivery.</li>
<li>Fall 2004.  No delivery.</li>
<li>Jan 2005.  System goes live.</li>
<li>Apr 2006.  System now (claimed to be) operating at same level as legacy system.</li>
</ul>
<p>And with development (here&#8217;s the aforementioned irony):</p>
<blockquote><p>The development of the new system was assigned to the IT staff in the DHS, which decided it wanted a system built on a rules-based engine so that as Medicaid rules changed, the changes could be programmed easily into the system.</p></blockquote>
<blockquote><p>Errors kept cropping up as programmers had to reprogram the system to accept Medicaid rule changes at the federal and state levels.</p></blockquote>
<p>Wow.</p>
<p><strong>Testing</strong></p>
<p>Hey, testing is optional.</p>
<blockquote><p>testing the system from end to end was dismissed as an option. The state did conduct a pilot with about 10 providers and claims clearinghouses, processing a small set of claims. But the claims were not run through much of the system because it was not ready for testing.</p></blockquote>
<p><strong>Conclusion</strong></p>
<p>Holmes presents excellent conclusions about the HIPAA project.  Our conclusion &#8211; we need more people in Maine to read the blog.  If you know someone in Maine, send them a link.  In some seriousness, there&#8217;s a T-shirt that says &#8220;<strong><em>If you can&#8217;t be a good example, be a horrible warning.</em></strong>&#8221;</p>
<p><strong>Thanks for the warning, Maine!</strong></p>

<div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/intent/tweet?text=By+%40sehlhorst%3A+Maine+Mangles+Medicaid+%E2%80%93+Charges+CIO+http%3A%2F%2Fbit.ly%2FfKGqaO+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-big1.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://tynerblain.com/blog/2006/04/21/maine-mangles-medicaid-charges-cio/&amp;t=Maine+Mangles+Medicaid+%E2%80%93+Charges+CIO" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/facebook/tt-facebook-big4.png" alt="Post to Facebook" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2006/04/21/maine-mangles-medicaid-charges-cio/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Outsourcing Conversation &#8211; One Topic, Two Blogs, Three Cs</title>
		<link>http://tynerblain.com/blog/2006/04/05/outsourcing-conversation-one-topic-two-blogs-three-cs/</link>
		<comments>http://tynerblain.com/blog/2006/04/05/outsourcing-conversation-one-topic-two-blogs-three-cs/#comments</comments>
		<pubDate>Thu, 06 Apr 2006 05:55:05 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Communication]]></category>
		<category><![CDATA[Consulting]]></category>
		<category><![CDATA[Outsourcing]]></category>
		<category><![CDATA[application development outsourcing]]></category>
		<category><![CDATA[benefits of outsourcing]]></category>
		<category><![CDATA[CMMI]]></category>
		<category><![CDATA[effects of outsourcing]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[outsourcing software development]]></category>
		<category><![CDATA[software development outsourcing]]></category>
		<category><![CDATA[software outsourcing]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2006/04/05/outsourcing-conversation-one-topic-two-blogs-three-cs/</guid>
		<description><![CDATA[Frederick Boulanger picked up on our earlier post about different outsourcing process models, and extended it with his own good ideas- making it easier for teams to decide which outsourcing model is right for them. Frederick identifies the three key factors that determine which model is most likely to succeed for a given team.  They are control, coordination, and communication. Anyone else want to join in? Blog away, and trackback or comment here.]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Ftynerblain.com%252Fblog%252F2006%252F04%252F05%252Foutsourcing-conversation-one-topic-two-blogs-three-cs%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Outsourcing%20Conversation%20-%20One%20Topic%2C%20Two%20Blogs%2C%20Three%20Cs%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2006%2F04%2F05%2Foutsourcing-conversation-one-topic-two-blogs-three-cs%2F", "style": "big", "title": "Outsourcing Conversation - One Topic, Two Blogs, Three Cs" });</script></div>
<p><img title="chatting ducks" alt="chatting ducks" src="http://sehlhorst.smugmug.com/photos/49584677-M.jpg" /></p>
<p>Frederick Boulanger picked up on <a title="Four models of outsourcing" href="http://tynerblain.com/blog/2006/03/31/four-outsourcing-models-for-software-development/">our earlier article about different application development outsourcing models</a>, and extended it with <a title="Boulanger on outsourcing" href="http://www.picpacwrack.net/archives/2006_04_01_fredstechstuff.html#114413099974966960">his own good ideas</a>- making it easier for teams to decide which outsourcing model is right for them.  Frederick identifies the three key factors that determine which model is most likely to succeed for a given team.  They are <em>control, coordination, </em>and <em>communication</em>.  Anyone else want to join in?  Blog away, and trackback or comment here.</p>
<p><strong>Control</strong></p>
<p>Are we outsourcing <em>turn-the-crank</em> type activities?  What about tasks that require only entry-level skills?  Frederick points out that there is a continuum of desired control for any company or project.  When we maintain as much control as possible, we only outsource very specifically defined work-elements.  When we have less need for control, we can outsource more and more of the process.  If we keep design in-house but outsource implementation, we still have a lot of control over the final results.</p>
<p><strong>Coordination</strong></p>
<p>Coordination of activity is central to the success of any team.  When everyone on the team is in the same room, coordination <em>almost</em> happens automatically.  Having everyone in the same building helps, and having everyone in nearby timezones is the norm these days for non-outsourced projects.  A lot of people treat outsourcing as synonymous with offshoring &#8211; the term for outsourcing to teams on different continents.</p>
<p>Technology has eased the pain of a geographically distributed team &#8211; instant messaging, email, collaboration applications, and video conferencing have reduced the need to travel, and made coordination easier for dispersed teams.  Offshoring also creates <em>temporally distributed</em> teams, as team members are working in very different time zones.  When team members are eleven and a half hours out-of-phase with each other, coordination becomes much more important.</p>
<p>Asynchronous teams also face an efficiency challenge.  The typically iterative <a title="targeted and strategic communication" href="http://tynerblain.com/blog/2006/04/03/targeted-communication-three-tips/"><em>tactical communication</em></a> among team members may only take minutes when folks are simultaneously working.  It can take a day per iteration when the communication happens only through email (with a multi-hour delay between each exchange of information).</p>
<p>Defining the communication process our team will use is important.  Documenting this process helps to set expectations for the outsourcing team, and is required for most <a title="What CMMI level should we use" href="http://tynerblain.com/blog/2006/03/12/what-cmmi-level-should-we-use/">CMMI levels</a>.</p>
<p><strong>Communication</strong></p>
<p>Precisely defined tasks (the <em>turn-the-crank</em> variety) require far less iterative communication than more strategic activities like validating requirements or architectural design.  Offshoring projects will be more effective initially when the majority of the outsourced work is partitioned into narrowly scoped deliverables.</p>
<p>After developing a good relationship with our outsourcers, and working the kinks out of our communication process, we can begin to relinquish control by outsourcing work with greater scope of impact.  I&#8217;ve had excellent success in doing this by leveraging documentation to communicate with overseas team members.  When giving them greater responsibility, I would require that they document their design and their test design for review prior to any implementation work.  This dramatically reduced the effect of ambiguity in the requirements, while implicitly providing an active-listening feedback loop.  Most often, misinterpretation of requirements resulted in errors in the test designs.  It also had the side benefit of helping my teammates grow their skills more quickly as it forced more critical thinking to occur early in their process.</p>
<p><strong>Summary</strong></p>
<p>Communication is important to any outsourcing effort, and increasingly critical when relinquishing increased levels of control.  Process execution and coordination determine how repeatably we can communicate at any level of control.</p>

<div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/intent/tweet?text=By+%40sehlhorst%3A+Outsourcing+Conversation+%E2%80%93+One+Topic%2C+Two+Blogs%2C+Three+Cs+http%3A%2F%2Fbit.ly%2FfnRfvC+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-big1.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://tynerblain.com/blog/2006/04/05/outsourcing-conversation-one-topic-two-blogs-three-cs/&amp;t=Outsourcing+Conversation+%E2%80%93+One+Topic%2C+Two+Blogs%2C+Three+Cs" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/facebook/tt-facebook-big4.png" alt="Post to Facebook" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2006/04/05/outsourcing-conversation-one-topic-two-blogs-three-cs/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Four Application Development Outsourcing Models</title>
		<link>http://tynerblain.com/blog/2006/03/31/four-outsourcing-models-for-software-development/</link>
		<comments>http://tynerblain.com/blog/2006/03/31/four-outsourcing-models-for-software-development/#comments</comments>
		<pubDate>Sat, 01 Apr 2006 05:45:10 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Consulting]]></category>
		<category><![CDATA[Outsourcing]]></category>
		<category><![CDATA[Product Management]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[application development outsourcing]]></category>
		<category><![CDATA[benefits of outsourcing]]></category>
		<category><![CDATA[Communication]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[effects of outsourcing]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[MRD]]></category>
		<category><![CDATA[outsourcing software development]]></category>
		<category><![CDATA[PRD]]></category>
		<category><![CDATA[software development process]]></category>
		<category><![CDATA[software outsourcing]]></category>
		<category><![CDATA[software process]]></category>
		<category><![CDATA[software requirements process]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2006/03/31/four-outsourcing-models-for-software-development/</guid>
		<description><![CDATA[topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2006%2F03%2F31%2Ffour-outsourcing-models-for-software-development%2F", "style": "big", "title": "Four Application Development Outsourcing Models" }); On March 30th CIO magazine published an article titled Do&#8217;s and Don&#8217;ts of Outsourcing Benchmarks. The article spurred us to write about outsourcing models for product development &#8211; it is otherwise unrelated, but interesting. Explaining Four Application Development Outsourcing Models Outsourcing software development [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Ftynerblain.com%252Fblog%252F2006%252F03%252F31%252Ffour-outsourcing-models-for-software-development%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Four%20Application%20Development%20Outsourcing%20Models%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2006%2F03%2F31%2Ffour-outsourcing-models-for-software-development%2F", "style": "big", "title": "Four Application Development Outsourcing Models" });</script></div>
<p><img title="The man behind the curtain" src="http://sehlhorst.smugmug.com/photos/62411061-M.jpg" alt="The man behind the curtain" /></p>
<p>On March 30th CIO magazine published an article titled <a title="CIO Magazine analysts report" href="http://www2.cio.com/analyst/report4069.html"><em>Do&#8217;s and Don&#8217;ts of Outsourcing Benchmarks</em></a>.  <em>The article spurred us to write about outsourcing models for product development &#8211; it is otherwise unrelated, but interesting.</em></p>
<p><span id="more-156"></span></p>
<h2>Explaining Four Application Development Outsourcing Models</h2>
<h2><strong> </strong></h2>
<p>Outsourcing software development is different than outsourcing services like call-center operations.  There are people who interact in <a title="Software requirements process and roles" href="http://tynerblain.com/blog/2006/02/13/software-requirements-process-and-roles/">several different roles in software development</a>.</p>
<p>There are two distinct types of <em>outsourcing</em>.  Bringing experts into our company, or sending work out of our company.  Experts who join our team are &#8220;temporary team members&#8221; not &#8220;outsiders.&#8221;  Sending work outside requires that we address several issues in communication, expectations, and accountability.</p>
<p>We will focus on the models for sending <em>some of the work</em> outside our company, to a team that operates in a very distant location and timezone.</p>
<h2>Process overview</h2>
<p>We&#8217;ve described the software development process (from market opportunities to delivered software) in several posts in detail including <a title="Software development process example" href="http://tynerblain.com/blog/2006/02/20/software-development-process-example/"><em>Software development process example</em></a> and <a title="Where bugs come from" href="http://tynerblain.com/blog/2006/01/22/where-bugs-come-from/"><em>Where bugs come from</em></a>.  We&#8217;ll provide a brief overview of the flow only in this post, with some simplified versions of roles in the process.  This post is focused on the communication elements of handing off responsibility.</p>
<p>In the following diagrams, each area (dashed-line border) is the responsibility of the person within the area (developer, QA, etc).  All of the maroon arrows represent transfers of information or responsibility within the organization.  Any blue arrows represent communication with outsourcers, who are accountable for the next step in the process.  Outsourcing rectangles have a light blue shading.  Note that feedback loops are not drawn, but are important to success.  Details on feedback can be found in the previously linked posts.</p>
<p>In each model, we list a <em>key to success</em> which targets the largest additional challenge of each model.  Each model still otherwise faces all of the challenges of developing great software.  As such, we don&#8217;t list a <em>key to success</em> for model 1 &#8211; that&#8217;s our baseline.</p>
<h2>Model 1: Insourcing</h2>
<p>Keeping all of the work in house, and in nearby timezones (geographic split of the team is ok, as long as they have &gt;75% overlap in working hours).  Communication between members of the team is important, and clear lines of responsibility are drawn.</p>
<p><img title="insourcing" src="http://sehlhorst.smugmug.com/photos/62416955-L.jpg" alt="insourcing" /></p>
<h2>Model 2: Low-level outsourcing</h2>
<p>The first step most companies take to outsourcing is to send the &#8220;boring&#8221; or &#8220;unchallenging&#8221; or &#8220;low risk&#8221; work to an outside company.  This model is shown in the following diagram, with QA and development outsourcing of the implementation and testing steps.</p>
<p>The <em>key to success</em> with this model is in execution management.  Code reads and validation that everything designed has been implemented.</p>
<p><img title="low level outsourcing" src="http://sehlhorst.smugmug.com/photos/62416957-L.jpg" alt="low level outsourcing" /></p>
<h2>Model 3: High level outsourcing</h2>
<p>Additional responsibility (design) and more abstract tasks are transitioned to the outsourcing firm &#8211; usually after they have demonstrated the ability to execute on lower-level tasks.</p>
<p>The <em>key to success</em> with this model is the technical communication and interaction between the <em>architect-level</em> developers and testers who are responsible for interpreting the PRD, and their outsourced counterparts with design responsibility.  These in-house technical people will approve the code-design and test-designs proposed by the outsourcing team.<br />
<img title="high level outsourcing" src="http://sehlhorst.smugmug.com/photos/62418699-L.jpg" alt="high level outsourcing" /></p>
<h2>Model 4: Complete technical outsourcing</h2>
<p>Companies sometimes establish a mantra like &#8216;All technical work will be done in India&#8217;.  Their process model looks like the following, where documented requirements are delivered to the outsourcing team, who interpret them, design and implement.</p>
<p>The <em>key to success</em> with this model is having a trusted partner, a great PRD, and extremely good communication in the validation of the interpretation of the specifications.<br />
<img title="complete technical outsourcing" src="http://sehlhorst.smugmug.com/photos/62416953-L.jpg" alt="complete technical outsourcing" /></p>
<h2>Conclusion</h2>
<p>The best process will vary depending on the makeup of the organization, the goals of the business, and the nature of the project.  There is no single right answer.</p>
<h2>[Update] Follow-Up Articles</h2>
<p>We&#8217;ve written some additional, in-depth articles specifically about how to make these different models work.  These articles focus on actionable strategies for making the models from this article work for your team.</p>
<ul>
<li><a title="effective offshore development process" href="http://tynerblain.com/blog/2008/05/05/offshore-development/">Making Offshore Development Work</a></li>
<li><a title="effective offshore design process " href="http://tynerblain.com/blog/2008/05/14/offshore-design/">Making Offshore Design Work</a></li>
</ul>

<div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/intent/tweet?text=By+%40sehlhorst%3A+Four+Application+Development+Outsourcing+Models+http%3A%2F%2Fbit.ly%2FgEMlTm+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-big1.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://tynerblain.com/blog/2006/03/31/four-outsourcing-models-for-software-development/&amp;t=Four+Application+Development+Outsourcing+Models" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/facebook/tt-facebook-big4.png" alt="Post to Facebook" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2006/03/31/four-outsourcing-models-for-software-development/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Software design and specification and making movies</title>
		<link>http://tynerblain.com/blog/2006/03/20/software-design-and-specification-and-making-movies/</link>
		<comments>http://tynerblain.com/blog/2006/03/20/software-design-and-specification-and-making-movies/#comments</comments>
		<pubDate>Tue, 21 Mar 2006 04:07:40 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Interaction design]]></category>
		<category><![CDATA[Outsourcing]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[UX]]></category>
		<category><![CDATA[agile development]]></category>
		<category><![CDATA[alan cooper]]></category>
		<category><![CDATA[design process]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[software development process]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2006/03/20/software-design-and-specification-and-making-movies/</guid>
		<description><![CDATA[Alan Cooper presents the analogy that software development is like making movies in his book, The Inmates are Running the Asylum.  Cooper is presenting the analogy in the context of validating the business case for investing in interaction design, but it holds true for requirements as well.
]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Ftynerblain.com%252Fblog%252F2006%252F03%252F20%252Fsoftware-design-and-specification-and-making-movies%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Software%20design%20and%20specification%20and%20making%20movies%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2006%2F03%2F20%2Fsoftware-design-and-specification-and-making-movies%2F", "style": "big", "title": "Software design and specification and making movies" });</script></div>
<p><img title="movie reel" alt="movie reel" src="http://sehlhorst.smugmug.com/photos/60845646-M.jpg" /></p>
<p>Alan Cooper presents the analogy that software development is like making movies in his book, <a title="The inmates are running the asylum, at Amazon" href="http://www.amazon.com/exec/obidos/ASIN/0672326140/tynerblain-20">The Inmates are Running the Asylum</a>.  [This is a fantastic book for getting an understanding of exactly how Cooper's perspective evolved over the last decade.]  Cooper is presenting the analogy in the context of validating the business case for investing in interaction design.</p>
<p>Cooper points out that they&#8217;ve been making movies for a lot longer than we&#8217;ve been making software, and he&#8217;s exactly right that there is something to learn from the film industry.</p>
<p><strong>How the movie industry works</strong></p>
<p>The movie industry manages movies in three phases:</p>
<ul>
<li>Pre-production.  Determining what the movie will be about, raising funds, storyboarding and designing the movie, getting actors signed, writing the script, etc.</li>
<li>Production.  Shooting the film.  Directors, actors, and crew all working very expensively to get the film shot.</li>
<li>Post-production.  Tweaking and finalizing the film.</li>
</ul>
<p><strong>How software development parallels movie making</strong></p>
<p>Software development involves three phases as well: <a title="Foundation series: Software process overview" href="http://tynerblain.com/blog/2006/01/03/foundation-series-software-process-waterfall-process-versus-incremental-process/">Decide what to do, do it, and deliver it</a>.</p>
<p>The interesting thing to note is that the film industry universally invests time upfront in pre-production, to minimize the costs of production.  They recognize that production is more expensive than pre or post-production.  Many software teams take the same approach, although Agile development explicitly does not.  We gleaned some insight into Cooper&#8217;s perspective from <a title="Interaction design explained by Alan Cooper" href="http://tynerblain.com/blog/2006/03/07/interaction-design-explained-by-alan-cooper/">our coverage of a debate between Cooper and Kent Beck</a>.</p>
<p>If we accept Cooper&#8217;s premise that production is more expensive than pre-production, then software should follow the same model.</p>
<p>It&#8217;s worth noting that <a title="Agile requirements" href="http://tynerblain.com/blog/2005/12/05/agile-requirements/">an agile process</a> results in more design, not less.  Beck might argue that redesigning as we go is less expensive, because we improve our ability to understand what we actually want to create during the process of creating it.  Cooper disagrees.</p>
<p>As much as we like Cooper&#8217;s insights, the movie cost structure is not paralleled in the software development structure.  When we hire developers, it is analogous to the old movie studios keeping actors on retainer &#8211; the cost is &#8220;fixed.&#8221;  And the infrastructure costs of production (set creation, for example) are not affected by the time spent in production &#8211; they too are fixed.  If we have a project with contractor developers, then we have a variable cost, and we lose money while those developers are &#8220;sitting around.&#8221;  However, today&#8217;s projects leverage outsourced overseas contractors more and more &#8211; and these <em>actors</em> are a lot cheaper than <em>script writers</em>.</p>
<p><strong>What we know in spite of the analogy&#8217;s flaws</strong></p>
<p>We absolutely save time and money by <a title="Why we should invest in requirements management" href="http://tynerblain.com/blog/2005/12/28/why-we-should-invest-in-requirements-management/">defining requirements before we write the software</a>.  We also know that it is important to <a title="Software development process example" href="http://tynerblain.com/blog/2006/02/20/software-development-process-example/">design before we code</a>.</p>
<p>Neither of these statements conflicts with agile philosophies, if we take the approach of treating &#8220;design everything&#8221; with &#8220;design this one thing&#8221; similarly.  An agile approach will simply have multiple design/implement cycles, each focused on a subset of the software (and allowing for a redesign phase prior to delivery).</p>

<div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/intent/tweet?text=By+%40sehlhorst%3A+Software+design+and+specification+and+making+movies+http%3A%2F%2Fbit.ly%2FhR2LFd+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-big1.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://tynerblain.com/blog/2006/03/20/software-design-and-specification-and-making-movies/&amp;t=Software+design+and+specification+and+making+movies" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/facebook/tt-facebook-big4.png" alt="Post to Facebook" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2006/03/20/software-design-and-specification-and-making-movies/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Fixing the Requirements Mess</title>
		<link>http://tynerblain.com/blog/2005/11/29/fixing-the-requirements-mess/</link>
		<comments>http://tynerblain.com/blog/2005/11/29/fixing-the-requirements-mess/#comments</comments>
		<pubDate>Tue, 29 Nov 2005 07:40:04 +0000</pubDate>
		<dc:creator>Scott Sehlhorst</dc:creator>
				<category><![CDATA[Outsourcing]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[cio magazine]]></category>
		<category><![CDATA[managing data]]></category>
		<category><![CDATA[requirements bugs]]></category>
		<category><![CDATA[software development process]]></category>

		<guid isPermaLink="false">http://tynerblain.com/blog/2005/11/29/fixing-the-requirements-mess/</guid>
		<description><![CDATA[“71 percent of software projects that fail do so because of poor requirements management”]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Ftynerblain.com%252Fblog%252F2005%252F11%252F29%252Ffixing-the-requirements-mess%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Fixing%20the%20Requirements%20Mess%22%20%7D);"><script type="text/javascript">topsyWidgetPreload({ "url": "http%3A%2F%2Ftynerblain.com%2Fblog%2F2005%2F11%2F29%2Ffixing-the-requirements-mess%2F", "style": "big", "title": "Fixing the Requirements Mess" });</script></div>
<p>Stephen Larrison posted an article in his blog, <a href="http://surviveoutsourcing.com/jla/index.php?option=com_frontpage&#038;Itemid=1">Survive Outsourcing</a>, about how to compete with offshore-outsourced projects by <a href="http://surviveoutsourcing.com/jla/index.php?option=com_content&#038;task=view&#038;id=68&#038;Itemid=2">fixing the requirements mess</a> up front. His background in manufacturing, as well as software development has lead him to a similar perspective as the one I touched briefly on in my post about <a title="Where bugs come from" href="http://tynerblain.com/blog/2006/01/22/where-bugs-come-from/">where bugs come from</a>.</p>
<p>Stephen points out that “You have to eliminate scrap and rework” in order to compete with teams that have lower cost implementation resources. He points out that this is the key to improving productivity in software development, just as it is in the manufacturing world.</p>
<p>I read a book a little over 10 years ago, <a href="http://www.amazon.com/exec/obidos/ASIN/0060974176/tynerblain-20?creative=327641&#038;camp=14573&#038;link_code=as1">The Machine that Changed the World</a>, by Womack, Jones, and Roos. They first introduced me to the concept of the value of investments made upstream in the process.  They specifically showed the payback of a dollar invested during the design of a new product (their focus was automotive) yielding the same results as ten dollars spent after a product enters manufacturing.  It had the same effect as $100 spent fixing problems after they’ve been released to the field. IIRC, their point, in 1991, was that Japanese manufacturers were investing more at the design stage than U.S. Automakers. Seems almost prescient now with <a href="http://www.smh.com.au/news/business/toyota-poised-to-overtake-gm/2005/10/26/1130302825263.html">Toyota set to overtake GM as the largest car manufacturer in 2006</a>.</p>
<p>There’s an analogous rule of thumb in software development that requirements bugs cost ten times as much to fix after they reach development, and 100 times as much to fix once they’ve been released to the field. A requirements bug caught in development seems cheap (you only have some wasted effort and minor delays associated with re-working the software to meet the corrected requirement), when you compare it to cost of releasing buggy software &#8211; which can result in lost sales and added costs (if the cost of “repair” is accounted for). But truly, the savings comes from fixing the bug before anyone starts building part of the solution based upon the incorrect requirement.</p>
<p>In Stephen’s article, he references CIO magazine, and an eye-opening statistic: “71 percent of software projects that fail do so because of poor requirements management”.  It is seriously worth a read.  Here are some <a title="Why there is ROI in requirements management" href="http://tynerblain.com/blog/2005/12/28/why-we-should-invest-in-requirements-management/">more statistics on software project failures</a>.<br />
Scott</p>

<div class="tweetthis" style="text-align:left;"><p> <a target="_blank" rel="nofollow" class="tt" href="http://twitter.com/intent/tweet?text=By+%40sehlhorst%3A+Fixing+the+Requirements+Mess+http%3A%2F%2Fbit.ly%2FeraZBv+" title="Post to Twitter"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter-big1.png" alt="Post to Twitter" /></a> <a target="_blank" rel="nofollow" class="tt" href="http://www.facebook.com/share.php?u=http://tynerblain.com/blog/2005/11/29/fixing-the-requirements-mess/&amp;t=Fixing+the+Requirements+Mess" title="Post to Facebook"><img class="nothumb" src="http://tynerblain.com/blog/wp-content/plugins/tweet-this/icons/en/facebook/tt-facebook-big4.png" alt="Post to Facebook" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://tynerblain.com/blog/2005/11/29/fixing-the-requirements-mess/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

