<?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>Platformability &#187; kanban</title>
	<atom:link href="http://blog.caplin.com/tag/kanban/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.caplin.com</link>
	<description>SWIMMING WITH TECHNOLOGY</description>
	<lastBuildDate>Sun, 29 Aug 2010 11:55:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Kanban exposes documentation bottlenecks</title>
		<link>http://blog.caplin.com/2010/04/28/kanban-exposes-documentation-bottlenecks/</link>
		<comments>http://blog.caplin.com/2010/04/28/kanban-exposes-documentation-bottlenecks/#comments</comments>
		<pubDate>Wed, 28 Apr 2010 15:39:20 +0000</pubDate>
		<dc:creator>Sarah</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[development process]]></category>
		<category><![CDATA[documentation]]></category>
		<category><![CDATA[kanban]]></category>
		<category><![CDATA[SkillsMatter]]></category>

		<guid isPermaLink="false">http://blog.caplin.com/?p=1613</guid>
		<description><![CDATA[Back in November I blogged about our company trialing Kanban, “Let’s all jump on the Kanban” which we have now extended to our Documentation Team – something described by David Joyce as BBC Kanban Flu. We kind of knew what was really delaying the release of documentation but it’s not until you make it transparent [...]]]></description>
			<content:encoded><![CDATA[<p>Back in November I blogged about our company trialing Kanban, “<a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2Jsb2cuY2FwbGluLmNvbS8yMDA5LzExLzIwL2xldHMtYWxsLWp1bXAtb24tdGhlLWthbmJhbi8=">Let’s all jump on the Kanban</a>” which we have now extended to our Documentation Team – something described by David Joyce as <a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3NraWxsc21hdHRlci5jb20vcG9kY2FzdC9hZ2lsZS1zY3J1bS9hLWpvdXJuZXktdG8tc3lzdGVtaWMtaW1wcm92ZW1lbnQtOTYy">BBC Kanban Flu</a>.</p>
<p>We kind of knew what was really delaying the release of documentation but it’s not until you make it transparent and have real measurements that it becomes something that cannot be ignored any more. As my old boss <a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3d3dy5ib3Roc2lkZXNvZnRoZXRhYmxlLmNvbS8=">Mark Suster </a>used to say “we manage what we measure”. This is where I think Kanban System’s greatest strength lies.</p>
<p>With Kanban we realised that while some of our documents are quickly produced, we have 7 documents in progress being “worked on” by 2 technical authors. I say “worked on” because all 7 are in some way being blocked by a developer who needs to provide input of some type. The average number of working days a document has been waiting for a developer is 14 days.</p>
<p>The documents in progress are waste – they offer no value to the business until we have released them to our clients, and this is costing us thousands!</p>
<p><strong>There are three main reasons why this is happening:</strong></p>
<p><strong><span id="more-1613"></span></strong></p>
<p>1. Developers are moved onto another project before documentation is finished.</p>
<p>2. There are few documentation tasks that get placed directly on a team’s boards &#8211; and when they do they are mostly given low priority and are at risk of falling off the board completely.</p>
<p>3. It’s a job developer’s are aware of via email but given the lack of formal processes around it, it always can wait until tomorrow, consequently resulting in them never getting to it.</p>
<p><strong>So what are we going to do about it?</strong></p>
<p>I strongly believe that unless documentation tasks are on a team’s board and given the required focus then they become forgotten. So as a result of following Kanban we have initiated some small process improvements in our attempt to improve flow, reduce waste and deliver more value to Caplin.</p>
<ul>
<li>A Technical Author is now invited to the cycle kick off meeting to highlight blocked documents, discuss who can remove the block and write task cards which are given to the appropriate Project Leads to ensure these make it on the team’s board for a proper time allocation for that developer.</li>
<li>Every week we will walk through the Documentation Kanban Board with all the Project Leads working together to remove the blocks and help flow so we can deliver documentation faster and get through the backlog quicker.</li>
</ul>
<p>We are also exploring how cycle-time could help with the estimation process of when a document is likely to be finished by and thereby giving us more predictability.</p>
<p><strong>I’ll keep you posted on how it goes.</strong></p>
<p><strong> </strong></p>
 <img src="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=1613" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://blog.caplin.com/2010/04/28/kanban-exposes-documentation-bottlenecks/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Agile Software Development – One Size Doesn’t Fit All</title>
		<link>http://blog.caplin.com/2010/04/02/agile-software-development-%e2%80%93-one-size-doesn%e2%80%99t-fit-all/</link>
		<comments>http://blog.caplin.com/2010/04/02/agile-software-development-%e2%80%93-one-size-doesn%e2%80%99t-fit-all/#comments</comments>
		<pubDate>Thu, 01 Apr 2010 23:01:39 +0000</pubDate>
		<dc:creator>Ian Alderson</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[kanban]]></category>
		<category><![CDATA[scrum]]></category>
		<category><![CDATA[xp]]></category>

		<guid isPermaLink="false">http://blog.caplin.com/?p=1830</guid>
		<description><![CDATA[As I mentioned in part I of this series, Adoption of Agile at Caplin, when we first started following an agile methodology (in our case Scrum) in February 2005 we were desperate to implement it successfully and wanted to adhere to all of the best practices. We persevered with this approach for several months, repeatedly [...]]]></description>
			<content:encoded><![CDATA[<p>As I mentioned in part I of this series, <a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2Jsb2cuY2FwbGluLmNvbS8yMDEwLzAzLzI2L2FnaWxlLXNvZnR3YXJlLWRldmVsb3BtZW50LWFkb3B0aW9uLW9mLWFnaWxlLWF0LWNhcGxpbi8=">Adoption of Agile at Caplin</a>, when we first started following an agile methodology (in our case <a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TY3J1bV8oZGV2ZWxvcG1lbnQp">Scrum</a>) in February 2005 we were desperate to implement it successfully and wanted to adhere to all of the best practices.</p>
<p>We persevered with this approach for several months, repeatedly referring to the books on Scrum we had purchased and the numerous websites on the subject which were cropping up at the time, to find out ways of improving the process. </p>
<p>With hindsight this looks a little conservative, however back then we were still getting to grips with agile and didn&#8217;t want to make any significant adjustments that hadn&#8217;t been tried and proven elsewhere.</p>
<p><span id="more-1830"></span></p>
<p>Eventually we built up our confidence in deciding on the sort of tweaks that we could make to the process ourselves. Coupled with this many of the new developers that joined our team at this stage also brought with them their own experiences of agile development, which we were able to use to induce change. </p>
<p>Some of these changes were very successful and are still integral parts of our process today, whilst others only lasted for a few sprints before being dropped for alternate solutions.</p>
<p>So, without further ado, welcome to our Hall of Fame. And to prove that progress doesn’t come without its fair share of mistakes, our Hall of Shame follows.</p>
<h2>Hall of Fame</h2>
<p>Here are some of changes that we made to the process which proved successful:</p>
<ul style="padding-left: 16px;">
<li style="padding-top: 2px;">We found the 4 week iteration cycle was too long, and restricted our ability to respond to customer needs promptly. We reduced our iterations to 2 weeks.</li>
<li style="padding-top: 2px;">We stopped calculating the number of ideal hours the team could theoretically take on. This was quite time consuming and <a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3d3dy5leHRyZW1lcHJvZ3JhbW1pbmcub3JnL3J1bGVzL3ZlbG9jaXR5Lmh0bWw=">project velocity</a> seems to do an equally good job.</li>
<li style="padding-top: 2px;">We started to update our story board mid sprint, adding in new tasks (not stories!) as they come up. Initially we were loath to change the tasks on the board since this felt like some kind of scope creep. However those cards reflected what we thought we needed to do during the initial estimation meeting. Contact with the real code often highlighted things that we had forgotten or hadn&#8217;t even realised would need to be done, and the tasks on the board would no longer reflect what was really going on. A big personal thanks to <a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3R3aXR0ZXIuY29tL2ZhdW5hNQ==">Richard Chamberlain</a> who introduced this practice to me.</li>
<li style="padding-top: 2px;">We now ensure that the tasks are all relatively small. The state of a task card is binary, it&#8217;s either done or not done (including all testing and documentation facets that might be associated with it). Monitoring how much work has been done and how much is left to do is hard if there are only a few task cards that will each take a few days to complete. Breaking those larger tasks down into their constituent parts will help provide visibility on the progress.</a>
<li style="padding-top: 2px;">We adopted the use of <a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3d3dy5leHRyZW1lcHJvZ3JhbW1pbmcub3JnLw==">Extreme Programming (XP)</a> style user stories and story boards instead of using a sprint backlog spreadsheet</li>
<li style="padding-top: 2px;">We split the development team out into separate scrums. The reasons for this were:
<ul>
<li style="padding-top: 2px;">As the development team grew there were simply too many people to manage within a single scrum</li>
<li style="padding-top: 2px;">A single scrum ended up containing stories that were deliverable for different customers or products. It was nearly impossible to decide which story to work on next during the sprint because they didn&#8217;t have comparable priorities. Was it more important to ensure all stories were completed for one customer, but none for another, or to ensure that some stories were completed for both?</li>
<li style="padding-top: 2px;">Estimation was a serial process that took a longer and longer time, typically a whole afternoon, as the team grew and was able to take on more work items. Often only half of the developers would have any idea how long a particular task might take since it was in a product and/or language they didn&#8217;t know. By the end of the meeting everyone was tired, and were desperate to escape from it, which was probably a significant factor in some inaccurate estimates.</li>
</ul>
</li>
<li style="padding-top: 2px;">We learnt how important it was to ensure the relative priorities are correct before determining which stories were taken into the sprint. After our estimation session had been completed we reported to the stakeholders what work had been signed up to. On a few occasions the stakeholders had assumed that a certain number of stories would be signed up to and were surprised to find out that sometimes they weren&#8217;t. When this happened the real priorities became apparent, and the team has to go back and start another estimation phase to address this. I think this is summarised by asking the stakeholders the question, &#8220;if we can only do one story, which must it be?&#8221;, then &#8220;if we can only do two stories, which should the second be?&#8221; and so on.</li>
<li style="padding-top: 2px;">We needed to focus the output of our retrospectives, rather than trying to take on too much change. The retrospectives themselves were very good, however we had a tendency to take many actions out of them, most, if not all, of which didn&#8217;t really get implemented. We now focus on agreeing the one or two most important actions to undertake from retrospective and focus on actually carrying them out.</li>
<li style="padding-top: 2px;">When we are unsure of how much effort might be needed to complete a new piece of work, we scheduled a spike (<a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3B1dHRpbmd0aGV0ZWFpbnRvdGVhbS5ibG9nc3BvdC5jb20v">Ivan Moore&#8217;s</a> terminology), or tracer bullet (<a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3d3dy5tb3VudGFpbmdvYXRzb2Z0d2FyZS5jb20v">Mike Cohn&#8217;s</a> vernacular), within a sprint to drive out the risk and help come up with a more reasonable estimate on how long the real work will take.</li>
<li style="padding-top: 2px;">We changed the way we wrote our stories to focus on delivering <a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9WZXJ0aWNhbF9zbGljZQ==">thin vertical slices</a> of functionality. This way we are more likely to deliver demonstrable features at the end of a sprint, even if things prove more difficult than we first expected.</li>
</ul>
<h2>Hall of Shame</h2>
<p>Here are the changes that we made to the process that turned out to be less than successful:</p>
<ul style="padding-left: 20px;">
<li style="padding-top: 2px;">We attempted to improve estimates by tracking the actual time spent completing each task. At the end of the sprint we could look at the actuals compared to the estimates, and analyse the causes for any with large discrepancies. This Turned out to be complete overkill. Those stories that significantly overran were always identified without any analysis within the retrospectives anyway, and there was a small but noticeable overhead of capturing the actuals.</li>
<li style="padding-top: 2px;">We also went through a phase of trying to come up with better release plan level estimates by pre-planning a couple of iterations ahead. Unfortunately this broke the all important <a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3d3dy5hZ2lsZWZvcmFsbC5jb20vMjAwOS8wMi8yMy9uZXctdG8tYWdpbGUtcmVtZW1iZXItb25lLXRoaW5nLWp1c3QtZW5vdWdoLWp1c3QtaW4tdGltZS8=">just in time</a> aspect of agile development. Several times the stories that we had preplanned a few sprints ahead were de-prioritised as new customer requirements came in.  These stories sat in the backlog slowly decaying. The time we spent on the pre-planning was wasted. Even if one of these stories made it into a sprint, and some didn&#8217;t even make it that far, we found that things had changed sufficiently within the code base such that the story needed to be estimated again. Nowadays we rely on higher level estimates combined with velocity to help with our release level planning.</li>
</ul>
<h2>One Size Doesn&#8217;t Fit All</h2>
<p>The evolution of our development process has led me to the conclusion that one size doesn&#8217;t fit all. The ridiculous thing is how long it took me to realise this, since the first line of the <a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2FnaWxlbWFuaWZlc3RvLm9yZy8=">agile manifesto</a> pretty much points to this:</p>
<blockquote><p>
Individuals and interactions over processes and tools
</p></blockquote>
<p>Ultimately any successful agile development process that you read about within a book or a blog, such as this one, is a process that has been tailored to suit the team using it. Sometimes the author has experience of working with many agile teams and the insights that they have can be invaluable since they can provide generalised advice that is proven to have worked in several different environments. However they don&#8217;t have experience working in your team, with your unique blend of skill sets.</p>
<p>Even if your team is working on a similar type of problem and/or with identical technologies to another team, there is no guarantee that adopting its process will lead to success. Instead it can act as a good template to base your process on, one that can be adapted over time to suit your team&#8217;s unique skill sets.</p>
<p><b>Retrospective Evolution</b></p>
<p>This doesn&#8217;t mean that you shouldn&#8217;t look around for ideas on how to improve your development process. On the contrary, there is no point reinventing the wheel. An idea from another agile team might work perfectly within your team, or might work after some adjustments. Alternatively it may prove to be the seed that allows you to reach your own solution.</p>
<p>That said, the drive for the improvements to the process should come from the retrospectives and we should continually be striving to improve the it. For example:</p>
<ol style="padding-left: 20px;">
<li>Could any of the problems that were experienced during the last sprint have been avoided if there was a suitable process in place?</li>
<li>Alternatively are there any parts of the process that are no longer necessary or which can be streamlined?</li>
</ol>
<p><b>The Saga Continues</b></p>
<p>Here at Caplin our development process continues to evolve. As has been mentioned before we have been trialling Kanban for a few of our internal development projects. It promises many potential improvements to the development process, the question is when will these changes occur, and what will they be.</p>
<p><b>Afterthoughts</b></p>
<p>Having written this article I have subsequently become aware that a whole track was dedicated to Agile Evolution at QCon London 2010, held between 8th and 12th of March. Much of what was spoken about in there echoes the experiences that we have had at Caplin and I would thoroughly recommend looking through the slides:</p>
<ul style="padding-left: 20px;">
<li style="padding-top: 2px;"><a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3Fjb25sb25kb24uY29tL2xvbmRvbi0yMDEwL2ZpbGU/cGF0aD0vcWNvbi1sb25kb24tMjAxMC9zbGlkZXMvS2VpdGhCcmFpdGh3YWl0ZV9Ob3RoaW5nTmV3VW5kZXJUaGVTdW5Db250aW51YWxseVJlZGlzY292ZXJpbmdUaGVHb29kV2F5c1RvQnVpbGRTb2Z0d2FyZS5wZGY=">Nothing New Under the Sun: continually rediscovering the good ways to build software</a> by Keith Braithwaite</li>
<li style="padding-top: 2px;"><a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=QnJlYWtpbmcgeW91ciBBZ2lsZSBBZGRpY3Rpb24=">http://qconlondon.com/london-2010/file?path=/qcon-london-2010/slides/RachelDavies_BreakingYourAgileAddiction.pdf</a> by Rachel Davies</li>
<li style="padding-top: 2px;"><a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3Fjb25sb25kb24uY29tL2xvbmRvbi0yMDEwL2ZpbGU/cGF0aD0vcWNvbi1sb25kb24tMjAxMC9zbGlkZXMvSmVzcGVyQm9lZ19LYW5iYW5Dcm9zc2luZ1RoZUxpbmVQdXNoaW5nVGhlTGltaXRPclJlZGlzY292ZXJpbmdUaGVBZ2lsZVZpc2lvbi5wZGY=">Kanban &#8211; Crossing the line, pushing the limit or rediscovering the agile vision?</a> by Jesper Boeg</li>
<li style="padding-top: 2px;"><a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3Fjb25sb25kb24uY29tL2xvbmRvbi0yMDEwL2ZpbGU/cGF0aD0vcWNvbi1sb25kb24tMjAxMC9zbGlkZXMvR3VzUG93ZXJfYW5kX1NpbW9uQmFrZXJfUHJvZHVjdERldmVsb3BtZW50SW5UaGVMYW5kT2ZUaGVGcmVlLnBkZg==">Product Development in the Land of the Free</a> by Simon Baker &#038; Gus Power</li>
</ul>
 <img src="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=1830" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://blog.caplin.com/2010/04/02/agile-software-development-%e2%80%93-one-size-doesn%e2%80%99t-fit-all/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>An Estimate is not a Guarantee</title>
		<link>http://blog.caplin.com/2010/02/26/an-estimate-is-not-a-guarantee/</link>
		<comments>http://blog.caplin.com/2010/02/26/an-estimate-is-not-a-guarantee/#comments</comments>
		<pubDate>Fri, 26 Feb 2010 12:57:27 +0000</pubDate>
		<dc:creator>Ian Alderson</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[kanban]]></category>
		<category><![CDATA[scrum]]></category>
		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://blog.caplin.com/?p=1212</guid>
		<description><![CDATA[The statement that an estimate is not a guarantee might sound obvious but it often feels anything but. Over the years I have frequently heard managers complain that something has taken longer than was anticipated and have been told to improve the estimates. Of course at times the estimates have been inaccurate, with features taking [...]]]></description>
			<content:encoded><![CDATA[<p>The statement that an estimate is not a guarantee might sound obvious but it often feels anything but. Over the years I have frequently heard managers complain that something has taken longer than was anticipated and have been told to improve the estimates.</p>
<p>Of course at times the estimates have been inaccurate, with features taking far more time to implement than was initially predicted. The question is how to learn from these experiences to help improve your estimates. This is especially pertinent for software engineers within financial services because this same conundrum is at the heart of pricing financial instruments.</p>
<p>This article looks at how the <a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3d3dy5pbnZlc3RvcGVkaWEuY29tL3Rlcm1zL3IvcmF0aW9uYWx0aGVvcnlvZmV4cGVjdGF0aW9ucy5hc3A=">Rational Expectations Theory</a> can help you improve your estimates in software development. It starts by looking at estimating something much easier than a software enhancement, your journey time into work, and demonstrates when that estimate should be considered good or bad. It then looks how this can be applied to software development.</p>
<p><span id="more-1212"></span></p>
<h2>Rational Expectations Theory</h2>
<p>A few years ago, I was introduced to the <a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3d3dy5pbnZlc3RvcGVkaWEuY29tL3Rlcm1zL2UvZWZmaWNpZW50bWFya2V0aHlwb3RoZXNpcy5hc3A=">Efficient Market Hypothesis</a> whilst reading about how stocks are priced. This hypothesis is built upon the Rational Expectations Theory. Paraphrasing this theory, it states that an individual bases their estimate on:</p>
<ol>
<li>Their rational outlook</li>
<li>All the available information</li>
<li>Their previous experiences</li>
</ol>
<p>Although both the hypothesis and the theory are out of favour with many economists, the principles of rational expectations struck a chord with me.</p>
<p><b>Rational Expectations applied to Journey Times</b></p>
<p>To demonstrate rational expectations in practice, consider the question of how long it will take you the next time you travel into work? Assuming that you don&#8217;t work at home, aren&#8217;t starting a brand new job and haven&#8217;t just moved homes, then this is something that you should be pretty good at. After all you have an abundance of experience making that journey.</p>
<p>My estimate for my door to door journey time would be an hour. However there is a pretty big deviation between my fastest and slowest ever times. Every now and again my interconnections align perfectly and I can make the journey in 45 minutes. On the other hand, it has taken me 3 hours when my train broke down and, to compound matters, the tube line I needed to complete my journey was closed.</p>
<p>Rational Expectation Theory says that estimate of 1 hour is good because it is the equilibrium of my times. An estimate of 45 minutes would be bad because it&#8217;s overly optimistic and I&#8217;d rarely expect to meet it. An estimate of 3 hours is also bad because it is too pessimistic since it has only occurred once, and the circumstances were exceptional.</p>
<p>The theory also states that the estimate is based on all available information. My estimate of 1 hour would no longer be reasonable if there was a weather forecast for tomorrow predicting snow. In Britain <a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9UaGVfd3JvbmdfdHlwZV9vZl9zbm93">snow is renowned</a> for crippling the travel network. It doesn&#8217;t matter whether I have heard the weather forecast or not, it is my responsibility to find out all relevant information to aid my estimate. Ignorance is no excuse.</p>
<p><b>Rational Expectations applied to Development</b></p>
<p>I like the Rational Expectation Theory because I think its three rules capture the essence of what estimating in software development is about. Prior to reading about the theory I didn&#8217;t think too much about how I came up with an estimate, it was pretty much a gut feel. Now I realise that subconsciously these rules were actually what were going through my mind. The theory helps me to break the estimate into its constituent parts.</p>
<p>Applying the theory to development leads to these conclusions:</p>
<ul>
<li>Two features on the backlog, in the same area of the code base, with a comparable depth and level of complexity should have similar estimates.</li>
<li>Knowledge about how easily a new feature might be implemented within the current code base is important. If you know the code will need some refactoring in order to implement the new functionality cleanly, then this should be allowed for. Of course the <a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9EaW1pbmlzaGluZ19yZXR1cm5z">law of diminishing returns</a> applies here; familiarity with, rather than intimate knowledge of, how the feature might be implemented will be good enough in most cases.</li>
<li>Allow for your past experiences with your code base. Take the case where the two similar features have been sized at 1 day (or story point, or other unit of measurement). Whilst working on the first you uncover some unexpected issues, and it ends up taking 4 days to complete. Does it still make sense for the second item to still be sized at 1 day? The answer to this depends on which of these two scenarios the overrun fell into:
<ol>
<li>If the reason it took much longer to complete is systematic and likely to affect the estimates for all the other features, then <a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3d3dy5leHRyZW1lcHJvZ3JhbW1pbmcub3JnL3J1bGVzL3ZlbG9jaXR5Lmh0bWw=">project velocity</a> will be able to compensate for it. The relative sizes of the estimates are still the same.</li>
<li>If the reason was localised to the code surrounding that feature then it is only rational to keep the estimate at 1 day if I believe that the problems were an anomaly and won&#8217;t impact the other feature.</li>
</li>
</ol>
</ul>
<p><b>Well, that&#8217;s nice in Theory&#8230;</b></p>
<p>I find that the Rational Expectation Theory is a useful reminder of what to do when estimating, however in software development we are never building the same thing twice (we are <a href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Eb24="t_repeat_yourself\">DRY</a> here aren&#8217;t we?). As a result the idea of an equilibrium point is non-existent; we are dealing with a unique piece of development with a sample set of one. However a lot of the time we are doing similar things that we&#8217;ve done before, so we do have a reasonable point of reference for comparison.</p>
<h2>When is an Estimate bad?</h2>
<p>In my example of a journey to work I estimated that it would take an hour. I should be pretty good at knowing how long this takes since I have made the journey over 2,000 times. If the journey takes me an hour and a half tomorrow does that make it a bad estimate? That depends. If there was planned engineering work causing a reduced service that I could have found out about in advance, then it was a bad estimate. I should have allowed for the impact of the engineering work. If the delay was caused by my train breaking down then the estimate was rational and therefore wasn&#8217;t bad. After all, it is just a estimate, not a guarantee.</p>
<p>The same logic applies to estimates given for development. We never have the luxury of having written exactly the same functionality many times previously, but there are often significant overlaps. Provided that your estimates are rational, then you can be confident that things should average out. Some features will take longer to write than estimated whilst others will take less time. Also don&#8217;t be afraid to re-estimate specific features if fresh evidence comes to light that shows that the estimate for a particular feature is irrational.</p>
<h2>Afterthought: A World Free of Estimates</h2>
<p>At Caplin we have spent the last few months trialling <a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2FnaWxlcHJvZHVjdGRlc2lnbi5jb20vYmxvZy8yMDA5L2thbmJhbl9vdmVyX3NpbXBsaWZpZWQuaHRtbA==">Kanban</a> with several of our internal development teams, which offers a idyllic world where estimates aren&#8217;t needed.</p>
<p>I am still trying to grapple with the implications of this, and am looking forward to understanding it better. My gut feeling is even with Kanban estimates will still be necessary at a high level due to the inexorable fact that the priority of some features will always be based on the cost to build them, which is a multiple of number of people working on it by the time taken by them to build it.</p>
 <img src="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=1212" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://blog.caplin.com/2010/02/26/an-estimate-is-not-a-guarantee/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Designing a kanban board &#8211; not as simple as you might think</title>
		<link>http://blog.caplin.com/2010/02/16/designing-a-kanban-board-not-as-simple-as-you-might-think/</link>
		<comments>http://blog.caplin.com/2010/02/16/designing-a-kanban-board-not-as-simple-as-you-might-think/#comments</comments>
		<pubDate>Tue, 16 Feb 2010 14:33:18 +0000</pubDate>
		<dc:creator>Adam Shone</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[kanban]]></category>

		<guid isPermaLink="false">http://blog.caplin.com/?p=1279</guid>
		<description><![CDATA[Last month Emin Tatosian posted an article about agile team-board layouts in which he showcases one of our more successful board designs. It&#8217;s fair to say that we don&#8217;t always get it right first time, so I thought I&#8217;d share an example of a layout that seemed to be a good idea at first but [...]]]></description>
			<content:encoded><![CDATA[<p>Last month <a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2Jsb2cuY2FwbGluLmNvbS9hdXRob3IvZW1pbnRjYXBsaW5jb20=" 0="target="_BLANK"">Emin Tatosian</a> posted an <a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2Jsb2cuY2FwbGluLmNvbS8yMDEwLzAxLzEzL2FuLWFnaWxlLXRlYW0tYm9hcmQtbGF5b3V0LXRoYXQtd29ya3MtZm9yLXVzLWZvci1ub3c=" 0="target="_BLANK"">article</a> about agile team-board layouts in which he showcases one of our more successful board designs. It&#8217;s fair to say that we don&#8217;t always get it right first time, so I thought I&#8217;d share an example of a layout that seemed to be a good idea at first but turned out to be badly flawed.</p>
<p><span id="more-1279"></span></p>
<p>A few sprints ago I moved to a team in charge of maintaining our existing products and reducing technical debt. We had a backlog of low priority bug fixes and enhancements to work through and no specific client deadlines, so as team lead I thought this would be a good opportunity to try out the <a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3d3dy5pbmZvcS5jb20vYXJ0aWNsZXMvaGlyYW5hYmUtbGVhbi1hZ2lsZS1rYW5iYW4=" 0="target="_BLANK"">kanban</a> methodology. After a bit of consideration the team came up with this board layout:</p>
<p><a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2Jsb2cuY2FwbGluLmNvbS93cC1jb250ZW50L3VwbG9hZHMvYm9hcmQucG5n"><img class="alignnone size-full wp-image-1300" src="http://blog.caplin.com/wp-content/uploads/board.png" alt="" width="616" height="275" /></a></p>
<p>We thought that the workflow for any given story would be along these lines:</p>
<ul>
<li>A <strong>developer</strong> or pair of developers picks the top story card from the backlog and moves it to column 1. We use the <a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3d3dy5zbGlkZXNoYXJlLm5ldC9hZ2lsZWVlL3NldmVuLWtleS1zdWNjZXNzLWZhY3RvcnMtZm9yLWFnaWxlLXRlc3Rpbmctc3VjY2Vzcw==" 0="target="_BLANK"">power of three</a> concept for pre-planning, so at this point the developer will go and grab the <strong>product owner</strong> and a <strong>QA engineer</strong> to have a quick chat about what the task involves. The acceptance criteria will be determined at this point. The card is then moved to column 2.</li>
<li>Any free <strong>developer</strong> can pick up the card from column 2 and move it to column 3 to start work on it. At this point the developer should break the story down into tasks and place the task cards in column 4 as he works on them.</li>
<li>When the <strong>developer</strong> is finished with the story he will get a <strong>QA engineer</strong> (ideally the one involved in the pre-planning stage) for a quick &#8220;show me&#8221;, to demonstrate the fix. The card then moves to column 5.</li>
<li>A free <strong>QA engineer</strong> will pick up the card from column 5 and move it to column 6, then test the change thoroughly. This involves verifying the fix in every browser that we support, attempting to find edge cases, checking that sufficient automated tests have been written and so on.</li>
<li>When the <strong>QA engineer</strong> is satisfied, the card moves to column 7 and is done.</li>
</ul>
<p>That&#8217;s what we thought would happen, and we were fairly confident that the board matched our actual workflow. However when we put it into practice we quickly discovered that the <a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9IZWxtdXRoX3Zvbl9Nb2x0a2VfdGhlX0VsZGVyI01vbHRrZS4yN3NfVGhlb3J5X29mX1dhcg==" 0="target="_BLANK"">adage</a> about no battle plan surviving first contact with the enemy was coming true &#8211; cards were bunny hopping across the board with scant regard for several of the columns:</p>
<p><a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2Jsb2cuY2FwbGluLmNvbS93cC1jb250ZW50L3VwbG9hZHMvYm9hcmQyLnBuZw=="><img class="alignnone size-full wp-image-1302" src="http://blog.caplin.com/wp-content/uploads/board2.png" alt="" width="616" height="275" /></a></p>
<p>It was soon fairly obvious why this was happening.</p>
<ul>
<li>After the pre-planning stage (column 1) the <strong>developer</strong> would always begin work on the task immediately and move it directly to column 3 &#8211; it would be very odd for a developer to gather up the relevant people for a planning session and then leave the card in column 2, going off to work on something else. Column 2 is therefore completely redundant.</li>
<li>Most of our stories were fairly trivial bug fixes which resisted our attempts to break them down into sub-tasks. This meant that in practice the entire story card would just be moved straight into column 4, skipping column 3 completely. This probably indicates that our stories were too small &#8211; it would have made more sense for a story to take the form &#8220;Fix 5 bugs in product X&#8221;, which can naturally be split into sub-tasks.</li>
<li>After the &#8220;show me&#8221; session the <strong>QA engineer</strong> would almost always take on the testing straight away, moving the card straight from column 4 to column 6. Cards very rarely paused along the way in column 5.</li>
</ul>
<p>Needless to say, this all came out during our first sprint <a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3d3dy5pbmZvcS5jb20vbmV3cy8yMDA5LzA5L2tleS1lbGVtZW50cy1hZ2lsZS1yZXRyb3NwZWN0aXZl" 0="target="_BLANK"">retrospective</a> and our kanban boards have evolved since that first attempt. But it taught me something &#8211; you might think that you can draw out your workflow with your eyes closed, but how closely does your theory match reality?</p>
 <img src="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=1279" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://blog.caplin.com/2010/02/16/designing-a-kanban-board-not-as-simple-as-you-might-think/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Agile Framework Development</title>
		<link>http://blog.caplin.com/2010/02/02/agile-framework-development/</link>
		<comments>http://blog.caplin.com/2010/02/02/agile-framework-development/#comments</comments>
		<pubDate>Tue, 02 Feb 2010 12:58:53 +0000</pubDate>
		<dc:creator>Ian Alderson</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[kanban]]></category>
		<category><![CDATA[scrum]]></category>
		<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[xp]]></category>

		<guid isPermaLink="false">http://blog.caplin.com/?p=1134</guid>
		<description><![CDATA[At times it seems that the philosophy of agile software development is at odds with that of framework development. Given the amount of print and web space dedicated to agile methodologies, it&#8217;s incredible how little is dedicated to this topic. It&#8217;s almost as if this conflict needs to be kept hidden away from view, not [...]]]></description>
			<content:encoded><![CDATA[<p>At times it seems that the philosophy of agile software development is at odds with that of framework development. Given the amount of print and web space dedicated to agile methodologies, it&#8217;s incredible how little is dedicated to this topic. It&#8217;s almost as if this conflict needs to be kept hidden away from view, not to be discussed in public.</p>
<p>At Caplin we are living proof that framework development can be achieved following agile principles. We have been successfully building frameworks and APIs for the past 5 years using various agile methodologies from <a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TY3J1bV8oZGV2ZWxvcG1lbnQp">Scrum</a>, to a mix of Scrum and <a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9FeHRyZW1lX1Byb2dyYW1taW5n">XP</a>, to <a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3d3dy5hZ2lsZXByb2R1Y3RkZXNpZ24uY29tL2Jsb2cvMjAwOS9rYW5iYW5fb3Zlcl9zaW1wbGlmaWVkLmh0bWw=">Kanban</a>.</p>
<p>This article represents the approaches that we have undertaken to successfully build our frameworks.</p>
<p><span id="more-1134"></span></p>
<p><strong>The Problem with Refactoring Framework</strong></p>
<p>The specific issue in question is the idea that code should be kept lean, with the bare minimum implemented to achieve the required functionality within an iteration. If further functionality requires this code be be modified, usually within another iteration, then no problem, just refactor it until it does what needs to do. The unit tests that you wrote previously can help give you confidence that the functionality of any unmodified code will still work as expected, whilst new or updated unit tests will cover the additional functionality.</p>
<p>The decision to refactor, even a large refactoring effort, isn&#8217;t too hard to make when you are in complete control of the code base, for example when you are producing the whole application. However this luxury isn&#8217;t so trivial when you&#8217;re developing a framework. By all means you can refactor your code, however if the code you want to change is part of the public API, then you need to consider what impact this might have on the users of your framework.</p>
<p><strong>Techniques for Building Agile Frameworks</strong></p>
<p>Fortunately there are a number of techniques that can be applied to tackle this problem, which are described below. I would also recommend reading the short, but excellent, Chapter &#8220;Evolving Frameworks&#8221; from <a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9LZW50X0JlY2s=">Kent Beck&#8217;s</a> book <a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3d3dy5hbWF6b24uY28udWsvSW1wbGVtZW50YXRpb24tUGF0dGVybnMtQWRkaXNvbi1XZXNsZXktU2lnbmF0dXJlLUtlbnQvZHAvMDMyMTQxMzA5MS8=">Implementation Patterns</a>. It provides valuable insights on the subject, based on Beck&#8217;s own experience of making <a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3d3dy5qdW5pdC5vcmcv">JUnit 4</a> backwardly compatible, despite some significant changes to the API.</p>
<p><a name="backwards_compatibility"><strong>Backwards Compatibility</strong></a></p>
<p>One technique is to simply keep everything backwardly compatible, no matter how difficult it is to do this. All of the classes and methods provided previously must still be present and provide the same functionality, even if the underlying implementation has been modified. New functionality is provided in parallel to this.</p>
<p>Any parts of the framework that you would prefer your customers to stop using, even though it is still fully functional, should be flagged as deprecated, and the documentation should link to the classes or methods that should be used instead. This provides your customers a chance to migrate away from the parts of the API that you are unsatisfied with as it suits them. This seems to be the approach that has been taken with Java where parts of the API have been deprecated for a decade but can still be used.</p>
<p>Once parts of the framework have been deprecated for a while, you also have the option of making an intentional <a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=I2JyZWFraW5nX2NoYW5nZQ==">breaking change</a> to remove them. This was the approach taken for <a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2RvY3MucHl0aG9uLm9yZy9kZXYvMy4wL3doYXRzbmV3LzMuMC5odG1s">Python 3</a>, which is deliberately backwardly incompatible with earlier versions. In this case a automated migration tool was created to convert from Python 2 to Python 3 code to help soften the blow. A similar approach is a good idea to help your customers identify the areas of their code they will need to update once they take the new version of your framework with the breaking change.</p>
<p><a name="versioned_api"><strong>Versioned APIs</strong></a></p>
<p>A specialisation of keeping everything <a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=I2JhY2t3YXJkc19jb21wYXRpYmlsaXR5">backwardly compatible</a> is to introduce a versioned API. A versioned API can be used when you have realised that one of the interfaces that your customer&#8217;s code implements is missing a particular method. Instead of adding the method to the existing interface, which will cause a compilation error for your customer, you can create a new interface that extends the original one. The new method can be added to the new interface, and your code that calls that method can check whether the object instance implements the old interface, in which case the method is not invoked, or the new interface, where it is. As before, it is worthwhile deprecating the old interface.</p>
<p>An example of a versioned API can be seen with the JMX interface <a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2phdmEuc3VuLmNvbS9qYXZhc2UvNi9kb2NzL2FwaS9qYXZheC9tYW5hZ2VtZW50L05vdGlmaWNhdGlvbkVtaXR0ZXIuaHRtbA=="><code>NotificationEmitter</code></a>, which extends <a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2phdmEuc3VuLmNvbS9qYXZhc2UvNi9kb2NzL2FwaS9qYXZheC9tYW5hZ2VtZW50L05vdGlmaWNhdGlvbkJyb2FkY2FzdGVyLmh0bWw="><code>NotificationBroadcaster</code></a>, adding a single method: <code>removeNotificationListener(NotificationListener listener, NotificationFilter filter, Object handback)</code>.</p>
<p>A problem with this approach is if you need to add a versioned API on top of an existing one. These multiple layers are likely to make the calling code turn pretty nasty, and can bloat out your API. At this stage it is worth considering if it is possible to make a <a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=I2JyZWFraW5nX2NoYW5nZQ==">breaking change</a>.</p>
<p>Another problem is what to call the versioned API. The JMX example used different names <code>NotificationEmitter</code> and <code>NotificationBroadcaster</code>, although without knowing the API I wouldn&#8217;t be able to say which one superseded the other. It might also be difficult to come up with a different name that is meaningful. An alternate naming convention is to number to interface, for example <a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2FhNzUyNTc0KFZTLjg1KS5hc3B4"><code>IHTMLDocument2</code></a>. My main issue with this approach is that it can complicate matters if you ever decide to remove deprecated parts of the API. If <code>IHTMLDocument</code> was to be removed, it looks odd to have an interface called <code>IHTMLDocument2</code> hanging around &#8211; surely it should be renamed <code>IHTMLDocument</code>, however this enters a compatibility minefield.</p>
<p><a name="breaking_change"><strong>Breaking Change</strong></a></p>
<p>Most of the time, I consider breaking changes to be a last resort. Breaking changes are always going to be frustrating for your customers, and if you keep forcing them to rewrite their code you&#8217;ll soon find that they have ceased to be your customer. However, as I have alluded to earlier, there can be good reasons to make breaking changes.</p>
<p>Maintaining deprecated parts of an API can become an expensive overhead, bloating out what might otherwise be a concise and neat API. Periodically removing these deprecated APIs can be worthwhile, provided that your customers have had adequate time and warning to move onto the new APIs.</p>
<p>Alternatively it might be very difficult to make an API backwardly compatible, or an API may be just too wrong to be kept. In both cases it is vital to explore all the possibilities suggested earlier to see if there is any way to avoid making the breaking change. If it is necessary to make the breaking change, consider how you can lessen the impact for your customers.</p>
<p><strong>Always Consider Your Customer</strong></p>
<p>Regardless of the reasons behind the breaking changes, it is vital that you focus on making your customer&#8217;s experience as pain free as possible. After all they want to focus their efforts on adding their business value on top of your framework, not bug fixing issues introduced due to changes to your framework.</p>
<ul>
<li>Clearly document which parts of the API are deprecated and provide clear information about what should be used instead. Also give your customers ample warning time about when a deprecated API will be removed.</li>
<li>Provide a tool to identify code that will be impacted by the breaking change, and provide hints to what changes need to be made to it, or even automatically correct the code. In some cases a good IDE can help identify and correct breaking changes, however you shouldn&#8217;t assume that it will without testing it first. If a tool or IDE is infeasible, then a clear set of instructions for what to look for might be adequate.</li>
<li>Flag which areas of the API are still young and may be subject to change. At Caplin we document newer parts of the API as beta. Early adopters are able to take advantage of the latest features, however they are warned that the API may still evolve. Although this can still be frustrating for our customers this is partially mitigated by the fact that we are listening to their feedback about the beta API and are feeding that back into the next version of the API, making it something even easier to use.</li>
<li>Try to hold off making breaking changes until a major version release. It is incredibly frustrating if breaking changes are made in minor incremental releases.</li>
<li>Provide consultancy to your customers to help with the upgrade to the version with the breaking changes.</li>
</ul>
<p><strong>Conclusion</strong></p>
<p>There is no reason why you can&#8217;t build a framework whilst employing an agile methodology. Most of the principles of agile are equally valid for both framework and application developers. The main issue is that your ability to refactor the framework code is restricted when it comes to the public API. As a result, the importance of getting an API &#8220;right&#8221; the first time may seem vital when developing a framework compared to an application, however failure to create this &#8220;right&#8221; API is not a disaster. As shown earlier, there are several techniques that can be applied to build up a framework in an iterative and agile way.</p>
<p>At times it is very difficult to maintain backwards compatibility, and sometimes breaking changes are impossible to avoid, but the role of a framework provider should be focused on empowering the users of the framework, its customers, to build their software reliably and efficiently upon it, rather than spending all their time bug fixing issues introduced by new versions of the framework. As a result the processes and practices for agile framework development need to aligned with these goals &#8211; however that is a topic for another day.</p>
<p>In two weeks time I will be following this up with a look at one of the processes that we have put into place to help develop our frameworks, &#8220;Testing APIs for Backwards Compatibility&#8221;.</p>
 <img src="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=1134" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://blog.caplin.com/2010/02/02/agile-framework-development/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Let&#8217;s all jump on the Kanban</title>
		<link>http://blog.caplin.com/2009/11/20/lets-all-jump-on-the-kanban/</link>
		<comments>http://blog.caplin.com/2009/11/20/lets-all-jump-on-the-kanban/#comments</comments>
		<pubDate>Fri, 20 Nov 2009 15:36:58 +0000</pubDate>
		<dc:creator>Sarah</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[kanban]]></category>
		<category><![CDATA[scrum]]></category>
		<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[xp]]></category>

		<guid isPermaLink="false">http://blog.caplin.com/?p=603</guid>
		<description><![CDATA[We have been using agile methods &#8211; a typical mix of Scrum and XP &#8211; for some years now at Caplin. Though all of us have had some level of formal training and many years of experience in agile techniques, I have observed a couple of drawbacks with the Scrum process and the use of [...]]]></description>
			<content:encoded><![CDATA[<p>We have been using agile methods &#8211; a typical mix of <a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TY3J1bV8oZGV2ZWxvcG1lbnQp">Scrum</a> and <a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3d3dy5leHRyZW1lcHJvZ3JhbW1pbmcub3JnLw==" 0="target="_blank"">XP</a> &#8211; for some years now at Caplin. Though all of us have had some level of formal training and many years of experience in agile techniques, I have observed a couple of drawbacks with the Scrum process and the use of it within our organisation:</p>
<ol>
<li>It&#8217;s very difficult to use velocity for Scrum sign-up because team personnel change frequently</li>
<li>Unexpected work can impact the project teams resulting in a demotivated team because they sometimes do not complete what they have signed-up for</li>
</ol>
<p>There must be a better way?</p>
<p><span id="more-603"></span></p>
<p>I have been thinking about this for some time and our vision is continuous releases (apologies to the Marketing Department) whereby development teams pull work from priority boards, with the work moving through the necessary stages, culminating in the final stage being “release into production”.  A blissful continuous work stream where capacity and demand are in harmony and value is pulled through the system and delivered to the business as early as possible. Idealistic?  Maybe, but there seems to be some momentum gathering in the world of “<a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9LYW5iYW4=">Kanban</a> Systems”, which appears to deliver our vision, so here at Caplin we are trialling this new way of working with one project team.</p>
<p>If you want to find out more about Kanban Systems and Lean techiques these four websites are a good start:</p>
<ul>
<li><a  0="title="availagility.co.uk" 1=""" href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2F2YWlsYWdpbGl0eS5jby51aw==" 2="target="_blank"">http://availagility.co.uk</a><a title=\"http://www.limitedwipsociety.org\" href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3d3dy5saW1pdGVkd2lwc29jaWV0eS5vcmc=" target=\"_blank\"> </a></li>
<li><a  0="title="http://www.limitedwipsociety.org"" href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3d3dy5saW1pdGVkd2lwc29jaWV0eS5vcmc=" 1="target="_blank"">http://www.limitedwipsociety.org</a></li>
<li><a  0="title="http://www.crisp.se"" href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3d3dy5jcmlzcC5zZQ==" 1="target="_blank"">http://www.crisp.se</a></li>
<li><a  0="title="http://www.agilemanagement.net"" href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3d3dy5hZ2lsZW1hbmFnZW1lbnQubmV0" 1="target="_blank"">http://www.agilemanagement.net</a></li>
</ul>
<p>We will also have some attendees at the upcoming 1-day <a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3NraWxsc21hdHRlci5jb20vZXZlbnQvYWdpbGUtc2NydW0vbGVhbi1rYW5iYW4tZXhjaGFuZ2UvbmctMzU5" 0="target="_blank"">Lean and Kanban Exchange</a> on the 1st December, run by the always excellent <a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3NraWxsc21hdHRlci5jb20v" 0="target="_blank"">Skills Matter</a>.</p>
 <img src="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=603" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://blog.caplin.com/2009/11/20/lets-all-jump-on-the-kanban/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
