<?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; scope</title>
	<atom:link href="http://www.basilv.com/psd/blog/tag/scope/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.basilv.com/psd</link>
	<description></description>
	<lastBuildDate>Wed, 25 Jan 2012 13:23:47 +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>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>Release When Ready</title>
		<link>http://www.basilv.com/psd/blog/2007/release-when-ready</link>
		<comments>http://www.basilv.com/psd/blog/2007/release-when-ready#comments</comments>
		<pubDate>Sun, 26 Aug 2007 15:26:17 +0000</pubDate>
		<dc:creator>Basil Vandegriend</dc:creator>
				<category><![CDATA[management]]></category>
		<category><![CDATA[project management]]></category>
		<category><![CDATA[quality]]></category>
		<category><![CDATA[schedule]]></category>
		<category><![CDATA[scope]]></category>
		<category><![CDATA[software releases]]></category>

		<guid isPermaLink="false">http://www.basilv.com/psd/blog/2007/release-when-ready</guid>
		<description><![CDATA[There are several strategies for producing software releases. One approach is to release by schedule – the software ships on a fixed date defined well in advance. Another method is to release based on budget – the work stops once the money available is exhausted. I believe, however, that the best strategy in general is [...]]]></description>
			<content:encoded><![CDATA[<p>There are several strategies for producing software releases. One approach is to release by schedule – the software ships on a fixed date defined well in advance. Another method is to release based on budget – the work stops once the money available is exhausted. I believe, however, that the best strategy in general is to release when ready. I define ready as meaning that the code has been reviewed and unit tested by developers and the software as a whole exercised by separate testers with no serious (unacceptable) outstanding defects. Blizzard Entertainment, the software game company behind many gaming hits such as World of Warcraft, Starcraft, and Diablo, has <a href="http://www.blizzard.com/inblizz/genfaq.shtml">publicly stated</a> that they use the release when ready strategy: "our goal at Blizzard is to not release a game until it's ready." I believe this is one of the key reasons Blizzard has enjoyed consistent success with their games.</p>
<p>Why do I feel that the release when ready strategy is generally best? The objective behind creating software is to have it fulfill a function, and to do this it must work properly. My definition of ready software is essentially a more precise way of saying that the software works. If the software does not work properly, why would you release it prematurely? There are a variety of factors responsible for the large amounts of premature software being released:</p>
<ul>
<li><strong>Politics</strong>: A mandated budget or release date with no basis in reality or an arbitrary reduction in the schedule after it has been estimated are both problematic. In fact, such practices could be considered a fourth release 'strategy': release by management fiat. A more subtle case when politics has a negative impact is when it is onerous to change the budget or release date due to the bureaucracy and paperwork involved.</li>
<li><strong>Fixed Resources</strong>: There are situations where the amount of time or budget is fixed and cannot be changed. One example is software changes due to new legislation that comes into effect at a certain date, such as the recent change in the start time of daylight saving time. Startups often have limited funds, and need to have a software release to market before that money is exhausted.</li>
<li><strong>Competition</strong>: There is a commonly-held perception that being first-to-market is a competitive advantage, and this belief causes marketing departments to push for accelerated release schedules.</li>
<li><strong>Demand for Features</strong>: For both commercial and enterprise software, consumers and users generally demand more features over quality. After people start using the software and discovering problems, then they might begin to demand higher quality. Even then, sometimes the users are not the purchasers, as is the case for most business and enterprises software. This demand for more features influences development teams to include just one more feature rather than spend the time necessary to ensure the software is ready for release (i.e. via code reviews and testing).</li>
<li><strong>Ignorance</strong>: Managers who do not understand software development may come to believe that the software is ready to release when it really is not. This is a common risk of producing software prototypes.
</ul>
<p>These factors can make it difficult to impossible for a development team to apply the release when ready strategy. It is possible, however, to adapt to a release by schedule (or budget) strategy while maximizing the odds of the software being ready. To do this, you first must <a href="http://www.basilv.com/psd/blog/2006/understanding-project-schedules">understand project schedules</a> - in particular how the interrelated factors of time, resources, scope, and quality affect the schedule. Releasing software when ready implies that the quality is high, and a release by schedule strategy implies that the time is fixed. Adding resources is one option, but this is ineffective in the short term (due to Brook's law),  difficult to accomplish quickly, and it does not help when the budget is fixed. This leaves scope as the single factor remaining. The key then is to carefully manage the scope throughout the entire development effort in a variety of ways:</p>
<ul>
<li>Prioritize requirements and features into must-haves, important, and nice-to-haves. Work on the highest priority features first.</li>
<li>Structure and organize features into self-contained units to make it possible to drop features that cannot be finished by the release date.</li>
<li>Fully complete features before moving on to new features, especially as the release date draws near. This means that the work activities should not be structured by technologies or application layers, but by end-to-end functionality. For example, rather than working on the database persistence layer first for all the features, and then turning to the business logic and user interface, do all three layers for a single feature only.</li>
<li>Track the progress on each feature according to whether it is ready for release or not. This means that a feature is not done when the developer is done coding, but is only after it has been reviewed, tested, and all the serious defects eliminated. This implies that you do not wait till the end of the project to do all the code reviews and testing. Tracking progress by ready-to-release features allows you to still release working software if you run out of time by dropping all the incomplete features.</li>
<li>Define a project milestone sufficiently in advance of the release date for making the final decision as to what features will make the release, and which features will be dropped. This allows the time required to remove dropped features from the code base or disable them and to perform 'final' testing on the release candidate.</li>
</ul>
<p>While the above points can help deal with a fixed release date, I feel it is far from the ideal situation. I believe the best approach is the release when ready strategy. You can still have a target release date, but make it flexible. You still aim for that release date using the points above for managing scope, but making the date flexible allows you to take a more rational and balanced approach. As the release date approaches, you can decide whether to cut features or push out the release date. During final testing, if too many defects are being found, you can decide to spend more time improving the quality of the software and push out the release date.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.basilv.com/psd/blog/2007/release-when-ready/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Crunch Mode</title>
		<link>http://www.basilv.com/psd/blog/2006/crunch-mode</link>
		<comments>http://www.basilv.com/psd/blog/2006/crunch-mode#comments</comments>
		<pubDate>Thu, 02 Nov 2006 15:00:53 +0000</pubDate>
		<dc:creator>Basil Vandegriend</dc:creator>
				<category><![CDATA[management]]></category>
		<category><![CDATA[overtime]]></category>
		<category><![CDATA[project management]]></category>
		<category><![CDATA[scope]]></category>

		<guid isPermaLink="false">http://www.basilv.com/psd/blog/2006/crunch-mode</guid>
		<description><![CDATA[I have recently experienced two episodes of 'crunch mode' - the flurry of activity prior to deploying new functionality into production. The crunch happens because there is insufficient time to do everything that needs to be done. To compensate, people work longer or take shortcuts like skipping thorough testing. The result is often a higher [...]]]></description>
			<content:encoded><![CDATA[<p>I have recently experienced two episodes of 'crunch mode' - the flurry of activity prior to deploying new functionality into production. The crunch happens because there is insufficient time to do everything that needs to be done. To compensate, people work longer or take shortcuts like skipping thorough testing. The result is often a higher rate of defects and shortcomings in the released application. I have spent several days recently during crunch #2 fixing and cleaning up a production defect introduced by crunch #1, and I wonder what new problems are lurking, waiting to be discovered.</p>
<p>I generally do not like operating in crunch mode, and I think it should be avoided whenever possible. The time 'saved' while in crunch mode is spent plus more afterwards reacting to and cleaning up the problems that the crunch has introduced. This is especially true for enterprise business applications, which are typically expected to be used and maintained for years. In this context, forcing a crunch mode to make a release a few weeks earlier is a questionable strategy. I have heard many stories of what I consider <em>artificial</em> crunch mode, where the imposed time constraints causing the crunch are arbitrary, frequently imposed by management for apparently no rational reason. Poor project management sometimes leads to crunches due to problems like overly optimistic estimates. Even with the best managers, however, crunch mode can still happen due to changes or events imposed by third parties like senior management, marketing, or the client. </p>
<p>If we cannot entirely eliminate crunch mode, how then can we lessen its negative impact? In my article on <a href="http://www.basilv.com/psd/blog/2006/understanding-project-schedules">understanding project schedules</a> I described the four factors that determine a project schedule: time, resources, scope, and quality. In crunch mode, the time and resources are typically fixed and insufficient for the amount of work to be done (the scope). I believe the main priority is to avoid taking shortcuts which comprise quality, as that is the most expensive to rectify afterwards. The best strategy is to minimize the scope as much as possible. While it is seldom possible to cut entire features, it is often possible to negotiate on specific aspects of each feature. Often slight simplifications in the requirements for a feature can greatly reduce the effort required. A related approach is to accept a certain number of low-impact defects in the application. This is often much less risky than rushing to fix these defects and possibly introducing new problems. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.basilv.com/psd/blog/2006/crunch-mode/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Understanding Project Schedules</title>
		<link>http://www.basilv.com/psd/blog/2006/understanding-project-schedules</link>
		<comments>http://www.basilv.com/psd/blog/2006/understanding-project-schedules#comments</comments>
		<pubDate>Thu, 11 May 2006 15:00:20 +0000</pubDate>
		<dc:creator>Basil Vandegriend</dc:creator>
				<category><![CDATA[management]]></category>
		<category><![CDATA[project management]]></category>
		<category><![CDATA[quality]]></category>
		<category><![CDATA[scope]]></category>

		<guid isPermaLink="false">http://www.basilv.com/psd/blog/2006/understanding-project-schedules</guid>
		<description><![CDATA[Project schedules are obviously important for project managers and team leads. They are often asked questions like "When will this project be finished?", with a typical follow-up question of "Can it be done sooner?". So one key responsibility of project managers is to create and maintain the project schedule. Does this mean that software developers [...]]]></description>
			<content:encoded><![CDATA[<p>Project schedules are obviously important for project managers and team leads. They are often asked questions like "When will this project be finished?", with a typical follow-up question of "Can it be done sooner?". So one key responsibility of project managers is to create and maintain the project schedule. Does this mean that software developers can remain blissfully ignorant about project schedules? I say no.</p>
<p>There are many good reasons why developers need to understand project schedules. When the project manager asks you how long it will take to do a task, the process of creating an estimate is essentially like creating a project schedule. As a senior developer, you might have junior developers working under you, and now have to provide estimates for their tasks. Junior or senior, poor decisions made by developers as they design and code the software can significantly increase the time spent on a feature. Developers ignorant of the schedule are more likely to negatively impact the schedule because of this. Often there is pressure to complete the project quicker - perhaps the customer wants the software sooner, or the project manager wants to finish 'early' in order to look good. The result can be an unrealistic or impossible project schedule imposed on the developers. The consequences are increased stress, <a href="/psd/blog/2006/overtime-considered-harmful">overtime</a>, and missed milestones. Understanding project schedules can help you negotiate a more reasonable schedule.</p>
<p>Project schedules depend on four inter-related factors: time, resources, scope and quality. Time is how long it will take to get the work done. Resources are the people that actually get the work done - the developers, testers, analysts, etc. Scope is the amount of work that needs to be done. Quality represents all aspects of quality concerning the software and the project, the most obvious of which is the defect rate.</p>
<p>These factors are inter-dependent: you cannot change one without affecting the others. For example, what if your project is scheduled to take ten weeks, and you are suddenly told it must be done in seven? You don't get more people (resources), nor can you eliminate some features (scope) or reduce the quality. Since you cannot change any of the other factors, you cannot change the amount of time required to complete the project. Sometimes people think that the project schedule is the reality, when it is actually a forecast that tries to predict what the future will be like. If conditions change, then you can update your schedule. But you cannot arbitrarily modify the schedule: this will cause it to diverge from reality and make it useless or even harmful.</p>
<p>In management books, it is common for quality to be left out as a main factor and instead be treated as an aspect of scope, leaving just three main factors of time, resources and scope. (See for example <a href="http://www.amazon.ca/exec/obidos/redirect?link_code=as2&#038;path=ASIN/1556159005&#038;tag=basilvandegri-20&#038;camp=15121&#038;creative=330641">Rapid Development</a><img src="http://www.assoc-amazon.ca/e/ir?t=basilvandegri-20&#038;l=as2&#038;o=15&#038;a=1556159005" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /> by Steve McConnell, page 126.) This is a reasonable choice that produces a simpler model. However, I prefer to have quality be a separate factor on its own. When project time lines are arbitrarily shrunk and the project finishes earlier, it is often because the quality of the software has been sacrificed in order to meet the aggressive deadline. By making quality a fourth factor of equal standing with the others, the trade-off between time, resources, or scope and quality becomes more apparent. To me, quality represents more than just the defect rate: it also includes the non-functional, implicit software requirements such as usability, maintainability, and scalability. </p>
<p>Any change to the project schedule typically involves a trade-off between two or more factors. You can reduce the time required to complete the project if you reduce the number of features to be delivered. If you want to implement more features, you can add more resources or increase the time required. If half-way through the project you lose a developer, you'll either need to increase the time required till completion, or reduce the number of features. </p>
<p>I created an applet called the <a href="http://www.basilv.com/psd/software-files/launchManagementDiamond.html">Management Diamond</a> to visually represent the relationship between the four factors of project schedules. This software is available to run or download from my <a href="http://www.basilv.com/psd/software">Software</a> page. This software is strictly for educational purposes, and is not meant to be accurate. It uses a constant, linear relationship between the four factors.</p>
<p>In reality, relationships between the factors are not always linear, nor do they stay constant throughout the project. If the quality is poor - many defects or difficult-to-maintain code - instead of saving time you will spend extra time due to the overhead imposed by the poor quality. At the start of a project, adding people will help you get more done in less time. But near the end of a project, Brook's law states the opposite: "Adding manpower to a late software project makes it later".  Brook's law comes true when the overhead spent by existing project resources in training the new additions to the team is greater than the contribution provided by the new people. In essence, while you have increased your resources, you have also increased your scope to include some new work - train the new people.</p>
<p>As software developers, we have limited control or influence over the number of people available for the project or the time available to complete the work. Often, even project managers have little control over resources and time. Lowering quality below a certain level hurts rather than helps. But scope - the remaining factor - is one we can play a significant role in determining. </p>
<p>The requirements phase of a project is the best time to control or reduce the scope. As requirements are being gathered, we can provide guidance on the level of effort required for each requirement. We can also suggest changes that reduce the level of effort, often with limited or no impact to users. With this information, the customer can make intelligent decisions about the value of each requirement in relation to the effort required. If resources or time is limited then this is the best point in the project to reduce the total effort required by controlling the scope.</p>
<p>Once construction begins and we are designing and coding individual features, we can still have a major impact on the scope. Often the requirements we are working from are sufficiently vague that we have several options for how to proceed. The more elaborate and complex the solution we choose, the longer it will take. The difference between the time required for the simplest versus the most elaborate solution can be several orders of magnitude. <a href="http://www.amazon.ca/exec/obidos/redirect?link_code=as2&#038;path=ASIN/1556159005&#038;tag=basilvandegri-20&#038;camp=15121&#038;creative=330641">Rapid Development</a><img src="http://www.assoc-amazon.ca/e/ir?t=basilvandegri-20&#038;l=as2&#038;o=15&#038;a=1556159005" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /> (page 332-333) has an excellent example of this. For a project to create a charting program, there is a requirement to support polymarkers (symbols like squares, circles, etc. that indicate positions on a graph). The requirement does not address what size these polymarkers should be, or whether the user should have control over the size. The simplest solution is to define constants in the code for these sizes, thus providing no ability for them to be changed. Time required: a few minutes. One of the most complex options is to provide a user interface for the user to specify the size of each of the polymarker shapes. Time required: a week or more. This tremendous variance in scope arises from a seemingly trivial aspect of the original requirement - the polymarker sizes. A developer unaware of the impact on the project schedule may by default choose the more complex solution - this is a natural bias for many developers. Combine this with similar decisions on other features, and the project will likely end up far behind its original schedule.</p>
<p>As software developers, our actions impact the project schedule, and we in turn are affected by the constraints imposed by the schedule. Understanding project schedules - the four factors of time, resources, scope, and quality - is therefore a necessity for us as professionals. To learn more about project schedules, I recommend the book <a href="http://www.amazon.ca/exec/obidos/redirect?link_code=as2&#038;path=ASIN/1556159005&#038;tag=basilvandegri-20&#038;camp=15121&#038;creative=330641">Rapid Development</a><img src="http://www.assoc-amazon.ca/e/ir?t=basilvandegri-20&#038;l=as2&#038;o=15&#038;a=1556159005" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /> by Steve McConnell.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.basilv.com/psd/blog/2006/understanding-project-schedules/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

