<?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>Valtech UK &#187; Agile</title>
	<atom:link href="http://blog.valtech.co.uk/category/agile/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.valtech.co.uk</link>
	<description>Aggregated works of Valtech UK consultants</description>
	<lastBuildDate>Mon, 30 Jan 2012 12:23:54 +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>Does Agile work in UK Government IT projects?</title>
		<link>http://blog.valtech.co.uk/agile/does-agile-work-in-uk-government-it-projects/</link>
		<comments>http://blog.valtech.co.uk/agile/does-agile-work-in-uk-government-it-projects/#comments</comments>
		<pubDate>Thu, 14 Jul 2011 14:56:13 +0000</pubDate>
		<dc:creator>Kevin Murray</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Development Process]]></category>
		<category><![CDATA[Valtech]]></category>

		<guid isPermaLink="false">http://blog.valtech.co.uk/?p=630</guid>
		<description><![CDATA[Tweet A few months ago an article was published in Computer Weekly where corporate IT Lawyer Alistair Maughan, argues the case that Agile will not work in Government projects.  I didn’t see this article when it was first published, but it was brought to my attention when a colleague noticed that one of the comments [...]]]></description>
			<content:encoded><![CDATA[<div class="bottomcontainerBox" style="background-color:#F0F4F9;">
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.valtech.co.uk%2Fagile%2Fdoes-agile-work-in-uk-government-it-projects%2F&amp;layout=button_count&amp;show_faces=false&amp;width=85&amp;action=like&amp;font=verdana&amp;colorscheme=light&amp;height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width=85px; height:21px;" allowTransparency="true"></iframe></div>
			<div style="float:left; width:80px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<g:plusone size="medium" href="http://blog.valtech.co.uk/agile/does-agile-work-in-uk-government-it-projects/"></g:plusone>
			</div>
			<div style="float:left; width:95px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://blog.valtech.co.uk/agile/does-agile-work-in-uk-government-it-projects/"  data-text="Does Agile work in UK Government IT projects?" data-count="horizontal" data-via="valtech">Tweet</a>
			</div>			
			</div><div style="clear:both"></div><div style="padding-bottom:4px;"></div><p>A few months ago an article was published in Computer Weekly where corporate IT Lawyer <em><span>Alistair Maughan, </span></em> argues the case that <a href="http://www.computerweekly.com/blogs/public-sector/2011/04/agile-will-fail-govit-says-cor.html" target="_blank">Agile will not work in Government projects</a>.  I didn’t see this article when it was first published, but it was brought to my attention when a colleague noticed that one of the comments arguing against the article, referenced a presentation I gave.</p>
<p>Many thanks to Francis Fish for referencing my presentation where I discussed introducing Scrum on a UK government project and used Agile methods to rescue a failing waterfall project, again within a UK government programme of work.  I’m really glad my message got across despite the ropey presentation, although in my defence it was my very first attempt at public speaking.</p>
<p>I’ve been working on UK government projects for over 10 years. During my initial 5 years on government accounts I was part of Valtech teams using RUP and aspects of XP, the later 5 years I was fortunate enough to implement Scrum and Kanban on my projects.  With my Agile UK government experience I feel I am justified in challenging many of the misconceptions mentioned in the article.</p>
<p>Firstly, mismanaged projects will go spectacularly wrong independent of the project management framework.  Projects fail for many reasons including ill-conceived requirements, poorly skilled developers, inept management as well as inappropriate SDLC.</p>
<p>So to address some of the points in this article:</p>
<p><strong>“<em>But Agile simply won&#8217;t work in the real world of government ICT.</em></strong>“  This is not true, Valtech have implemented a number of successful projects using an Agile SDLC on different government accounts.  Often Agile methods have been used to &#8220;rescue&#8221; otherwise failing projects but increasingly the merits of running a project using an Agile approach from the outset have been accepted.</p>
<p><strong><em>“We need a Richard Dawkins to bust the myth of the Agile gospel.</em></strong>”  We need to bust the myths of Agile, that Alastair has heard and believed.  Agile does all of the same value adding activities found in a waterfall project, just at an appropriate time, for example User Acceptance Testing when the real requirement pops out during development rather than right at the very end.  This approach increases the effectiveness of risk management enabling us to make better choices over the life of the project ensuring on-time delivery if (and only if) this is the most critical measure of success.</p>
<p><em><strong>“Under Agile projects, you pay a given amount of money for a set amount of effort. But you can&#8217;t guarantee a specified outcome for a specific price.” </strong></em> You can guarantee an outcome by controlling the richness of the implementation.  A key differentiator of Agile methods when compared with more traditional approaches is the focus on outcomes in preference to outputs.</p>
<p><em><strong>“Departmental budgets are managed very tightly” </strong></em> Agile enables much more detailed and accurate planning at the appropriate time, using prioritisation and identification of the richness of the solution that is acceptable to the stakeholders. With the added benefit of being able to more accurately account for the overspend as soon as it happens and justify the reduction in richness when appropriate.</p>
<p><em><strong>“Agile can&#8217;t give you a clear specification of outputs up-front.”</strong></em> Neither can Waterfall, the chances of change is too high while the procurement proceeds, this says more about government procurement than Agile.  A well executed Agile project will provide sufficient specification at the right time to satisfy stakeholders.  It is not an issue of Agile projects rejecting documentation (or specification), rather that, when done well, they defer detailed specification to reduce exposure to late breaking changes or lessons learnt resulting in rework to the specifications.</p>
<p><em><strong>“As if that isn&#8217;t problem enough, Agile offers insufficient means of remedy if things go wrong.”</strong></em> It’s a contractual responsibility not the SDLC to offer remedy.  Further, an Agile project should provide evidence of progress in a far more tangible manner. Valtech (and many others) have been working hard to develop contracts that deliver the flexibility in scope that customers deserve while acknowledging the suppliers responsibility for the management of technical risks and the intrinsic qualities of the product.</p>
<p><em><strong>“You can have an ICT project with a watertight contract, clear deliverables, openly and legally procured, with a fixed price and appropriate remedies if you don&#8217;t get what you want.” </strong></em> Waterfalls might deliver what the customer wanted at the time of specification but rarely what the customer needs; as has been often quoted, 40% of features delivered by waterfall projects are never used   (Gartner). The act of insisting on a full specification of everything to deliver will actually make projects bigger. This is a natural consequence of the penalties traditionally applied when new scope is added late. By contrast an Agile project will be accepting changes in scope while encouraging challenge to &#8220;gold plated&#8221; solutions preferring &#8220;good enough&#8221; (but no less!).</p>
<p>Please find links to my presentation slides on implementing Agile on Government projects.</p>
<p>http://www.slideshare.net/valtechuk/agile-adoption-in-a-waterfall-environment</p>
<p>http://www.slideshare.net/valtechuk/agile-project-rescue-in-a-waterfall-environment</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.valtech.co.uk/agile/does-agile-work-in-uk-government-it-projects/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Managing UX on an Agile project.</title>
		<link>http://blog.valtech.co.uk/agile/managing-ux-on-an-agile-project/</link>
		<comments>http://blog.valtech.co.uk/agile/managing-ux-on-an-agile-project/#comments</comments>
		<pubDate>Thu, 03 Feb 2011 09:07:03 +0000</pubDate>
		<dc:creator>Kevin Murray</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Agile Management]]></category>
		<category><![CDATA[User Experience]]></category>
		<category><![CDATA[Valtech]]></category>

		<guid isPermaLink="false">http://blog.valtech.co.uk/?p=478</guid>
		<description><![CDATA[Tweet I feel enthused to blog about my current project, which is the first project I&#8217;ve ran where we have a dedicated UX expert on the team. For those of you who are not aware of the term UX, it stands for User eXperience. The UX expert will work closely with the customer and business [...]]]></description>
			<content:encoded><![CDATA[<div class="bottomcontainerBox" style="background-color:#F0F4F9;">
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.valtech.co.uk%2Fagile%2Fmanaging-ux-on-an-agile-project%2F&amp;layout=button_count&amp;show_faces=false&amp;width=85&amp;action=like&amp;font=verdana&amp;colorscheme=light&amp;height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width=85px; height:21px;" allowTransparency="true"></iframe></div>
			<div style="float:left; width:80px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<g:plusone size="medium" href="http://blog.valtech.co.uk/agile/managing-ux-on-an-agile-project/"></g:plusone>
			</div>
			<div style="float:left; width:95px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://blog.valtech.co.uk/agile/managing-ux-on-an-agile-project/"  data-text="Managing UX on an Agile project." data-count="horizontal" data-via="valtech">Tweet</a>
			</div>			
			</div><div style="clear:both"></div><div style="padding-bottom:4px;"></div><p>I feel enthused to blog about my current project, which is the first project I&#8217;ve ran where we have a dedicated UX expert on the team. For those of you who are not aware of the term UX, it stands for User eXperience. The UX expert will work closely with the customer and business analysts, defining user journeys throughout the site/system, producing the wireframes that feed into the designs and ultimately the UI development.<span id="more-478"></span></p>
<p>Consciously or even sub consciously we all appreciate a website with a good UX and can get really frustrated by poor UX.</p>
<p>While this is the first time I have had a specific UX expert in my delivery team, I have been aware of other Valtech projects delivering UX, over the last couple of years, particularly in the the Agency space for our large retail clients.</p>
<p>Now I wasn&#8217;t exactly sceptical, but didn&#8217;t fully appreciate just what the UX role entailed and what it could bring to the project. I will be honest and admit to being slightly derogatory about what a UX consultant could offer, and I may have possibly labelled it as &#8216;colouring in&#8217;. My bad <img src='http://blog.valtech.co.uk/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>My ignorance was however, strongly influenced by the types of projects I had previously delivered. A lot of my previous experience has been delivering large government systems, where the kudos was always focused on the back-end technologies and not the front-end. Also a good user experience was never a non functional requirement.</p>
<p>The UI design and UX for these large government CMS systems is on the whole quite poor, overly complex and unintuitive. In some instances we may have worked with graphic designers, but most of the time the UI was being designed the customers Business Analysts, where only basic principles of a quickly outdated style guide are to be adhered to. On more than one instance, I was running a dev team which inherited reams of up front, waterfall, external design documents. These had been created using Visio and MSPaint, which led to the designing of near impossible components and cross-field validation. Chaos would generally ensue in System test and UAT when the final screens didn&#8217;t look exactly like the signed off Visio and MS Paint designs.</p>
<p>On my current project, the UX expert has made an instant impact. Working with the lead BA, it was obvious that the business owner was engaged and bought in to this way of working. High quality interactive wireframes, are produced in Photoshop with key animation sequences overlaid in PowerPoint. Great care is taken understanding different personas and minimum marketable features. The customer gets near instant feedback of how they want the site to be used.</p>
<p>I sort of expected the benefits that the UX expert would bring to the analysis and design, what I didn&#8217;t predict was how important the UX expert has become to the developers. Collaboration between the UX and devs was really visible from the outset and was recognised as one of the most significant positives at our recent retrospective. Key to this success was the way the UX expert researches the technology options, ensuring the design can be achieved using CSS or identifying the necessary JQuery plugin. Non standard design choices are always reviewed with the development team prior to sprit planning to ensure no near impossible designs are agreed with the customer.</p>
<p>Our Agile processes enable this collaborative way of working. We are all collocated provide our updates at a single, large but efficient daily stand up meeting. The devs and UX expert are seeing each others updates, progress and blockers. The BA / UX team are working one or two sprints ahead of the developers, so no design artefacts are going stale in the backlog. We have also ensured that a UX peer review is part of the definition of done policy for the front end developers.</p>
<p>This way of working culminated in a really positive first demo, with great feedback from the business owner and sales director.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.valtech.co.uk/agile/managing-ux-on-an-agile-project/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Beyond the manifesto: The Software Craftsmanship Attitude</title>
		<link>http://blog.valtech.co.uk/agile/beyond-the-manifesto-the-software-craftsmanship-attitude/</link>
		<comments>http://blog.valtech.co.uk/agile/beyond-the-manifesto-the-software-craftsmanship-attitude/#comments</comments>
		<pubDate>Mon, 04 Oct 2010 22:19:00 +0000</pubDate>
		<dc:creator>Sandro Mancuso</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Craftsmanship]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Being an aspiring software craftsman goes way beyond than just saying it. I'll quote my own definition of software craftsmanship from my previous post. Software craftsmanship is a long journey to mastery. It's a lifestyle  where developers choose to be...]]></description>
			<content:encoded><![CDATA[<div class="bottomcontainerBox" style="background-color:#F0F4F9;">
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.valtech.co.uk%2Fagile%2Fbeyond-the-manifesto-the-software-craftsmanship-attitude%2F&amp;layout=button_count&amp;show_faces=false&amp;width=85&amp;action=like&amp;font=verdana&amp;colorscheme=light&amp;height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width=85px; height:21px;" allowTransparency="true"></iframe></div>
			<div style="float:left; width:80px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<g:plusone size="medium" href="http://blog.valtech.co.uk/agile/beyond-the-manifesto-the-software-craftsmanship-attitude/"></g:plusone>
			</div>
			<div style="float:left; width:95px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://blog.valtech.co.uk/agile/beyond-the-manifesto-the-software-craftsmanship-attitude/"  data-text="Beyond the manifesto: The Software Craftsmanship Attitude" data-count="horizontal" data-via="valtech">Tweet</a>
			</div>			
			</div><div style="clear:both"></div><div style="padding-bottom:4px;"></div><p><span style="font-size: large;"><span style="font-size: small;">Being an aspiring software craftsman goes way beyond just saying it. I&#8217;ll quote my own definition of software craftsmanship from my <a href="http://craftedsw.blogspot.com/2010/09/software-craftsmanship.html">previous post</a>. </span></span></p>
<blockquote><p>Software craftsmanship is a long journey to mastery. It&#8217;s a lifestyle  where developers choose to be responsible for their own careers and for  improving their craft, constantly learning new tools and techniques. <span class="status-body"><span class="entry-content">Software  Craftsmanship is all about putting responsibility, professionalism,  pragmatism and pride back into software development</span></span>.</p></blockquote>
<p>Software craftsmanship is all about attitude. The attitude of <a href="http://manifesto.softwarecraftsmanship.org/">raising the bar of professional software development</a> starting with our own skills and professionalism.<span id="more-386"></span></p>
<p><span style="font-size: large;"><strong>The responsibility shift</strong></span></p>
<p>Not long ago, I was speaking to a developer and he was complaining about his company, saying that they didn&#8217;t have a good career plan, that he did not have any training, that he was not given the opportunity to learn new technologies and, of course, that he was not paid enough. Apparently, from his perspective, his employer was responsible for his career.</p>
<p>Imagine that we need a doctor. Would we pay a doctor to learn while he cut us open or give us a diagnosis? Would we pay an engineer to learn while he draws the plan for our new house? Would we go to a concert and pay the musician to learn how to play the guitar during the show? What about a chef in a restaurant?</p>
<p>So why is it the employer&#8217;s obligation to pay for training courses and pay us to learn new technologies and tools while we are working on a project? Should the employers be responsible for what we learn and what we don&#8217;t learn.</p>
<p><strong>Software development</strong><strong> is not a 9 to 5 profession</strong>. To be a <em>professional</em> software developer, we need to take our own time and money to keep learning and improving. As professionals, we should be paid for what we know, our ability to learn fast and for the quality of the work we do. We own our careers and are responsible for them. Working for a customer/employer that helps us with our career in terms of training, books, conferences, seminars, etc, is great but should be considered a bonus.</p>
<p><strong> </strong><br />
<span style="font-size: large;"><strong>&#8230; but how can we learn and keep ourselves up-to-date?</strong></span></p>
<p>Different developers have different preferences but here is a list of ways I find useful.</p>
<p><span style="font-size: large;"><strong>Literature</strong></span><strong> </strong></p>
<p><strong>Books, many books</strong>. Having your own library is essential. Books give you a good overview of a specific technology or subject quickly. No, it does not mean you will be proficient and next day you will be a specialist. What a book will give you is an understanding of what a technology or subject is about. It will be up to you then to decide if you want to practice what you&#8217;ve learned and become proficient. If you don&#8217;t have the habit, try reading 3 to 4 technical books per year. Once you get the habit, try one per month. The most common excuse is that you don&#8217;t have time. The cool thing about books is that you can read them during periods of  &#8220;dead&#8221; time, like on the tube, bus, in your dentist&#8217;s waiting room, on the bed before going to sleep, toilet, etc.</p>
<p><strong>Blogs</strong> are now one of my favourite types of reading. They tend to fit more the software craftsmanship model since they are much more personal and in general, related to personal findings, opinions, successes and failures. Reading blogs from more experienced professionals and subject matter experts is a good, quick and free way for apprentices and journeymen to learn from multiple master craftsmen at the same time. But don&#8217;t think that just experienced professionals should write blogs. Every software developer should write his or her own blogs, sharing their experiences and findings, helping to create a great <a href="http://manifesto.softwarecraftsmanship.org/">community of professionals</a>.</p>
<p><strong>Technical websites</strong> are also good in order to keep yourself up-to-date with what&#8217;s going in the market. New technologies, techniques, etc.</p>
<p><span style="font-size: large;"><strong>Practice, practice, practice</strong></span></p>
<p><strong>Pet projects</strong> are for me, by far, the best way to learn and study. A pet project is a <em>real</em> project but without the boring bits. There are no deadlines, does not need to make money, you control the requirements and most importantly, you use the technologies and methodologies you want, whenever you want, wherever you want. You are the boss. Pet projects give something for you to focus on and help you to understand why and how you can use certain technologies. It gives you the experience you need to apply what you&#8217;ve learned to real projects. Pet projects are meant to be fun.</p>
<p>Contributing to <strong>open source</strong> projects can also be a great thing. There are thousands of them out there. Find a project that is related to what you want to learn or know more about and download the source code. Start running and reading the tests, if any. Inspect and debug the code. If you want to contribute, start small. Add some documentation and write some tests. Then, check the list of features to be implemented and pick a simple one and give it a go. You can also propose and implement a new and small one to start with.</p>
<p><strong>Pair-programming</strong> can be a great experience. Many developers are afraid to try or think they will feel uncomfortable. That&#8217;s what I thought as well before I tried. Today I really enjoy it. Pair-programming gives you an opportunity to discuss your ideas, to learn new tricks and techniques from your pair and the resulting code is much better. Pairing with someone from your team is good but pairing with someone that you barely know can be a very interesting experience.</p>
<p>If learning a new language or new technique like TDD / BDD or trying different approaches to OOP or functional programming, try a <strong>code kata</strong>. Code kata is a small exercise that in general can be solved in a few minutes or in a few hours. Code katas were created to help developers to focus on a problem while improving their skills. You can find a good source of code katas at <a href="http://codingkata.org/">codingkata.org</a> and <a href="http://codekata.pragprog.com/">codekata.pragprog.com</a></p>
<p><strong><span style="font-size: large;">Community and Events</span></strong></p>
<p><span style="font-size: large;"><span style="font-size: small;"><strong>Be part of your local community. </strong></span><span style="font-size: small;">Software craftsmanship is all about a <a href="http://manifesto.softwarecraftsmanship.org/">community of professionals</a>, learning and sharing with each other and elevating the level of professionalism and maturity of our industry. Join your nearest user groups and participate in their events. User groups are the best way for making contacts, sharing ideas and learning things. Many user groups promote free talks, coding activities and social events. A great aspect of being part of a community is the feeling that you are not alone. There are many people out there having the same problems you&#8217;ve got and many others that will happily share their solution to it.</span></span></p>
<p><span style="font-size: large;"><strong>Raising the bar</strong></span></p>
<p>The main changes proposed by the <a href="http://craftedsw.blogspot.com/2010/09/software-craftsmanship.html">software craftsmanship movement</a> are related to the developers attitude. In summary, it&#8217;s about being proud about your work, the code you produce and the software you create. It&#8217;s about constantly trying to improve your skills and learn new ones.</p>
<p>An aspiring software craftsman is intolerant of bad code will constantly apply the <a href="http://programmer.97things.oreilly.com/wiki/index.php/The_Boy_Scout_Rule">Boy Scout Rule</a>.</p>
<blockquote><p><span class="status-body"><span class="entry-content">If you find that the  good code you wrote one year ago is still good enough today, it means you  didn&#8217;t learn anything during this period and this is unacceptable.</span></span></p></blockquote>
<p><strong>Productive partnerships </strong></p>
<p>The attitude of a software craftsman goes beyond good code. The relationship between a software craftsman and his or her customer (or employer) is of a <a href="http://manifesto.softwarecraftsmanship.org/">productive partnership</a> and not employer / employee. As a productive partnership, it&#8217;s our role to constantly question the requirements and propose improvements and new features. It&#8217;s our job to warn our customers about the problems we see. Due to the knowledge of the code and technology, developers are well positioned to help their customers improve their business.</p>
<p>However, sometimes some customers or employers don&#8217;t want or don&#8217;t see the advantages of this partnership and will treat developers as production line workers that should just do what they are told. Coding monkeys. In cases like that, any aspiring software craftsman should move on and find another job. Staying in a place where your skills are not appreciated is career suicide.</p>
<p>Raising the bar of our industry is in our own interest. The better we become in writing code and delivering valuable software, the better our lives will be, professionally and financially.</p>
<p><span style="font-size: small;">PS: If  you are in London or nearby, join the <a href="http://www.londonswcraft.com/">London Software Craftsmanship Community</a>. </span></p>
<div class="blogger-post-footer"><img src="https://blogger.googleusercontent.com/tracker/8424060401701893376-8346000483478607958?l=craftedsw.blogspot.com" alt="" width="1" height="1" /></div>
]]></content:encoded>
			<wfw:commentRss>http://blog.valtech.co.uk/agile/beyond-the-manifesto-the-software-craftsmanship-attitude/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Software Engineering: The problem with the production line</title>
		<link>http://blog.valtech.co.uk/agile/software-engineering-the-problem-with-the-production-line/</link>
		<comments>http://blog.valtech.co.uk/agile/software-engineering-the-problem-with-the-production-line/#comments</comments>
		<pubDate>Sat, 02 Oct 2010 09:35:00 +0000</pubDate>
		<dc:creator>Sandro Mancuso</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Agile Management]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Is software engineering the best approach for developing software? Does it apply for the majority of the software projects or just a very few of them?Software Engineering was an answer for the perceived "software crisis", back in 1968, in the First NAT...]]></description>
			<content:encoded><![CDATA[<div class="bottomcontainerBox" style="background-color:#F0F4F9;">
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.valtech.co.uk%2Fagile%2Fsoftware-engineering-the-problem-with-the-production-line%2F&amp;layout=button_count&amp;show_faces=false&amp;width=85&amp;action=like&amp;font=verdana&amp;colorscheme=light&amp;height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width=85px; height:21px;" allowTransparency="true"></iframe></div>
			<div style="float:left; width:80px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<g:plusone size="medium" href="http://blog.valtech.co.uk/agile/software-engineering-the-problem-with-the-production-line/"></g:plusone>
			</div>
			<div style="float:left; width:95px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://blog.valtech.co.uk/agile/software-engineering-the-problem-with-the-production-line/"  data-text="Software Engineering: The problem with the production line" data-count="horizontal" data-via="valtech">Tweet</a>
			</div>			
			</div><div style="clear:both"></div><div style="padding-bottom:4px;"></div><p>Is software engineering the best approach for developing software? Does it apply for the majority of the software projects or just a very few of them?</p>
<p>Software Engineering was an answer for the perceived &#8220;<a href="http://en.wikipedia.org/wiki/Software_crisis">software crisis</a>&#8220;, back in 1968, in the First NATO Software Engineering Conference and it was created to solve the problems of extremely large NATO and U.S. Department of Defence projects. In the majority of these projects, the hardware was still being designed and with no hardware to test, there was plenty of time to investigate requirements and write the software specifications. Hardware controlled by the software was generally worth billions of dollars like in the case of <a href="http://www.fastcompany.com/magazine/06/writestuff.html%20">space shuttle</a> and the <a href="http://en.wikipedia.org/wiki/Safeguard_Program">Safeguard Ballistic Missile Defence System</a>. People&#8217;s lives and national security were also at stake.<span id="more-388"></span></p>
<p>The <a title="IEEE Computer Society" href="http://en.wikipedia.org/wiki/IEEE_Computer_Society">IEEE Computer Society</a>&#8216;s <em><a title="Software Engineering Body of Knowledge" href="http://en.wikipedia.org/wiki/Software_Engineering_Body_of_Knowledge">Software Engineering Body of Knowledge</a></em> defines &#8220;software engineering&#8221; as:</p>
<blockquote><p><em>Software engineering is the application of a systematic,  disciplined, quantifiable approach to the development, operation, and  maintenance of software, and the study of these approaches; that is, the application of engineering to software.</em></p></blockquote>
<p>Software Engineering can be very effective when developing safety critical systems like the one for the space shuttle as described on &#8220;<a href="http://www.fastcompany.com/magazine/06/writestuff.html">They Write The Right Stuff</a>&#8221; &#8211; Fast Company article, from 1996:</p>
<blockquote><p><em>The last three versions of the program &#8211; each 420,000 lines long &#8211; had just one error each. The last 11 versions of this software had a total of 17 errors. Commercial programs of equivalent complexity would have 5,000 errors.</em></p></blockquote>
<p>Of course that this looks really impressive but there is more to it:</p>
<blockquote><p><em>Money is not the critical constraint: The group&#8217;s $35 million per year budget is a trivial slice of the NASA pie, but on a dollars-per-line basis, it makes the group among the nation&#8217;s most expensive software organizations.</em></p></blockquote>
<p>Another extract from this same article when they were discussing the process:</p>
<blockquote><p><em>And the culture is equally intolerant of creativity, the individual  coding flourishes and styles that are the signature of the all-night  software world. &#8220;People ask, doesn&#8217;t this process stifle creativity? You  have to do exactly what the manual says, and you&#8217;ve got someone looking  over your shoulder,&#8221; says Ted Keller (senior technical manager). &#8220;The answer is, yes, the process does  stifle creativity.&#8221;</em></p></blockquote>
<p>Many of the NATO and US Department of Defence projects took years, some over a decade to complete. Many had hundreds of people involved and almost half of the time was spend in requirements and design specifications, with uncountable reviews and approval cycles. Of course, due to their reliability and quality, many are still in use today.</p>
<p><span style="font-size: small;"><strong>Software Engineering for the Masses</strong></span></p>
<p>More and more hardware became cheap and business of all sizes needed software in order to survive and be competitive. The difference was that a the big majority of these businesses couldn&#8217;t afford to pay $35 million dollars per year and neither wait for too many years to start benefiting from their software. Also, many of those software projects were not manipulating expensive hardware or dealing with <span class="sense_b "><span class="def parentof__def__is__sense_b">life-threatening situations.</span></span> <a href="http://yourdon.com/about/">Edward Yourdon</a>, in his book Rise and Resurrection of the American Programmer, wrote:</p>
<blockquote><p><em>I&#8217;m going to deliver a system to you in six months that will have 5,000 bugs in it &#8211; and you&#8217;re going to be very happy!</em></p></blockquote>
<p>It was clear that software engineering processes had to be adapted in order to satisfy a more impatient and lower budget legion of businesses.</p>
<p><strong>The &#8220;Good Enough Software</strong>&#8221; <strong>Era</strong></p>
<p>Over the decades, many new software engineering processes and methodologies were created in order to make software development faster and cheaper. The most adopted were the ones based on <a href="http://en.wikipedia.org/wiki/Iterative_and_incremental_development">iterative and incremental development</a> that evolved into <a href="http://en.wikipedia.org/wiki/Agile_software_development">agile software development</a>.</p>
<p>Agile software development and &#8220;good enough software&#8221; were an amazing improvement in bringing costs down, mitigating risks with quicker feedback and much faster time to market.</p>
<p>Regardless the methodology or process used, software projects are still failing. Some fail because they go over-budget, others because they are not delivered on time, others fail to satisfy the requirements and business goals, et al.</p>
<p>The main problem is that for decades, software development was seen as a production line. That&#8217;s the software engineering perspective of software development. Processes and methodologies are generally much more focused on making this production line more productive, creating different management and organisational styles than actually trying to make the employees more capable. Developers are treated as mere brain-damaged programmers and are at the bottom of the food chain.</p>
<p><strong>Good enough is not always good enough</strong></p>
<p>Using agile, lean or any methodology is not enough. It is all about the people involved in the project and their willingness to succeed and be proud of what they produce. If developers are seen as the least important and cheapest members of a software project, the maximum that this team is going to produce is mediocre software, regardless of methodology.</p>
<p>A software project would have much better chances to succeed with &#8220;good people with a bad process&#8221; than &#8220;mediocre people with a good process&#8221;. Good people would always find a way to improve the process, be productive and produce something that they are proud of. Mediocre people accepts whatever is established, even when it is not good enough, and will produce just what they were asked for.</p>
<p>In a software project, if a company wants a good software, they will need <strong>good</strong> and <strong>empowered </strong>software developers. Instead of 10 mediocre people with a good process, it would be better to have 3 or 4 good people and empower them to deliver the project.</p>
<p>A process, imposed by managers and people that have no clue how to write software, will just guarantee that mediocre software is predictably delivered (if lucky). On the other hand, a team of self-organised and great developers would have a better shot at creating a more efficient way to produce great software, constantly trying to improve they way they work.</p>
<p>A process should never be more important than the people. Managers should facilitate the work of great software developers and not tell them what to do. It should always be harder to replace a good software developer than a manager since they are the ones that know the system inside-out. Managing a few well motivated, well paid and good professionals is always easier than managing many mediocre people.</p>
<p>Software development is a creative and highly skilled profession that takes years to master. While software development is treated like a production line, projects will continue to fail.</p>
<div style="background-color: white; color: #444444;"><strong>Source</strong></div>
<p><span style="font-size: small;">Software Craftsmanship: The New Imperative &#8211; ISBN 0-201-73386-2, 2002 </span><br />
<span style="font-size: small;"><a href="http://en.wikipedia.org/wiki/Software_engineering">http://en.wikipedia.org/wiki/Software_engineering</a></span><br />
<span style="font-size: small;"><a href="http://en.wikipedia.org/wiki/Software_crisis">http://en.wikipedia.org/wiki/Software_crisis</a></span><br />
<span style="font-size: small;">IEEE Standard Computer Dictionary, ISBN 1-55937-079-3, IEEE 1990</span><br />
<span style="font-size: small;">&#8220;They Write The Right Stuff&#8221;, Fast Company, <a href="http://www.fastcompany.com/magazine/06/writestuff.html">http://www.fastcompany.com/magazine/06/writestuff.html</a></span><br />
<span style="font-size: small;">Safeguard Program: <a href="http://en.wikipedia.org/wiki/Safeguard_Program">http://en.wikipedia.org/wiki/Safeguard_Program</a></span><br />
<span style="font-size: small;">Stephenson, W. E. &#8220;<strong>An analysis of the resources used in the SAFEGUARD system software development&#8221;</strong></span><br />
<span style="font-size: small;"><strong>Edward Yourdon  &#8211; <a href="http://yourdon.com/about/">http://yourdon.com/about/ </a></strong></span><br />
<span style="font-size: small;"><strong>http://en.wikipedia.org/wiki/Iterative_and_incremental_development </strong></span><br />
<span style="font-size: small;"><strong>http://en.wikipedia.org/wiki/Agile_software_development</strong></span></p>
<div class="blogger-post-footer"><img src="https://blogger.googleusercontent.com/tracker/8424060401701893376-8882835982301412199?l=craftedsw.blogspot.com" alt="" width="1" height="1" /></div>
]]></content:encoded>
			<wfw:commentRss>http://blog.valtech.co.uk/agile/software-engineering-the-problem-with-the-production-line/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Testing and concurrency</title>
		<link>http://blog.valtech.co.uk/agile/testing-and-concurrency/</link>
		<comments>http://blog.valtech.co.uk/agile/testing-and-concurrency/#comments</comments>
		<pubDate>Wed, 08 Sep 2010 15:29:42 +0000</pubDate>
		<dc:creator>Andrew Rendell</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://blog.valtech.co.uk/?p=373</guid>
		<description><![CDATA[Tweet Our team is currently working with a client on a medium sized, medium complexity Java application which has quite low test coverage. We are introducing characterisation tests to snapshot functionality. These will give us the confidence to refactor away technical debt and extend the application without regression. One of the problems we are experiencing [...]]]></description>
			<content:encoded><![CDATA[<div class="bottomcontainerBox" style="background-color:#F0F4F9;">
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.valtech.co.uk%2Fagile%2Ftesting-and-concurrency%2F&amp;layout=button_count&amp;show_faces=false&amp;width=85&amp;action=like&amp;font=verdana&amp;colorscheme=light&amp;height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width=85px; height:21px;" allowTransparency="true"></iframe></div>
			<div style="float:left; width:80px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<g:plusone size="medium" href="http://blog.valtech.co.uk/agile/testing-and-concurrency/"></g:plusone>
			</div>
			<div style="float:left; width:95px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://blog.valtech.co.uk/agile/testing-and-concurrency/"  data-text="Testing and concurrency" data-count="horizontal" data-via="valtech">Tweet</a>
			</div>			
			</div><div style="clear:both"></div><div style="padding-bottom:4px;"></div><p>Our team is currently working with a client on a medium sized, medium complexity Java application which has quite low test coverage. We are introducing <a href="http://en.wikipedia.org/wiki/Characterization_test">characterisation </a>tests to snapshot functionality. These will give us the confidence to refactor away technical debt and extend the application without regression. One of the problems we are experiencing is the concurrent nature of the application. I have have worked on applications in the past which supported very high concurrency without issue but this application is different. I have not fully thought through why this application does differ but there are some obvious points:<span id="more-373"></span></p>
<ul>
<li>This application spawns threads in Java code a lot. In previous applications we have always avoided this complexity by utilising somebody else&#8217;s thread pool code.</li>
<li>I am used to stateless service classes which operate on domain objects. The stateless service classes obviously have no concurrency issues and the domain objects can be protected using synchronisation blocks. This application seems to have a lot more stateful objects that interact (this is anecdotal, I am have not analysed the code specifically for this attribute).</li>
</ul>
<p>One of the first refactorings we are looking at is to remove all the Thread.sleep calls from test classes. The CI server reports significant number of test failures which turn out to be false positives. In a significant number of cases the use of Thread.sleep is to blame. I have seen two slightly different uses of Thread.sleep in the test code.</p>
<ol>
<li>The test spawns a thread which is calling some method of the class under test whilst the main test thread interacts with the class under test in some other way. The test thread calls Thread.sleep to ensure that the second thread has time to complete its processing before the test verifies the post conditions.</li>
<li>The class under test contains some internal thread spawning code. The test thread again needs to execute a Thread.sleep to remove the chances of a race condition before firing the asserts.</li>
</ol>
<p>Both these approaches suffer from the same problems.</p>
<ul>
<li>The Thread.sleep might be long enough to allow the second thread to complete processing on one machine (e.g. the developers high spec workstation) but it is not long enough to allow the thread to complete its processing on a heavily loaded, differently configured, usually more resource constrained CI server. Under certain load situations the test fails. It works in others. The use of Thread.sleep has made the test non-deterministic.</li>
<li>Often the response to the above problem is to make the sleep longer. Yesterday I saw a very simple test which took over thirteen seconds to execute. Most of that test duration was sleeps. Refactoring to remove the sleeps resulted in a test that executed in 0.4 seconds. Still a slowish test but a vast improvement. The last application I worked on had 70% coverage with 2200 tests. If each one had taken thirteen seconds to execute then a test run would have taken almost eight hours. In reality that suite took just over a minute on my workstation to complete. You can legitimately ask a developer to run a test suite which takes one minute before every checkin and repeat that execution on the CI server after checkin. The same is not true of a test suite that takes eight hours. You are probably severely impacting the teams velocity and working practices if the build before checkin takes eight minutes. There are very few excuses for tests with arbitrary delays built into them.</li>
</ul>
<p>To resolve both issues we introduce a <a href="http://download.oracle.com/javase/6/docs/api/java/util/concurrent/CountDownLatch.html">count down latch</a>.</p>
<p>Where the test spawns a thread, the latch is decremented inside the spawned thread and where the test code had a sleep a latch.await(timeout) is used. We always specify a timeout to prevent a test that hangs in some odd situation. The timeout can be very generous, e.g. ten seconds where before a one second sleep was used. The latch will only wait until the work is done in the other thread and the race condition has passed. On your high spec workstation it might well not wait at all. On the overloaded CI server it will take longer, but only as long as it needs. A truly massive delay is probably not a great idea as there is a point where you want the test to fail to indicate there is a serious resource issue somewhere.</p>
<p>Where the class under test spawns a thread (an anti-pattern I suspect) then we amend the code so it creates a latch which it then returns to callers. The only user of this latch is the test code. Intrusive as it is, it is often the only way to safely test the code without more significant refactoring.</p>
<p>There are some larger issues here. Is the code fundamentally wrong in its use of threading? Should it be recoded to use a more consistent and simple concurrency model and rely more on third party thread pool support?</p>
<p>At risk of straying from my comfort zone of simple, pragmatic, software delivery, deep down I have never been very happy about the implications of complicated multi-threaded code and automated testing. You can write a class augmented with a simple and straightforward test class which verifies the classes operation and illustrates its use. You can apply coverage tools such as Emma and Cobutura which can give a measure of the amount of code under test and even the amount of complexity that is not being tested. I am not convinced it is always possible to write simple tests that &#8216;prove&#8217; that a class works as expected when multiple threads are involved (note I say always and simple).</p>
<p>I do not know of any tools that can give you an assurance that you code will always work no matter what threads are involved. Perhaps a paradigm shift such as that introduced by languages such as Scala and Erlang will remove this issue?</p>
<p>There is some good advice available regarding <a href="http://www.theserverside.com/news/1365191/Testing-Concurrent-Programs">testing concurrent code</a> and I am sure lots of very clever people have spent lots of time thinking this through but its certainly not straight in my head yet.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.valtech.co.uk/agile/testing-and-concurrency/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Unit tests, code coverage and the hidden trap&#8230;</title>
		<link>http://blog.valtech.co.uk/agile/unit-tests-code-coverage-and-the-hidden-trap/</link>
		<comments>http://blog.valtech.co.uk/agile/unit-tests-code-coverage-and-the-hidden-trap/#comments</comments>
		<pubDate>Fri, 30 Jul 2010 14:49:30 +0000</pubDate>
		<dc:creator>Jorge Migueis</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[coverage]]></category>
		<category><![CDATA[Unit test]]></category>

		<guid isPermaLink="false">http://blog.valtech.co.uk/?p=330</guid>
		<description><![CDATA[Tweet Quality has always been a &#8220;hot&#8221; subject in software engineering, and several good development practices used in Agile development, unit testing for example, have been created to improve the quality of the softwares developed. Programme Managers, Project Managers and Assurance Quality Managers haven&#8217;t just been looking for techniques to improve quality, they&#8217;ve also been [...]]]></description>
			<content:encoded><![CDATA[<div class="bottomcontainerBox" style="background-color:#F0F4F9;">
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.valtech.co.uk%2Fagile%2Funit-tests-code-coverage-and-the-hidden-trap%2F&amp;layout=button_count&amp;show_faces=false&amp;width=85&amp;action=like&amp;font=verdana&amp;colorscheme=light&amp;height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width=85px; height:21px;" allowTransparency="true"></iframe></div>
			<div style="float:left; width:80px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<g:plusone size="medium" href="http://blog.valtech.co.uk/agile/unit-tests-code-coverage-and-the-hidden-trap/"></g:plusone>
			</div>
			<div style="float:left; width:95px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://blog.valtech.co.uk/agile/unit-tests-code-coverage-and-the-hidden-trap/"  data-text="Unit tests, code coverage and the hidden trap&#8230;" data-count="horizontal" data-via="valtech">Tweet</a>
			</div>			
			</div><div style="clear:both"></div><div style="padding-bottom:4px;"></div><p>Quality has always been a &#8220;hot&#8221; subject in software engineering, and several good development practices used in Agile development, unit testing for example, have been created to improve the quality of the softwares developed.</p>
<p>Programme Managers, Project Managers and Assurance Quality Managers haven&#8217;t just been looking for techniques to improve quality, they&#8217;ve also been looking for ways to monitor the quality of the projects and the application of these techniques.</p>
<p>This has lead to the development of numerous tools to check the unit testing coverage, the style of the code and its compliance to well accepted rules. Plus, of course, dashboards that gather all that information and present it in a user friendly way.</p>
<p>One of the most commonly used metrics is the code coverage of the unit tests. We often see in Agile teams rules like, &#8220;the line coverage should at least 80%&#8221;, or &#8220;the branch coverage should be at least 70%&#8221;. But&#8230;herein lies the hidden trap.<span id="more-330"></span><!--more-->The code coverage is not enough to verify the quality of the tests. Recently, I saw some unit tests that were exercising the code, but did not have real assertions. The test would only check that the data received was not nil. Something like:</p>
<p><code style="color: coral; text-align: left;"><br />
/**<br />
* Example of a useless test.<br />
* As Mashooq Badar explained in a previous entry<br />
* of this blog, tests should have explicit names.<br />
*/<br />
public void<br />
testThatTheCodeRunsWithoutCheckingTheReturnedValue() {<br />
// Prepare Context<br />
// create mock object for instance using Mockito<br />
AnInterfaceToMock mockObject =<br />
mock(AnInterfaceToMock.class);<br />
// Create instance of class under test<br />
// and inject mock objects<br />
ClassUnderTest anInstance = new ClassUnderTest();<br />
anInstance.setInterfaceToMock(mockObject);<br />
// Run code to test<br />
List result = anInstance.operationUnderTest();<br />
// Assertions<br />
assertNotNull(result);<br />
}</code></p>
<p>This test is almost useless, as it does not check the list of data it received. We do not know whether or not the &#8216;operationUnderTest&#8217; performed its job properly. The only thing this test shows is that the &#8216;operationUnderTest&#8217; did not throw up an exception. A change in the code of the class under test will probably not affect this test. However, the quality dashboard will present a healthy project with a high level of code coverage and instil a false confidence in the managers&#8217; minds. There is no tool that can perform that extra check, for now.</p>
<p>This is one of the reasons why code reviews have to be performed, published and monitored as well.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.valtech.co.uk/agile/unit-tests-code-coverage-and-the-hidden-trap/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Project Estimates</title>
		<link>http://blog.valtech.co.uk/agile/project-estimates/</link>
		<comments>http://blog.valtech.co.uk/agile/project-estimates/#comments</comments>
		<pubDate>Thu, 24 Jun 2010 16:10:03 +0000</pubDate>
		<dc:creator>Mashooq Badar</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Development Process]]></category>
		<category><![CDATA[Estimation]]></category>

		<guid isPermaLink="false">http://mashb.wordpress.com/?p=125</guid>
		<description><![CDATA[In my previous post on High Level Project Estimates, I talked about 3 points estimates to help provide an up-front estime of effort for a project. Aside from the effort estimate you also need to consider other aspects that the team will spend time on. The following are some aspects I consider with the kind [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mashb.wordpress.com&#38;blog=7354608&#38;post=125&#38;subd=mashb&#38;ref=&#38;feed=1" />]]></description>
			<content:encoded><![CDATA[<div class="bottomcontainerBox" style="background-color:#F0F4F9;">
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.valtech.co.uk%2Fagile%2Fproject-estimates%2F&amp;layout=button_count&amp;show_faces=false&amp;width=85&amp;action=like&amp;font=verdana&amp;colorscheme=light&amp;height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width=85px; height:21px;" allowTransparency="true"></iframe></div>
			<div style="float:left; width:80px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<g:plusone size="medium" href="http://blog.valtech.co.uk/agile/project-estimates/"></g:plusone>
			</div>
			<div style="float:left; width:95px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://blog.valtech.co.uk/agile/project-estimates/"  data-text="Project Estimates" data-count="horizontal" data-via="valtech">Tweet</a>
			</div>			
			</div><div style="clear:both"></div><div style="padding-bottom:4px;"></div><p>In my previous post on <a href="http://mashb.wordpress.com/2010/03/19/high-level-project-estimates/">High Level Project Estimates</a>, I talked about 3 points estimates to help provide an up-front estime of effort for a project. Aside from the effort estimate you also need to consider other aspects that the team will spend time on. The following are some aspects I consider with the kind of percentages (above the effort estimate) I have experienced. Note: these percentages are by no means standard or the norm they are essentially a rough guess based on the projects I have worked .</p>
<ul>
<li>Planning Meetings @ 10%</li>
<li>Demos @ 2%</li>
<li>Code Reviews @ 5%</li>
<li>Retrospectives @ 5%</li>
<li><a href="http://www.agilemanagement.net/index.php/blog/Embrace_Dark_Matter/">Dark Mater</a> @15%</li>
<li>Bugs @15%</li>
<li>New Technical Stories and Spikes @ 25%</li>
<li>Change Requests (shouldn’t average more than 15%)</li>
<li>Holidays and Sick Leave @ 5%</li>
</ul>
<p>You will also need to consider Management Overheads as well as Business Analysts (if included in the team), QA/Functional Testing, Support and Maintenance (if required).</p>
<p><a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mashb.wordpress.com/125/"><img src="http://feeds.wordpress.com/1.0/comments/mashb.wordpress.com/125/" border="0" alt="" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mashb.wordpress.com/125/"><img src="http://feeds.wordpress.com/1.0/delicious/mashb.wordpress.com/125/" border="0" alt="" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mashb.wordpress.com/125/"><img src="http://feeds.wordpress.com/1.0/stumble/mashb.wordpress.com/125/" border="0" alt="" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mashb.wordpress.com/125/"><img src="http://feeds.wordpress.com/1.0/digg/mashb.wordpress.com/125/" border="0" alt="" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mashb.wordpress.com/125/"><img src="http://feeds.wordpress.com/1.0/reddit/mashb.wordpress.com/125/" border="0" alt="" /></a> <img src="http://stats.wordpress.com/b.gif?host=mashb.wordpress.com&amp;blog=7354608&amp;post=125&amp;subd=mashb&amp;ref=&amp;feed=1" border="0" alt="" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.valtech.co.uk/agile/project-estimates/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Defining and Prioritising a Backlog</title>
		<link>http://blog.valtech.co.uk/agile/defining-and-prioritising-a-backlog/</link>
		<comments>http://blog.valtech.co.uk/agile/defining-and-prioritising-a-backlog/#comments</comments>
		<pubDate>Thu, 03 Jun 2010 14:58:45 +0000</pubDate>
		<dc:creator>Mashooq Badar</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Backlog]]></category>
		<category><![CDATA[Development Process]]></category>
		<category><![CDATA[User stories]]></category>

		<guid isPermaLink="false">http://mashb.wordpress.com/?p=123</guid>
		<description><![CDATA[What is the best way to review a backlog? How do you ensure that it is "complete"? How do you ensure that the prioritisation reflects the business vision and goals? When first faced with a backlog, you are often overwhelmed by the long list of userstories. The most important step is to set a context [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mashb.wordpress.com&#038;blog=7354608&#038;post=123&#038;subd=mashb&#038;ref=&#038;feed=1" />]]></description>
			<content:encoded><![CDATA[<div class="bottomcontainerBox" style="background-color:#F0F4F9;">
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.valtech.co.uk%2Fagile%2Fdefining-and-prioritising-a-backlog%2F&amp;layout=button_count&amp;show_faces=false&amp;width=85&amp;action=like&amp;font=verdana&amp;colorscheme=light&amp;height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width=85px; height:21px;" allowTransparency="true"></iframe></div>
			<div style="float:left; width:80px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<g:plusone size="medium" href="http://blog.valtech.co.uk/agile/defining-and-prioritising-a-backlog/"></g:plusone>
			</div>
			<div style="float:left; width:95px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://blog.valtech.co.uk/agile/defining-and-prioritising-a-backlog/"  data-text="Defining and Prioritising a Backlog" data-count="horizontal" data-via="valtech">Tweet</a>
			</div>			
			</div><div style="clear:both"></div><div style="padding-bottom:4px;"></div><p>What is the best way to review a backlog? How do you ensure that it is &#8220;complete&#8221;? How do you ensure that the prioritisation reflects the business vision and goals?</p>
<p>When first faced with a backlog, you are often overwhelmed by the long list of userstories. The most important step is to set a context for these userstories. Are these userstories organised in a hierarchy of “epics”? This hierarchy will help set a context. But first we need to understand what these epics mean at the highest level. Do they represent a user’s high-level goals or are they merely there as a container for some loosely related stories?</p>
<p>When reviewing a backlog for completion it is vitally important that the stories are defined in a context. The context can take different forms depending on the nature of the application. For example if an application has a clear high-level flow that the user journeys along then the epics may be defined as activities in this flow and the userstories can be grouped under each epic representing the functionality required for this activity. This <a href="http://www.agileproductdesign.com/blog/the_new_backlog.html">article</a> by Jeff Patton presents such an approach. However, your application my exhibit a more random usage scenario. In this case epics representing high-level user goals may represent the best context for the stories. You can also provide references to other artefacts such as user journeys/wireframes to further enrich the context. This <a href="http://tynerblain.com/blog/2009/07/06/writing-complete-user-stories">article</a> by Scott Sehlhorst is an interesting discussion of setting a context for user stories.</p>
<p>This grouping of userstories by a context also helps to manage their prioritisation. You can individually prioritise stories within each epic and then also prioritise the epics. Note that just because one epic has a higher priority does not mean that all its child userstories are of a higher priority. You may discover that only the first few userstories can provide enough functionality that further work on that epic is of a lower priority then working on another epic.</p>
<p>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mashb.wordpress.com/123/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mashb.wordpress.com/123/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mashb.wordpress.com/123/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mashb.wordpress.com/123/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mashb.wordpress.com/123/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mashb.wordpress.com/123/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mashb.wordpress.com/123/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mashb.wordpress.com/123/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mashb.wordpress.com/123/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mashb.wordpress.com/123/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mashb.wordpress.com&#038;blog=7354608&#038;post=123&#038;subd=mashb&#038;ref=&#038;feed=1" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.valtech.co.uk/agile/defining-and-prioritising-a-backlog/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Agile retrospectives &#8211; Cause and effect</title>
		<link>http://blog.valtech.co.uk/agile/agile-retrospectives-cause-and-effect/</link>
		<comments>http://blog.valtech.co.uk/agile/agile-retrospectives-cause-and-effect/#comments</comments>
		<pubDate>Tue, 13 Apr 2010 13:18:27 +0000</pubDate>
		<dc:creator>David Draper</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[agile retrospectives]]></category>
		<category><![CDATA[Retrospectives]]></category>

		<guid isPermaLink="false">http://www.agiledesign.co.uk/retrospectives/cause-and-effect-in-retrospectives/</guid>
		<description><![CDATA[Thanks to Rachel Davies for sharing her approach to constructing a diagram of effects.
Rachel proposes that the diagram of effects can trigger a team to discuss how a variety of issues relate and goes on to highlight advice from Bas Vodde and Craig Larman in their first book &#8220;Scaling Lean and Agile Development&#8221;, the First [...]]]></description>
			<content:encoded><![CDATA[<div class="bottomcontainerBox" style="background-color:#F0F4F9;">
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.valtech.co.uk%2Fagile%2Fagile-retrospectives-cause-and-effect%2F&amp;layout=button_count&amp;show_faces=false&amp;width=85&amp;action=like&amp;font=verdana&amp;colorscheme=light&amp;height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width=85px; height:21px;" allowTransparency="true"></iframe></div>
			<div style="float:left; width:80px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<g:plusone size="medium" href="http://blog.valtech.co.uk/agile/agile-retrospectives-cause-and-effect/"></g:plusone>
			</div>
			<div style="float:left; width:95px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://blog.valtech.co.uk/agile/agile-retrospectives-cause-and-effect/"  data-text="Agile retrospectives &#8211; Cause and effect" data-count="horizontal" data-via="valtech">Tweet</a>
			</div>			
			</div><div style="clear:both"></div><div style="padding-bottom:4px;"></div><p>Thanks to <a href="http://agilecoach.typepad.com/">Rachel Davies</a> for sharing her approach to constructing a <a href="http://agilecoach.typepad.com/agile-coaching/2009/10/how-to-create-a-diagram-of-effects.html">diagram of effects</a>.</p>
<p>Rachel proposes that the diagram of effects can trigger a team to discuss how a variety of issues relate and goes on to highlight advice from Bas Vodde and Craig Larman in their first book “Scaling Lean and Agile Development”, the First Law of Diagramming is “The primary value in diagrams is in the discussion while diagramming—we model to have a conversation.”</p>
<p>I have been using a slightly different approach in retrospectives recently. With a similar intent to Rachel I hope to trigger conversations that result in a team sharing there concerns and issues and coming to a shared view as to how these relate and where would be a good point for intervention.</p>
<p>I’ve used this approach a couple of times recently when running retrospectives that cover a few months i.e. not iteration retrospectives where we choose to commit a few hours to investigating issues in some detail.</p>
<p>My favoured approach is borrowed from Eliyahu Goldratt’s Theory of Constraints, it is one of the 5 TOC thinking process and is know as a current reality tree. A current reality tree is a tree of undesirable aspects of your current situation, these are connected to indicate cause and effect.</p>
<p>My approach to constructing this diagram is as follows:</p>
<p><strong>Identify undesirable effects<br /> </strong>Invite the whole team to stand around a table thinking of undesirable / unwanted traits of their existing approach (process, tools, methods etc.). Each item should be written on an index card and placed on the table in no particular order. Team members can try to avoid duplicats but if one pops up it is not a problem.</p>
<p><strong>Begin to identify cause effect relationships<br /> </strong>Invite the team to select two related cards. These should be stuck on the board and joining with an arrow pointing from cause to effect.</p>
<p><strong>Continue to grow the diagram<br /> </strong>The whole team should collaborate to add the cards to the diagram. When I first tried this I wondered how I would cope if groups of cards were not related. I’ve not seen this actually happen yet but should it then I guess we allow for the growth of separate diagrams until we discover a relationship.</p>
<p><strong>Review relationships<br /> </strong>In CRT literature there are a set of steps for assessing the existence and relationships between UDEs. My approach is to invite team members to consider where items are missing. Often where many causes relate to a single effect there is a missing intermediate effect.</p>
<p>Since I tend to run this approach in a time boxed session I an looking for the point at which returns begin to diminish. As the group settle on a basic shape and begin to look for intervention points I move to support this.</p>
<p>A good candidate point to intervene at would be contributing to a number of effects or participating in a feedback loop. By focusing on one effect we can select actions that will contribute to reducing this effect and by association those related effects.</p>
<p>Of course, an added benefit of this approach is that we can use the cause and effect diagram to review the effect of our interventions; did we get it right, if not was there something we missed in the analysis?</p>
<p>I hope that this is useful. Do share if you’ve used this approach or something similar yourself.</p>
<div class="feedflare"><a href="http://feeds.feedburner.com/~ff/AgileDesign?a=Ql8h0r3mL_E:dGv6krhH9nM:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/AgileDesign?d=yIl2AUoC8zA" border="0" alt="" /></a> <a href="http://feeds.feedburner.com/~ff/AgileDesign?a=Ql8h0r3mL_E:dGv6krhH9nM:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/AgileDesign?i=Ql8h0r3mL_E:dGv6krhH9nM:F7zBnMyn0Lo" border="0" alt="" /></a> <a href="http://feeds.feedburner.com/~ff/AgileDesign?a=Ql8h0r3mL_E:dGv6krhH9nM:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/AgileDesign?i=Ql8h0r3mL_E:dGv6krhH9nM:V_sGLiPBpWU" border="0" alt="" /></a></div>
]]></content:encoded>
			<wfw:commentRss>http://blog.valtech.co.uk/agile/agile-retrospectives-cause-and-effect/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tale of two SCRUM stand ups</title>
		<link>http://blog.valtech.co.uk/agile/tale-of-two-scrum-stand-ups/</link>
		<comments>http://blog.valtech.co.uk/agile/tale-of-two-scrum-stand-ups/#comments</comments>
		<pubDate>Tue, 02 Feb 2010 12:38:00 +0000</pubDate>
		<dc:creator>Andrew Rendell</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Agile Management]]></category>
		<category><![CDATA[SCRUM]]></category>
		<category><![CDATA[Stand-ups]]></category>

		<guid isPermaLink="false">http://www.rendell.org:80/pebble/software/2009/12/15/1260877320000.html</guid>
		<description><![CDATA[          I walked past two teams doing their daily SCRUM standup today. Both teams claim to be agile. I didn't join in (even as a chicken) but just observed for a minute or so.<br />
<br />
The first team was sitting down in a breakout area. Their body language spoke volumes. There was not one single participant maintaining eye contact with anybody else. Two people were playing on their phones. One developer had his head in his hands. Most had bored expressions. The team leader who is also the SCRUM master was the only person who spoke for the entire time I watched.<br />
<br />
The second team was stood in a space near their desks. They were gathered round a task board which appeared to be up to date and the focus of several of the individual's updates. One person spoke at a time. Almost everybody appeared to be paying attention to whomever was speaking. Most updates were short and concise. A couple rambled on.<br />
<br />
Other than both teams calling their meeting a SCRUM I could see no similarities.<br />
<br />
As our agile adoption has spread beyond the original teams I suppose it is inevitable that as the experience gets spread a little thinner that people will simply label their existing activities with agile sounding names. Often we have no clear remit in those teams to supply a mentor and to try offer advice would result in rebuttal as team leaders guard their territory. Does this matter? Is there a risk that these teams who are not practicing agile correctly will diminish and discredit agile in the eyes of our programme managers? This is sounding a bit like an excuse for an Agile Inquisition going round checking that no team is using Agile's name in vain. This cannot be a good thing either.
        ]]></description>
			<content:encoded><![CDATA[<div class="bottomcontainerBox" style="background-color:#F0F4F9;">
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.valtech.co.uk%2Fagile%2Ftale-of-two-scrum-stand-ups%2F&amp;layout=button_count&amp;show_faces=false&amp;width=85&amp;action=like&amp;font=verdana&amp;colorscheme=light&amp;height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width=85px; height:21px;" allowTransparency="true"></iframe></div>
			<div style="float:left; width:80px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<g:plusone size="medium" href="http://blog.valtech.co.uk/agile/tale-of-two-scrum-stand-ups/"></g:plusone>
			</div>
			<div style="float:left; width:95px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://blog.valtech.co.uk/agile/tale-of-two-scrum-stand-ups/"  data-text="Tale of two SCRUM stand ups" data-count="horizontal" data-via="valtech">Tweet</a>
			</div>			
			</div><div style="clear:both"></div><div style="padding-bottom:4px;"></div><p>I walked past two teams doing their daily SCRUM standup today. Both teams claim to be agile. I didn&#8217;t join in (even as a chicken) but just observed for a minute or so.</p>
<p>The first team was sitting down in a breakout area. Their body language spoke volumes. There was not one single participant maintaining eye contact with anybody else. Two people were playing on their phones. One developer had his head in his hands. Most had bored expressions. The team leader who is also the SCRUM master was the only person who spoke for the entire time I watched.</p>
<p>The second team was stood in a space near their desks. They were gathered round a task board which appeared to be up to date and the focus of several of the individual&#8217;s updates. One person spoke at a time. Almost everybody appeared to be paying attention to whomever was speaking. Most updates were short and concise. A couple rambled on.</p>
<p>Other than both teams calling their meeting a SCRUM I could see no similarities.</p>
<p>As our agile adoption has spread beyond the original teams I suppose it is inevitable that as the experience gets spread a little thinner that people will simply label their existing activities with agile sounding names. Often we have no clear remit in those teams to supply a mentor and to try offer advice would result in rebuttal as team leaders guard their territory. Does this matter? Is there a risk that these teams who are not practicing agile correctly will diminish and discredit agile in the eyes of our programme managers? This is sounding a bit like an excuse for an Agile Inquisition going round checking that no team is using Agile&#8217;s name in vain. This cannot be a good thing either.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.valtech.co.uk/agile/tale-of-two-scrum-stand-ups/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

