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

<channel>
	<title>Basil Vandegriend: Professional Software Development &#187; agile</title>
	<atom:link href="http://www.basilv.com/psd/blog/tag/agile/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.basilv.com/psd</link>
	<description></description>
	<lastBuildDate>Fri, 17 May 2013 13:13:07 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Scaling Up From One Developer</title>
		<link>http://www.basilv.com/psd/blog/2012/scaling-up-from-one-developer</link>
		<comments>http://www.basilv.com/psd/blog/2012/scaling-up-from-one-developer#comments</comments>
		<pubDate>Mon, 15 Oct 2012 13:03:29 +0000</pubDate>
		<dc:creator>Basil Vandegriend</dc:creator>
				<category><![CDATA[agile]]></category>
		<category><![CDATA[definition of done]]></category>
		<category><![CDATA[maintenance]]></category>
		<category><![CDATA[process]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[software development]]></category>
		<category><![CDATA[team]]></category>

		<guid isPermaLink="false">http://www.basilv.com/psd/?p=863</guid>
		<description><![CDATA[I have noticed a common problem afflicting small development teams formed to make significant enhancements to an application that was previously maintained by just one developer. Both the original maintenance developer and their management are accustomed to essentially solo development and this culture spills into the enhancement work. Development is treated as individual efforts rather [...]]]></description>
			<content:encoded><![CDATA[<p>I have noticed a common problem afflicting small development teams formed to make significant enhancements to an application that was previously maintained by just one developer. Both the original maintenance developer and their management are accustomed to essentially solo development and this culture spills into the enhancement work. Development is treated as individual efforts rather than a combined team, which results in issues like the following:</p>
<ul>
<li>Highly variable quality - some of it very poor - in delivered work.</li>
<li>Budget and schedule overruns due to inaccurate estimates and lack of scope control.</li>
<li>Communication breakdowns.</li>
<li>Insufficient monitoring and risk mitigation by management.</li>
</ul>
<p>These issues are all symptoms of the underlying problem of failing to adjust development practices to scale up from one developer to a team. One developer working alone on minor enhancements to an application can typically get by on their own ability, without explicit use of any development practices. The enhancements are often simple enough to fall within the <a href=”http://www.basilv.com/psd/blog/2010/minimum-and-optimal-thresholds-of-competence”>developer’s zone of competence</a> so issues are infrequent. Tackling a larger enhancement with a small team of three or more developers introduces the following scaling factors:</p>
<ul>
<li>Higher complexity of the changes (in addition to the larger magnitude of change).</li>
<li>Higher likelihood of requirement changes, additions, and refinements by the business.</li>
<li>Communication and coordination among the developers.</li>
<li>Dealing with variations in practices or abilities between the developers.</li>
<li>Ramp up needed for new developers to become familiar with the application and the business domain.</li>
<li>Less flexibility to recover from issues due to larger budgets, longer schedules, more people, and more management visibility.</li>
</ul>
<p>So what can these teams do to successfully scale? One idea that I often hear mentioned is to turn the work into a formal project and assign a project manager. However, this is seldom a viable option due to considerations like the following:</p>
<ul>
<li>Starting a formal project within the organization is a lengthy endeavor that the business wants to avoid since they want their changes made as soon as possible.</li>
<li>Adding a full-time project manager to a team of three developers represents too much overhead that the business (or I.T., depending on the organization) does not want to pay for.</li>
<li>The I.T. organization does not have sufficiently skilled project managers to staff these 'mini' projects full-time. (I have been burned by overly-junior project managers making things worse, rather than better.)</li>
</ul>
<p>So what options are available to teams needing to scale up? Based on some recent experiences, I believe that the <a href="http://www.scrumalliance.org/">Scrum</a> development method has a number of ways it can help. And I am not even talking about fully adopting Scrum (although that is an option). </p>
<p>I will start with the role of ScrumMaster which I have explored in a recent article titled <a href="http://www.basilv.com/psd/blog/2012/the-mindset-of-a-scrummaster">The Mindset of a ScrumMaster</a>. The role of the ScrumMaster is to help grow a high performance team. Some people view ScrumMasters as process coaches, which is part of what they do, but they are really team coaches. For small teams, ScrumMasters can help on a part-time basis, which helps mitigate concerns about high budget overhead or staffing. And rather than trying to directly manage the work as a traditional project manager would, a ScrumMaster helps the team learn how to self-manage, providing guidance when necessary. What exactly would the ScrumMaster help the team with? This is where some of the practices used in Scrum can help deal with scaling factors.</p>
<p>The first Scrum practice that can help a team scale is the daily standup, which develops communication between developers (which is surprisingly hard if they are used to working alone) and helps focus their efforts. Speaking of tasks, the next Scrum practice that can help a team scale is to use a task board which helps visualize tasks queued in the backlog versus in progress versus done. This provides a focus for the daily standup discussions and helps provide a basic structure for the team to track their current progress. To forecast future progress the next Scrum practice that can help is the use of velocity and burndown charts to predict when milestone targets will be achieved. These practices help with scaling factors relating to communication and monitoring, but do not really help with quality issues. For that, the Scrum practice of <a href="http://www.basilv.com/psd/blog/2009/why-you-need-a-definition-of-done">definition of done</a> is helpful, although the team will likely need coaching in how to adopt the way they work in order to achieve what they have defined as done.</p>
<p>The combination of these four practices is synergistic, imposes limited overhead, and is simple enough that developers can learn to do these practices on their own with some coaching from a ScrumMaster. Small teams of developers using these practices can therefore significantly mitigate the scaling factors that would otherwise cause issues.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.basilv.com/psd/blog/2012/scaling-up-from-one-developer/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Mindset of a ScrumMaster</title>
		<link>http://www.basilv.com/psd/blog/2012/the-mindset-of-a-scrummaster</link>
		<comments>http://www.basilv.com/psd/blog/2012/the-mindset-of-a-scrummaster#comments</comments>
		<pubDate>Mon, 23 Jul 2012 14:18:41 +0000</pubDate>
		<dc:creator>Basil Vandegriend</dc:creator>
				<category><![CDATA[agile]]></category>
		<category><![CDATA[continuous improvement]]></category>
		<category><![CDATA[corporate culture]]></category>
		<category><![CDATA[leadership]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[team]]></category>

		<guid isPermaLink="false">http://www.basilv.com/psd/?p=830</guid>
		<description><![CDATA[I have been familiar with the Scrum method for developing software for a number of years. Scrum is a simple tool: it defines just a few meetings, artifacts, and roles. So the basic mechanics of scrum are easy to pick up. Using Scrum to its fullest potential, however, requires a much deeper understanding. One area [...]]]></description>
			<content:encoded><![CDATA[<p>I have been familiar with the <a href="http://www.scrumalliance.org/learn_about_scrum/">Scrum method</a> for developing software for a number of years. Scrum is a simple tool: it defines just a few meetings, artifacts, and roles. So the basic mechanics of scrum are easy to pick up. Using Scrum to its fullest potential, however, requires a much deeper understanding. </p>
<p>One area I have struggled with is the role of ScrumMaster. The basic responsibilities are straight-forward, consisting of activities like facilitating meetings, dealing with impediments, and updating burndown charts. But, like Scrum, it is not a question of what to do as ScrumMaster but how to go about doing it. Over the past few years when I have had opportunities to interact with experienced ScrumMasters, I have noticed that they seem to have a different mindset when it comes to dealing with teams, especially in regards to the <a href="http://agilemanifesto.org/principles.html">Agile principle</a> of self-organizing teams.</p>
<p>So I was excited recently to have the opportunity to take a ScrumMaster course from <a href="http://agilepainrelief.com/">Mark Levison</a>. I made it my goal in the course to learn more about the mindset of great ScrumMasters and I wanted to share what I learned.</p>
<h3>Growing a High Performance Team</h3>
<p>One key insight I had came from a comment by Mark that Scrum is a method of growing a high performance team. On the surface, Scrum seems to be about producing a product, and thus it would make sense that the ScrumMaster's goal is to guide the team in creating a great product. But when you view Scrum as really being about building a great team, then the role of the ScrumMaster shifts correspondingly to that of helping the team grow and improve. This is, I believe, at the heart of what being a great ScrumMaster is. </p>
<p>The implication of this is that the ScrumMaster tries to minimize what they do directly and instead helps the team do things for themselves. Below are some examples of doing this that were discussed in the course:</p>
<ul>
<li>When dealing with impediments, the ScrumMaster should only directly work on them as a last resort. First, see if the team can handle the impediment on their own. If not, then see if the team can be coached through the resolution. Usually the only impediments that the ScrumMaster will take on themselves are external organizational problems far beyond the scope of the team. For example, if the team is having a problem with how a separate operations team is doing deployments, then rather than the ScrumMaster talking to ops on their own, bring along a team member, introduce them to the ops team, and enable them to work out their issues with ops directly.
</li>
<li>Prefer asking <a href="http://en.wikipedia.org/wiki/Socratic_method">socratic questions</a> of the team instead of telling the team what to do. For example, if the daily scrum is taking too long and is not focused enough, then rather than telling the team what to do raise this issue with the team, perhaps offering some suggestions, and let the team decide what to do.
</li>
</ul>
<p>By helping a team to do things on their own you build up their mastery, and by letting a team make their own decisions you build up their autonomy. Mastery and autonomy are two of the three drivers of internal motivation as per the book <a href="http://www.amazon.ca/gp/product/1594484805/ref=as_li_tf_tl?ie=UTF8&#038;tag=basilvandegri-20&#038;linkCode=as2&#038;camp=15121&#038;creative=330641&#038;creativeASIN=1594484805">Drive: The Surprising Truth About What Motivates Us</a><img src="http://www.assoc-amazon.ca/e/ir?t=basilvandegri-20&#038;l=as2&#038;o=15&#038;a=1594484805" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /> by Daniel Pink. If you always tell a team what to do and how to do it, they will not only fail to develop initiative but will develop a dependency upon you to provide all the answers, thus losing their innate initiative.</p>
<h3>Servant Leader</h3>
<p>I have heard the ScrumMaster role described as a <a href="http://en.wikipedia.org/wiki/Servant_leadership">servant leader</a>. The ScrumMaster does not manage the team nor has formal authority over the team. Instead, they act as a humble steward supporting the team and product owner as depicted in the inverted organizational chart below.<br />
<a href="http://www.basilv.com/psd/wp-content/uploads/2012/07/ScrumMaster-Org-Chart.png"><img src="http://www.basilv.com/psd/wp-content/uploads/2012/07/ScrumMaster-Org-Chart.png" alt="" title="ScrumMaster Org Chart" width="425" height="209" class="alignright size-full wp-image-833" /></a></p>
<p>Part of being a good leader is removing obstructions and obstacles from the way of the team and acting as a shield to protect the team from outside interference. This is part of being a ScrumMaster, but there is more to it than just this. For example, Mark described how one method he uses to assess a team is to sit in the team area and simply watch and listen as the team does their work. The following questions provide some examples of things to look for: </p>
<ul>
<li>How often are team members interacting with one another? Or do they stay silent in their cubicles?</li>
<li>Who communicates with who? Do developers only talk to developers, or do they talk to the product owner (or business analyst)? </li>
<li>What is the tone of the communication? How do testers communicate defects to developers and how do the developers respond? Are people positive or frustrated?</li>
<li>How many interruptions are there from people external to the team?</li>
</ul>
<p>This practice struck me as being identical to the Toyota principle of <a href="http://en.wikipedia.org/wiki/Genchi_Genbutsu">Genchi Genbutsu</a>, translated as "go and see at the place where the work is done".</p>
<h3>Continuous Improvement</h3>
<p>Teams do not start off as high performing. Only through continual improvement can teams reach this state. Therefore a key responsibility of ScrumMasters is to cultivate a culture of continuous improvement and to encourage ongoing growth. Some tips for doing this:</p>
<ul>
<li>Put effort into the retrospective agenda to tailor it to the needs of the team and to adjust the activities from time to time to keep the energy level within the meeting high.</li>
<li>Follow up on improvements identified within the retrospective to ensure they are actioned.</li>
<li>When observation of the team indicates that changes are necessary, try suggesting the smallest change that will lead to improvement. Smaller changes cause less resistance and are easier to adopt.</li>
<li>Encourage lots of experiments. Having the team commit to only trying a change for a limited period of time and then being able to evaluate afterwards whether to keep or discard the change overcomes a lot of resistance and can help cut through a lot of the debate over whether to adopt a change or not.</li>
<li>Coach team members one-on-one regarding individual needs.</li>
</ul>
<p>In conclusion, the ultimate objective of the ScrumMaster is to put themselves out of a job by elevating the team to such a high level of performance that they can take over all the ScrumMaster responsibilities.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.basilv.com/psd/blog/2012/the-mindset-of-a-scrummaster/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Industry Adoption of Agile</title>
		<link>http://www.basilv.com/psd/blog/2012/industry-adoption-of-agile</link>
		<comments>http://www.basilv.com/psd/blog/2012/industry-adoption-of-agile#comments</comments>
		<pubDate>Thu, 17 May 2012 14:31:08 +0000</pubDate>
		<dc:creator>Basil Vandegriend</dc:creator>
				<category><![CDATA[agile]]></category>
		<category><![CDATA[IT industry]]></category>
		<category><![CDATA[project management]]></category>
		<category><![CDATA[software development]]></category>

		<guid isPermaLink="false">http://www.basilv.com/psd/?p=812</guid>
		<description><![CDATA[Agile methods have seen a surge of adoption within I.T. in the last few years. Agile is clearly not a fad or limited to early adopters - it has entered the mainstream and is here to stay. For those of you not yet using Agile, I wanted to provide statistics and recommendations from widely-recognized industry [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://agilemanifesto.org/">Agile methods</a> have seen a surge of adoption within I.T. in the last few years. Agile is clearly not a fad or limited to early adopters - it has entered the mainstream and is here to stay. For those of you not yet using Agile, I wanted to provide statistics and recommendations from widely-recognized industry sources to emphasize just how significant Agile has become, and to strongly encourage you to adopt Agile as well.</p>
<p>I will start with statistics regarding the adoption of agile. The Forrester / Dr. Dobb's Q3 2010 Global Technographics  Survey, as referenced in the Forrester paper <a href="http://www.forrester.com/rb/Research/water-scrum-fall_is_reality_of_agile_for_most/q/id/60109/t/2">Water-Scrum-Fall is the Reality of Agile for Most Organizations Today</a>, found that 55% of projects where using some form of agile or iterative method. This statistic is now almost 2 years old. The <a href="http://www.pmi.org/Certification/New-PMI-Agile-Certification.aspx">Project Management Institute (PMI) reports that the use of Agile has tripled from 2008 to 2011</a> and states that Gartner predicts 80% of software development projects will be using Agile by the end of 2012.</p>
<p>Agile has often been perceived as developer-centric, so I have found it quite revealing that over the last year other I.T. roles have formally recognized the importance of Agile. The PMI has come out with its <a href="http://www.pmi.org/Certification/New-PMI-Agile-Certification.aspx">Agile Certified Practitioner certification</a> and the International Institute of Business Analysis (IIBA) is finalizing their <a href="http://www.iiba.org/imis15/IIBA/Professional_Development/The_Agile_Extension_of_the_BABOK/IIBA_Website/Professional_Development/Agile_Extension.aspx">Agile Extension to the Business Analysis Body of Knowledge</a>.</p>
<p>This information about the adoption of agile is interesting but I do not view it as sufficient evidence on its own to adopt agile. What I do find compelling is the benefits that Agile brings. This is clearly summarized by the <a href="http://standishgroup.com/newsroom/chaos_manifesto_2011.php">2011 CHAOS Manifesto from the Standish Group</a> which states that "software applications developed through the agile process have <em>three times</em> the success rate of the traditional waterfall method and a much lower percentage of time and cost overruns".</p>
<p>I will conclude this article with one final reference that I believe perfectly captures the point of my article. <a href="http://my.gartner.com/portal/server.pt?open=512&#038;objID=249&#038;mode=2&#038;PageID=864059&#038;resId=1837016&#038;ref=Browse">Gartner's 2012 Planning Guide for Application Delivery Strategies</a> has a section that is simply titled "Say goodbye to waterfall".</p>
]]></content:encoded>
			<wfw:commentRss>http://www.basilv.com/psd/blog/2012/industry-adoption-of-agile/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Adopting Agile in Government</title>
		<link>http://www.basilv.com/psd/blog/2012/adopting-agile-in-government</link>
		<comments>http://www.basilv.com/psd/blog/2012/adopting-agile-in-government#comments</comments>
		<pubDate>Wed, 16 May 2012 13:26:03 +0000</pubDate>
		<dc:creator>Basil Vandegriend</dc:creator>
				<category><![CDATA[miscellaneous]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[government]]></category>

		<guid isPermaLink="false">http://www.basilv.com/psd/?p=807</guid>
		<description><![CDATA[As Agile is seeing widespread adoption in many industry sectors, what about within government (public sector) organizations? Can Agile work within governments? What are some challenges and risks to watch out for? I'm giving a presentation on this topic Thursday, May 17th, 2012 at noon that aims to answer these questions and provide guidance based [...]]]></description>
			<content:encoded><![CDATA[<p>As Agile is seeing widespread adoption in many industry sectors, what about within government (public sector) organizations? Can Agile work within governments? What are some challenges and risks to watch out for? </p>
<p>I'm giving a presentation on this topic Thursday, May 17th, 2012 at noon that aims to answer these questions and provide guidance based on a number of case studies involving Agile government projects. Along the way we will cover various perspectives on what Agile is, shatter some common misconceptions, and see some compelling evidence for why your next software development effort should use Agile.</p>
<p>The presentation is for <a href="http://www.agileedmonton.org/">Agile Edmonton</a> at a new location - <a href="http://www.startupedmonton.com/">Startup Edmonton</a> which is located on the 3rd floor of the historic Mercer Warehouse at 10363 – 104 Street (on the corner of 104st and 104 ave). Attendance is open to the public, so please drop by to attend the talk.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.basilv.com/psd/blog/2012/adopting-agile-in-government/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Shocking Truth about Agile and Waterfall</title>
		<link>http://www.basilv.com/psd/blog/2011/the-shocking-truth-about-agile-and-waterfall</link>
		<comments>http://www.basilv.com/psd/blog/2011/the-shocking-truth-about-agile-and-waterfall#comments</comments>
		<pubDate>Mon, 14 Nov 2011 13:02:28 +0000</pubDate>
		<dc:creator>Basil Vandegriend</dc:creator>
				<category><![CDATA[agile]]></category>
		<category><![CDATA[process]]></category>
		<category><![CDATA[software development]]></category>
		<category><![CDATA[waterfall]]></category>

		<guid isPermaLink="false">http://www.basilv.com/psd/?p=741</guid>
		<description><![CDATA[There is a common perception within I.T. that Agile methods are recent innovations - the new kids on the block - and they are contrasted with the traditional waterfall approach - the old-timer that has been around for ages. This perception is propagated by events such as the widely-discussed 10-year anniversary of the agile manifesto [...]]]></description>
			<content:encoded><![CDATA[<p>There is a common perception within I.T. that Agile methods are recent innovations - the new kids on the block - and they are contrasted with the traditional waterfall approach - the old-timer that has been around for ages. This perception is propagated by events such as the widely-discussed 10-year anniversary of the <a href="http://agilemanifesto.org/">agile manifesto</a> and by the ongoing challenge of the "old guard" - either publicly or within organizations - of the effectiveness of agile versus waterfall. I recently read two articles, however, that convincingly shatter these misperceptions and lay bare the shocking truth.</p>
<p>While the term agile itself is indeed ten years old, the philosophy and approach of iterative and incremental development (IID) has a surprisingly rich and extensive history. The article <a href="http://www.craiglarman.com/wiki/downloads/misc/history-of-iterative-larman-and-basili-ieee-computer.pdf">Iterative and Incremental Development: A Brief History (PDF)</a> by Craig Larman and Victor R. Basili published in IEEE Computer discusses how the ideas of IID actually predate the existence of software, and have been used and promoted in <em>every</em> decade since for over 50 years. This article also discusses a classic 1970 article by Winston Royce well-known for supposedly promoting the use of waterfall, but which actually recommended the development of an initial pilot or preliminary version prior to creating the final version intended for delivery to the client. Larman's and Basili's article also discusses the ongoing evolution of the standard used by the U.S. Department of Defense for software development. The initial standard was document-heavy, gated, single-pass waterfall, but the high rate of project failures led to first the allowance of and eventually the full adoption of IID approaches. </p>
<p>So a limited set of organizations (often governments due to their byzantine contracting restrictions) did experience an evolution from waterfall to agile over time, but notably they started with a misunderstood version of waterfall. The use of IID approaches has always been part of the I.T. industry. </p>
<p>What about the effectiveness of agile? The second article <a href="http://searchsoftwarequality.techtarget.com/news/2240106479/Quality-metrics-The-economics-of-software-quality-Part-One">Quality metrics: Software quality attributes and their rankings</a> is an interview with Capers Jones and Olivier Bonsignour regarding their new book <a href="http://www.amazon.ca/gp/product/0132582201/ref=as_li_tf_tl?ie=UTF8&#038;tag=basilvandegri-20&#038;linkCode=as2&#038;camp=15121&#038;creative=330641&#038;creativeASIN=0132582201">The Economics of Software Quality</a><img src="http://www.assoc-amazon.ca/e/ir?t=basilvandegri-20&#038;l=as2&#038;o=15&#038;a=0132582201" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />. The authors in this book discuss the effectiveness of over 100 quality factors using research based on over 10,000 software projects. On a scale of -10 for extremely harmful to a scale of +10 for extremely valuable, Agile methods rated a 9 - highly valuable - while waterfall only rated a 1 - barely useful. </p>
<p>These two articles highlight the fact that agile-like methods have been in use since the start of the software field, and are on average far more effective than the waterfall approach. This leads me to conclude that there is really no defensible reason for organizations to mandate or promote the use of waterfall.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.basilv.com/psd/blog/2011/the-shocking-truth-about-agile-and-waterfall/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Alternatives to Formal Traceability</title>
		<link>http://www.basilv.com/psd/blog/2011/alternatives-to-formal-traceability</link>
		<comments>http://www.basilv.com/psd/blog/2011/alternatives-to-formal-traceability#comments</comments>
		<pubDate>Mon, 17 Oct 2011 13:23:05 +0000</pubDate>
		<dc:creator>Basil Vandegriend</dc:creator>
				<category><![CDATA[quality]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[project management]]></category>
		<category><![CDATA[requirements]]></category>
		<category><![CDATA[software development]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[traceability]]></category>

		<guid isPermaLink="false">http://www.basilv.com/psd/?p=713</guid>
		<description><![CDATA[In my prior post The Trouble with Traceability I discussed the problems with doing requirements traceability, especially formal traceability using approaches like a requirements traceability matrix (RTM). Despite the flaws with traceability the underlying objective is sound: ensure that everything the customer or user requires is correctly delivered. So how can we achieve this objective? [...]]]></description>
			<content:encoded><![CDATA[<p>In my prior post <a href="http://www.basilv.com/psd/blog/2011/the-trouble-with-traceability">The Trouble with Traceability</a> I discussed the problems with doing requirements traceability, especially formal traceability using approaches like a requirements traceability matrix (RTM). Despite the flaws with traceability the underlying objective is sound: ensure that everything the customer or user requires is correctly delivered. So how can we achieve this objective?</p>
<p>There are a number of pragmatic practices that address this objective while avoiding the pitfalls afflicting formal traceability. I will start with a simpler form of traceability and then move on to practices seemingly unrelated to traceability.</p>
<h3>Specification Highlighting to Track Test Coverage</h3>
<p>A tester given a written specification to verify the software against must have some way of keeping track of their progress. One simple method is to highlight each statement in the specification as they test it. This is essentially tracking test coverage of the specification. I credit <a href="http://www.satisfice.com/blog/">James Bach</a> for this idea.</p>
<h3>Testing Dashboard</h3>
<p>A testing dashboard is great at illustrating overall testing progress and can be used as part of the summary in the final test report. To produce the dashboard first divided the system under test into test areas that usually correspond to features, components, or significant non-functional requirements. Then create a grid with the test areas as rows, and the columns report testing progress for each area. Key information to report per area is an assessment of quality (is this area ready to ship?), and the thoroughness of testing (test coverage and test effort). For an example and fuller explanation see <a href="http://www.satisfice.com/presentations/dashboard.pdf">James Bach's presentation on testing dashboards</a>.</p>
<p>The testing dashboard is closest in form to a requirements traceability matrix - there's still a grid and something like requirements are listed down the grid. The big difference is that the dashboard shows a summary of testing for each area rather than listing individual tests and showing how they map.</p>
<h3>Agile User Stories with Acceptance Tests</h3>
<p>A common approach used by Agile methods is to divide requirements into fine-grained increments of business value called user stories and then define with examples or automated tests the criteria by which to accept that the story was correctly implemented. This takes a two-pronged approach to address traceability's objective. First, using fine-grained increments of functionality that are quickly developed minimizes the amount of work-in-progress that needs to be tracked and thus reduces the chance of mistakes. Second, the process produces tests for each user story early, sometimes before coding starts, so missing tests for a requirement is much less likely. Agile basically sufficiently changes how development is done to negate virtually all the sources of problems that would otherwise justify a requirements traceability matrix.</p>
<h3>Task Tracking via Task Board</h3>
<p>Popularized by <a href="http://en.wikipedia.org/wiki/Kanban_(development)">Kanban</a> but also used by many Agile teams, a task board is a practice for tracking the status of tasks. The board has multiple columns representing different status: the minimum set is usually "Not Started", "In Progress", and "Done". Tasks are placed on the board according to their status, and the team meets daily to discuss the tasks and update appropriately. I vastly prefer a physical task board on a wall, but for teams not co-located many online versions exist. Tasks are often quite fine-grained - one user story is often decomposed into multiple tasks. </p>
<p>Many teams include a status of "Testing" on the board, or use a symbol on the card to signify the completion of testing. Other quality control procedures such as code reviews can also be tracked. See the image below for an example of a task board with such states. </p>
<p><a href="http://www.basilv.com/psd/wp-content/uploads/2011/10/TaskBoard.jpg"><img src="http://www.basilv.com/psd/wp-content/uploads/2011/10/TaskBoard.jpg" alt="Example Task Board" title="Example Task Board" width="500" height="307" class="alignnone size-full wp-image-714" /></a></p>
<p>The combination of fine-grained tasks, daily updates, and tracking quality ensures that each requirement that is tackled by the team is properly developed. This achieves traceability's objective.</p>
<h3>Conclusion</h3>
<p>Despite formal traceability being too effort-intensive for too little value the underlying objective should not be ignored. I have described a variety of alternative practices that help ensure that requirements are properly developed and tested with a more modest level of effort.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.basilv.com/psd/blog/2011/alternatives-to-formal-traceability/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Defects &#8211; To Fix or Not to Fix</title>
		<link>http://www.basilv.com/psd/blog/2011/defects-to-fix-or-not-to-fix</link>
		<comments>http://www.basilv.com/psd/blog/2011/defects-to-fix-or-not-to-fix#comments</comments>
		<pubDate>Tue, 04 Oct 2011 13:41:11 +0000</pubDate>
		<dc:creator>Basil Vandegriend</dc:creator>
				<category><![CDATA[quality]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[defects]]></category>
		<category><![CDATA[lean]]></category>
		<category><![CDATA[software development]]></category>

		<guid isPermaLink="false">http://www.basilv.com/psd/?p=703</guid>
		<description><![CDATA[To fix defects or not fix defects, that is the question: whether it is better to suffer the complaints of outraged users, or to divert effort to investigate and eliminate them. Shakespeare quotes aside, every software development project has to make decisions on how many defects to fix and which ones to leave alone prior [...]]]></description>
			<content:encoded><![CDATA[<p>To fix defects or not fix defects, that is the question: whether it is better to suffer the complaints of outraged users, or to divert effort to investigate and eliminate them. </p>
<p>Shakespeare quotes aside, every software development project has to make decisions on how many defects to fix and which ones to leave alone prior to shipping. While I have seldom seen this question debated within projects, the advice from industry thought leaders varies considerably. The Agile and Lean methods of software development in particular have somewhat opposing perspectives. </p>
<p>I believe that considering both sides of this question provides a fuller understanding of the issues and better equips us to answer appropriately. Therefore in the two sections below I explore the reasons behind both sides of the debate. </p>
<h3>To Fix</h3>
<ul>
<li>Shipping poor quality, defect-ridden code can upset users, turn away customers, and lead to a hard-to-shake bad reputation.</li>
<li>The decision that a feature is worth developing is made with the expectation that it will work correctly. So any defects found in a feature means that the feature is still incomplete until these issues are fixed.</li>
<li>Defects provide feedback regarding the development process. Each defect represents an opportunity to do a root cause analysis of what led to the defect and put countermeasures in place to prevent re-occurrence. The Lean mindset of "Stop the line" demands that new development be put on hold to fix newly discovered defects.</li>
<li>Defects introduce the risk of compounding quality problems. The impact of a defect can be more significant than initially realized. Defects can be inadvertently replicated in other parts of the system. Enhancing components with too many defects can slow progress to a halt, as the system becomes essentially a shifting quicksand that is too unstable to work on. Constantly fixing defects helps maintain a high velocity of development over time.</li>
<li>To mitigate risks in not fixing defects, each defect needs to be analyzed to understand its impact, cause, and required changes to fix. But after performing this analysis most of the work is usually done - the fix is relatively straightforward. Waiting to decide later to fix the defect (e.g. in a subsequent release) causes all the knowledge gained in the analysis to decay over time which is wasteful (in the Lean sense).</li>
</ul>
<h3>Not To Fix</h3>
<ul>
<li>Significantly delaying the release of software to fix all defects leads to a loss of immediate revenue and potentially loss of market share due to competitors beating you to market. So you cannot afford to wait to fix all defects.</li>
<li>The entrepreneurial mindset, especially for startups, is to ship early to get feedback from paying customers. Perfection is the enemy of the good.</li>
<li>Under at least some versions of Scrum, defects are considered new tasks that are added to the product backlog to be prioritized by the product owner. This prioritization is based on the defect's impact (severity and likelihood of occurrence) and the effort required to fix it. Many minor defects will therefore likely never be fixed as new functionality will typically be of higher value.</li>
<li>Stopping to analyze and fix defects disrupts developers who are in the middle of working on other functionality and is wasteful.</li>
<li>Fixing defects in functionality that is already otherwise finished development and testing will require additional regression testing. Not fixing now and waiting until enhancements to this functionality are needed minimizes the extra effort required.</li>
</ul>
<h3>Conclusion</h3>
<p>Shakespeare was wrong. There is actually a third perspective regarding whether or not to fix defects: avoid the question as much as possible by focusing on defect prevention. The Lean mindset of building quality in avoids all the waste associated with finding, analyzing, and fixing defects and should be our preferred approach. Only when it fails and the occasional defect is introduced do we then have to answer the question.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.basilv.com/psd/blog/2011/defects-to-fix-or-not-to-fix/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Connecting with Calgary</title>
		<link>http://www.basilv.com/psd/blog/2011/connecting-with-calgary</link>
		<comments>http://www.basilv.com/psd/blog/2011/connecting-with-calgary#comments</comments>
		<pubDate>Tue, 22 Mar 2011 01:42:32 +0000</pubDate>
		<dc:creator>Basil Vandegriend</dc:creator>
				<category><![CDATA[learning]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[pair programming]]></category>
		<category><![CDATA[personal development]]></category>
		<category><![CDATA[project management]]></category>
		<category><![CDATA[software development]]></category>
		<category><![CDATA[unit testing]]></category>

		<guid isPermaLink="false">http://www.basilv.com/psd/?p=618</guid>
		<description><![CDATA[I recently had the opportunity to travel to Calgary, Alberta to visit the CGI office there and hang out with several of the development teams. These teams have extensive experience with larger-scale agile development including both XP and Scrum and have a good reputation for having a great development culture that excels at mentoring and [...]]]></description>
			<content:encoded><![CDATA[<p>I recently had the opportunity to travel to Calgary, Alberta to visit the CGI office there and hang out with several of the development teams. These teams have extensive experience with larger-scale agile development including both XP and Scrum and have a good reputation for having a great development culture that excels at mentoring and coaching. I was excited to see what I could learn and take back to our teams in Edmonton. Below are some of the main points I gleaned, organized into categories.</p>
<h3>Adopting Test Driven Development</h3>
<p>The boldest idea I heard was in response to my question of how to encourage the <a href="http://www.basilv.com/psd/blog/2009/adopting-test-driven-development">adoption of test driven development</a> (TDD). The answer consisted of this process:</p>
<ol>
<li>Clearly communicate to the team the expectation that all production code will be produced with tests.
</li>
<li>Wait and monitor code check-ins until you see code checked in without tests.</li>
<li>Delete this untested code and commit the change.</li>
<li>Communicate to the affected developer that you found some code that was not necessary because the tests still passed after removing it. Diabolical laughter optional :)
</li>
</ol>
<p>This sounds extreme, but the team I was talking to actually used this in the formative early stages of building their team and the use of TDD has become a standard practice on the team. I think applying this at the start of a project with a new team is the best timing and makes the most sense, but I may have to try it mid-project (my team, watch out :)</p>
<p>I also learned of a different approach to writing individual tests that basically involves starting at the end and working backwards. Start first with the asserts that specify the desired result, then write the execution of the method under test which covers how the result will be obtained, and then finally write the setup code which provides the necessary inputs. This approach is very much a pull approach (in the lean sense) - each step serves as the specification for what needs to be done in the next step. As such, it might be an easier approach for newcomers to unit testing.</p>
<h3>Adopting Pair Programming</h3>
<p>I asked about dealing with resistance to adopting pair programming, especially the tendency of pairs to collaborate jointly for only a short time before reverting to working separately, each at their own computer. The answer was to take away someones computer, which leaves them with no choice but to pair with someone else on the team.</p>
<p>Environment factors can also help or hinder pairing. The Calgary teams have their workstations set up to allow people to sit side-by-side in front of the same machine. I think this layout is very important for successful long-duration pairing, and I switched my own cubicle over to this layout a while ago. The Calgary teams, however, took this setup one step further and have a second keyboard and mouse for each of their workstations. This has several benefits in terms of encouraging pairing:</p>
<ul>
<li>It communicates visually the expectation that two people will work at this computer rather than one.</li>
<li>It eliminates concerns over using another person's keyboard. The 'owner' of that workstation has their dedicated keyboard, with the second keyboard reserved for guests. Whether the concern is over germs or over intruding on someones property/space, having only one keyboard produces a reluctance on the part of the visitor to drive.</li>
<li>A common problem in pairing is for the person who is not driving to become too passive. Providing a second keyboard gives them the opportunity to jump in at any point (even when the driver does not want to relinquish control), and having the keyboard waiting in front of them is a subtle reminder to remain actively involved.
</li>
</ul>
<h3>Using Task Boards</h3>
<p>All the teams use task boards consisting of cards in various columns on a whiteboard, wall, or even a window. My team has recently switched to using a task board and I really like it in terms of it visualizing the work in progress and serving as a hub for discussions, like in the daily scrum. Given my experience and its broad use in Calgary, I am going to more actively promote its use.</p>
<p>Every team seems to have variations in how the task boards are used, but there were some commonalities across the Calgary teams. All teams used large cards - about the size of half a normal 8.5 x 11 page. Compared to the small post-it-note-sized cards my team uses this is a lot more real estate. These cards are made from colored paper cut in half that allows different colors to be used for different types of activities (e.g. defects, stories, and tasks). One team printed out defect reports (from JIRA) on regular paper and folded them in half to attach them to the wall. Another team attached printed requirements (with tests) folded in half to user stories. The teams all had relatively few columns for their task board - usually not more than four consisting of "In Sprint", "In Progress", "In Testing", and "Done".</p>
<h3>Professional Development</h3>
<p>The Calgary teams have a very strong culture of professional development that manifests in a number of ways. The most visible manifestation is my seeing many recent software development or I.T. books scattered around the office, many of which are books on my reading list (I may have to do an office raid :). </p>
<p>What I consider the most significant manifestation of this culture is the existence of a professional development group for senior developers. This group holds a number of activities that include periodic presentations by members on technical topics, book reading groups to jointly go through particular books, and Friday noon viewings of videos relating to software development.</p>
<p>One of the technical leads had an interesting rationale for doing professional development: <em>not</em> doing it is essentially stealing from your clients in the future. If you spend five percent of your time doing professional development and improve by five percent per year, then you will break even after the first year and show a benefit in future years: your output will be higher than before, even after subtracting the five percent. So not doing professional development will leave your client shortchanged in the future. If you let that trend continue long enough, you will eventually lose your client.</p>
<h3>Summary</h3>
<p>I had a great time and enjoyed being challenged with new ideas and perspectives on software development. I believe that visiting other teams or companies and seeing first-hand how they do things is quite beneficial. I encourage you to look for opportunities to do this and I hope to do more of it in the future. Thanks CGI Calgary!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.basilv.com/psd/blog/2011/connecting-with-calgary/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Comparing Agile and Traditional Project Management</title>
		<link>http://www.basilv.com/psd/blog/2009/comparing-agile-and-traditional-project-management</link>
		<comments>http://www.basilv.com/psd/blog/2009/comparing-agile-and-traditional-project-management#comments</comments>
		<pubDate>Fri, 04 Dec 2009 08:28:25 +0000</pubDate>
		<dc:creator>Basil Vandegriend</dc:creator>
				<category><![CDATA[agile]]></category>
		<category><![CDATA[lean]]></category>
		<category><![CDATA[project management]]></category>
		<category><![CDATA[scope]]></category>

		<guid isPermaLink="false">http://www.basilv.com/psd/?p=470</guid>
		<description><![CDATA[I just attended a great presentation about Agile project management by Mike Cottmeyer at Agile Edmonton's monthly meeting. What stood out for me were two comparisons Mike made between Agile project management and traditional approaches (e.g. waterfall project, PMI/PMP). Dealing with Uncertainty Mike characterized traditional approaches as trying to manage out uncertainty in the effort [...]]]></description>
			<content:encoded><![CDATA[<p>I just attended a great presentation about Agile project management by <a href="http://www.leadingagile.com/">Mike Cottmeyer</a> at <a href="http://agileedmonton.org/">Agile Edmonton</a>'s monthly meeting. What stood out for me were two comparisons Mike made between Agile project management and traditional approaches (e.g. waterfall project, PMI/PMP).</p>
<h3>Dealing with Uncertainty</h3>
<p>Mike characterized traditional approaches as trying to manage <em>out</em> uncertainty in the effort to achieve predictable results. This strategy essentially involves determining up front the key aspects of the project (scope, budget, and schedule) and then seeking to minimize changes to it throughout the project. Unfortunately, virtually all software development is faced with a multitude of uncertainties. Trying to drive them out means conflicting with reality, which leads to a common litany of project problems such as: over budget, over schedule, scope achieved but business not satisfied (business objectives not met), and excessive cost for realized value.</p>
<p>Agile adopts the opposite philosophy: manage <em>for</em> uncertainty. Kent Beck used the term "embrace change" when first introducing Extreme Programming, and this is a common goal of all Agile methods. This is achieved through several strategies:</p>
<ul>
<li>Requirements are defined and implemented throughout the project, making it trivial to accommodate changes. The next section below discusses this in more detail.</li>
<li>Providing frequent feedback via working software mitigates many of the risks of traditional development projects.</li>
<li>Prioritizing user stories and first implementing the ones with the highest value / highest risk maximizes the return on investment and mitigates a number of common risks.</li>
<li>Often Agile projects explicitly allow for the project to be stopped or brought to a close at any point if the business owner determines that there is no benefit in proceeding with the remaining requirements.</li>
</ul>
<p>One of Mike's though-provoking points was that using an Agile method is a risk-mitigation strategy that mitigates many of the common risks associated with software development projects.</p>
<h3>Deriving instead of Fixing Scope</h3>
<p>One key aspect of project management is managing the <a href="http://www.basilv.com/psd/blog/2006/understanding-project-schedules">iron triangle of scope, cost (budget), and time (schedule)</a>. In a traditional waterfall project the scope is defined first, the effort required to implement this scope is then estimated, and finally the budget and time required are derived from this estimate. This approach is maintained throughout the project: controls are often put in place to minimize changes to the scope and changes that are deemed necessary then typically require adjustments to the budget and/or schedule. </p>
<p>Fixing the scope up front is inherently flawed due to the nature of software development:</p>
<ul>
<li>Business requirements almost always change over time. I have seen statistics mentioned on the order of 1% change in requirements per month.
</li>
<li>Software development is inherently a learning activity. The business typically gains clarity about their requirements as they are analyzed and implemented. Insight is also gained into how the solution / system can best meet these requirements.
</li>
<li>One technique from lean software development is set-based concurrent engineering, which aims to defer decisions to the last possible moment when the most information is available. This helps ensure that the best possible decision is made and hence minimizes waste caused by bad decisions (one of the main objectives of lean). Fixing scope up front requires making decisions at the worst possible time – when the least is known.
</li>
</ul>
<p>Agile addresses this problem by making scope flexible. While an Agile project can (and usually does) start with a high-level backlog of features or epics, the specific user stories selected for implementation are determined throughout the project, iteration by iteration. I have heard some say that Agile makes the project scope easy to change, but in reality the scope is not being changed at all – it is being defined throughout the project. The total scope achieved in a project is hence a function of the project schedule: the more iterations and releases available, the more that can be done. Going back to the triangle of scope, cost, and time, this means that time is the main variable being controlled, from which budget and scope can be derived. </p>
<h3>Conclusion</h3>
<p>I really enjoyed the clarity of thinking Mike brought to the topic of Agile project management. Considering that Mike has given this presentation at major software development conferences that require $$$ to attend, I really appreciated having the opportunity to see it for free in my home town. I am a little surprised that there are not more people taking advantage of these opportunities. If you live in the Edmonton area I strongly encourage you to attend the Agile Edmonton meetings.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.basilv.com/psd/blog/2009/comparing-agile-and-traditional-project-management/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>The Most Effective Method of Quality Assurance</title>
		<link>http://www.basilv.com/psd/blog/2008/the-most-effective-method-of-quality-assurance</link>
		<comments>http://www.basilv.com/psd/blog/2008/the-most-effective-method-of-quality-assurance#comments</comments>
		<pubDate>Sat, 08 Nov 2008 23:46:05 +0000</pubDate>
		<dc:creator>Basil Vandegriend</dc:creator>
				<category><![CDATA[quality]]></category>
		<category><![CDATA[agile]]></category>

		<guid isPermaLink="false">http://www.basilv.com/psd/?p=187</guid>
		<description><![CDATA[The goal of quality assurance (QA) activities is to ensure that a particular work product is of sufficient quality. Work product most typically refers to the software making up the system, but can also be applied to related documentation (requirements or design) or even processes. Two common methods for doing QA are reviews and testing, [...]]]></description>
			<content:encoded><![CDATA[<p>The goal of quality assurance (QA) activities is to ensure that a particular work product is of sufficient quality. Work product most typically refers to the software making up the system, but can also be applied to related documentation (requirements or design) or even processes. Two common methods for doing QA are reviews and testing, both of which are valuable and necessary methods. I have 'discovered', however, a different method which I believe is more effective than either, and which is quite possibly the most effective method of doing QA for any given work product. This method can be summarized by two words: <strong>Use It!</strong></p>
<p>Whatever the work product is, using it for its intended purpose is the best way to discover if it is of sufficient quality to meet that purpose . For software, give it to actual users to use. For a requirements document, give it to developers to design the system. For a design document, give it to developers to write the code. For an operations manual, give it to support staff to maintain the system. If the user of the work product cannot easily get their tasks accomplished then the work product has failed the QA check and needs revision.</p>
<p>In my own experience I have lost track of the number of times that:</p>
<ul>
<li>Implementing a requirement has identified gaps, lack of clarity, or inconsistencies in carefully-reviewed and formally signed-off requirements documents.</li>
<li>Coding up a documented design has identified gaping holes and deficiencies with the design that all the reviewers missed.</li>
<li>Testing as per a carefully documented test plan reveals errors in the test scripts due to misunderstandings about how the system is supposed to work.</li>
<li>Letting users finally use the software reveals misunderstandings or misinterpretations about the requirements that the entire testing process missed, or reveals that the user interface is confusing and non-intuitive.</li>
</ul>
<p>The "Use It" method is not actually a new concept in the I.T. industry (the tone of the first paragraph is a little tongue-in-cheek). When developing software for developers there is the phrase "eating your own dog food" which refers to the practice of the development team using on a daily basis the software they are producing. Prototyping or proofs of concepts make use of a design in a limited fashion to verify some aspect of it. Beta release or limited production roll-outs provide software to actual users. Several <a href="http://agilemanifesto.org/principles.html">principles of Agile development</a> focus on getting software used in one way or another as per the following excerpts:</p>
<ul>
<li>... early and continuous delivery of valuable software.</li>
<li>Deliver working software frequently ...</li>
<li>Working software is the primary measure of progress.</li>
</ul>
<p>Successfully applying the "Use It" method of QA requires answering the following questions:</p>
<ol>
<li>Who are the actual users of this work product?</li>
<li>How can we get these users to use the work product before it is finalized? If the actual users are completely unavailable then consider using proxies such as a business analyst or marketing representative.</li>
<li>How will we gather useful feedback on the quality of the work product from these users? This is a critical component to the method – without feedback no QA is being done.</li>
</ol>
<p>As I stated at the beginning, reviews and testing are still necessary and important QA activities. But if you are not thinking about and planning how to have work products used and gather feedback from the users, you are missing a critical component in your QA strategy.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.basilv.com/psd/blog/2008/the-most-effective-method-of-quality-assurance/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
