<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Agile Consulting</title>
	<atom:link href="http://thomasjeffreyandersontwin.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://thomasjeffreyandersontwin.wordpress.com</link>
	<description>Just another WordPress.com weblog</description>
	<lastBuildDate>Sun, 22 Feb 2009 19:20:51 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='thomasjeffreyandersontwin.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Agile Consulting</title>
		<link>http://thomasjeffreyandersontwin.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://thomasjeffreyandersontwin.wordpress.com/osd.xml" title="Agile Consulting" />
	<atom:link rel='hub' href='http://thomasjeffreyandersontwin.wordpress.com/?pushpress=hub'/>
		<item>
		<title></title>
		<link>http://thomasjeffreyandersontwin.wordpress.com/2009/02/22/73/</link>
		<comments>http://thomasjeffreyandersontwin.wordpress.com/2009/02/22/73/#comments</comments>
		<pubDate>Sun, 22 Feb 2009 19:20:47 +0000</pubDate>
		<dc:creator>thomasjeffreyandersontwin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://thomasjeffreyandersontwin.wordpress.com/2009/02/22/73/</guid>
		<description><![CDATA[Recently I&#8217;ve been playing around with a new online tool called scribd, scribd allows you to post, tag, organize, and share typical MS office style documentation using many of the online collaboration techniques we have grown to appreciate in the Web 2.0 world. Scribd can be thought of as YouTube for documents. It&#8217;s a great [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thomasjeffreyandersontwin.wordpress.com&amp;blog=6676985&amp;post=73&amp;subd=thomasjeffreyandersontwin&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Recently I&rsquo;ve been playing around with a new online tool called <a href="http://www.scribd.com/" target="_blank">scribd</a>, </p>
<p><a href="http://www.scribd.com/" target="_blank">scribd</a> allows you to post, tag, organize, and share typical MS office style documentation using many of the online collaboration techniques we have grown to appreciate in the Web 2.0 world. Scribd can be thought of as YouTube for documents. It&rsquo;s a great tool, and you can choose either share your documents with the entire public, or was just a few select members. The service supports encryption to make sure that client sensitive documents only get shared with your clients and that they are protected from eves-dropping and tampering. Best of all the service is free. Of course many firms are still wary of this kind of service, and are happy with any kind of technology unless they can bring it in-house and pay oodles of money for it.</p>
<p>For the rest of us out there, I recommend at least taking a look. I&rsquo;ve posted a couple of my generic/non-client sensitive documents up at <a href="http://www.scribd.com/thomasjeffreyandersontwin" target="_blank">my documents</a>. Please note that many of these artifacts actually contain branding from the firm that I belong to, I should point out that in the interest of openness I see nothing wrong with publicly representing Deloitte in this manner. That being said, I do need to state that any of the material here (or anywhere else on my blog) do not represent the position or opinions of Deloitte. <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  <a title="View managing change on Scribd" href="http://www.scribd.com/doc/11998330/managing-change">managing change</a> </p>
<p>&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp </p>
<div style="display:block;font:12px Helvetica,Arial,Sans-serif;margin:6px auto 3px;">    <a href="http://www.scribd.com/upload">Publish at Scribd</a> or <a href="http://www.scribd.com/browse">explore</a> others: <a href="http://www.scribd.com/tag/management">management</a>              <a href="http://www.scribd.com/tag/time">time</a>       </div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/thomasjeffreyandersontwin.wordpress.com/73/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/thomasjeffreyandersontwin.wordpress.com/73/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/thomasjeffreyandersontwin.wordpress.com/73/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/thomasjeffreyandersontwin.wordpress.com/73/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/thomasjeffreyandersontwin.wordpress.com/73/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/thomasjeffreyandersontwin.wordpress.com/73/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/thomasjeffreyandersontwin.wordpress.com/73/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/thomasjeffreyandersontwin.wordpress.com/73/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/thomasjeffreyandersontwin.wordpress.com/73/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/thomasjeffreyandersontwin.wordpress.com/73/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/thomasjeffreyandersontwin.wordpress.com/73/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/thomasjeffreyandersontwin.wordpress.com/73/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/thomasjeffreyandersontwin.wordpress.com/73/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/thomasjeffreyandersontwin.wordpress.com/73/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thomasjeffreyandersontwin.wordpress.com&amp;blog=6676985&amp;post=73&amp;subd=thomasjeffreyandersontwin&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://thomasjeffreyandersontwin.wordpress.com/2009/02/22/73/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e6f18308bf25cdceeb7b56745e4ebcf7?s=96&#38;d=identicon" medium="image">
			<media:title type="html">thomasjeffreyandersontwin</media:title>
		</media:content>
	</item>
		<item>
		<title>agile and fixed-price contracts</title>
		<link>http://thomasjeffreyandersontwin.wordpress.com/2009/02/22/agile-and-fixed-price-contracts/</link>
		<comments>http://thomasjeffreyandersontwin.wordpress.com/2009/02/22/agile-and-fixed-price-contracts/#comments</comments>
		<pubDate>Sun, 22 Feb 2009 03:48:13 +0000</pubDate>
		<dc:creator>thomasjeffreyandersontwin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://thomasjeffreyandersontwin.wordpress.com/2009/02/22/37/</guid>
		<description><![CDATA[The purpose of this article is to discuss my experience in leveraging agile development approaches while delivering engagements working for a consulting firm. It should be noted that most of these engagements use fixed price contracts where scope, budget and schedule are defined well advanced of any detailed work. It is my opinion, that agile [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thomasjeffreyandersontwin.wordpress.com&amp;blog=6676985&amp;post=37&amp;subd=thomasjeffreyandersontwin&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>The purpose of this article is to discuss my experience in leveraging agile development approaches while delivering engagements working for a consulting firm. It should be noted that most of these engagements use fixed price contracts where scope, budget and schedule are defined well advanced of any detailed work. It is my opinion, that agile approaches and tools can still offer a lot of value on these kinds of projects. </p>
<p><strong>What does it mean to develop using agile approaches?<br /></strong> While I assume that most readers are at least somewhat familiar with what it means to be agile I thought I would give a quick recap. The agile alliance defines the following manifesto: Individuals and interactions over processes and tools <em>Working software </em>over comprehensive documentation <em>Customer collaboration </em>over contract negotiation <em>Responding to change </em>over following a plan </p>
<p>The agile manifesto states that the items on the left of the statement are more important than the items on the right. However the manifesto clearly states that items on the right (including contract negotiation) still have value and are often a required part in any development project. The agile manifesto further defines a couple of key principles that one should follow in order to truly claim that one is developing using agile methods. I&rsquo;ve listed some of the most important ones below <br />1) early and continuous software delivery, with a preference towards small biweekly iterations. <br />2) acceptance and even welcoming of continually changing requirements <br />3) tight integration between the business and developers <br />4) giving motivated individuals the environment and support they need to be successful <br />5) a steady pace of software delivery that can be sustained indefinitely <br />6) face-to-face interaction is the best form of communication While many of these tenants have become accepted by the larger developer community it&rsquo;s interesting to note that agile is often considered a &quot;dirty&quot; word among professional project managers and in many classical consulting organization in general. </p>
<p><strong>fixed-price contracts: often a necessary evil when engaging with consultants<br /> </strong>In order for any client to engage the development services of a consulting firm a contract must be created outlining the scope of the work. Often this is a fixed-price contract. Consultants typically work with client project managers to create a contract for an upcoming project, estimate the work, and determine the cost of the delivery in advance of any serious requirements or design work. Reasonably detailed contracts are required upfront to specify the nature of any engagement and the overall scope of any delivery. Needless to say, this environment can be perceived as not being conducive to an &quot;agile approach&quot; and as a result there&rsquo;s a fair amount of controversy around agile approaches at the firm that I work for. </p>
<p><strong>Does an agile approach offer any benefit when following a contract model?<br /> </strong>It is the opinion of many of the manager type resources within our firm that agile and fixed-price contracts are an absolute no-no. Typically our firm expresses a clear preference for structured, sequential, delivery methods. According to many in management, a highly structured approach supported by a robust and well defined change management process is the best way to manage any contractual risks to the engagement. Furthermore, management often equates agile development with &quot;cowboy coding&quot;, and doesn&rsquo;t necessarily have the correct perception concerning the discipline required to make agile work. The problem with an overly structured approach, is typically things do change, scope does creep, and often an extensive, bureaucratic change management process only further complicates the situation. Far too often resources on the ground are asked to take up the slack. Often, the cost of change is not clearly perceived, quality begins to suffer, and the project is eventually impacted in some form or other. My own experiences have led me to believe that an agile approach is crucial to the success of any development project that contains any technical or business ambiguity. I believe this represents the majority of most development projects, especially development projects that require outside consultant help. Typically, if the project was simple and risk-free, then clients would not be hiring consultants to manage the engagement in the first place. The key to making agile work while also ensuring that the conditions of a particular contact between the consulting firm and the client are met is to make sure that agile approaches are supplemented with a suitable amount of structure that takes into account upfront pre-iterative activities such as initial planning, scoping, analysis and architecture. What is interesting to note, is that agile and structured approaches do not need to be mutually exclusive. By being a little bit more liberal when interpreting explicit activities of some of the more structured approaches one is able to adapt and extend these approaches and execute them using an iterative and agile approach. Listed below are set of best practices that have supported me well when applying agile approaches while still having to take into consideration factors such as budgeting, planning, and managing to explicit contract. </p>
<p><strong>Attempt to structure contracts so that statements of work support An iterative approach <br /></strong>It is much easier to support an iterative approach when working against contracts that are smaller in duration. My experience has led me to believe that the ideal contract length is anywhere from two to four months. If contracts are any smaller you&rsquo;ll find that you&rsquo;re spending almost all of your time doing nothing but building contracts. You will also have very little room to make up for underestimated work within a particular contract. If contracts are any larger, you begin to open yourself to greater and greater risk of underestimating a particular piece of work. Often master contracts are written for large engagements that can span several years. In this situation I found it helpful to negotiate with the client the ability to write separate requisitions of work against the master contract. These requisitions typically contain agreements for specific deliverables within a particular set of iterations. There will always be a situation where consulting firm will be forced to deliver work against a large multiyear contract. In these situations agile and iterative tools can still work to provide a internal baseline of progress and warning signals that the overall program might be in jeopardy well in advance of more typical waterfall like approaches. </p>
<p><strong>Separate statements of work in sequence of perceived risk<br /></strong> While this might seem like an obvious statement, all too often I&rsquo;ve been on contracts where statement of work have been written and executed in a typical waterfall like fashion as suggested by the order below. 1) requirements 2) design 3) implementation 4) testing This approach is a completely naïve and does not take into account what risks should be mitigated in what order on a development project. While the specific risks on any particular project will vary depending on the situation, a more realistic structure for scheduling different statements of work is shown below. 1) Project Objectives &#8211; scope, business case, high-level cost, plan and schedule, conceptual architecture, POC 2) Project Definition &#8211; release planning, architecture, greater requirement stability, high risk prototyping and reference development 3) Project Construction-development in order of risk, code testing, detailed project documentation 4) Project transition-knowledge transfer, stakeholder product acceptance I have frequently found it practical to include some degree of implementation work within each of these contracts. As an example, it is very difficult to know if the high-level conceptual architecture of the solution is feasible unless some portion of the architecture has already been implemented and proven. Frequently, it will be necessary to validate any conceptual architecture with a very simple strawman POC that ensures that all pieces of the solution are actually able to communicate with each other as intended. </p>
<p><strong>Keep documentation (especially anything that could be considered &quot;binding&quot;) at a high -level until it can be properly validated against an implementation reference<br /></strong> What this means is that requirements, domain models, architecture models, and any other project documentation that could be looked at as binding should be kept high-level and directional only until it can be verified with some kind of reference implementation. My experience has suggested that implementation has a massive effect on detailed design, almost a 100% delta on the documentation of the original solution. Where possible, I recommend keeping documentation at a high-level until a least some portion of it can be validated against a reference code base. Of course, this is not always possible and sometimes clients want documentation sooner, just be sure to communicate that all initial documentation needs to be validated with real implementation work, also make sure to be prepared to schedule the time to write the documentation at least twice. </p>
<p><strong>Validate high-risk portions of the development effort prior to committing to engaging with the larger team<br /></strong> The majority of engagements that I involve myself in all contain some degree of technical risk. Examples of this type of risk are incorrect solution behavior, poor performance, poor reliability, or inaccurate estimation. Much of this risk can be effectively mitigated by initially deploying a small team of fairly senior resources in advance of the larger team. The sole purpose of this team is to address these technical risks. A senior team can use a combination of analysis and prototyping to resolve much of the technical and business related ambiguity prior to full-blown implementation. Once the mismatch between initial estimation, risk and actual solution is understood this information can be used to create a more finely tuned plan and accurate contract for later phases of engagement. <br /><strong>Use a pure agile development process to structure how work is conducted within each development team, but organize these teams and their efforts using more prescriptive milestone-based processes.<br /></strong> Agile development approaches are great for managing development teams on a micro/medium scale. They provide tools for estimating the real-time &quot;velocity&quot; of a development team, great techniques and tools for team collaboration, and place the proper emphasis on an automated test driven development method. What agile approaches don&rsquo;t typically do is describe how to use documentation, modeling, and planning to properly scope and coordinate multiple teams with each other. In my experience the following approaches supplement agile nicely to support larger engagements, especially with a bias towards a contracting model. 1) Explicit upfront documentation of the interfaces between teams and major systems 2) prototyping, testing, and documenting architecturally significant component in detail before a larger team begins development work using a untested platform or framework 3) documenting and testing nonfunctional requirements before architecture is considered to be properly validated 4) reasonably detailed functional requirements where continual business stakeholder involvement is not guaranteed 5) executing a explicit testing phase after the iterative development cycle</p>
<p><strong>Long-term planning is still essential, even when developing using an agile approach, however planning detail should vary depending on the duration of the plan being used<br /> </strong>In point of fact, agile development requires an awful lot of planning in order to be successful. Agile planning emphasizes the use of planning at different levels of details depending on how far out the plan goes. One approach, recommended by the excellent text &quot;Agile Estimating and Planning&quot; by Michael Cohn; is to create a set of product, release and iteration plans for a particular project, each at a different level of detail. The product plan may span multiple years. The product plan describes the likely release schedule, as well as the contents and objectives of each release at a high level. Each release has a corresponding release plan. Typically, the release plan is only developed one or two months prior to the release actually been executed. The release plan defines how the release will be broken up into one or more iterations. Iteration deliverables (often called user stories, although I simply prefer the deliverables or features) are described at a high level, estimated, and allocated to a specific iteration. Iterations should be structured so that a small subset of system functionality is theoretically made available for the client to review. Each iteration is typically anywhere from two weeks to two months in duration, with a preference for the shorter side. Finally, each iteration is structured to support a more detailed activity-based iteration plan, however this planning is typically done at the beginning of the iteration or at most one iteration ahead of time. <br /><strong></strong></p>
<p><strong>Be flexible when deciding on how to adopt agile approaches<br /></strong> I found that one of the biggest inhibitors to adopting agile approaches is that agile evangelist can be somewhat overzealous/religious about agile in general. One of the interesting tenet of XP (a popular agile approach) is that &quot;one must be extreme in applying all of XP practices&quot;. In my opinion, this is pure nonsense. There are many types of project environments that can benefit from many of the practices and approaches prescribed by the agile community without having to blindly follow every single principle to the letter. The question should not be &quot;are you doing agile or not&quot;. Rather, the important question is &quot;how can agile principles and practices benefit your current work environment?&quot; As an example, many agile approaches suggest that requirements be developed using &quot;user stories&quot;, (an informal functional description of user and system behavior) and that all implementation work be based on developing code by realizing these user stories into code and allowing the common components, frameworks, and other architecture pieces to naturally evolve. This can be a very powerful approach, and I have always found that evolutionary forces have had a very beneficial impact on my architecture and design. However, larger scale systems developed in parallel by multiple teams typically require that some upfront architecture and design work be conducted. There is a middle ground where the right amount of modeling and/or documentation can be used to help direct and guide the development of one or more agile teams. Furthermore, on a project that I was recently on, the team was directed to do nothing but develop a platform and framework for an SOA solution. This meant we had actually no capability to actually create &quot;user stories&quot; per se. Does this mean that we could not follow an agile approach? Of course not. Simply by being flexible we decided to designate the client architects as our &quot;end users&quot;, and wrote user stories describing the features that are architects wanted the platform to do. We called our user stories &quot;platform deliverables&quot;, assigned story points (calling them feature points), and developed and validated them with the client architects using an iterative approach. Examples of our platform deliverables were things like &quot;Handle Service Request&quot; or &quot;Cache Service Request&quot;. The point here is that one can adapt agile approaches to a surprising number of situations, one simply needs to be flexible, creative, and willing to treat the variety of approaches and methodologies out there, both non-agile and agile as tools, rather than as a prescriptive set of processes that should be followed &quot;just because&quot;. </p>
<p>&#8230;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/thomasjeffreyandersontwin.wordpress.com/37/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/thomasjeffreyandersontwin.wordpress.com/37/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/thomasjeffreyandersontwin.wordpress.com/37/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/thomasjeffreyandersontwin.wordpress.com/37/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/thomasjeffreyandersontwin.wordpress.com/37/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/thomasjeffreyandersontwin.wordpress.com/37/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/thomasjeffreyandersontwin.wordpress.com/37/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/thomasjeffreyandersontwin.wordpress.com/37/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/thomasjeffreyandersontwin.wordpress.com/37/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/thomasjeffreyandersontwin.wordpress.com/37/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/thomasjeffreyandersontwin.wordpress.com/37/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/thomasjeffreyandersontwin.wordpress.com/37/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/thomasjeffreyandersontwin.wordpress.com/37/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/thomasjeffreyandersontwin.wordpress.com/37/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thomasjeffreyandersontwin.wordpress.com&amp;blog=6676985&amp;post=37&amp;subd=thomasjeffreyandersontwin&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://thomasjeffreyandersontwin.wordpress.com/2009/02/22/agile-and-fixed-price-contracts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e6f18308bf25cdceeb7b56745e4ebcf7?s=96&#38;d=identicon" medium="image">
			<media:title type="html">thomasjeffreyandersontwin</media:title>
		</media:content>
	</item>
		<item>
		<title>Agile over RUP Part 4</title>
		<link>http://thomasjeffreyandersontwin.wordpress.com/2009/02/22/agile-over-rup-part-4/</link>
		<comments>http://thomasjeffreyandersontwin.wordpress.com/2009/02/22/agile-over-rup-part-4/#comments</comments>
		<pubDate>Sun, 22 Feb 2009 03:40:10 +0000</pubDate>
		<dc:creator>thomasjeffreyandersontwin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://thomasjeffreyandersontwin.wordpress.com/2009/02/22/35/</guid>
		<description><![CDATA[RUP Principles As I have said before, one of the best parts of RUP is the principles and best practices. Probably the fact that RUP has explicit principles that are clearly articulated makes it a better methodology that many of the SDLCs that I&#8217;ve seen put together, especially by those in the management consultant world. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thomasjeffreyandersontwin.wordpress.com&amp;blog=6676985&amp;post=35&amp;subd=thomasjeffreyandersontwin&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><font>RUP Principles</font></p>
<p style="font-family:georgia;">As I have <a href="http://agileconsulting.blogspot.com/2009/02/agile-over-rup-part-2.html">said before, </a>one of the best parts of RUP is the principles and best practices. Probably the fact that RUP has explicit principles that are clearly articulated makes it a better methodology that many of the SDLCs that I&rsquo;ve seen put together, especially by those in the management consultant world. In fact most SDLC I have seen don&rsquo;t even bother having proper principles. Having a consumable set of principles means that development teams can pretty much guide work around whether they are following a principle, not whether they are following a specific detailed piece of processed material. </p>
<p><span style="font-family:georgia;">I have listed below the major RUP principles along with some minor alterations in order to make them more agile.</span></p>
<p style="font-weight:bold;font-family:georgia;">The RUP is a use case centric</p>
<p><a href="http://4.bp.blogspot.com/_ey1WleypnLs/SZYhC_rgNZI/AAAAAAAAAG8/kEwBHXWtPLU/s1600-h/agile-over-rup-part-4-1+%28Medium%29.png"><img style="display:block;width:286px;cursor:pointer;height:261px;text-align:center;margin:0 auto 10px;" alt="" src="http://thomasjeffreyandersontwin.files.wordpress.com/2009/02/agile-o091.png?w=450" border="0" /></a> </p>
<p style="font-family:georgia;">RUP makes a big deal about how every single artifact in the process can be traced back to a particular use case. In RUP, use cases are a collection of scenarios grouped together according to their ability to help a specific user accomplish a specific goal. The idea of developing use cases and then hanging your design documents, plans, test, and anything else might need off of these use cases is a great idea.</p>
<p><span style="font-weight:bold;font-family:georgia;">Use case traceability is a complete waste of time&#8230;</span></p>
<p style="font-family:georgia;">Unfortunately RUP takes what is a reasonable approach and pushes it to the extremes of absurdity. RUP recommends that you follow what is known as &quot;use case traceability&quot;. Use case traceability is the notion that you can have a database of every artifact created in your SDLC (including code) that tracks each artifact and their traceability to each use case and each subsequently developed artifact. In my experience, this is a colossal waste of time. By doing this, you are in effect trying to track a multidimensional, real-time, many to many relationship. What makes this even harder, is the only person capable of properly managing the database of artifacts is someone who has a reasonable understanding of the entire SDLC. This is most likely a very senior person on your team and he has better things to do than traceability management. More than likely, the person responsible for managing traceability is the person who drew the short straw in your project and is almost completely clueless about what he is actually managing.</p>
<p><font>But using use cases as a framework for managing a project is actually not a bad idea..</font><span style="font-family:georgia;">.</span></p>
<p style="font-family:georgia;">that being said, I almost always develop and maintain a use case hierarchy like the one prescribed by <a href="http://agileconsulting.blogspot.com/2008/02/can-use-cases-be-used-in-agile-way.html">Alastair Cockburn</a>. I do not always develop complete use cases, but I do use this hierarchy (usually stored in some kind of wiki) to act as an anchor to associate most of my other major SDLC elements. Of course in the agile world, there are a lot less SDLC artifacts so usually I associate individual use case nodes with things like: </p>
<ul style="font-family:georgia;" type="disc">
<li>
<p>individual user stories </p>
<li>
<p>test cases (using tools like <a href="http://fitnesse.org/">FIT</a>) </p>
<li>
<p>simple models (as needed) </p>
</li>
</ul>
<p><span style="font-family:georgia;">Traceability with working code is done by utilizing a revolutionary concept known as </span><i>talking to the person responsible for developing or supporting the code</i><span style="font-family:georgia;">. Relying on people seems to be something very scary in the manager world, but rather than focusing a whole bunch of work on doing complex traceability, try spending more work on making sure that there&rsquo;s always somebody who knows how your solution works.</span><br /><a href="http://4.bp.blogspot.com/_ey1WleypnLs/SZYhDHWDd0I/AAAAAAAAAHE/e346aQHSI0Y/s1600-h/agile-over-rup-part-4-2+%28Medium%29.png"><img style="display:block;width:633px;cursor:pointer;height:474px;text-align:center;margin:0 auto 10px;" alt="" src="http://thomasjeffreyandersontwin.files.wordpress.com/2009/02/agile-o0101.png?w=450" border="0" /></a><font>The RUP Is Architecture Centric</font></p>
<p style="font-family:georgia;">The RUP also makes a big deal about being <a href="http://www.sei.cmu.edu/publications/documents/04.reports/04tr011.html">architecture centric</a>. The RUP describes architecture as a filter on the various models necessary to build the system. (e.g. requirements model, design model, implementation model, deployment etc.) This filter represents a common vision of the system, it&rsquo;s common components, and unifying elements. The RUP spends a lot of time describing what architecture is and what it is and using terms that would probably baffle most of us, but the point is that according to RUP, architecture is something that needs to be considered throughout all aspects of developing software. While most people who follow agile probably recoil at the heavyweight definitions of architecture offered by the RUP, what is refreshing about RUP compared to most other methodologies is that RUP believes that architecture permeates all aspects of the system. Most other methods seem to put architecture &quot;above and around&quot; the actual implementation of the system. RUP on the other hand, believes that architecture is represented in its requirements, its design, its code, and how it&rsquo;s deployed. In other words architecture is more than a bunch of pretty diagrams with boxes and lines, and it doesn&rsquo;t cut architects who have no desire to be involved with implementation any slack. </p>
<p><a href="http://1.bp.blogspot.com/_ey1WleypnLs/SZYhDZdTqDI/AAAAAAAAAHM/GeD9z3AT1vU/s1600-h/agile-over-rup-part-4-3+%28Medium%29.png"><img style="display:block;width:405px;cursor:pointer;height:298px;text-align:center;margin:0 auto 10px;" alt="" src="http://thomasjeffreyandersontwin.files.wordpress.com/2009/02/agile-o0111.png?w=450" border="0" /></a> </p>
<p style="font-weight:bold;font-family:georgia;">Architecture is important, but keep it lightweight&#8230;</p>
<p><span style="font-family:georgia;">Where RUP tends to fail, is in the details. RUP has lots of advice on how to develop detailed use case models, detailed use case realizations and traceability matrices necessary to modeling and maintaining the &quot;architecture&quot; of the system.</span></p>
<p style="font-family:georgia;">Keeping a focus on architecture on any large scale project is important but in order for it to be maintainable it needs to be lightweight, and focused on value. What is valuable is going to change from project to project but in my experience make sure that effort is put into developing a set of architecture and coding standards, and that everyone be on the team is aware of them.</p>
<p><span style="font-family:georgia;">Everything else is gravy. (And gravy is not a good thing if you&rsquo;re trying to stay lean)</span><br /><a href="http://2.bp.blogspot.com/_ey1WleypnLs/SZYhDW9oovI/AAAAAAAAAHU/eSeZSwYNGZY/s1600-h/agile-over-rup-part-4-4+%28Medium%29.png"><img style="display:block;width:663px;cursor:pointer;height:88px;text-align:center;margin:0 auto 10px;" alt="" src="http://thomasjeffreyandersontwin.files.wordpress.com/2009/02/agile-o0121.png?w=450" border="0" /></a><font>The RUP Is Iterative</font></p>
<p style="font-family:georgia;">In terms of principles that add value, this is a no-brainer to anybody who&rsquo;s trying to adopt agile. That being said, RUP does not offer very tangible advice on how long iteration should be, and how to manage what goes on in iteration. Most of the milestones, gating criteria and metrics are based around the larger scale phases. </p>
<p><a href="http://1.bp.blogspot.com/_ey1WleypnLs/SZYhDa-3F9I/AAAAAAAAAHc/v4e05TOfyAI/s1600-h/agile-over-rup-part-4-5+%28Medium%29.png"><img style="display:block;width:222px;cursor:pointer;height:138px;text-align:center;margin:0 auto 10px;" alt="" src="http://thomasjeffreyandersontwin.files.wordpress.com/2009/02/agile-o0131.png?w=450" border="0" /></a> </p>
<p style="font-family:georgia;">While the RUP makes a big deal of iterating the best advice you are going to get around how to manage iterations are going to come from things like <a href="http://www.implementingscrum.com/2007/02/12/scrum-do-not-plan-really/">scrum</a> or <a href="http://www.scribd.com/doc/196726/An-iteration-in-the-life-of-XP-project">XP</a>. Whenever anybody attempts to adopt RUP, the first thing I do is train them up on how to manage a project using iterations using approaches described by a really good text, <a href="http://www.mountaingoatsoftware.com/book/1">Agile Estimating and Planning</a>. </p>
<p><a href="http://3.bp.blogspot.com/_ey1WleypnLs/SZYhVRHFTtI/AAAAAAAAAHk/H4RBs1TOlKU/s1600-h/agile-over-rup-part-4-6+%28Medium%29.png"><img style="display:block;width:400px;cursor:pointer;height:187px;text-align:center;margin:0 auto 10px;" alt="" src="http://thomasjeffreyandersontwin.files.wordpress.com/2009/02/agile-o0141.png?w=450" border="0" /></a> </p>
<p style="font-weight:bold;font-family:georgia;">The RUP Is Model Driven</p>
<p><span style="font-family:georgia;">The RUP phases places a heavy emphasis on developing one or more diagrams/models to represent the system. When going through the RUP, one will encounter guidelines on how to develop use cases models, use case realization models, design models, deployment models, activity diagrams, etc.</span></p>
<p style="font-family:georgia;">In point of fact, it&rsquo;s probably a full-time job just to keep up with all of the UML diagrams recommended by RUP as well as the approach to using these diagrams within RUP. The biggest issue in using these models is one of maintenance. While not specifically saying so, RUP does imply that these models need to be developed, and kept up to date using reverse and forward engineering principles.</p>
<p><a href="http://4.bp.blogspot.com/_ey1WleypnLs/SZYhViINoFI/AAAAAAAAAHs/UyHqAQ1aUo0/s1600-h/agile-over-rup-part-4-7+%28Medium%29.png"><img style="display:block;width:212px;cursor:pointer;height:171px;text-align:center;margin:0 auto 10px;" alt="" src="http://thomasjeffreyandersontwin.files.wordpress.com/2009/02/agile-o0151.png?w=450" border="0" /></a> </p>
<p style="font-weight:bold;font-family:georgia;">Models have A Lot Of Value, But Use Them for What They&rsquo;re Worth, They Aren&rsquo;t the Solution</p>
<p><span style="font-family:georgia;">Models are actually a great thing, they help us communicate, they help us understand, and they help us abstract implementation details that can take an awfully long time to learn. But models are expensive to create, and they are incredibly expensive to maintain. Models are also only so valuable if they are developed by the technical team in isolation of the business team. In order to be useful </span><a href="http://www.agilemodeling.com/">agile modeling best practices</a><span style="font-family:georgia;"> need to be used to supplement the RUP model driven approach. In short these practices consist of</span></p>
<ul style="font-family:georgia;" type="disc">
<li>
<p>use collaborative modeling techniques (like <a href="http://www.extremeprogramming.org/rules/crccards.html">CRC cards</a>) </p>
<li>
<p>don&rsquo;t be afraid to throwaway models </p>
<li>
<p>focus models on interfaces between teams, complex business logic, and code that is currently being reused by multiple teams </p>
<li>
<p>don&rsquo;t create a model without having an audience in mind </p>
<li>
<p>don&rsquo;t create a model because your process says so </p>
</li>
</ul>
<p><a href="http://3.bp.blogspot.com/_ey1WleypnLs/SZYhVjFckzI/AAAAAAAAAH0/yuiw4vafOFo/s1600-h/agile-over-rup-part-4-8+%28Medium%29.png"><img style="display:block;width:637px;cursor:pointer;height:80px;text-align:center;margin:0 auto 10px;" alt="" src="http://thomasjeffreyandersontwin.files.wordpress.com/2009/02/agile-o0161.png?w=450" border="0" /></a> </p>
<p style="font-weight:bold;font-family:georgia;">When Using RUP to Scale Agile Make Sure You Follow Agile Documentation Principle</p>
<p><span style="font-family:georgia;">Scott Ambler, has some great on how to </span><a href="http://www.agilemodeling.com/essays/agileDocumentation.htm">develop documentation in an agile manner</a><span style="font-family:georgia;">. In a nutshell, Scott suggests that you should only document when</span></p>
<ul style="font-family:georgia;" type="disc">
<li>
<p>you are satisfying a specific project stakeholders </p>
<li>
<p>you have a stakeholder who can help you build a table of contents and direct you on what he wants to see </p>
<li>
<p>when there is specific business value </p>
<li>
<p>above all, don&rsquo;t create a document because some piece of processed material says so. </p>
</li>
</ul>
<p><a href="http://1.bp.blogspot.com/_ey1WleypnLs/SZYhVhwWnPI/AAAAAAAAAH8/xjMIyMvqhVk/s1600-h/agile-over-rup-part-4-9+%28Medium%29.png"><img style="display:block;width:525px;cursor:pointer;height:275px;text-align:center;margin:0 auto 10px;" alt="" src="http://thomasjeffreyandersontwin.files.wordpress.com/2009/02/agile-o0171.png?w=450" border="0" /></a><span style="font-family:georgia;">So if you&rsquo;ve actually made it to the bottom of this document, you should have a pretty good idea about how I, and you could scale agile using specific </span><i>modified </i><span style="font-family:georgia;">portions of RUP in a pragmatic fashion. Scott Amber also has some great posts on how to </span><a href="http://www.ibm.com/developerworks/blogs/page/ambler?entry=agile_scaling_strategy_risk_based">scale up agile with RUP</a><br /><a href="http://1.bp.blogspot.com/_ey1WleypnLs/SZYhV5PtFZI/AAAAAAAAAIE/TMtdSrfeXy8/s1600-h/agile-over-rup-part-4-10+%28Medium%29.png"><img style="display:block;width:400px;cursor:pointer;height:138px;text-align:center;margin:0 auto 10px;" alt="" src="http://thomasjeffreyandersontwin.files.wordpress.com/2009/02/agile-o0181.png?w=450" border="0" /></a><span style="font-family:georgia;">Hopefully, anybody reading this will also have a better understanding of the particular project take to implementing large-scale software development projects.</span><br /><img style="display:block;width:599px;cursor:pointer;height:119px;text-align:center;margin:0 auto 10px;" alt="" src="http://thomasjeffreyandersontwin.files.wordpress.com/2009/02/agile-o0191.png?w=450" border="0" /> In my <a href="http://agileconsulting.blogspot.com/2009/02/agile-over-rup-part-2.html">Previous post</a> I mentioned that the rational unified process is slightly modified can offer good value to large-scale projects, in this submission I elaborate on some of the components of the process. </p>
<p style="font-weight:bold;">Product Lifecycle Phases and Skill-based Disciplines</p>
<p>One of the biggest differentiators of the Rational Unified Process is the way that the method uses a two-dimensional grid to categorize work into one or more <i>phases</i>, as well as a specific <i>disciplines</i> or skill sets of work.</p>
<p>The problem with many structured development processes that they categorize work along one dimension only, this dimension is usually based on skill sets. What this in effect means is that work is organized around completing requirements, then completing design, then completing development, etc. Given that the whole waterfall approach to methodology was first described as a <a href="http://en.wikipedia.org/wiki/Waterfall_model">anti-pattern</a> almost 30 years ago, it&rsquo;s surprising how often I see software development methodologies popping up that prescribe to it, especially in the management consulting world. The RUP has at least has the good sense to realize that if you&rsquo;re going to break things up by phases, then create phases based on the natural lifecycle of a product. While the RUP does categorize work into disciplines (requirements, design, etc.) the RUP explicitly states that this work from different disciplines can be conducted in parallel and that there is plenty of opportunity for the work to overlap. Furthermore, the RUP provides advice on how to break up phases into multiple iterations. <a href="http://4.bp.blogspot.com/_ey1WleypnLs/SZYcwPpnl7I/AAAAAAAAAGE/Q4BTAGwqNu4/s1600-h/agile-over-rup-part-3-1+%28Medium%29.png"><img style="display:block;width:539px;cursor:pointer;height:261px;text-align:center;margin:0 auto 10px;" alt="" src="http://thomasjeffreyandersontwin.files.wordpress.com/2009/02/agile-o0201.png?w=450" border="0" /></a> <span style="font-weight:bold;">RUP Phases</span> </p>
<p>a brief description of each of the RUP phases are as follows:</p>
<p><span style="font-weight:bold;">Inception </span><a href="http://3.bp.blogspot.com/_ey1WleypnLs/SZYcwdCReMI/AAAAAAAAAGM/xGDZtKg6i3c/s1600-h/agile-over-rup-part-3-2+%28Medium%29.png"><img style="display:block;width:185px;cursor:pointer;height:121px;text-align:center;margin:0 auto 10px;" alt="" src="http://thomasjeffreyandersontwin.files.wordpress.com/2009/02/agile-o0211.png?w=450" border="0" /></a> At the beginning of a project, there has to be a vision, a good idea that will benefit the business, and there has to be some method of generating the money. Agile doesn&rsquo;t talk about any of this, when you start an agile project, you&rsquo;re in requirements design and development. Somebody has to talk about putting together the business case, looking at the solution from an enterprise technology perspective, (should the solution is Java, or.Net, how about a package like PeopleSoft?) Stakeholders need to be lined up, and a high-level estimate of what the overall solution is going to cost needs to be put together. Someone asked all sorts think about organizational change and training. Many agile projects are doomed to failure (IMHO I don&rsquo;t have a stat of this or anything) if they don&rsquo;t spend it least a couple of weeks to a couple of months (depending on project size) working on inception. Think of <a href="http://www.ibm.com/developerworks/rational/library/4258.html">inception</a> as an<a href="http://agilesoftwaredevelopment.com/blog/cspag/iteration-zero-good-idea"> iteration zero</a> on steroids, and work is not only done by developers, although they do need to be heavily involved on the technical side. <span style="font-weight:bold;">Elaboration </span><a href="http://3.bp.blogspot.com/_ey1WleypnLs/SZYcwcAVdkI/AAAAAAAAAGU/kAE3JaVvzaE/s1600-h/agile-over-rup-part-3-3+%28Medium%29.png"><img style="display:block;width:188px;cursor:pointer;height:191px;text-align:center;margin:0 auto 10px;" alt="" src="http://thomasjeffreyandersontwin.files.wordpress.com/2009/02/agile-o0221.png?w=450" border="0" /></a> Once the team has a general idea of what they are doing, and why they&rsquo;re doing it, the RUP recommends to start the SDLC process (i.e. requirements, design, development, test, deploy) in multiple iterations focusing specifically on technical uncertainties, scary requirements, and generally anything that makes the developers &quot;stay up and shiver at night&quot;. Again, <a href="http://hubpages.com/hub/Elaboration_Phase">elaboration</a> can be looked at as the enterprise version of a combination of multiple iteration zeros<u>,</u> but supplemented with a comprehensive, planned set of <a href="http://www.extremeprogramming.org/rules/spike.html">spiking</a>. One of the fundamental pillars of RUP is that any large development project should contain a phase where<br />
a subset of a large development team can get together and experiment, prototype, and mitigate technical risk before applying a large-scale team to developing the entire solution. One interesting thing to note is that many companies adopting RUP confuse elaboration with design, in point of fact elaboration requires one or more complete iterations of requirements, design, develop, test and deploy to be considered complete. The difference between elaboration and construction is that elaboration is focused on<i> mitigating technical risk</i>. <span style="font-weight:bold;">Construction</span> <a href="http://2.bp.blogspot.com/_ey1WleypnLs/SZYcwrW_AuI/AAAAAAAAAGc/FsxGftJk_34/s1600-h/agile-over-rup-part-3-4+%28Medium%29.png"><img style="display:block;width:343px;cursor:pointer;height:125px;text-align:center;margin:0 auto 10px;" alt="" src="http://thomasjeffreyandersontwin.files.wordpress.com/2009/02/agile-o0231.png?w=450" border="0" /></a> Once the majority of technical risk or guiding a new platform, adopting some legacy code, or understanding some complex requirements have been mitigated through a number of completed development iterations. Management is supposedly able to magically deem that all architecture risk has been eliminated, and it&rsquo;s time to start a brick laying, brainless, assembly-line approach to completing the solution. Now that all risk has supernaturally disappeared, it&rsquo;s time to expand the team, and optimize the delivery approach so that is an effective, efficient manufacturing style process. (Excuse me while I laugh hysterically) As naïve as this viewpoint is to developing software is, what is even worse is that many organizations confuse construction with the phase where all software development is conducted. According to RUP construction still requires revisiting requirements, revisiting design, and of course developing and testing. The emphasis is that more development than requirements or design should take place. <span style="font-weight:bold;">Transition</span> <a href="http://3.bp.blogspot.com/_ey1WleypnLs/SZYcwt2QslI/AAAAAAAAAGk/XZUZTfA5zmQ/s1600-h/agile-over-rup-part-3-5+%28Medium%29.png"><img style="display:block;width:204px;cursor:pointer;height:103px;text-align:center;margin:0 auto 10px;" alt="" src="http://thomasjeffreyandersontwin.files.wordpress.com/2009/02/agile-o0241.png?w=450" border="0" /></a> </p>
<p>At some point in time, the solution needs to be handed over to the client. Training needs to take place, consultants need to be replaced with counterparts within the organization and the solution needs to be entrenched within the organization. This is all completely reasonable, and is something to say doesn&rsquo;t really talk about, and in my opinion probably shouldn&rsquo;t. I&rsquo;m not sure I see the value in having any SDLC try to provide advice on how to fundamentally deliver a software product to an organization, it&rsquo;s not that I find the transition phase to be incredibly important, I just think that the RUP provides extremely superficial advice, and waters down its own strong points by trying to do too much. I personally work for a <a href="http://www.deloitte.com/dtt/section_node/0,2332,sid%253D28550,00.html">consulting company</a> that has an extremely strong organizational change department. And trust me, software process geeks really have no idea on how to approach this One. Again, the biggest mistake organizations make when adopting RUP is to confuse <a href="http://hubpages.com/hub/Transition_Phase">transition</a> with testing and deployment, the two have nothing to do with each other. If anybody out there is really interested in how to tackle transition, I recommend reading the <a href="http://www.deloitte.com/dtt/article/0,1002,sid%253D19958%2526cid%253D113316,00.html">Heart of Change</a> for a start.</p>
<p><span style="font-weight:bold;">Compared to other methodologies RUP phases make sense but&#8230; </span></p>
<p>Let&rsquo;s be honest, has anybody out there actually done any development work and said &quot;hey we are done elaboration phase, it&rsquo;s time to start construction&#8230;&quot;. Well I have actually been on projects where we had a &quot;elaboration team&quot; which was responsible for putting together the architecture framework, setting up the technical foundation, and making sure that the platform was solid from a performance point of view, and could handle the various &quot;complex&quot; requirements. We then had a &quot;construction team&quot; which was scheduled to start several months after the elaboration team, which was supposed to use the &quot;common design components&quot;, patterns and other pieces that the elaboration team that put together. </p>
<p>While this sounds great on paper, the reality is that the majority of elaboration work really started once the construction team had landed, it was only when they started using the &quot;common components&quot; to implement the &quot;non-complex requirements&quot; that the elaboration team really figured out how the common components should operate. In short, software development cannot be neatly broken out into elaboration and construction phases, what I see happening is that iterations tend to start out with what appear to be largely &quot;elaboration style&quot; activities. These early iterations tend to have more experimentation, prototyping, and spiking necessary to mitigate technical risk and figuring out the intricacies of whatever new technologies are being used on the project. Subsequent iterations tend to have less and less elaboration style work and more and more construction style work. That being said, every once in a while, a drastically new requirement comes into play, or the development team figures out a new approach that can drastically improve your overall solution but requires a dramatic rethinking of the way things are being done. In short, replace the RUP construction and elaboration phases with a development phase, and plan to have a decreasing but fluctuating amount of elaboration style activities in each development iteration. </p>
<p><a href="http://3.bp.blogspot.com/_ey1WleypnLs/SZYd3HA6avI/AAAAAAAAAG0/0O9mnGhahCw/s1600-h/agile-over-rup-part-3-6+%28Medium%29.png"><img style="display:block;width:635px;cursor:pointer;height:317px;text-align:center;margin:0 auto 10px;" alt="" src="http://thomasjeffreyandersontwin.files.wordpress.com/2009/02/agile-o0251.png?w=450" border="0" /></a> In my next <a href="http://agileconsulting.blogspot.com/2009/02/agile-over-rup-part-4.html">post</a> on this topic, I complete this article by giving an overview of RUP principles and best practices and how to modify them to make them more agile. <span style="font-size:85%;color:rgb(153,0,0);font-family:Arial,Helvetica,sans-serif;"><strong></strong></span></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/thomasjeffreyandersontwin.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/thomasjeffreyandersontwin.wordpress.com/35/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/thomasjeffreyandersontwin.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/thomasjeffreyandersontwin.wordpress.com/35/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/thomasjeffreyandersontwin.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/thomasjeffreyandersontwin.wordpress.com/35/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/thomasjeffreyandersontwin.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/thomasjeffreyandersontwin.wordpress.com/35/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/thomasjeffreyandersontwin.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/thomasjeffreyandersontwin.wordpress.com/35/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/thomasjeffreyandersontwin.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/thomasjeffreyandersontwin.wordpress.com/35/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/thomasjeffreyandersontwin.wordpress.com/35/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/thomasjeffreyandersontwin.wordpress.com/35/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thomasjeffreyandersontwin.wordpress.com&amp;blog=6676985&amp;post=35&amp;subd=thomasjeffreyandersontwin&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://thomasjeffreyandersontwin.wordpress.com/2009/02/22/agile-over-rup-part-4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e6f18308bf25cdceeb7b56745e4ebcf7?s=96&#38;d=identicon" medium="image">
			<media:title type="html">thomasjeffreyandersontwin</media:title>
		</media:content>

		<media:content url="http://thomasjeffreyandersontwin.files.wordpress.com/2009/02/agile-o091.png" medium="image" />

		<media:content url="http://thomasjeffreyandersontwin.files.wordpress.com/2009/02/agile-o0101.png" medium="image" />

		<media:content url="http://thomasjeffreyandersontwin.files.wordpress.com/2009/02/agile-o0111.png" medium="image" />

		<media:content url="http://thomasjeffreyandersontwin.files.wordpress.com/2009/02/agile-o0121.png" medium="image" />

		<media:content url="http://thomasjeffreyandersontwin.files.wordpress.com/2009/02/agile-o0131.png" medium="image" />

		<media:content url="http://thomasjeffreyandersontwin.files.wordpress.com/2009/02/agile-o0141.png" medium="image" />

		<media:content url="http://thomasjeffreyandersontwin.files.wordpress.com/2009/02/agile-o0151.png" medium="image" />

		<media:content url="http://thomasjeffreyandersontwin.files.wordpress.com/2009/02/agile-o0161.png" medium="image" />

		<media:content url="http://thomasjeffreyandersontwin.files.wordpress.com/2009/02/agile-o0171.png" medium="image" />

		<media:content url="http://thomasjeffreyandersontwin.files.wordpress.com/2009/02/agile-o0181.png" medium="image" />

		<media:content url="http://thomasjeffreyandersontwin.files.wordpress.com/2009/02/agile-o0191.png" medium="image" />

		<media:content url="http://thomasjeffreyandersontwin.files.wordpress.com/2009/02/agile-o0201.png" medium="image" />

		<media:content url="http://thomasjeffreyandersontwin.files.wordpress.com/2009/02/agile-o0211.png" medium="image" />

		<media:content url="http://thomasjeffreyandersontwin.files.wordpress.com/2009/02/agile-o0221.png" medium="image" />

		<media:content url="http://thomasjeffreyandersontwin.files.wordpress.com/2009/02/agile-o0231.png" medium="image" />

		<media:content url="http://thomasjeffreyandersontwin.files.wordpress.com/2009/02/agile-o0241.png" medium="image" />

		<media:content url="http://thomasjeffreyandersontwin.files.wordpress.com/2009/02/agile-o0251.png" medium="image" />
	</item>
		<item>
		<title>Agile over RUP Part 3</title>
		<link>http://thomasjeffreyandersontwin.wordpress.com/2009/02/22/agile-over-rup-part-3/</link>
		<comments>http://thomasjeffreyandersontwin.wordpress.com/2009/02/22/agile-over-rup-part-3/#comments</comments>
		<pubDate>Sun, 22 Feb 2009 03:34:15 +0000</pubDate>
		<dc:creator>thomasjeffreyandersontwin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://thomasjeffreyandersontwin.wordpress.com/2009/02/22/16/</guid>
		<description><![CDATA[In my Previous post I mentioned that the rational unified process is slightly modified can offer good value to large-scale projects, in this submission I elaborate on some of the components of the process. Product Lifecycle Phases and Skill-based Disciplines One of the biggest differentiators of the Rational Unified Process is the way that the [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thomasjeffreyandersontwin.wordpress.com&amp;blog=6676985&amp;post=16&amp;subd=thomasjeffreyandersontwin&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>In my <a href="http://agileconsulting.blogspot.com/2009/02/agile-over-rup-part-2.html">Previous post</a> I mentioned that the rational unified process is slightly modified can offer good value to large-scale projects, in this submission I elaborate on some of the components of the process. </p>
<p style="font-weight:bold;">Product Lifecycle Phases and Skill-based Disciplines</p>
<p>One of the biggest differentiators of the Rational Unified Process is the way that the method uses a two-dimensional grid to categorize work into one or more <i>phases</i>, as well as a specific <i>disciplines</i> or skill sets of work.</p>
<p>The problem with many structured development processes that they categorize work along one dimension only, this dimension is usually based on skill sets. What this in effect means is that work is organized around completing requirements, then completing design, then completing development, etc. Given that the whole waterfall approach to methodology was first described as a <a href="http://en.wikipedia.org/wiki/Waterfall_model">anti-pattern</a> almost 30 years ago, it&rsquo;s surprising how often I see software development methodologies popping up that prescribe to it, especially in the management consulting world. The RUP has at least has the good sense to realize that if you&rsquo;re going to break things up by phases, then create phases based on the natural lifecycle of a product. While the RUP does categorize work into disciplines (requirements, design, etc.) the RUP explicitly states that this work from different disciplines can be conducted in parallel and that there is plenty of opportunity for the work to overlap. Furthermore, the RUP provides advice on how to break up phases into multiple iterations. <a href="http://4.bp.blogspot.com/_ey1WleypnLs/SZYcwPpnl7I/AAAAAAAAAGE/Q4BTAGwqNu4/s1600-h/agile-over-rup-part-3-1+%28Medium%29.png"><img style="display:block;width:539px;cursor:pointer;height:261px;text-align:center;margin:0 auto 10px;" alt="" src="http://thomasjeffreyandersontwin.files.wordpress.com/2009/02/agile-o031.png?w=450" border="0" /></a> <span style="font-weight:bold;">RUP Phases</span> </p>
<p>a brief description of each of the RUP phases are as follows:</p>
<p><span style="font-weight:bold;">Inception </span><a href="http://3.bp.blogspot.com/_ey1WleypnLs/SZYcwdCReMI/AAAAAAAAAGM/xGDZtKg6i3c/s1600-h/agile-over-rup-part-3-2+%28Medium%29.png"><img style="display:block;width:185px;cursor:pointer;height:121px;text-align:center;margin:0 auto 10px;" alt="" src="http://thomasjeffreyandersontwin.files.wordpress.com/2009/02/agile-o041.png?w=450" border="0" /></a> At the beginning of a project, there has to be a vision, a good idea that will benefit the business, and there has to be some method of generating the money. Agile doesn&rsquo;t talk about any of this, when you start an agile project, you&rsquo;re in requirements design and development. Somebody has to talk about putting together the business case, looking at the solution from an enterprise technology perspective, (should the solution is Java, or.Net, how about a package like PeopleSoft?) Stakeholders need to be lined up, and a high-level estimate of what the overall solution is going to cost needs to be put together. Someone asked all sorts think about organizational change and training. Many agile projects are doomed to failure (IMHO I don&rsquo;t have a stat of this or anything) if they don&rsquo;t spend it least a couple of weeks to a couple of months (depending on project size) working on inception. Think of <a href="http://www.ibm.com/developerworks/rational/library/4258.html">inception</a> as an<a href="http://agilesoftwaredevelopment.com/blog/cspag/iteration-zero-good-idea"> iteration zero</a> on steroids, and work is not only done by developers, although they do need to be heavily involved on the technical side. <span style="font-weight:bold;">Elaboration </span><a href="http://3.bp.blogspot.com/_ey1WleypnLs/SZYcwcAVdkI/AAAAAAAAAGU/kAE3JaVvzaE/s1600-h/agile-over-rup-part-3-3+%28Medium%29.png"><img style="display:block;width:188px;cursor:pointer;height:191px;text-align:center;margin:0 auto 10px;" alt="" src="http://thomasjeffreyandersontwin.files.wordpress.com/2009/02/agile-o051.png?w=450" border="0" /></a> Once the team has a general idea of what they are doing, and why they&rsquo;re doing it, the RUP recommends to start the SDLC process (i.e. requirements, design, development, test, deploy) in multiple iterations focusing specifically on technical uncertainties, scary requirements, and generally anything that makes the developers &quot;stay up and shiver at night&quot;. Again, <a href="http://hubpages.com/hub/Elaboration_Phase">elaboration</a> can be looked at as the enterprise version of a combination of multiple iteration zeros<u>,</u> but supplemented with a comprehensive, planned set of <a href="http://www.extremeprogramming.org/rules/spike.html">spiking</a>. One of the fundamental pillars of RUP is that any large development project should contain a phase where a subset of a large development team can get together and experiment, prototype, and mitigate technical risk before applying a large-scale team to developing the entire solution. One interesting thing to note is that many companies adopting RUP confuse elaboration with design, in point of fact elaboration requires one or more complete iterations of requirements, design, develop, test and deploy to be considered complete. The difference between elaboration and construction is that elaboration is focused on<i> mitigating technical risk</i>. <span style="font-weight:bold;">Construction</span> <a href="http://2.bp.blogspot.com/_ey1WleypnLs/SZYcwrW_AuI/AAAAAAAAAGc/FsxGftJk_34/s1600-h/agile-over-rup-part-3-4+%28Medium%29.png"><img style="display:block;width:343px;cursor:pointer;height:125px;text-align:center;margin:0 auto 10px;" alt="" src="http://thomasjeffreyandersontwin.files.wordpress.com/2009/02/agile-o061.png?w=450" border="0" /></a> Once the majority of technical risk or guiding a new platform, adopting some legacy code, or understanding some complex requirements have been mitigated through a number of completed development iterations. Management is supposedly able to magically deem that all architecture risk has been eliminated, and it&rsquo;s time to start a brick laying, brainless, assembly-line approach to completing the solution. Now that all risk has supernaturally disappeared, it&rsquo;s time to expand the team, and optimize the delivery approach so that is an effective, efficient manufacturing style process. (Excuse me while I laugh hysterically) As naïve as this viewpoint is to developing software is, what is even worse is that many organizations confuse construction with the phase where all software development is conducted. According to RUP construction still requires revisiting requirements, revisiting design, and of course developing and testing. The emphasis is that more development than requirements or design should take place. <span style="font-weight:bold;">Transition</span> <a href="http://3.bp.blogspot.com/_ey1WleypnLs/SZYcwt2QslI/AAAAAAAAAGk/XZUZTfA5zmQ/s1600-h/agile-over-rup-part-3-5+%28Medium%29.png"><img style="display:block;width:204px;cursor:pointer;height:103px;text-align:center;margin:0 auto 10px;" alt="" src="http://thomasjeffreyandersontwin.files.wordpress.com/2009/02/agile-o071.png?w=450" border="0" /></a> </p>
<p>At some point in time, the solution needs to be handed over to the client. Training needs to take place, consultants need to be replaced with counterparts within the organization and the solution needs to be entrenched within the organization. This is all completely reasonable, and is something to say doesn&rsquo;t really talk about, and in my opinion probably shouldn&rsquo;t. I&rsquo;m not sure I see the value in having any SDLC try to provide advice on how to fundamentally deliver a software product to an organization, it&rsquo;s not that I find the transition phase to be incredibly important, I just think that the RUP provides extremely superficial advice, and waters down its own strong points by trying to do too much. I personally work for a <a href="http://www.deloitte.com/dtt/section_node/0,2332,sid%253D28550,00.html">consulting company</a> that has an extremely strong organizational change department. And trust me, software process geeks really have no idea on how to approach this One. Again, the biggest mistake organizations make when adopting RUP is to confuse <a href="http://hubpages.com/hub/Transition_Phase">transition</a> with testing and deployment, the two have nothing to do with each other. If anybody out there is really interested in how to tackle transition, I recommend reading the <a href="http://www.deloitte.com/dtt/article/0,1002,sid%253D19958%2526cid%253D113316,00.html">Heart of Change</a> for a start.</p>
<p><span style="font-weight:bold;">Compared to other methodologies RUP phases make sense but&#8230; </span></p>
<p>Let&rsquo;s be honest, has anybody out there actually done any development work and said &quot;hey we are done elaboration phase, it&rsquo;s time to start construction&#8230;&quot;. Well I have actually been on projects where we had a &quot;elaboration team&quot; which was responsible for putting together the architecture framework, setting up the technical foundation, and making sure that the platform was solid from a performance point of view, and could handle the various &quot;complex&quot; requirements. We then had a &quot;construction team&quot; which was scheduled to start several months after the elaboration team, which was supposed to use the &quot;common design components&quot;, patterns and other pieces that the elaboration team that put together. </p>
<p>While this sounds great on paper, the reality is that the majority of elaboration work really started once the construction team had landed, it was only when they started using the &quot;common components&quot; to implement the &quot;non-complex requirements&quot; that the elaboration team really figured out how the common components should operate. In short, software development cannot be neatly broken out into elaboration and construction phases, what I see happening is that iterations tend to start out with what appear to be largely &quot;elaboration style&quot; activities. These early iterations tend to have more experimentation, prototyping, and spiking necessary to mitigate technical risk and figuring out the intricacies of whatever new technologies are being used on the project. Subsequent iterations tend to have less and less elaboration style work and more and more construction style work. That being said, every once in a while, a drastically new requirement comes into play, or the development team figures out a new approach that can drastically improve your overall solution but requires a dramatic rethinking of the way things are being done. In short, replace the RUP construction and elaboration phases with a development phase, and plan to have a decreasing but fluctuating amount of elaboration style activities in each development iteration. </p>
<p><a href="http://3.bp.blogspot.com/_ey1WleypnLs/SZYd3HA6avI/AAAAAAAAAG0/0O9mnGhahCw/s1600-h/agile-over-rup-part-3-6+%28Medium%29.png"><img style="display:block;width:635px;cursor:pointer;height:317px;text-align:center;margin:0 auto 10px;" alt="" src="http://thomasjeffreyandersontwin.files.wordpress.com/2009/02/agile-o081.png?w=450" border="0" /></a> In my next <a href="http://agileconsulting.blogspot.com/2009/02/agile-over-rup-part-4.html">post</a> on this topic, I complete this article by giving an overview of RUP principles and best practices and how to modify them to make them more agile. <span style="font-size:85%;color:rgb(153,0,0);font-family:Arial,Helvetica,sans-serif;"><strong></strong></span></p>
<p>The purpose of this article is to discuss my experience in leveraging agile development approaches while delivering engagements working for a consulting firm. It should be noted that most of these engagements use fixed price contracts where scope, budget and schedule are defined well advanced of any detailed work. It is my opinion, that agile approaches and tools can still offer a lot of value on these kinds of projects. </p>
<p><strong>What does it mean to develop using agile approaches?<br /></strong> While I assume that most readers are at least somewhat familiar with what it means to be agile I thought I would give a quick recap. The agile alliance defines the following manifesto: Individuals and interactions over processes and tools <em>Working software </em>over comprehensive documentation <em>Customer collaboration </em>over contract negotiation <em>Responding to change </em>over following a plan </p>
<p>The agile manifesto states that the items on the left of the statement are more important than the items on the right. However the manifesto clearly states that items on the right (including contract negotiation) still have value and are often a required part in any development project. The agile manifesto further defines a couple of key principles that one should follow in order to truly claim that one is developing using agile methods. I&rsquo;ve listed some of the most important ones below <br />1) early and continuous software delivery, with a preference towards small biweekly iterations. <br />2) acceptance and even welcoming of continually changing requirements <br />3) tight integration between the business and developers <br />4) giving motivated individuals the environment and support they need to be successful <br />5) a steady pace of software delivery that can be sustained indefinitely <br />6) face-to-face interaction is the best form of communication While many of these tenants have become accepted by the larger developer community it&rsquo;s interesting to note that agile is often considered a &quot;dirty&quot; word among professional project managers and in many classical consulting organization in general. </p>
<p><strong>fixed-price contracts: often a necessary evil when engaging with consultants<br /> </strong>In order for any client to engage the development services of a consulting firm a contract must be created outlining the scope of the work. Often this is a fixed-price contract. Consultants typically work with client project managers to create a contract for an upcoming project, estimate the work, and determine the cost of the delivery in advance of any serious requirements or design work. Reasonably detailed contracts are required upfront to specify the nature of any engagement and the overall scope of any delivery. Needless to say, this environment can be perceived as not being conducive to an &quot;agile approach&quot; and as a result there&rsquo;s a fair amount of controversy around agile approaches at the firm that I work for. </p>
<p><strong>Does an agile approach offer any benefit when following a contract model?<br /> </strong>It is the opinion of many of the manager type resources within our firm that agile and fixed-price contracts are an absolute no-no. Typically our firm expresses a clear preference for structured, sequential, delivery methods. According to many in management, a highly structured approach supported by a robust and well defined change management process is the best way to manage any contractual risks to the engagement. Furthermore, management often equates agile development with &quot;cowboy coding&quot;, and doesn&rsquo;t necessarily have the correct perception concerning the discipline required to make agile work. The problem with an overly structured approach, is typically things do change, scope does creep, and often an extensive, bureaucratic change management process only further complicates the situation. Far too often resources on the ground are asked to take up the slack. Often, the cost of change is not clearly perceived, quality begins to suffer, and the project is eventually impacted in some form or other. My own experiences have led me to believe that an agile approach is crucial to the success of any development project that contains any technical or business ambiguity. I believe this represents the majority of most development projects, especially development projects that require outside consultant help. Typically, if the project was simple and risk-free, then clients would not be hiring consultants to manage the engagement in the first place. The key to making agile work while also ensuring that the conditions of a particular contact between the consulting firm and the client are met is to make sure that agile approaches are supplemented with a suitable amount of structure that takes into account upfront pre-iterative activities such as initial planning, scoping, analysis and architecture. What is interesting to note, is that agile and structured approaches do not need to be mutually exclusive. By being a little bit more liberal when interpreting explicit activities of some of the more structured approaches one is able to adapt and extend these approaches and execute them using an iterative and agile approach. Listed below are set of best practices that have supported me well when applying agile approaches while still having to take into consideration factors such as budgeting, planning, and managing to explicit contract. </p>
<p><strong>Attempt to structure contracts so that statements of work support An iterative approach <br /></strong>It is much easier to support an iterative approach when working against contracts that are smaller in duration. My experience has led me to believe that the ideal contract length is anywhere from two to four months. If contracts are any smaller you&rsquo;ll find that you&rsquo;re spending almost all of your time doing nothing but building contracts. You will also have very little room to make up for underestimated work within a particular contract. If contracts are any larger, you begin to open yourself to greater and greater risk of underestimating a particular piece of work. Often master contracts are written for large engagements that can span several years. In this situation I found it helpful to negotiate with the client the ability to write separate requisitions of work against the master contract. These requisitions typically contain agreements for specific deliverables within a particular set of iterations. There will always be a situation where consulting firm will be forced to deliver work against a large multiyear contract. In these situations agile and iterative tools can still work to provide a internal baseline of progress and warning signals that the overall program might be in jeopardy well in advance of more typical waterfall like approaches. </p>
<p><strong>Separate statements of work in sequence of perceived risk<br /></strong> While this might seem like an obvious statement, all too often I&rsquo;ve been on contracts where statement of work have been written and executed in a typical waterfall like fashion as suggested by the order below. 1) requirements 2) design 3) implementation 4) testing This approach is a completely naïve and does not take into account what risks should be mitigated in what order on a development project. While the specific risks on any particular project will vary depending on the situation, a more realistic structure for scheduling different statements of work is shown below. 1) Project Objectives &#8211; scope, business case, high-level cost, plan and schedule, conceptual architecture, POC 2) Project Definition &#8211; release planning, architecture, greater requirement stability, high risk prototyping and reference development 3) Project Construction-development in order of risk, code testing, detailed project documentation 4) Project transition-knowledge transfer, stakeholder product acceptance I have frequently found it practical to include some degree of implementation work within each of these contracts. As an example, it is very difficult to know if the high-level conceptual architecture of the solution is feasible unless some portion of the architecture has already been implemented and proven. Frequently, it will be necessary to validate any conceptual architecture with a very simple strawman POC that ensures that all pieces of the solution are actually able to communicate with each other as intended. </p>
<p><strong>Keep documentation (especially anything that could be considered &quot;binding&quot;) at a high -level until it can be properly validated against an implementation reference<br /></strong> What this means is that requirements, domain models, architecture models, and any other project documentation that could be looked at as binding should be kept high-level and directional only until it can be verified with some kind of reference implementation. My experience has suggested that implementation has a massive effect on detailed design, almost a 100% delta on the documentation of the original solution. Where possible, I recommend keeping documentation at a high-level until a least some portion of it can be validated against a reference code base. Of course, this is not always possible and sometimes clients want documentation sooner, just be sure to communicate that all initial documentation needs to be validated with real implementation work, also make sure to be prepared to schedule the time to write the documentation at least twice. </p>
<p><strong>Validate high-risk portions of the development effort prior to committing to engaging with the larger team<br /></strong> The majority of engagements that I involve myself in all contain some degree of technical risk. Examples of this type of risk are incorrect solution behavior, poor performance, poor reliability, or inaccurate estimation. Much of this risk can be effectively mitigated by initially deploying a small team of fairly senior resources in advance of the larger team. The sole purpose of this team is to address these technical risks. A senior team can use a combination of analysis and prototyping to resolve much of the technical and business related ambiguity prior to full-blown implementation. Once the mismatch between initial estimation, risk and actual solution is understood this information can be used to create a more finely tuned plan and accurate contract for later phases of engagement. <br /><strong>Use a pure agile development process to structure how work is conducted within each development team, but organize these teams and their efforts using more prescriptive milestone-based processes.<br /></strong> Agile development approaches are great for managing development teams on a micro/medium scale. They provide tools for estimating the real-time &quot;velocity&quot; of a development team, great techniques and tools for team collaboration, and place the proper emphasis on an automated test driven development method. What agile approaches don&rsquo;t typically do is describe how to use documentation, modeling, and planning to properly scope and coordinate multiple teams with each other. In my experience the following approaches supplement agile nicely to support larger engagements, especially with a bias towards a contracting model. 1) Explicit upfront documentation of the interfaces between teams and major systems 2) prototyping, testing, and documenting architecturally significant component in detail before a larger team begins development work using a untested platform or framework 3) documenting and testing nonfunctional requirements before architecture is considered to be properly validated 4) reasonably detailed functional requirements where continual business stakeholder involvement is not guaranteed 5) executing a explicit testing phase after the iterative development cycle</p>
<p><strong>Long-term planning is still essential, even when developing using an agile approach, however planning detail should vary depending on the duration of the plan being used<br /> </strong>In point of fact, agile development requires an awful lot of planning in order to be successful. Agile planning emphasizes the use of planning at different levels of details depending on how far out the plan goes. One approach, recommended by the excellent text &quot;Agile Estimating and Planning&quot; by Michael Cohn; is to create a set of product, release and iteration plans for a particular project, each at a different level of detail. The product plan may span multiple years. The product plan describes the likely release schedule, as well as the contents and objectives of each release at a high level. Each release has a corresponding release plan. Typically, the release plan is only developed one or two months prior to the release actually been executed. The release plan defines how the release will be broken up into one or more iterations. Iteration deliverables (often called user stories, although I simply prefer the deliverables or features) are described at a high level, estimated, and allocated to a specific iteration. Iterations should be structured so that a small subset of system functionality is theoretically made available for the client to review. Each iteration is typically anywhere from two weeks to two months in duration, with a preference for the shorter side. Finally, each iteration is structured to support a more detailed activity-based iteration plan, however this planning is typically done at the beginning of the iteration or at most one iteration ahead of time. <br /><strong></strong></p>
<p><strong>Be flexible when deciding on how to adopt agile approaches<br /></strong> I found that one of the biggest inhibitors to adopting agile approaches is that agile evangelist can be somewhat overzealous/religious about agile in general. One of the interesting tenet of XP (a popular agile approach) is that &quot;one must be extreme in applying all of XP practices&quot;. In my opinion, this is pure nonsense. There are many types of project environments that can benefit from many of the practices and approaches prescribed by the agile community without having to blindly follow every single principle to the letter. The question should not be &quot;are you doing agile or not&quot;. Rather, the important question is &quot;how can agile principles and practices benefit your current work environment?&quot; As an example, many agile approaches suggest that requirements be developed using &quot;user stories&quot;, (an informal functional description of user and system behavior) and that all implementation work be based on developing code by realizing these user stories into code and allowing the common components, frameworks, and other architecture pieces to naturally evolve. This can be a very powerful approach, and I have always found that evolutionary forces have had a very beneficial impact on my architecture and design. However, larger scale systems developed in parallel by multiple teams typically require that some upfront architecture and design work be conducted. There is a middle ground where the right amount of modeling and/or documentation can be used to help direct and guide the development of one or more agile teams. Furthermore, on a project that I was recently on, the team was directed to do nothing but develop a platform and framework for an SOA solution. This meant we had actually no capability to actually create &quot;user stories&quot; per se. Does this mean that we could not follow an agile approach? Of course not. Simply by being flexible we decided to designate the client architects as our &quot;end users&quot;, and wrote user stories describing the features that are architects wanted the platform to do. We called our user stories &quot;platform deliverables&quot;, assigned story points (calling them feature points), and developed and validated them with the client architects using an iterative approach. Examples of our platform deliverables were things like &quot;Handle Service Request&quot; or &quot;Cache Service Request&quot;. The point here is that one can adapt agile approaches to a surprising number of situations, one simply needs to be flexible, creative, and willing to treat the variety of approaches and methodologies out there, both non-agile and agile as tools, rather than as a prescriptive set of processes that should be followed &quot;just because&quot;. </p>
<p>&#8230;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/thomasjeffreyandersontwin.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/thomasjeffreyandersontwin.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/thomasjeffreyandersontwin.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/thomasjeffreyandersontwin.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/thomasjeffreyandersontwin.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/thomasjeffreyandersontwin.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/thomasjeffreyandersontwin.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/thomasjeffreyandersontwin.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/thomasjeffreyandersontwin.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/thomasjeffreyandersontwin.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/thomasjeffreyandersontwin.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/thomasjeffreyandersontwin.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/thomasjeffreyandersontwin.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/thomasjeffreyandersontwin.wordpress.com/16/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thomasjeffreyandersontwin.wordpress.com&amp;blog=6676985&amp;post=16&amp;subd=thomasjeffreyandersontwin&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://thomasjeffreyandersontwin.wordpress.com/2009/02/22/agile-over-rup-part-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e6f18308bf25cdceeb7b56745e4ebcf7?s=96&#38;d=identicon" medium="image">
			<media:title type="html">thomasjeffreyandersontwin</media:title>
		</media:content>

		<media:content url="http://thomasjeffreyandersontwin.files.wordpress.com/2009/02/agile-o031.png" medium="image" />

		<media:content url="http://thomasjeffreyandersontwin.files.wordpress.com/2009/02/agile-o041.png" medium="image" />

		<media:content url="http://thomasjeffreyandersontwin.files.wordpress.com/2009/02/agile-o051.png" medium="image" />

		<media:content url="http://thomasjeffreyandersontwin.files.wordpress.com/2009/02/agile-o061.png" medium="image" />

		<media:content url="http://thomasjeffreyandersontwin.files.wordpress.com/2009/02/agile-o071.png" medium="image" />

		<media:content url="http://thomasjeffreyandersontwin.files.wordpress.com/2009/02/agile-o081.png" medium="image" />
	</item>
		<item>
		<title>Agile over RUP Part 2</title>
		<link>http://thomasjeffreyandersontwin.wordpress.com/2009/02/22/agile-over-rup-part-2/</link>
		<comments>http://thomasjeffreyandersontwin.wordpress.com/2009/02/22/agile-over-rup-part-2/#comments</comments>
		<pubDate>Sun, 22 Feb 2009 01:44:14 +0000</pubDate>
		<dc:creator>thomasjeffreyandersontwin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://thomasjeffreyandersontwin.wordpress.com/2009/02/22/8/</guid>
		<description><![CDATA[This post is a continuation of my Previous poston my preferred development approach. Reading about Agile Is Pretty Simple (which is a good thing&#8230;) In my previous post on my preferred development approach, Agile over RUP, My Preferred Development Approach I touched upon the idea that mixing Agile with a more structured methodology like the [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thomasjeffreyandersontwin.wordpress.com&amp;blog=6676985&amp;post=8&amp;subd=thomasjeffreyandersontwin&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>This post is a continuation of my <a href="http://agileconsulting.blogspot.com/2009/01/agile-over-rup-my-preferred-development.html">Previous post</a>on my preferred development approach. </p>
<p><span style="font-size:130%;">Reading about Agile Is Pretty Simple (which is a good thing&#8230;) </span></p>
<p>In my <a href="http://agileconsulting.blogspot.com/2009/01/agile-over-rup-my-preferred-development.html">previous post</a> on my preferred development approach, <a href="http://agileconsulting.blogspot.com/2009/01/agile-over-rup-my-preferred-development.html">Agile over RUP, My Preferred Development Approach</a> I touched upon the idea that mixing <a href="http://www.agilemanifesto.org/">Agile</a> with a more structured methodology like the <a href="http://www-01.ibm.com/software/awdtools/rup/?S_TACT=105AGY59&amp;S_CMP=WIKI&amp;ca=dtl-08rupsite">Rational Unified Process</a> (or the <a href="http://en.wikipedia.org/wiki/Unified_Process">unified</a> process in general) was a good way to combine what I see as a energetic, creative and real-time approach with a structured, more methodical framework that can help to organize large-scale projects.. I then went on to describe what agile means to me, and gave a summary of the agile best practices that I found useful on projects that I have been a part of. </p>
<p>In general, talking about agile is relatively straightforward. The practices are deceptively simple, and relatively easy to explain. The real difficulty in agile is in the implementation. I have probably been attempting to use &quot;agile development&quot; since early 2000, and I&rsquo;m still probably learning at an incredible rate. I doubt that this rate of learning is going to decrease anytime soon, getting agile right is actually quite hard to do, but then again so is real success. IMHO this is all about what a good process should be, really easy to read, and incredibly hard to master.</p>
<p style="font-weight:bold;">Reading about the Rational Unified Process Is Pretty Complex (Which Isn&rsquo;t a Good Thing&#8230;)</p>
<p>The Rational Unified Process, on the other hand is a fully featured software development lifecycle framework that tries to encompass all aspects of software delivery. Unfortunately this leaves consumers of RUP with the impossible task of trying to get one&rsquo;s head around a complex, dense, and sometimes contradictory piece of work.</p>
<p>It&rsquo;s important to note that the creators of RUP refer to the unified process as a <i>process</i> <i>framework</i>, meaning that the process should be customized to the particular needs of a project, program or IT organization. RUP should not be taken out of the box and applied as is.</p>
<p>The RUP framework is a complex web of disciplines, (specific skill sets, i.e. requirements, design, development, etc.) phases, (product lifecycle stages i.e. inception, construction, etc.) process groupings, processes, artifacts, templates, gating criteria, and a bunch of other detailed process material, enough to make process geeks the whole world over cackle with glee, much to the detriment of those of us who are actually trying to get some work done. Here&rsquo;s a quick picture of all the pieces of RUP, written in UML, taken from my memory</p>
<p><a href="http://1.bp.blogspot.com/_ey1WleypnLs/SZYWAFMEpkI/AAAAAAAAAFM/DI9yeMrbN_E/s1600-h/agile-over-rup-part-2-1.png"><img style="display:block;width:625px;cursor:pointer;height:239px;text-align:center;margin:0 auto 10px;" alt="" src="http://thomasjeffreyandersontwin.files.wordpress.com/2009/02/agile-o1.png?w=450" border="0" /></a> </p>
<p>So what&rsquo;s wrong with the above picture? For one, its complexity and sheer volume of information makes it incredibly difficult to actually find the <i>valuable </i>pieces of the process. Unfortunately, as of the last time I looked at the Rational Unified Process (which to be fair is ever evolving) it contained some incredibly good information (especially in the requirements and analysis and design of object-oriented systems) but there was a huge amount of process details that appear to be ad hoc, and added just to make the process complete. This seems to be a systemic problem of any detailed and &quot;comprehensive&quot; software methodology. The quality of different pieces of the process vary incredibly (the project management and testing is laughably bad), and it takes a very intimate knowledge of the process framework and some very real experience using it to determine what to use and what to completely ignore. </p>
<p>But even if all aspects of the rational unified process were of proper quality, RUP is just too complex.</p>
<p><a href="http://4.bp.blogspot.com/_ey1WleypnLs/SZYXlWoiTOI/AAAAAAAAAFc/M0dA3fFDBCs/s1600-h/agile-over-rup-part-2-2+%28Medium%29.png"><img style="display:block;width:400px;cursor:pointer;height:47px;text-align:center;margin:0 auto 10px;" alt="" src="http://thomasjeffreyandersontwin.files.wordpress.com/2009/02/agile-o0110.png?w=450" border="0" /></a> </p>
<p><span style="font-weight:bold;">But RUP Still Has Incredible Value, It Just Needs to Be Pared down a Little&#8230;</span> </p>
<p>Since RUP is a process framework, it&rsquo;s okay to actually tailor it to make it compatible with an useful style of delivery, in fact many of the fundamental pieces of RUP are completely compatible with an agile way of doing things. </p>
<p>Listed below are the portions of the rational unified process that I consider actually valuable to a software development project&#8230;</p>
<p><a href="http://4.bp.blogspot.com/_ey1WleypnLs/SZYXlaY-feI/AAAAAAAAAFk/-doSdTIm4i0/s1600-h/agile-over-rup-part-2-3+%28Medium%29.png"><img style="display:block;width:400px;cursor:pointer;height:49px;text-align:center;margin:0 auto 10px;" alt="" src="http://thomasjeffreyandersontwin.files.wordpress.com/2009/02/agile-o026.png?w=450" border="0" /></a></p>
<ul type="disc">
<li>
<p><i>phases</i> like it or not, the kind of work you do during specific iterations are going to change over the length of any project, <i>lightly</i> applying a notion of a lifecycle is a good idea</p>
<li>
<p><i>disciplines,</i> while agile projects categorized work into just a couple of roles, there really is more involved if you consider all aspects of delivery, RUP disciplines represent a reasonable way to organize the different types of work that need to be done, just be flexible in applying multiple roles to the same person</p>
<li>
<p><i>principles and best practices</i> are IMHO the most important part of the process. By tweaking the RUP best practices and principles to be a little more agile in nature, you&rsquo;re left with a solid foundation in which to base your development and delivery.</p>
<li>
<p><i>Roles </i>as stated previously, agile only has a couple of roles (e.g. <a href="http://www.mountaingoatsoftware.com/product-owner">Product Owner</a>, <a href="http://www.mountaingoatsoftware.com/scrummaster">Scrum Master</a>, <a href="http://www.mountaingoatsoftware.com/scrum-team">Developer</a>) I personally like to see this list expanded, as long as everyone is clear that each single role does not equal one person, <i>each person needs to fulfill many different roles</i>.</p>
<li>
<p><i>Discipline Oriented Guidelines</i> where many software development processes fail is that they offer either too little advice, or offer to much and present this advice as <i>standards that must be followed. </i>Detailed process material should be represented as a suite of advice, patterns, and lessons learned based on real project experience. Above all this detailed process work needs to be presented as accelerators that <i>can</i> <i>but don&rsquo;t have to be</i> used. I think it&rsquo;s also okay to base guidance on the work of established authors, but make sure you test the waters on a real project before socializing the guidance across different project teams. So far, I have based my guidance, and implemented real projects, on work presented by the following authors, of course this is a continuing work in progress&#8230;</p>
<ul type="disc">
<li>
<p><a href="http://alistair.cockburn.us/">Alastair Cockburn</a> (<a href="http://www.amazon.com/Patterns-Effective-Cases-Software-Development/dp/0201721848">Patterns for Effective Use Cases</a>)</p>
<li>
<p><a href="http://www.domainlanguage.com/about/ericevans.html">Eric Evans</a> (<a href="http://domaindrivendesign.org/index.htm">Domain Driven Design</a>)</p>
<li>
<p><a href="http://blog.mountaingoatsoftware.com/">Michael Cohn</a> (<a href="http://www.amazon.com/Agile-Estimating-Planning-Robert-Martin/dp/0131479415">Agile Estimating and Planning</a>)</p>
<li>
<p><a href="http://www.ambysoft.com/scottAmbler.html">Scott Ambler</a> (<a href="http://www.agilemodeling.com/">Agile Modeling Method</a>)</p>
<li>
<p><a href="http://www.threeriversinstitute.org/Kent%20Beck.htm">Kent Beck</a> (<a href="http://www.amazon.com/Implementation-Patterns-Addison-Wesley-Signature-Kent/dp/0321413091">Implementation Patterns</a> and <a href="http://www.amazon.com/Test-Driven-Development-Addison-Wesley-Signature/dp/0321146530">Test Driven Development</a>)</p>
<li>
<p>and a whole bunch of other stuff&#8230;</p>
</li>
</ul>
</li>
</ul>
<p>Please refer to <a href="http://agileconsulting.blogspot.com/2009/02/agile-over-rup-part-3.html">Part 3</a> of this post for further details of other valuable components of RUP </p>
<p>The purpose of this article is to discuss my experience in leveraging agile development approaches while delivering engagements working for a consulting firm. It should be noted that most of these engagements use fixed price contracts where scope, budget and schedule are defined well advanced of any detailed work. It is my opinion, that agile approaches and tools can still offer a lot of value on these kinds of projects. </p>
<p><strong>What does it mean to develop using agile approaches?<br /></strong> While I assume that most readers are at least somewhat familiar with what it means to be agile I thought I would give a quick recap. The agile alliance defines the following manifesto: Individuals and interactions over processes and tools <em>Working software </em>over comprehensive documentation <em>Customer collaboration </em>over contract negotiation <em>Responding to change </em>over following a plan </p>
<p>The agile manifesto states that the items on the left of the statement are more important than the items on the right. However the manifesto clearly states that items on the right (including contract negotiation) still have value and are often a required part in any development project. The agile manifesto further defines a couple of key principles that one should follow in order to truly claim that one is developing using agile methods. I&rsquo;ve listed some of the most important ones below <br />1) early and continuous software delivery, with a preference towards small biweekly iterations. <br />2) acceptance and even welcoming of continually changing requirements <br />3) tight integration between the business and developers <br />4) giving motivated individuals the environment and support they need to be successful <br />5) a steady pace of software delivery that can be sustained indefinitely <br />6) face-to-face interaction is the best form of communication While many of these tenants have become accepted by the larger developer community it&rsquo;s interesting to note that agile is often considered a &quot;dirty&quot; word among professional project managers and in many classical consulting organization in general. </p>
<p><strong>fixed-price contracts: often a necessary evil when engaging with consultants<br /> </strong>In order for any client to engage the development services of a consulting firm a contract must be created outlining the scope of the work. Often this is a fixed-price contract. Consultants typically work with client project managers to create a contract for an upcoming project, estimate the work, and determine the cost of the delivery in advance of any serious requirements or design work. Reasonably detailed contracts are required upfront to specify the nature of any engagement and the overall scope of any delivery. Needless to say, this environment can be perceived as not being conducive to an &quot;agile approach&quot; and as a result there&rsquo;s a fair amount of controversy around agile approaches at the firm that I work for. </p>
<p><strong>Does an agile approach offer any benefit when following a contract model?<br /> </strong>It is the opinion of many of the manager type resources within our firm that agile and fixed-price contracts are an absolute no-no. Typically our firm expresses a clear preference for structured, sequential, delivery methods. According to many in management, a highly structured approach supported by a robust and well defined change management process is the best way to manage any contractual risks to the engagement. Furthermore, management often equates agile development with &quot;cowboy coding&quot;, and doesn&rsquo;t necessarily have the correct perception concerning the discipline required to make agile work. The problem with an overly structured approach, is typically things do change, scope does creep, and often an extensive, bureaucratic change management process only further complicates the situation. Far too often resources on the ground are asked to take up the slack. Often, the cost of change is not clearly perceived, quality begins to suffer, and the project is eventually impacted in some form or other. My own experiences have led me to believe that an agile approach is crucial to the success of any development project that contains any technical or business ambiguity. I believe this represents the majority of most development projects, especially development projects that require outside consultant help. Typically, if the project was simple and risk-free, then clients would not be hiring consultants to manage the engagement in the first place. The key to making agile work while also ensuring that the conditions of a particular contact between the consulting firm and the client are met is to make sure that agile approaches are supplemented with a suitable amount of structure that takes into account upfront pre-iterative activities such as initial planning, scoping, analysis and architecture. What is interesting to note, is that agile and structured approaches do not need to be mutually exclusive. By being a little bit more liberal when interpreting explicit activities of some of the more structured approaches one is able to adapt and extend these approaches and execute them using an iterative and agile approach. Listed below are set of best practices that have supported me well when applying agile approaches while still having to take into consideration factors such as budgeting, planning, and managing to explicit contract. </p>
<p><strong>Attempt to structure contracts so that statements of work support An iterative approach <br /></strong>It is much easier to support an iterative approach when working against contracts that are smaller in duration. My experience has led me to believe that the ideal contract length is anywhere from two to four months. If contracts are any smaller you&rsquo;ll find that you&rsquo;re spending almost all of your time doing nothing but building contracts. You will also have very little room to make up for underestimated work within a particular contract. If contracts are any larger, you begin to open yourself to greater and greater risk of underestimating a particular piece of work. Often master contracts are written for large engagements that can span several years. In this situation I found it helpful to negotiate with the client the ability to write separate requisitions of work against the master contract. These requisitions typically contain agreements for specific deliverables within a particular set of iterations. There will always be a situation where consulting firm will be forced to deliver work against a large multiyear contract. In these situations agile and iterative tools can still work to provide a internal baseline of progress and warning signals that the overall program might be in jeopardy well in advance of more typical waterfall like approaches. </p>
<p><strong>Separate statements of work in sequence of perceived risk<br /></strong> While this might seem like an obvious statement, all too often I&rsquo;ve been on contracts where statement of work have been written and executed in a typical waterfall like fashion as suggested by the order below. 1) requirements 2) design 3) implementation 4) testing This approach is a completely naïve and does not take into account what risks should be mitigated in what order on a development project. While the specific risks on any particular project will vary depending on the situation, a more realistic structure for scheduling different statements of work is shown below. 1) Project Objectives &#8211; scope, business case, high-level cost, plan and schedule, conceptual architecture, POC 2) Project Definition &#8211; release planning, architecture, greater requirement stability, high risk prototyping and reference development 3) Project Construction-development in order of risk, code testing, detailed project documentation 4) Project transition-knowledge transfer, stakeholder product acceptance I have frequently found it practical to include some degree of implementation work within each of these contracts. As an example, it is very difficult to know if the high-level conceptual architecture of the solution is feasible unless some portion of the architecture has already been implemented and proven. Frequently, it will be necessary to validate any conceptual architecture with a very simple strawman POC that ensures that all pieces of the solution are actually able to communicate with each other as intended. </p>
<p><strong>Keep documentation (especially anything that could be considered &quot;binding&quot;) at a high -level until it can be properly validated against an implementation reference<br /></strong> What this means is that requirements, domain models, architecture models, and any other project documentation that could be looked at as binding should be kept high-level and directional only until it can be verified with some kind of reference implementation. My experience has suggested that implementation has a massive effect on detailed design, almost a 100% delta on the documentation of the original solution. Where possible, I recommend keeping documentation at a high-level until a least some portion of it can be validated against a reference code base. Of course, this is not always possible and sometimes clients want documentation sooner, just be sure to communicate that all initial documentation needs to be validated with real implementation work, also make sure to be prepared to schedule the time to write the documentation at least twice. </p>
<p><strong>Validate high-risk portions of the development effort prior to committing to engaging with the larger team<br /></strong> The majority of engagements that I involve myself in all contain some degree of technical risk. Examples of this type of risk are incorrect solution behavior, poor performance, poor reliability, or inaccurate estimation. Much of this risk can be effectively mitigated by initially deploying a small team of fairly senior resources in advance of the larger team. The sole purpose of this team is to address these technical risks. A senior team can use a combination of analysis and prototyping to resolve much of the technical and business related ambiguity prior to full-blown implementation. Once the mismatch between initial estimation, risk and actual solution is understood this information can be used to create a more finely tuned plan and accurate contract for later phases of engagement. <br /><strong>Use a pure agile development process to structure how work is conducted within each development team, but organize these teams and their efforts using more prescriptive milestone-based processes.<br /></strong> Agile development approaches are great for managing development teams on a micro/medium scale. They provide tools for estimating the real-time &quot;velocity&quot; of a development team, great techniques and tools for team collaboration, and place the proper emphasis on an automated test driven development method. What agile approaches don&rsquo;t typically do is describe how to use documentation, modeling, and planning to properly scope and coordinate multiple teams with each other. In my experience the following approaches supplement agile nicely to support larger engagements, especially with a bias towards a contracting model. 1) Explicit upfront documentation of the interfaces between teams and major systems 2) prototyping, testing, and documenting architecturally significant component in detail before a larger team begins development work using a untested platform or framework 3) documenting and testing nonfunctional requirements before architecture is considered to be properly validated 4) reasonably detailed functional requirements where continual business stakeholder involvement is not guaranteed 5) executing a explicit testing phase after the iterative development cycle</p>
<p><strong>Long-term planning is still essential, even when developing using an agile approach, however planning detail should vary depending on the duration of the plan being used<br /> </strong>In point of fact, agile development requires an awful lot of planning in order to be successful. Agile planning emphasizes the use of planning at different levels of details depending on how far out the plan goes. One approach, recommended by the excellent text &quot;Agile Estimating and Planning&quot; by Michael Cohn; is to create a set of product, release and iteration plans for a particular project, each at a different level of detail. The product plan may span multiple years. The product plan describes the likely release schedule, as well as the contents and objectives of each release at a high level. Each release has a corresponding release plan. Typically, the release plan is only developed one or two months prior to the release actually been executed. The release plan defines how the release will be broken up into one or more iterations. Iteration deliverables (often called user stories, although I simply prefer the deliverables or features) are described at a high level, estimated, and allocated to a specific iteration. Iterations should be structured so that a small subset of system functionality is theoretically made available for the client to review. Each iteration is typically anywhere from two weeks to two months in duration, with a preference for the shorter side. Finally, each iteration is structured to support a more detailed activity-based iteration plan, however this planning is typically done at the beginning of the iteration or at most one iteration ahead of time. <br /><strong></strong></p>
<p><strong>Be flexible when deciding on how to adopt agile approaches<br /></strong> I found that one of the biggest inhibitors to adopting agile approaches is that agile evangelist can be somewhat overzealous/religious about agile in general. One of the interesting tenet of XP (a popular agile approach) is that &quot;one must be extreme in applying all of XP practices&quot;. In my opinion, this is pure nonsense. There are many types of project environments that can benefit from many of the practices and approaches prescribed by the agile community without having to blindly follow every single principle to the letter. The question should not be &quot;are you doing agile or not&quot;. Rather, the important question is &quot;how can agile principles and practices benefit your current work environment?&quot; As an example, many agile approaches suggest that requirements be developed using &quot;user stories&quot;, (an informal functional description of user and system behavior) and that all implementation work be based on developing code by realizing these user stories into code and allowing the common components, frameworks, and other architecture pieces to naturally evolve. This can be a very powerful approach, and I have always found that evolutionary forces have had a very beneficial impact on my architecture and design. However, larger scale systems developed in parallel by multiple teams typically require that some upfront architecture and design work be conducted. There is a middle ground where the right amount of modeling and/or documentation can be used to help direct and guide the development of one or more agile teams. Furthermore, on a project that I was recently on, the team was directed to do nothing but develop a platform and framework for an SOA solution. This meant we had actually no capability to actually create &quot;user stories&quot; per se. Does this mean that we could not follow an agile approach? Of course not. Simply by being flexible we decided to designate the client architects as our &quot;end users&quot;, and wrote user stories describing the features that are architects wanted the platform to do. We called our user stories &quot;platform deliverables&quot;, assigned story points (calling them feature points), and developed and validated them with the client architects using an iterative approach. Examples of our platform deliverables were things like &quot;Handle Service Request&quot; or &quot;Cache Service Request&quot;. The point here is that one can adapt agile approaches to a surprising number of situations, one simply needs to be flexible, creative, and willing to treat the variety of approaches and methodologies out there, both non-agile and agile as tools, rather than as a prescriptive set of processes that should be followed &quot;just because&quot;. </p>
<p>&#8230;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/thomasjeffreyandersontwin.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/thomasjeffreyandersontwin.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/thomasjeffreyandersontwin.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/thomasjeffreyandersontwin.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/thomasjeffreyandersontwin.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/thomasjeffreyandersontwin.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/thomasjeffreyandersontwin.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/thomasjeffreyandersontwin.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/thomasjeffreyandersontwin.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/thomasjeffreyandersontwin.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/thomasjeffreyandersontwin.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/thomasjeffreyandersontwin.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/thomasjeffreyandersontwin.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/thomasjeffreyandersontwin.wordpress.com/8/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thomasjeffreyandersontwin.wordpress.com&amp;blog=6676985&amp;post=8&amp;subd=thomasjeffreyandersontwin&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://thomasjeffreyandersontwin.wordpress.com/2009/02/22/agile-over-rup-part-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e6f18308bf25cdceeb7b56745e4ebcf7?s=96&#38;d=identicon" medium="image">
			<media:title type="html">thomasjeffreyandersontwin</media:title>
		</media:content>

		<media:content url="http://thomasjeffreyandersontwin.files.wordpress.com/2009/02/agile-o1.png" medium="image" />

		<media:content url="http://thomasjeffreyandersontwin.files.wordpress.com/2009/02/agile-o0110.png" medium="image" />

		<media:content url="http://thomasjeffreyandersontwin.files.wordpress.com/2009/02/agile-o026.png" medium="image" />
	</item>
		<item>
		<title>Agile over RUP Part 1, My Preferred Development Approach</title>
		<link>http://thomasjeffreyandersontwin.wordpress.com/2009/02/22/agile-over-rup-part-1-my-preferred-development-approach/</link>
		<comments>http://thomasjeffreyandersontwin.wordpress.com/2009/02/22/agile-over-rup-part-1-my-preferred-development-approach/#comments</comments>
		<pubDate>Sun, 22 Feb 2009 01:39:25 +0000</pubDate>
		<dc:creator>thomasjeffreyandersontwin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://thomasjeffreyandersontwin.wordpress.com/2009/02/22/agile-over-rup-part-1-my-preferred-development-approach/</guid>
		<description><![CDATA[In this post I thought I would describe my delivery approach of choice, in a brief, and (hopefully) understandable format. As anybody who knows me can attest, I&#8217;m a big fan of agile development. That being said, I don&#8217;t believe that agile alone is typically sufficient for me to successfully run all software delivery engagements. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thomasjeffreyandersontwin.wordpress.com&amp;blog=6676985&amp;post=3&amp;subd=thomasjeffreyandersontwin&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>In this post I thought I would describe my delivery approach of choice, in a brief, and (hopefully) understandable format. As anybody who knows me can attest, I&rsquo;m a big fan of agile development. That being said, I don&rsquo;t believe that agile alone is typically sufficient for me to successfully run all software delivery engagements. Although I always tweak the delivery approach I take to suit the conditions of a particular project, I frequently have relied on a combination of agile delivery combined with elements of the rational unified process (RUP). In a nutshell, the delivery approach I typically recommend for myself and my clients can be described as agile over RUP.&nbsp; <a href="http://1.bp.blogspot.com/_ey1WleypnLs/SWAT1qC8c9I/AAAAAAAAAC8/_MP8o7oVmJM/s1600-h/Agile+over+rup.jpg"><img style="display:block;width:400px;cursor:pointer;height:237px;text-align:center;margin:0 auto 10px;" alt="" src="http://1.bp.blogspot.com/_ey1WleypnLs/SWAT1qC8c9I/AAAAAAAAAC8/_MP8o7oVmJM/s400/Agile+over+rup.jpg" border="0" /></a> <span style="font-weight:bold;font-size:130%;">What does agile mean to me?</span> I have seen number different descriptions of what agile software delivery is and what it means to different people. The one that resonates the most with me describes agile development as: 1) a set of software development principles that emphasize: </p>
<ul>
<li>individuals over process and tools</li>
<li>working software over documentation</li>
<li>collaboration over contracts</li>
<li>responding to change over following the plan </li>
</ul>
<p><a href="http://4.bp.blogspot.com/_ey1WleypnLs/SWAT1nLj6qI/AAAAAAAAADE/lq4D6ZTU5Ww/s1600-h/Agile+principles.jpg"><img style="display:block;width:400px;cursor:pointer;height:230px;text-align:center;margin:0 auto 10px;" alt="" src="http://4.bp.blogspot.com/_ey1WleypnLs/SWAT1nLj6qI/AAAAAAAAADE/lq4D6ZTU5Ww/s400/Agile+principles.jpg" border="0" /></a> </p>
<p>2) a set of complementary best practices that support these principles and are</p>
<ul style="margin-top:0;" type="disc">
<li class="MsoNormal">collaborative
<li class="MsoNormal">lightweight
<li class="MsoNormal">simple</li>
</ul>
<p><a href="http://2.bp.blogspot.com/_ey1WleypnLs/SWAXJWm6HQI/AAAAAAAAAEU/9k1IRYHU0o8/s1600-h/Agile+best+practices+1.jpg"><img style="display:block;width:435px;cursor:pointer;height:263px;text-align:center;margin:0 auto 10px;" alt="" src="http://2.bp.blogspot.com/_ey1WleypnLs/SWAXJWm6HQI/AAAAAAAAAEU/9k1IRYHU0o8/s400/Agile+best+practices+1.jpg" border="0" /></a> <span>Note the </span><span>&quot;</span><span style="font-style:italic;">collection of complementary best practices</span>&quot; part of this definition, this is important (IMHO). In my experience agile is not something that is &quot;done&quot; or &quot;not done&quot;.<span> </span>I&rsquo;ve never understood the comment &quot;we are doing agile delivery&quot; or alternatively that team &quot;isn&rsquo;t doing agile&quot;. Rather agile is something that can be applied to any development engagement on a graduated, practice by practice basis.<i> </i>When taken in isolation an individual agile best practice can still add value to a software development project.<span> </span>However, when an agile best practice is combined with and complemented with other agile best practices, there is a potential to provide an <b>exponential </b>amounts of value to the project. <a href="http://3.bp.blogspot.com/_ey1WleypnLs/SWAUF_aVWXI/AAAAAAAAADU/DGgSBI_nzFA/s1600-h/Agile+value.jpg"><img style="display:block;width:400px;cursor:pointer;height:232px;text-align:center;margin:0 auto 10px;" alt="" src="http://3.bp.blogspot.com/_ey1WleypnLs/SWAUF_aVWXI/AAAAAAAAADU/DGgSBI_nzFA/s400/Agile+value.jpg" border="0" /></a><a href="http://3.bp.blogspot.com/_ey1WleypnLs/SV_xZB1BXeI/AAAAAAAAACM/TnM5cyHGTW8/s1600-h/Agile+value.jpg"></a> <a href="http://3.bp.blogspot.com/_ey1WleypnLs/SV_vTiULBRI/AAAAAAAAAB0/X2Q2YY2HOd0/s1600-h/Agile+best+practices+2.jpg"></a>These agile best practices come from a number of different but complementary agile &quot;methodologies&quot;.<span> </span>Examples of these methodologies include SCRUM, XP, Crystal-Clear and the Agile Modeling Method. Increasingly, there is growing industry evidence that many organizations are selecting these best practices à la cart, rather than choosing a specific methodology and following it in its pure form.<span> </span>This is an approach that I follow, and it&rsquo;s one that I recommend&#8230; Here is a brief list of the agile best practices that have provided value to delivery engagements I have been a part of in the past&#8230; <span style="font-size:100%;"><span style="font-weight:bold;">Test Driven Development</span></span> </p>
<p><a href="http://4.bp.blogspot.com/_ey1WleypnLs/SWAZOw2WMeI/AAAAAAAAAE8/Q_XLs4W9nZY/s1600-h/test+driven+development.jpg"><img style="display:block;width:246px;cursor:pointer;height:94px;text-align:center;margin:0 auto 10px;" alt="" src="http://4.bp.blogspot.com/_ey1WleypnLs/SWAZOw2WMeI/AAAAAAAAAE8/Q_XLs4W9nZY/s400/test+driven+development.jpg" border="0" /></a> <b></b></p>
<p><span style="color:black;">Test driven development is a development technique where test cases are written first, then the code necessary to pass the tests is implemented, and finally the software is refactored to accommodate changes. The availability of tests before actual development ensures rapid feedback after any change.<span> </span>&quot;Refactoring&quot; source code means modifying it without changing its behavior, and is sometimes informally referred to as &quot;cleaning it up&quot;. Refactoring improves the understandability of the code and changes its internal structure and design, and removes dead code, to make it easier to comprehend, more maintainable and amenable to change. <span></span>Many of the other tenets of agile development (like evolutionary design, responding to change, etc.) start to fall apart if application code is not supported by a robust and well thought out automated testing framework and periodic refactoring cycles.</span></p>
<p><span style="font-size:100%;"><span style="font-weight:bold;">Iterative Development</span></span> </p>
<p><a href="http://1.bp.blogspot.com/_ey1WleypnLs/SWAVDrCcOkI/AAAAAAAAAEM/mGLG2PcVu20/s1600-h/iterative+development.jpg"><img style="display:block;width:153px;cursor:pointer;height:96px;text-align:center;margin:0 auto 10px;" alt="" src="http://1.bp.blogspot.com/_ey1WleypnLs/SWAVDrCcOkI/AAAAAAAAAEM/mGLG2PcVu20/s400/iterative+development.jpg" border="0" /></a> </p>
<p><span style="color:black;">Another core best practice essential to effective agile delivery is the delivery of working software using a just-in-time assembly model where potentially shippable software is created at the end of each iteration. The first step in iterative development is to create a upfront but simple plan for the implementation effort as a whole, estimating and scheduling work into iterations of equal length ranging from one week to one month.<span> </span>At the beginning of each iteration a more detailed version of the plan is developed, scheduled work is completed, working code is presented to the business, progress is measured, and the plan is adjusted as necessary. For iterative development to truly work, software must be thought of as being potentially shippable at the end of each iteration.<span> </span>Work must also be focused on delivering real business value to the business, rather than developer &quot;gold plating&quot;.<span> </span>Finally, estimates and planning needs to be done by the resources were actually going to do the work.</span></p>
<p><span style="font-weight:bold;">Daily Standup Meetings</span><a href="http://1.bp.blogspot.com/_ey1WleypnLs/SWAVDktAzoI/AAAAAAAAAEE/AagEnwv7J14/s1600-h/daily+standups.jpg"><img style="display:block;width:118px;cursor:pointer;height:103px;text-align:center;margin:0 auto 10px;" alt="" src="http://1.bp.blogspot.com/_ey1WleypnLs/SWAVDktAzoI/AAAAAAAAAEE/AagEnwv7J14/s400/daily+standups.jpg" border="0" /></a> <span style="color:black;">Daily Standup Meetings is a core agile practice that requires a very little effort to run successfully.<span> </span>Communication among the entire team is the purpose of the daily standup meeting. A stand up meeting every morning is used to communicate problems, solutions, and promote team focus. Everyone stands up in a circle to avoid long discussions. It is more efficient to have one short meeting that every one is required to attend than many meetings with a few developers each.<span> </span>Organization and involvement of all levels of team members is encouraged by requiring each member to specify what they plan to accomplish the day before, what they actually accomplish, what they plan to accomplish today, and what, if anything is preventing them from being successful. On large-scale projects, hold &quot;super daily standups&quot; once a day to coordinate work across different teams.<span> </span>This super daily standup should be attended by one representative from each separate team. <span style="font-weight:bold;">Continuous Integration</span><span> </span></span></p>
<h4></h4>
<p><a href="http://2.bp.blogspot.com/_ey1WleypnLs/SWAVDc_GC0I/AAAAAAAAAD8/IZLl3OXYGbg/s1600-h/continous+integration.jpg"><img style="display:block;width:321px;cursor:pointer;height:173px;text-align:center;margin:0 auto 10px;" alt="" src="http://2.bp.blogspot.com/_ey1WleypnLs/SWAVDc_GC0I/AAAAAAAAAD8/IZLl3OXYGbg/s400/continous+integration.jpg" border="0" /></a> <span style="color:black;">Continuous Integration is a software development practice where members of a team integrate their work frequently, usually each person integrates at least daily &#8211; leading to multiple integrations per day. Each integration is verified by an automated build (including tests) to detect integration errors as quickly as possible. Many teams find that this approach leads to significantly reduced integration problems and allows a team to develop cohesive software more rapidly. <span style="font-weight:bold;">Common Coding Standards And Self Describing Code</span></span> </p>
<h4><span style="font-size:100%;" class="mw-headline"><u></u></span><u></u></h4>
<p><a href="http://2.bp.blogspot.com/_ey1WleypnLs/SWAZ4Xl-mhI/AAAAAAAAAFE/cWSisUtNvo0/s1600-h/self+describing+code.jpg"><img style="display:block;width:278px;cursor:pointer;height:97px;text-align:center;margin:0 auto 10px;" alt="" src="http://2.bp.blogspot.com/_ey1WleypnLs/SWAZ4Xl-mhI/AAAAAAAAAFE/cWSisUtNvo0/s400/self+describing+code.jpg" border="0" /></a> </p>
<p><span style="color:black;">Coding standards tells developers how they must write their code. Instead of each developer coding in their own preferred style, they will write all code to a common standards. This makes sure that a large project is coded in a consistent style &#8212; parts are not written differently by different programmers. Not only does this solution make the code easier to understand, it also ensures that any developer who looks at the code will know what to expect throughout the entire application.<span> </span>A typical supplementary best practice is to employ <i>Self Describing Code</i>, a set of coding conventions with the intent of making code a self-documenting artifact. Specific implementation patterns can be followed to ensure that code is developed with readability as a primary consideration, in effect reducing the need for code comments, supporting documentation, and other artifacts which may not always be kept up to date with production code. </span></p>
<p><span style="font-weight:bold;">Collective Code Ownership</span> </p>
<h4></h4>
<h4><a href="http://2.bp.blogspot.com/_ey1WleypnLs/SWAUGZP6L1I/AAAAAAAAADs/GiZjXFhIZ_Y/s1600-h/collective+code+ownership.jpg"><img style="display:block;width:194px;cursor:pointer;height:127px;text-align:center;margin:0 auto 10px;" alt="" src="http://2.bp.blogspot.com/_ey1WleypnLs/SWAUGZP6L1I/AAAAAAAAADs/GiZjXFhIZ_Y/s400/collective+code+ownership.jpg" border="0" /></a></h4>
<p><span style="color:black;">Encourages every developer to contribute new ideas to all segments of the project. Any developer can change any line of code to add functionality, fix bugs, or refactor. Collective code ownership helps to mitigate the eventual transfer of resources from a particular project. This practice has been cited as being much more effective than conventional approaches such as code documentation, code walk-throughs and other knowledge transfer mechanisms.</span></p>
<p><span style="font-weight:bold;">Sustainable Pace </span></p>
<h4></h4>
<p><a href="http://4.bp.blogspot.com/_ey1WleypnLs/SWAXJ7uCKvI/AAAAAAAAAEs/0yu6MaFrEWQ/s1600-h/sustained+pace.jpg"><img style="display:block;width:158px;cursor:pointer;height:161px;text-align:center;margin:0 auto 10px;" alt="" src="http://4.bp.blogspot.com/_ey1WleypnLs/SWAXJ7uCKvI/AAAAAAAAAEs/0yu6MaFrEWQ/s400/sustained+pace.jpg" border="0" /></a> <span style="color:black;">This best practice simply states that developers are much more effective at delivering high-quality code when they are put under the &quot;right&quot; amount of stress to perform. I.e. they are well rested, enthusiastic, and able to look at a problem with a fresh eye. This needs to be balanced with reasonably short term objectives, and a consistent and continual need to produce real results within a relatively short time. (I.e. a specific iteration) <span style="font-weight:bold;">Collaborative Modeling</span></span> <a href="http://3.bp.blogspot.com/_ey1WleypnLs/SWAXJlQufoI/AAAAAAAAAEc/9AcGkeHmjCk/s1600-h/modeling.jpg"><img style="display:block;width:199px;cursor:pointer;height:162px;text-align:center;margin:0 auto 10px;" alt="" src="http://3.bp.blogspot.com/_ey1WleypnLs/SWAXJlQufoI/AAAAAAAAAEc/9AcGkeHmjCk/s400/modeling.jpg" border="0" /></a> </p>
<p><span style="color:black;">Collaborative Modeling involves the use of simple and accessible tools to develop low fidelity, often throw away models of software that is to be built. The use of simple tools like index cards, whiteboards, and sticky notes allows for non-technical resources (i.e. the business) to actively partake in modeling HUP solution. Collaborative modeling calls for business users to actively engage and own any models that are developed to help guide the development. </span></p>
<p><span style="color:black;">An excellent example of collaborative modeling (one espoused by XP) are CRC cards (Class Responsibility Collaborator).<span> </span>CRC cards allow developers to create a low fidelity, object-oriented model.<span> </span>CRC models are created by laying out a set of index cards on a table or particle board, and labeling one or more of these cards with a major concept (a class) that needs to be represented in the software. Examples can include long-lived information such as a Student, an Account, or an Address. More temporary concepts can also be represented such as a ShoppingCart, or a RateCalculation. Using CRC modeling techniques facilitate a collaborative modeling atmosphere, one in which both business and technical resources can engage in.</span></p>
<p><span style="font-weight:bold;">Co-Located Teams</span> </p>
<p><a href="http://1.bp.blogspot.com/_ey1WleypnLs/SWAVDa-BDpI/AAAAAAAAAD0/el6ISHpUZ4w/s1600-h/colocated+teams.jpg"><img style="display:block;width:203px;cursor:pointer;height:134px;text-align:center;margin:0 auto 10px;" alt="" src="http://1.bp.blogspot.com/_ey1WleypnLs/SWAVDa-BDpI/AAAAAAAAAD0/el6ISHpUZ4w/s400/colocated+teams.jpg" border="0" /></a> </p>
<p><span style="color:black;">it is hard to overemphasize the amount of waste that is created by placing members of the same team in different locations.<span> </span>This should seem like a no-brainer, but the reality is many organizations really struggle with getting their team members into the same room for the duration of a project. Co-locating teams drastically reduces the need for official meetings, just go to the room where the work is being done, and resolve the issue. There is also a huge amount of information being simply from overhearing the conversation of others.<span> </span>On large-scale projects, organize teams to minimize the dependencies between teams and then make sure each team is in one room.</span></p>
<p><span style="font-weight:bold;">Retrospectives</span> </p>
<p><a href="http://1.bp.blogspot.com/_ey1WleypnLs/SWAUGJJKLAI/AAAAAAAAADk/zWVBDY4Smeo/s1600-h/close+inspection.jpg"><img style="display:block;width:208px;cursor:pointer;height:133px;text-align:center;margin:0 auto 10px;" alt="" src="http://1.bp.blogspot.com/_ey1WleypnLs/SWAUGJJKLAI/AAAAAAAAADk/zWVBDY4Smeo/s400/close+inspection.jpg" border="0" /></a> </p>
<p><span style="color:black;">While a set of best practices may look great on paper, the reality is that any best practice (even the ones described above) will require considerable refinement and adaption to the actual environment where the project is taking place.<span> </span>Retrospectives are short meetings held by the entire team at the end of every iteration.<span> </span>Retrospectives allow the team to add any best practices or processes that can help with the delivery of software, and remove one&rsquo;s that are getting in the way.<span> </span>Lessons learned are incorporated into the approach, and allow the team to continually improve over the duration of the project.<span> </span>Retrospectives are another essential agile best practice (IMHO) but one that is easy to implement.</span></p>
<p><span style="font-weight:bold;">Pair Programming</span> </p>
<p><a href="http://3.bp.blogspot.com/_ey1WleypnLs/SWAXJxrhXdI/AAAAAAAAAEk/QgCponjjJv4/s1600-h/pair+programing.jpg"><img style="display:block;width:162px;cursor:pointer;height:160px;text-align:center;margin:0 auto 10px;" alt="" src="http://3.bp.blogspot.com/_ey1WleypnLs/SWAXJxrhXdI/AAAAAAAAAEk/QgCponjjJv4/s400/pair+programing.jpg" border="0" /></a> <b><u></u></b></p>
<p><span style="color:black;">Pair Programming is a development technique involving the pairing of two developers to one computer, one mouse when keyboard.<span> </span>One developer enters in code (the driver) while the other developer (the observer) reviews, provide strategic direction, and refactoring suggestions. The two developers should switch roles for equally, a standard best practice is every 30 minutes. While seemingly simple, pair programming is (IMHO) probably one of the most difficult agile best practices to pull off, developers by their very nature like to work on their own computer on their own tasks. It is also counterintuitive to believe that their programming would not result in a drastic loss of productivity. There is actual empirical evidence that this is the case, with some studies showing overall effort reduced by 15% and code quality being increased by 50%. Pair programming also makes it incredibly easy to onboard and offboard resources, increases developer discipline (someone&rsquo;s always watching over somebody else) and lead to more effective problem-solving.</span></p>
<p><span style="font-weight:bold;">Active Business Stakeholder</span> </p>
<p><a href="http://4.bp.blogspot.com/_ey1WleypnLs/SWAZOZGsNWI/AAAAAAAAAE0/Soo-nEqzGoI/s1600-h/team+members.jpg"><img style="display:block;width:178px;cursor:pointer;height:154px;text-align:center;margin:0 auto 10px;" alt="" src="http://4.bp.blogspot.com/_ey1WleypnLs/SWAZOZGsNWI/AAAAAAAAAE0/Soo-nEqzGoI/s400/team+members.jpg" border="0" /></a> </p>
<p><span style="color:black;">Every form of agile methodology has some notion of this practice.<span> </span>XP calls the on-site customer, SCRUM calls it a product owner.<span> </span>In all instances, some form of user, or user proxy, plays an active part of the development team, providing advice, direction, and knowledge of what the product should do.<span> </span>The active business stakeholder is responsible for developing all requirements for the system, and has the final say on priority. The active business stakeholder is empowered to make decisions on the fly, and serves as a buffer between the development team and other business stakeholders. <b><u></u></b></span></p>
<p>Given the list above, the set of agile best practices could also be represented as:</p>
<p><a href="http://1.bp.blogspot.com/_ey1WleypnLs/SWAT1b0Ja-I/AAAAAAAAAC0/91JY-Dq6EPM/s1600-h/Agile+best+practices+2.jpg"><img style="display:block;width:467px;cursor:pointer;height:352px;text-align:center;margin:0 auto 10px;" alt="" src="http://1.bp.blogspot.com/_ey1WleypnLs/SWAT1b0Ja-I/AAAAAAAAAC0/91JY-Dq6EPM/s400/Agile+best+practices+2.jpg" border="0" /></a> </p>
<p>Agile itself could be represented as a set of agile principles and agile best practices&#8230;</p>
<p><a href="http://4.bp.blogspot.com/_ey1WleypnLs/SWAUGGzVk2I/AAAAAAAAADc/C5hErXRQ_t4/s1600-h/Agile.jpg"><img style="display:block;width:423px;cursor:pointer;height:232px;text-align:center;margin:0 auto 10px;" alt="" src="http://4.bp.blogspot.com/_ey1WleypnLs/SWAUGGzVk2I/AAAAAAAAADc/C5hErXRQ_t4/s400/Agile.jpg" border="0" /></a> </p>
<p>stay tuned for <a href="http://agileconsulting.blogspot.com/2009/02/agile-over-rup-part-2.html">part 2 </a>of this presentation where I described how RUP fit into the picture&#8230;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/thomasjeffreyandersontwin.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/thomasjeffreyandersontwin.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/thomasjeffreyandersontwin.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/thomasjeffreyandersontwin.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/thomasjeffreyandersontwin.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/thomasjeffreyandersontwin.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/thomasjeffreyandersontwin.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/thomasjeffreyandersontwin.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/thomasjeffreyandersontwin.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/thomasjeffreyandersontwin.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/thomasjeffreyandersontwin.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/thomasjeffreyandersontwin.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/thomasjeffreyandersontwin.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/thomasjeffreyandersontwin.wordpress.com/3/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thomasjeffreyandersontwin.wordpress.com&amp;blog=6676985&amp;post=3&amp;subd=thomasjeffreyandersontwin&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://thomasjeffreyandersontwin.wordpress.com/2009/02/22/agile-over-rup-part-1-my-preferred-development-approach/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e6f18308bf25cdceeb7b56745e4ebcf7?s=96&#38;d=identicon" medium="image">
			<media:title type="html">thomasjeffreyandersontwin</media:title>
		</media:content>

		<media:content url="http://1.bp.blogspot.com/_ey1WleypnLs/SWAT1qC8c9I/AAAAAAAAAC8/_MP8o7oVmJM/s400/Agile+over+rup.jpg" medium="image" />

		<media:content url="http://4.bp.blogspot.com/_ey1WleypnLs/SWAT1nLj6qI/AAAAAAAAADE/lq4D6ZTU5Ww/s400/Agile+principles.jpg" medium="image" />

		<media:content url="http://2.bp.blogspot.com/_ey1WleypnLs/SWAXJWm6HQI/AAAAAAAAAEU/9k1IRYHU0o8/s400/Agile+best+practices+1.jpg" medium="image" />

		<media:content url="http://3.bp.blogspot.com/_ey1WleypnLs/SWAUF_aVWXI/AAAAAAAAADU/DGgSBI_nzFA/s400/Agile+value.jpg" medium="image" />

		<media:content url="http://4.bp.blogspot.com/_ey1WleypnLs/SWAZOw2WMeI/AAAAAAAAAE8/Q_XLs4W9nZY/s400/test+driven+development.jpg" medium="image" />

		<media:content url="http://1.bp.blogspot.com/_ey1WleypnLs/SWAVDrCcOkI/AAAAAAAAAEM/mGLG2PcVu20/s400/iterative+development.jpg" medium="image" />

		<media:content url="http://1.bp.blogspot.com/_ey1WleypnLs/SWAVDktAzoI/AAAAAAAAAEE/AagEnwv7J14/s400/daily+standups.jpg" medium="image" />

		<media:content url="http://2.bp.blogspot.com/_ey1WleypnLs/SWAVDc_GC0I/AAAAAAAAAD8/IZLl3OXYGbg/s400/continous+integration.jpg" medium="image" />

		<media:content url="http://2.bp.blogspot.com/_ey1WleypnLs/SWAZ4Xl-mhI/AAAAAAAAAFE/cWSisUtNvo0/s400/self+describing+code.jpg" medium="image" />

		<media:content url="http://2.bp.blogspot.com/_ey1WleypnLs/SWAUGZP6L1I/AAAAAAAAADs/GiZjXFhIZ_Y/s400/collective+code+ownership.jpg" medium="image" />

		<media:content url="http://4.bp.blogspot.com/_ey1WleypnLs/SWAXJ7uCKvI/AAAAAAAAAEs/0yu6MaFrEWQ/s400/sustained+pace.jpg" medium="image" />

		<media:content url="http://3.bp.blogspot.com/_ey1WleypnLs/SWAXJlQufoI/AAAAAAAAAEc/9AcGkeHmjCk/s400/modeling.jpg" medium="image" />

		<media:content url="http://1.bp.blogspot.com/_ey1WleypnLs/SWAVDa-BDpI/AAAAAAAAAD0/el6ISHpUZ4w/s400/colocated+teams.jpg" medium="image" />

		<media:content url="http://1.bp.blogspot.com/_ey1WleypnLs/SWAUGJJKLAI/AAAAAAAAADk/zWVBDY4Smeo/s400/close+inspection.jpg" medium="image" />

		<media:content url="http://3.bp.blogspot.com/_ey1WleypnLs/SWAXJxrhXdI/AAAAAAAAAEk/QgCponjjJv4/s400/pair+programing.jpg" medium="image" />

		<media:content url="http://4.bp.blogspot.com/_ey1WleypnLs/SWAZOZGsNWI/AAAAAAAAAE0/Soo-nEqzGoI/s400/team+members.jpg" medium="image" />

		<media:content url="http://1.bp.blogspot.com/_ey1WleypnLs/SWAT1b0Ja-I/AAAAAAAAAC0/91JY-Dq6EPM/s400/Agile+best+practices+2.jpg" medium="image" />

		<media:content url="http://4.bp.blogspot.com/_ey1WleypnLs/SWAUGGzVk2I/AAAAAAAAADc/C5hErXRQ_t4/s400/Agile.jpg" medium="image" />
	</item>
		<item>
		<title>Hello world!</title>
		<link>http://thomasjeffreyandersontwin.wordpress.com/2009/02/21/hello-world/</link>
		<comments>http://thomasjeffreyandersontwin.wordpress.com/2009/02/21/hello-world/#comments</comments>
		<pubDate>Sat, 21 Feb 2009 17:26:04 +0000</pubDate>
		<dc:creator>thomasjeffreyandersontwin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Welcome to WordPress.com. This is your first post. Edit or delete it and start blogging!<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thomasjeffreyandersontwin.wordpress.com&amp;blog=6676985&amp;post=1&amp;subd=thomasjeffreyandersontwin&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Welcome to <a href="http://wordpress.com/">WordPress.com</a>. This is your first post. Edit or delete it and start blogging!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/thomasjeffreyandersontwin.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/thomasjeffreyandersontwin.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/thomasjeffreyandersontwin.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/thomasjeffreyandersontwin.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/thomasjeffreyandersontwin.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/thomasjeffreyandersontwin.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/thomasjeffreyandersontwin.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/thomasjeffreyandersontwin.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/thomasjeffreyandersontwin.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/thomasjeffreyandersontwin.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/thomasjeffreyandersontwin.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/thomasjeffreyandersontwin.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/thomasjeffreyandersontwin.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/thomasjeffreyandersontwin.wordpress.com/1/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thomasjeffreyandersontwin.wordpress.com&amp;blog=6676985&amp;post=1&amp;subd=thomasjeffreyandersontwin&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://thomasjeffreyandersontwin.wordpress.com/2009/02/21/hello-world/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e6f18308bf25cdceeb7b56745e4ebcf7?s=96&#38;d=identicon" medium="image">
			<media:title type="html">thomasjeffreyandersontwin</media:title>
		</media:content>
	</item>
	</channel>
</rss>
