<?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>agilechronicles &#8211; Software, Fitness, and Gaming &#8211; Jesse Warden</title>
	<atom:link href="https://jessewarden.com/tag/agilechronicles/feed" rel="self" type="application/rss+xml" />
	<link>https://jessewarden.com</link>
	<description>Software &#124; Fitness &#124; Gaming</description>
	<lastBuildDate>Sat, 06 Jul 2013 01:34:11 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://jessewarden.com/wp-content/uploads/2016/08/cropped-Lambda2-32x32.png</url>
	<title>agilechronicles &#8211; Software, Fitness, and Gaming &#8211; Jesse Warden</title>
	<link>https://jessewarden.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Agile Chronicles #12: Technical Debt</title>
		<link>https://jessewarden.com/2010/07/agile-chronicles-12-technical-debt.html</link>
					<comments>https://jessewarden.com/2010/07/agile-chronicles-12-technical-debt.html#comments</comments>
		
		<dc:creator><![CDATA[JesterXL]]></dc:creator>
		<pubDate>Fri, 30 Jul 2010 15:47:36 +0000</pubDate>
				<category><![CDATA[Agile Chronicles]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[agilechronicles]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[scrum]]></category>
		<category><![CDATA[technical debt]]></category>
		<guid isPermaLink="false">http://jessewarden.com/?p=2401</guid>

					<description><![CDATA[I know it may sound like I&#8217;m painting a rosy,Â infallibleÂ picture of Scrum. Â It&#8217;s the truth, though, and I feel like it solved most of my project problems. Â There is, however, one main problem I saw that made Scrum, and Iterative Development in general, fall flat on its face. Â It&#8217;s called Technical Debt, and it&#8217;s a [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>I know it may sound like I&#8217;m painting a rosy,Â infallibleÂ picture of <a href="http://en.wikipedia.org/wiki/Scrum_(development)">Scrum</a>. Â It&#8217;s the truth, though, and I feel like it solved most of my project problems. Â There is, however, one main problem I saw that made Scrum, and Iterative Development in general, fall flat on its face. Â It&#8217;s called <a href="http://martinfowler.com/bliki/TechnicalDebt.html">Technical Debt</a>, and it&#8217;s a problem with programming in general, not Scrum/Agile. Â When it rears its head in Scrum, the effects are devastating, and I believe one of the main reasons Scrum fails for a lot of people.</p>
<p>This article will discuss what Technical Debt is from a Flash/Flex developer perspective, how it negatively affects my Scrum projects, and what are some of the prescribed ways to prevent it. Â Nothing ground breaking here folks, justÂ corroborationÂ that TD IS a major problem, and not even Scrum is immune.</p>
<p><span id="more-2401"></span><strong>What is Technical Debt?</strong></p>
<p>Martin Fowler has a <a href="http://martinfowler.com/bliki/TechnicalDebt.html">good summary</a> about what Technical Debt is. Â Here are 2 quotes from his wiki:</p>
<blockquote><p>You have a piece of functionality that you need to add to your system. You see two ways to do it, one is quick to do but is messy &#8211; you are sure that it will make further changes harder in the future. The other results in a cleaner design, but will take longer to put in place.</p></blockquote>
<p>Git-r-done vs. <a href="http://jessewarden.com/2010/07/when-you-do-it-right-and-on-time.html">doing it right</a>.</p>
<p>Another quote which describes the metaphor:</p>
<blockquote><p>&#8230;doing things the quick and dirty way sets us up with a technical debt, which is similar to a financial debt. Like a financial debt, the technical debt incurs interest payments, which come in the form of the extra effort that we have to do in future development because of the quick and dirty design choice. We can choose to continue paying the interest, or we can pay down the principal by refactoring the quick and dirty design into the better design. Although it costs to pay down the principal, we gain by reduced interest payments in the future.</p>
<p>The metaphor also explains why it may be sensible to do the quick and dirty approach. Just as a business incurs some debt to take advantage of a market opportunity developers may incur technical debt to hit an important deadline. The all too common problem is that development organizations let their debt get out of control and spend most of their future development effort paying crippling interest payments.</p></blockquote>
<p>He goes on to mention that unlike money, you cannot effectively measure technical debt. Additionally, you only get a return on your loan once you deliver.</p>
<p><strong>Signs of Technical Debt</strong></p>
<p>There are various signs of Technical Debt. Â System fragility, tons of reoccurring bugs, or code that &#8220;sometimes&#8221; works.</p>
<p>System fragility examples include when you move a login button, the entire login form doesn&#8217;t work. Â Another sign is when you change a ValueObject&#8217;s property name slightly, yet get no new compiler errors. Â Yet another, usually a violation of DRY, is when you change a parsing error of a server&#8217;s response, yet still get the bug after compilation.</p>
<p>Another example is the statement &#8220;the application doesn&#8217;t seem to be working&#8221;. Â If there had been diagnostic tools in place such as unit tests, a debug/log window, or other testing tools, that question could be quickly answered. Â Even if it can&#8217;t, if you can&#8217;t quickly isolate problems after asking some follow up questions, that&#8217;s another indicator.</p>
<p>Another is when you fix a bug. 3 times. Over 3 Sprints. Â Then it comes back in some other unrelated area. Â Another is before the user even does anything you&#8217;re presented with one or more error dialogues.</p>
<p>The best are when you see the right data. Â Sometimes. Â You have no idea if it&#8217;s your fault, the server&#8217;s fault, or&#8230; what.</p>
<p>Bottom line the code has growing pains, and is challenging to change. Â When you change one thing it breaks something else unrelated, your change is a pain to implement, or your new code duplicates a lot of functionality because you can&#8217;t borrow other functionality because it isn&#8217;t encapsulated enough to share.</p>
<p>The one that took me a LONG time to get over when I first started dealing with extremely large code bases was &#8220;fatique&#8221;.  I&#8217;d get tired of dealing with all the problems, and feeling like I wasn&#8217;t making any progress.  That, and I had no confidence in my changes because I wasn&#8217;t sure what the ramifications were, what would break, etc. Â Effectively, I didn&#8217;t want to work on the project anymore. This has happened twice to me. Â It&#8217;s not from my attention span, but rather just pure loathing at not being able to move forward. Â Part of this is remedied in experience, part in &#8220;learning the story&#8221; of code base by spending a lot of time with it, and just general growth as a programmer.  If you&#8217;re grown, and still have this fatigue, that&#8217;s another clue.</p>
<p>All these and more are signs of Technical Debt. Â If not dealt with, they only get worse and more numerous.</p>
<p><strong>Technical Debt&#8217;s Effects on Scrum</strong></p>
<p>In Scrum, your user stories need to pass User Acceptance Testing (UAT). Â At the end of every Sprint, your client validates each user story your team completed is in fact done. Â If you have technical debt, this&#8217;ll eat away at the quality and/orÂ dependabilityÂ of your user stories actually working. Â This means one or more stories won&#8217;t pass UAT. Â This then slows down your, or your team&#8217;s, velocity.</p>
<p>This often will negatively affect your client&#8217;s view of the team as your earlier velocity will have been higher. Â Usually your team will start off slow or fast, but eventually 4 Sprints in, a common velocity will emerge. Â With a lot of Technical Debt, the reverse will happen; your initial speed will slowly decrease as your team struggles to cope with the increasing Technical Debt. Â If not tackled, more debt is created, and your velocity stays slow, or decreases.</p>
<p>Technical Debt will also often exhibit itself as &#8220;bugs&#8221;. Â In Scrum &#8220;there are no bugs&#8221;. Â Benevolent Scrum Masters will assign 1 point to bugs. Â This is often done to put a sense of accomplishment that the bug was completed, but more importantly that it&#8217;s trackable. Â Its low point value can unfortunatelyÂ skew to its business value. Â Perhaps the bug is what prevented your original user story worth the maximum of 5 points from passing UAT. Â Worse, if your team is working on fixing bugs, they aren&#8217;t working on user stories.</p>
<p>Again, negatively affecting your velocity.</p>
<p>Eventually your team will either have to pull back and pay off their technical debt, continually pay off a little to show some payoff, or just pray the client focuses on more pressing user stories in other areas and &#8220;forgets&#8221; the glaring issues. Â I&#8217;ve seen all 3 happen.</p>
<p><strong>Pullback &amp;Â Reassess</strong></p>
<p>Scrum doesn&#8217;t really have methodology for pulling back and fixing core architectural problems. Â It&#8217;s generally assumed that 80% of your 2 week Sprint is spent refactoring. Â I&#8217;ll let that sink in.</p>
<p>Done? Â Worse, Technical Debt, being <a href="http://martinfowler.com/bliki/CannotMeasureProductivity.html">unmeasurable</a>, wreaks havoc on a Product Manager&#8217;s ability to giveÂ transparencyÂ into the project for stakeholders. Â You don&#8217;t often have a stable velocity; some Sprints your team could simply deliver 0 story points. Â This makes it challenging for the PM to project when the Backlog will be completed and when certain milestones will be reached. Â It&#8217;s even worse when managing budgets and getting contracts signed. Â Scrum is hard enough to sell to clients who are used to fixed bid; suddenly Scrum sounds like a bait and switch, or just a money pit. Â Assuming your team is actually working on the user stories they were assigned and aren&#8217;t trying to sabotage the project, then that situation is usually irrefutable proof that your team has some serious Technical Debt.</p>
<p>Software done with Scrum is like a plane flying from A to B. Â While the flight path is continually corrected, eventually it&#8217;ll get there. Â Planes usually can&#8217;t fly with ice on the wings, hence why you setup good architectural bases in the first 2 Sprints. Â Ice on the wings during flight can beÂ disastrous.</p>
<p>For some projects, sometimes you have no choice. Â Your team has to take the hit, pay off the debt, and rebuild trust with your client. Â Yes, these can be bloody, but hey&#8230; anything is better than Waterfall which in my experience ends like <a href="http://www.youtube.com/results?search_query=lock+stock+and+2+smoking+barrels&amp;aq=0">Lock, Stock, and Two Smoking Barrells</a>: Tons of death, theft, and people get bling who don&#8217;t deserve it. Â While this is effective with Capitalism, life is too short to product shitty software.</p>
<p><strong>American Credit</strong></p>
<p>While not an American only phenomenon, it&#8217;s certainly indicative to our culture, hence why <a href="http://www.imdb.com/title/tt0137523/">Fight Club</a> had such an interesting ending. Â If you&#8217;re quick, good, and lucky you can get away with paying as much Technical Debt as you can per Sprint while knocking out a few new user stories as well. Â Sometimes this is just how things are; other times, you&#8217;re merely postponing the inevitable day of reckoning. Â Consultants are famous for this. Â They get away with masking the massive Technical Debt, and moving on letting some other poor W2 (employee) sap, or consultants like me, to actually fix the Technical Debt.</p>
<p>Eventually, you have to fix the broken windows&#8230; or maybe &#8220;you&#8221; don&#8217;t, but someone does. Â It&#8217;s easier to do this sooner than later. Â I&#8217;ve even seen a team where one guy would fix windows 90% of the Sprint, and another would unintentionally break them again.</p>
<p><strong>Pray for Priority Shift</strong></p>
<p>The third one I&#8217;ve seen happen in larger companies who don&#8217;t adhere 100% to Scrum. Â The priorities change for the user stories, and other parts of the application which are basically broken are ignored, buried, and eventually assumed to work. Â Flowers don&#8217;t grow as well over a dead robot&#8217;s grave.</p>
<p>Incidentally, when higher ups find out, this is where I get some of my work.</p>
<p><strong>Preventing &amp; FixingÂ TechnicalÂ Debt</strong></p>
<p>As you can see, Technical Debt has devastating effects on Scrum, and Iterative Software in general. Â The best way to ensure Technical Debt doesn&#8217;t negatively affect your project is to prevent it. Â It&#8217;s like insect infestations in your house; if you don&#8217;t attack the problem early, it can be very challenging to remove. Â The best way is to prevent the infestation in the first place by not leaving out food, water, and generally ensuring you have sealed entryways and windows. Â Same with software. Â Start with a tight, simple architecture, and continue to maintain it.</p>
<p>That sounds great from a high-level perspective, but what does that really mean?</p>
<p>Here&#8217;s a few I know &amp; have experience with:</p>
<ul>
<li>good design</li>
<li>good developers</li>
<li><a href="http://www.google.com/#hl=en&amp;q=fixing+broken+windows+software&amp;aq=f&amp;aqi=&amp;aql=&amp;oq=&amp;gs_rfai=&amp;pbx=1&amp;fp=97efa91857cb74f0">fixing broken windows</a> ASAP</li>
<li>OOP, specifically encapsulation</li>
<li>unit tests with a decent coverage</li>
<li>an agreed upon framework</li>
<li>throwing optimization out the window</li>
<li>using old technology</li>
<li>ContinuousÂ Integration:Â frequent checkins &amp;Â religious tagging</li>
</ul>
<p>Here&#8217;s a few I know of, but don&#8217;t have a lot, or any, experience with:</p>
<ul>
<li>Test Driven Development</li>
<li>Automated Build Systems</li>
<li>Automated Testing (Hudson, Cruise Control, etc)</li>
<li>Functional/Automation Testing (QuickTest and others)</li>
</ul>
<p>Let&#8217;s go over these in short detail.</p>
<p><strong>Good Design</strong></p>
<p>The #1 thing that saves you the most time, reduces the most risk, and directly contributes to the efficiency of your team is a good deign. Â Wireframes you hate since you&#8217;ve re-workedÂ them so many times with gallons of dead tree&#8217;s at your feet, and design comps you love. Â 5 minutes of a designer&#8217;s time can save a week of a developer&#8217;s. Â When you hit a brick wall during Sprint 5, a designer can quickly put your team back on track quicker and more accurately than a developer can.</p>
<p>Hire, and keep around, a good User Experience/InteractionÂ Designer/Information Architect/Designer today! Â If you&#8217;re made of epic win, hire a Usability Engineer as well. Â They are the ONLY ones who can provide real facts to your team.</p>
<p><strong>Good Developers</strong></p>
<p>A common complaint of Scrum is that it only works with senior to mid-levelÂ developers. Â I agree. Â While it <a href="http://www.cynergysystems.com/blogs/page/davewolf?entry=it_takes_a_village">takes a village</a> to build great software, you need to ensure yourÂ developmentÂ team is top notch, or mostly top notch with a rockstar to guide the rest. Â I realize this isn&#8217;t a reality for a lot of people. Â Even if you have a senior dev, the bad developers can actually detract from the senior&#8217;s ability to deliver as he/she struggles to re-factor their code while ignoring their own user stories. Â That or the bad/mediocreÂ developer continually creates Technical Debt. Â While developers not focusing on their user stories is a management problem, not a Scrum specific one, if they can&#8217;t even be professional and do what they are told, they are effectively sabotaging the project, and thus need to be removed.</p>
<p>Remember, small agile teams are more effective than <a href="http://en.wikipedia.org/wiki/The_Mythical_Man-Month">larger ones</a>. Â If it ends up only being 2 heavy hitters, so be it. Â Or you can just <a href="http://webappsolution.com">hire my team</a>.</p>
<p><strong>Fixing Broken Windows</strong></p>
<p>Not much to add <a href="http://www.google.com/#hl=en&amp;q=fixing+broken+windows+software&amp;aq=f&amp;aqi=&amp;aql=&amp;oq=&amp;gs_rfai=&amp;pbx=1&amp;fp=97efa91857cb74f0">here</a> other than they are usually one of the few things that can clearly indicate Technical Debt. Â If you have to prioritize, choose to ignoreÂ the ones you can easily predict and reproduce. Â They are less dangerous and take a lot less time to annoy your clients. Â It&#8217;s when you go, &#8220;Whoa&#8230; never seen that happen before&#8221; is when you worry your client and PM.</p>
<p><strong>OOP Encapsulation</strong></p>
<p>One of the good concepts of <a href="http://en.wikipedia.org/wiki/Object-oriented_programming">ObjectÂ OrientedÂ Programming</a> is <a href="http://en.wikipedia.org/wiki/Encapsulation_(computer_science)#Encapsulation">Encapsulation</a>. Â It may seem silly to bring up something so basic, but it&#8217;s a basic, core concept for a reason. Â Without goodÂ encapsulation, your code cannot grow, nor be flexible; something that&#8217;s VERY integral in Iterative development.</p>
<p>It&#8217;s ok if your API is good and the code underneath it sucks. Â This is where Test Driven Development can shine. Â Instead of &#8220;creating a component&#8221; from the inside out you actually write like you&#8217;re going to use the component yourself. Â A better API usually results. Â Then, you can focus on writing the guts to make that API happen&#8230; or not (see throwingÂ optimizationÂ out the window). Â It&#8217;s easier to fix bad code inside encapsulated, and thus easily isolatable components than it is <a href="http://en.wikipedia.org/wiki/Spaghetti_code">sphaghetti code</a>. Â Sphaghetti monsters are waaaayyyyy more scary to fix than WW2 tanks that just need a new engine.</p>
<p><strong>Unit Tests with Decent Coverage</strong></p>
<p>Even if you don&#8217;t practice <a href="http://en.wikipedia.org/wiki/Test-driven_development">TDD</a>, it&#8217;s still a good practice to implement unit tests on problem areas of the code. Â TDDÂ puristsÂ will state you should write tests first. Â If you don&#8217;t, there is still a ton of value in writing unit tests, or getting good &#8220;coverage&#8221; of problematic areas. Â Key areas include your Service layer or any code that accesses non AS3 data and injects it into the system. Â This includes XML, text, JSON, AMF, binary data, and anything that &#8220;parses&#8221; something.</p>
<p>Strong-typing is awesome, but it assumes you started with strong-typing. Â Parsing XML to ValueObjects is great, but if &#8220;That PersonVO <a href="http://www.gamesprays.com/spray/the-cake-is-a-spy/">is a Spy</a>!&#8221;, good unit test coverage can usually point that stuff out early and save the team days of debugging and lost time.</p>
<p>Plus, it&#8217;s really awesome to blame with 100% confidence the back-end Java team for your woes in 7 seconds vs. 2 hours of frustrating searching for a needle in a haystack whilst being verbally bashed by the back-end devs wondering why you didn&#8217;t use HTML5 instead of Flex. Â Suddenly Outlook does a cliche freeze before you can write a scathing, emotionally charged, career destroying email back at those <a href="http://steve-yegge.blogspot.com/2010/07/wikileaks-to-leak-5000-open-source-java.html">over-architecting ($*&amp;Us</a>.</p>
<p>While they have less value on GUI components, some of the ways in which you architect Flex 4 components can actually facilitate easier testing. Â Examples include really complicated components that NEED to be in a specific state when data is injected. Â While a really complicated chart that has 100 unit tests around it still has to be visually verified, those 100 unit tests can help dramatically.</p>
<p>Finally, in those areas where you have good coverage, you can do minor refactoring with a ton more confidence.</p>
<p><strong>Agreed Upon Framewor</strong>k</p>
<p>Doesn&#8217;t matter what framework your team chooses, as long as you all are in agreement. Â This could even include <a href="http://flexblog.faratasystems.com/2008/01/13/staffing-a-team-for-your-flex-project">using no framework</a>. Â I prefer <a href="http://robotlegs.org">Robotlegs</a>, my partners prefer <a href="http://swizframework.org/">Swiz</a>, and my clients often still use Cairngorm 2.x. Â Regardless of your thoughts on frameworks, in my experience they help you manage, scale, and work with a team on larger code bases.</p>
<p><strong>Premature </strong><span style="color: #000000;"><strong>Optimization</strong></span></p>
<p>Knuth once <a href="http://en.wikipedia.org/wiki/Program_optimization#cite_note-1">said</a>:</p>
<blockquote><p>&#8230;premature optimization is the root of all evil.</p></blockquote>
<p>After awhile, common optimizations you do by default, and to me, aren&#8217;t even considered intentionalÂ optimizations. Â Some are small, low hanging fruit, that you can do without even thinking and make into habits. Â Examples include setting an Array&#8217;s length to a local variable instead of inside of a loop, using <a href="http://www.google.com/#hl=en&amp;source=hp&amp;q=object+pooling+actionscript&amp;btnG=Google+Search&amp;aq=f&amp;aqi=&amp;aql=&amp;oq=&amp;gs_rfai=&amp;pbx=1&amp;fp=1&amp;cad=b">Object Pooling</a>, and using <a href="http://insideria.com/2008/11/visible-false-versus-removechi.html">visible vs. removeChild</a>.</p>
<p>Good programmers constantly want to make their code better. Â Sometimes this means faster or more responsive. Â The really good ones know when to leave a TODO, and move on. Â Most users are happy with a reasonably responsive GUI. Â A programmer&#8217;s expectations of &#8220;responsive&#8221; is often way higher than what a user will accept.</p>
<p>Code it and refactor later. Â You can&#8217;t refactor vaporware. Â Focus on pimp API&#8217;s. Â Besides, this is ActionScript, not C. Â We have certain limitations (<a href="http://en.wikipedia.org/wiki/Green_threads">no threads</a>, a VM vs. all code being machine code, and a lot of <a href="http://blog.joa-ebert.com/2009/08/11/apparat-is-now-open-source/">missing optimizations</a>). Â <a href="http://waxpraxis.org/">Brandon Hall</a> once said if you have a performance problem in Flash, you&#8217;re probably doing it wrong. Â Instead of re-factoring code, step back and re-assess your approach. Â Recognize those limitations early, and yell like crazy at the designer, &#8220;WE CAN&#8217;T GO TO THE MOON IN A TRICYCLE YOU FRAKIN CRAYON PUSHER!!!?&#8221;</p>
<p>If you have something to prove, do it at night and post to your blog. Â If the GUI isn&#8217;tÂ responsive, well duh, that&#8217;s not a bad optimization, that&#8217;s a required one. Â The point here is if you need to prove through tests cases that by not doing your optimization(s) that the app will be unresponsive, you&#8217;re either in dangerous time sinkÂ territory, or doing something <a href="http://hobnox.com/">amazing</a>.</p>
<p><strong>Use Old Technology</strong></p>
<p>While I love using Flex 4, a lot of the apps I still work on, and clients have in development and/or production are Flex 3.x. Â Flex 3.5 &amp; Flex Builder are solid, 4.0 SDK and IDE, not so much. Â You want your problems to be programming challenges, not unexpected scrollRect or IDE magically disappearing code hinting bugs. Â These things can be major time sinks and devastating to your productivity, sometimes killing your entire day as you attempt to reinstall &amp; reconfigure various things. Â Mitigate those risks by using old software that works and has a proven track record. Â Most won&#8217;t listen to this paragraph and I don&#8217;t blame them. Â Flex 4 skinning does help a lot in the &#8220;make this design work&#8221; department, although, no one talks about the overhead costs of putting an icon in a Spark button, and all the other simple things that are now more complicated.</p>
<p>Software traditionally outlives it&#8217;s original expected lifespan by 3 times or more. Â One of the reasons is that it works.</p>
<p><strong>ContinuousÂ Integration</strong></p>
<p><a href="http://martinfowler.com/articles/continuousIntegration.html">Continuous Integration</a> is aÂ giganticÂ topic, and actually encapsulates a lot of other sub-topics I&#8217;ve already mentioned. Â I just want to focus on the parts of it that I found extremely helpful and harmful if not followed.</p>
<p>The first is checking in your code often. Â If you don&#8217;t know how to merge code, learn. Â If you don&#8217;t know what tool to use, use <a href="http://www.scootersoftware.com/">BeyondCompare</a>. Â If you&#8217;re on a Mac like me, use <a href="http://www.codeweavers.com/products/">CrossOver</a> to make BC work (I&#8217;ve been using that setup for 4 years).</p>
<p>Even on a 2 man team, merging and testing your changes can take a lot of time, even if you and the other developer are on completely different sections of the code base. Â On one project, we actually set a specific merge day on the 2nd week of our 2 week Sprint to ensure we planned for this disruptive day. Â We&#8217;d both merge frequently, but we&#8217;d still ensure we didn&#8217;t merge much more after that since it can wreak havoc on UAT day.</p>
<p>Regardless of what source control system you use, you NEED to implement tagging. Â This doesn&#8217;t need to be a team thing at all; just give 1 personÂ responsibilityÂ with this important task. Â Every UAT day, they need to tag the build. Â Developers in general should make their own tags and branches, but sometimes the code isn&#8217;t in a risky spot and you don&#8217;t end up doing it. Â That&#8217;s ok. Â You should still have Sprint tagged builds so you have SOME saved point to confirm/deny major bugs/changes against.</p>
<p><strong>Test Driven Development</strong></p>
<p>I won&#8217;t go into detail here, but I&#8217;ve seen the positive benefits on my Service layer, or when I&#8217;m writing a library for others to use. Â For both, you actually create the API first and it feels immediately relevant. Â Additionally since the Service layer is often the weakest link in your application it&#8217;s great to proactively find bugs that would of usually cost a lot of time early on. Â That, and you have aÂ dependableÂ suite to test for changes that may negatively affect things later on. Â Finally, you can test if the entire applications communication system is working within seconds, quickly killing assumptions that add to debugging time.</p>
<p>What I haven&#8217;t resolved yet, and this is probably due to my inexperience with it, is how to manage the <a href="http://discuss.fogcreek.com/joelonsoftware/default.asp?cmd=show&amp;ixPost=31666">amount of code</a> I have to refactor. Â No longer just the components, but the tests often as well. Â This isÂ especiallyÂ true with some of my more complicated GUI composition components where I test the controller layers. Â Maybe it&#8217;s my inexperience with TDD &amp; unit tests, maybe my tests just aren&#8217;t very good&#8230; I don&#8217;t know. Â Like any problems with the GUI, I just blame the Designer. Â That doesn&#8217;t make the re-factoring amount &amp; time go away though.</p>
<p><strong>Automated Build Systems</strong></p>
<p>Automated build systems include things like <a href="http://ant.apache.org/">ANT</a> and <a href="http://maven.apache.org/">Maven</a> or even <a href="http://rake.rubyforge.org/">Rake</a>. Â This is the #1 question that sabotages my sales call when talking to Enterprise clients. Â They want to here me say, &#8220;Why yes, of course I&#8217;m a major proponent of automated build systems.&#8221;</p>
<p>I don&#8217;t, though. Â ActionScript &amp; Flex Dev isn&#8217;t Java, and is a lot simpler. Â I&#8217;ve seen more team productivity lost to setting up &amp; maintaining build systems.</p>
<p>&#8230; except for deployment. Â When you&#8217;re deploying to various servers, and doing integration testing with different systems, I&#8217;ve seen TONS of value here. Â I&#8217;ve only seen this work if you have a dedicated build person who doesn&#8217;t mind having a lower story point contribution.</p>
<p>If I can&#8217;t hit the run and debug buttons in Flex/Flash Builder, I perceive that a serious problem. Â I&#8217;ve seen many teams who can&#8217;t do this, and fire drills rage. Â Once you solve that problem, you can start tackling other problems. Â There are many who disagree with me, but they are nowhere to be found on my consulting gigs where I&#8217;m saving a project.</p>
<p><strong>Automated Testing</strong></p>
<p>The King James Bible says in the 10 Commandments that you shouldn&#8217;t covet yourÂ neighbor. Â I&#8217;m an uber-sinner then because I&#8217;ve never worked on a team that had the chops, client permission, and/or resources to setting up and maintaining anÂ automatedÂ testing server, yet IÂ continuallyÂ wish I had been, or soon will. Â I&#8217;ve been on teams where we talked about it, but it was never executed because we too busy TRYING NOT TO DIE AND ACTUALLY SHIP SOFTWARE.</p>
<p>Hudson and Cruise Control look awesome. Â That said, a lot of the people I&#8217;ve worked with don&#8217;t even write unit tests, so&#8230;&#8230;..</p>
<p><strong>Functional Testing Tools</strong></p>
<p>As I stated, a lot of things in Flex are insanely visual; you can&#8217;t write unit tests to test visual accuracy. Â That, and some of the state&#8217;s they get in areÂ unwieldyÂ to write tests around. Â You can utilize <a href="http://en.wikipedia.org/wiki/HP_QuickTest_Professional">functional testing tool</a>s to automate a lot of that&#8230; and man, seeing them in action is HOT! Â They are wicked expensive as a result, and only the larger Enterprise companies employ them. Â Here, too, is another thing that sabotages my sales calls with clients:</p>
<p>&#8220;You ever use Functional Testing tools?&#8221;</p>
<p>&#8220;No, but I&#8217;d love too, they look HOT!&#8221;</p>
<p><strong>Conclusions</strong></p>
<p>In my experience with Scrum, and Iterative Development in general, Technical Debt is the only thing I&#8217;ve seen that can really destroy the promises that Scrum is supposed to deliver on. Â Thus, it&#8217;s been the one thing I&#8217;ve been focused on better understanding on how to identify, prevent, and fix. Â If you&#8217;re using Scrum, beware. Â Twice I&#8217;ve seen Technical Debt make a huge negative impact on my projects.</p>
<p>There are a bunch of things you can do.</p>
<p>Think heavily upon the decision of coding something quick vs. planned out well architecturally. Â There are pro&#8217;s and con&#8217;s to each (OOP Purists will tell you nothing should be quick, they are wrong). Â Sometimes you have zero clue if feature is even relevant to the your users, and it makes huge business sense to only make a quick foray vs. a huge, heavy architecture investment in case the user quickly scoffs at the functionality. Â <a href="http://en.wikipedia.org/wiki/George_S._Patton">Patton</a> called this a &#8220;calculated risk&#8221;. Â Software IS War. Â Other times, that quick implementation without any good architecture can have major negative consequences later down the line. Â That&#8217;s ok, though, just get really good at refactoring. Â Yes, it&#8217;s a skill you can learn. Â Yes, refactor is a good word; it&#8217;s not the same thing as rewrite, and is integral to developing software well.</p>
<p>The other ones are ensuring you have a competent team, ensuring they follow commonly known practices, and tackle problems early. Â Check your code in often and early. Â If you don&#8217;t employ TDD, at least think about getting some unit test coverage on areas thatÂ continuallyÂ are causing problems.</p>
<p>Remember, part of this recession was caused by people having massive debt they didn&#8217;t deal with, and ignored. Â Debt is a valid way of doing business, and so is software, but you need to see some eventual value on that investment, and not let your debt get out of control.</p>
<p>If you ignore everything I said above, just remember 3 things: encapsulation, refactor, and use a damn good <a href="http://jessewarden.com/2010/02/consulting-chronicles-3-preventing-fire-drills-crises-by-removing-land-mines-and-using-diagnostic-tools.html">logger</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://jessewarden.com/2010/07/agile-chronicles-12-technical-debt.html/feed</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title>Agile Chronicles #11: The Backlog and Product Development Challenges</title>
		<link>https://jessewarden.com/2010/07/agile-chronicles-11-the-backlog-product-development-challenges.html</link>
					<comments>https://jessewarden.com/2010/07/agile-chronicles-11-the-backlog-product-development-challenges.html#comments</comments>
		
		<dc:creator><![CDATA[JesterXL]]></dc:creator>
		<pubDate>Wed, 28 Jul 2010 15:14:23 +0000</pubDate>
				<category><![CDATA[Agile Chronicles]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[agilechronicles]]></category>
		<category><![CDATA[backlog]]></category>
		<category><![CDATA[scrum]]></category>
		<guid isPermaLink="false">http://jessewarden.com/?p=2352</guid>

					<description><![CDATA[I wanted to talk about the Backlog again with regards to Scrum, an iterative Agile Software Development process. I&#8217;m working on 2 products simultaneously in my spare time, and have noticed a few patterns the Product Backlog has helped me with, as well as pointing out priority problems. I thought it important to bring this [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>I wanted to talk about the Backlog again with regards to <a href="http://en.wikipedia.org/wiki/Scrum_(development)">Scrum</a>, an iterative Agile Software Development process.  I&#8217;m working on 2 products simultaneously in my spare time, and have noticed a few patterns the Product Backlog has helped me with, as well as pointing out priority problems.  I thought it important to bring this up again on what a Backlog is, how it solves the scope creep problem, and how you can use it incorrectly.</p>
<p><span id="more-2352"></span><strong>Caveats</strong></p>
<p>I continually abuse 2 terms below, Backlog and Sprint. Â Sprints don&#8217;t have to be 2 weeks, but for the sake of simplicity, I assume they are. Â Also, Backlogs contain user stories, not requirements or features. Â However, I assume for the sake of this article your features are already formed into user stories. Â Finally, I assume that once I capture a requirement, it&#8217;s thrown into the Backlog. Â I actually have a document which holds the validated requirements, which I then later formalize into user stories, and then put those officially into the real Backlog. Â In this article&#8217;s case, that process is assumed to have already happened.</p>
<p><strong>Review: What is a Backlog?</strong></p>
<p>First, a review.  A Backlog is a place you store features, or user stories.  There are often 2 Backlogs for a software project, a Product Backlog and a Sprint Backlog.  The Product Backlog contains all features for your software.  At it&#8217;s purest form, it&#8217;s an spreadsheet that lists all the things your software is supposed to do, with a rated business value.  While it can be seen somewhat as a requirements document, it is more defined, and singularly focused.  It merely lists features/user stories.</p>
<p>While a requirements document may say &#8220;The application needs to allow users to register and login&#8221;, the Product Backlog would probably have that as 4 line items:</p>
<ul>
<li>Upon entering [product URL], and the user isn&#8217;t logged in, they&#8217;ll be presented with a login screen.  They can enter their username and password, click the &#8220;Login&#8221; button.  If the correct credentials are provided, the user is shown the landing page.</li>
<li>If the user inputs the incorrect username and/or password, the Login screen is shown with the error message &#8220;Your username and/or password was incorrect&#8221;.</li>
<li>If the user is already logged in when entering [product URL], they are automatically taken to the landing page.</li>
<li>If the user does not have an account, and arrives at the login page, they can click the &#8220;Register&#8221; hyperlink to be taken to the New User Registration page.</li>
</ul>
<p>There are a lot more user stories you can write, or even refining the ones above.  There are a few points here in the difference.  The client wants users to register and login.  This requirement can easily be documented in a requirements document.  That requirement belays a lot of work for developers, and a lot of things for the PM to track.  Requirements are for capturing the client&#8217;s needs, but are not setup for clearly laying out what a developer should do, nor what the acceptance criteria is.  The developers want clear instructions on what they are supposed to code with a clear acceptance criteria.  Most importantly, the Project Manager needs to have trackable items, clearly documented, that are accepted by the client.  Additionally, she needs to have weights and priorities attached to these items so she can track over time and give the client transparency into the project.</p>
<p>These units of work, called user stories, are stored in the Backlog.  They are mutually agreed upon by the client, developer(s), and the PM.</p>
<p><strong>Review: Sprint Backlog</strong></p>
<p>A Sprint Backlog is where you put features/user stories that team needs to complete each Sprint.  You put user stories into the Sprint Backlog from the Product Backlog.  Once the Sprint starts, the Sprint Backlog becomes frozen.  While you can add &amp; modify things in the Product Backlog while the Sprint goes on, you cannot add/modify things in the Sprint Backlog.  Additionally, the Developers are the only ones who actually mess with the Sprint Backlog.  They&#8217;ll assign user stories to themselves, complete it, and move to the next.</p>
<p><strong>What Are We Building?</strong></p>
<p>One of the reasons for the high rate of software project failures is due to the software not being what the client wanted.  Software is usually built to a specification or &#8220;spec&#8221;; a document that outlines what the customer/client wants.  Clients are busy.  Thus, back in the <a href="http://en.wikipedia.org/wiki/Waterfall_model">Waterfall</a> days, you&#8217;d get a sales and/or PM to document as much of the client&#8217;s requirements as possible, formalize it into a contract, usually a Statement of Work or similar, and have both parties sign it.  This contract was supposed to be what you were building, by when.</p>
<p>There were 3 huge problems with that.  First, it assumes you accurately captured requirements.  This is a fallacy.  Communication is a flawed process based on the filters we humans use to understand other humans (my mind filters the thought into speech I believe you need to here, you hear this speech and interpret the meaning of my words, and filter it to what you think I said).  Thus, you need to, rightfully, assume any documentation, even mutually agreed upon, is flawed.</p>
<p>Second, developing software is slow compared to making dinner.  The business and/or customers who needed the software can change. Â Software needs to embrace change to be relevant. Â Iterative development embraces that concept whereas Waterfall does not. Â Waterfall assumes you got it right &#8220;months ago&#8221;, and there is no room for the client to change their mind.</p>
<p>Third, it&#8217;s <a href="http://uxmyths.com/post/746610684/myth-21-people-can-tell-you-what-they-want">a myth</a> that people can tell you what you want. Â Clients think they know, even if they are actually involved in making software, but they don&#8217;t. Â Usability testing is the only proven way in software to validate if your software works or not. Â To do usability testing, you need to have a working build of software. Â To have a working build of software, developers have to make a build vs. work on the build.</p>
<p>Iterative development forces you to make working builds every 2 weeks, and gives the client the opportunity to validate that your implementation of user stories are actually valid. Â This also allows them to validate the software is solving their current needs, and if not, they can shuffle the Product Backlog around, andÂ re-prioritizeÂ for the next Sprint.</p>
<p>The Product Backlog contains all of the features your software has, and the Sprint Backlog has the frozen features your team is implementing this Sprint. Â The key here is that the Product Backlog can change. Â Whether your client wants toÂ re-prioritize, or they have new things they want to add.</p>
<p><strong>Scope Creep</strong></p>
<p>Scope Creep is defined as the scope, or total requirements for a project, growing over time. Â The word &#8220;creep&#8221; is used to imply that it&#8217;s growing beyond the originally agreed upon scope, and it&#8217;s doing it slowly enough not to raise the ire of anyone beyond those actually designing &amp; developing the project. Â It&#8217;s the bane of web &amp; application developers everywhere.</p>
<p>Unless you use a Backlog in Scrum.</p>
<p>If the client wants to add new functionality, they can. Â Adding new functionality to a project is often a good thing. Â Whether a good idea that could of only arisen AFTER a build of the software was used by the client, or a glaring hole in available functionality was noticed weeks later. Â Sometimes the new functionality is just a piece of functionality re-stated, but with additional work behind it. Â Developers usually hate this because while the client perceives it as &#8220;the same scope, just re-worded&#8221;, developers know that it&#8217;s 3 times the work. Â First, they already built it; second, they have to re-work their existing work assuming it can be re-factored at all; and third, they still have to code all the NEW functionality added&#8230;</p>
<p>&#8230;within the same timeline.</p>
<p>Unless you use a Backlog in Scrum.</p>
<p>Remember, the Sprint Backlog, the things developers are working on during a given Sprint, is frozen once your team starts. Â It CANNOT be changed once you start. Â The client is welcome to modify, change, andÂ re-prioritizeÂ the Product Backlog whenever they want. Â If theÂ functionalityÂ your team delivers at the end of every Sprint meets UAT (User Acceptance Testing&#8230; also known as &#8220;we built exactly what you asked&#8221;), and the client wants to change it, it&#8217;s added as a new feature to the Product Backlog. Â This is huge.</p>
<p>This means that anytime the client &#8220;adds&#8221; or &#8220;changes&#8221; something, it&#8217;s clearly documented in the Product Backlog. Â The key here is if your team already delivered a user story from the Sprint Backlog, and the client wants to change things, they can&#8217;t magically undo the completed user story your team completed. Â It stays completed, and a new one is created for insertion into the Product Backlog. Â This is a track record for the PM and your team to clearly show they client they ARE adding scope the project. Â Your team IS delivering on what they were asked to do.</p>
<p>I don&#8217;t want to get into teaching the client, managing their expectations, etc. I just want to point out here that&#8217;s how it&#8217;s supposed to work, and that&#8217;s fine. Â Most Product Backlogs grow as the project moves forward. Â This is a good thing. Â It shows things are evolving and getting refined. Â Your client is getting what they want. Â Your team isÂ shieldedÂ from scope creep sabotaging your work and the client&#8217;s expectations.</p>
<p><strong>Product Development Helper</strong></p>
<p>I&#8217;m involved in 2 products currently. Â One is an Enterprise <a href="http://www.adobe.com/devnet/flex/samples/dashboard/dashboard.html">Dashboard</a> Framework for <a href="http://webappsolution.com">my company</a>, and one is an image app I&#8217;m working on with <a href="http://joelhooks.com">Joel Hooks</a>. Â Both projects were well under way when I was brought on board. Â Both project owners specifically asked me to join to help them accomplish 2 things.</p>
<p>First, they wanted to launch. Â Second, they wanted an opportunity to do Scrum development.</p>
<p>While I have gleefully accepted helping them reach these goals, this put me in a few challenging situations.</p>
<p><strong>Economics of Design Phase</strong></p>
<p>From my experience in software, I&#8217;ve found (and read online to corroborate) that the most impact with least cost is spent in the Design Phase. Â This is when the User Experience (UX)/Interaction Designer (ID)/Information Architect (IA)/Designer people/person figures out what we&#8217;re building. Â To give you context, let&#8217;s pretend I charge $50/hr (&lt;&#8211; lol!) and conveinantely leave out the design part (where wire frames are made to look hot via Photoshop/Illustrator/your mom):</p>
<ul>
<li>2 hours spent on wire framing a Login = $100</li>
<li>16 hours spent coding the Login to work = $800</li>
</ul>
<p>Now, the ratio varies, but typically development time greatly exceeds time spent wire framing. Â There is also a dependent relationship here that the above math doesn&#8217;t show. Attention to detail &amp; well thought out user stories implemented in the wireframes often significantly reduces the amount of time developers have to spend.</p>
<ul>
<li> 2 hours spent refining registration = $100</li>
<li>6 hours saved by devs not having to stop, lose momentum, ask questions, get clarity, re-work, wtf = $300</li>
</ul>
<p>Another advantage is &#8220;cheap flexibility&#8221;. Â If you want change your mind about something in Design Phase, it&#8217;s really cheap. Â I&#8217;ll often utilize a pen and paper for creating software, whether that&#8217;s in the beginning, or after we hit a design/functionality challenge in the design comps and we have to go back to the drawing board as it were. Â Drawing boxes and arrows, and thenÂ summarily ripping out the piece of paper for 2 hours until we get it right. Â This, as opposed to having developers figure out mid-sprint, costing them <a href="http://www.paulgraham.com/makersschedule.html">valuable momentum</a>, and setting them up to fail. Â &#8230;and costing a lot more money.</p>
<ul>
<li>4 hours playing around with the Landing Page = $200</li>
<li>2 days using developers to play around with the Landing Page = $800</li>
</ul>
<p>Keep mind, your Designer doesn&#8217;t contribute, nor is beholden to, Story Points. Â If you utilize your Developers toÂ experiment, you&#8217;ve detracted from their ability to deliver on theirÂ committedÂ stories. Â This costs you twice: Their lost productivity they&#8217;ll have to make up, and by spending more money using developers vs. designers to play around with a design.</p>
<p><strong>False Starts</strong></p>
<p>I&#8217;ve tried &amp; failed enough times at launching my own product ideas that I&#8217;ve learned what not to do. Â The #1 problem I ran into was lack of design direction. Â As a single man team, I had to do design, front end &amp; back-end development, and product management. Â That&#8217;s hard. Â If you know the idea, the market, and are passionate about it, you can actually do pretty well simultaneously performing all of those roles.</p>
<p>However, as a coder, I naturally spend way less time on design. Â That was consistently a mistake I paid for. It absolutely annihilated my momentum. Â More importantly, as I got frustrated I didn&#8217;t have design direction, knowing I&#8217;d have to stop coding and do more upfront design work, I lost the will to continue.</p>
<p>Once you lose the will, you&#8217;re screwed. Â You won&#8217;t launch.</p>
<p><strong>Design Phase vs. We&#8217;re Almost Done</strong></p>
<p>Thus, for both projects, I&#8217;ve spent a lot of time on the design phase. Â This means everything from documenting what we&#8217;re doing, drawings and wireframes, and keeping track of our Backlog.</p>
<p>The problem is, both teams are rearing to go&#8230; they want user stories to munch on with Sprints. Â The old adage here, &#8220;garbage in garbage out&#8221; still applies to the Backlog as well, thus I&#8217;m sticking to my guns. Â While we collectively could extract what user stories there are, and sort by priority, without a good design to guide those user stories, we&#8217;re just going down a misguided path with awesome equipment.</p>
<p>I haven&#8217;t figured out how to manage this. Â My only saving grace is that I can easily remember back to when I was &#8220;just starting&#8221; or &#8220;re-starting for the 4th time&#8221; that my will was waaaayyyy harder to break in the beginning; it was only once I had been working for 3 days straight, and hit a design brick wall that it crumbled. Â However, if I was just thinking and playing around, my will could stay strong for months.</p>
<p><strong>We Need To Do This Also: Work Intimidation</strong></p>
<p>Both projects have their challenges. Â For the Dashboard, I know the audience, so it&#8217;s pretty easy to wireframe for it, and outsource the design. Â For the image app, I have no clue who they are, and the descriptions I get from her majesty and Joel, I can&#8217;t relate to. Â So, I had to create Persona&#8217;s, validate these persona&#8217;s, and then create goals from them. Â Even simple goals lead to a lot of software work.</p>
<p>Another problem I found with trying to launch a lot of my own products and failing was breadth of work. Â Not scope, but the amount of goals the software was trying the accomplish. Â I&#8217;ve found the amount goals you&#8217;re trying to solve is directly proportional to the amount of work you have to do. Â I was only successful when I targeted a reasonable amount of goals to the created a somewhat reasonable amount of work.</p>
<p>At first, you think &#8220;man&#8230; that&#8217;s ALL the software does? Â This&#8217;ll be easy&#8230; and disappointing. Â There&#8217;s not much of a challenge, and I&#8217;m not sure my users will like software that doesn&#8217;t do a lot.&#8221;</p>
<p>Bullshit. Â If you believe that, you&#8217;ve never launched software. Â I believed that, then I failed 50 billion times trying, and eventually gave in, and tried to launch even something mediocre.</p>
<p>The incorrect perception I had to overcome was that launching, with all the hard work it takes, is the end all, be all. Â It&#8217;s not. Â A &#8220;launch&#8221; just has to be a working product normal people can pay to use. Â Like any web based, or self-updating desktop software, you can iterate well after version 1.</p>
<p>I&#8217;ve constantly had to remind myself of this as I document &amp; wireframe functionality for both applications. Â I get really disheartened when I recognize a Persona goal isn&#8217;t met, implement it on paper or the wireframes, and recognize theÂ breadthÂ of work I&#8217;m creating for my team. Â The fun challenge I&#8217;ve found is figuring out how much I can take away, yet still launch. Â The key point here is &#8220;take away&#8221; merely means tossed in the Backlog. Â Good, valid idea, documented, but not making the 1.0 launch cut.</p>
<p>I don&#8217;t have to feel bad at all, in fact, I should feel good twice over. Â First, because I&#8217;ve significantly reduced scope, and thus increased our chances of successfully launching; and second, I&#8217;ve done my part and documented the valid feature, and stored it in it&#8217;s appropriate place.</p>
<p>Painful process, but I seem to be getting better at it. Â I can&#8217;t imagine building the Google.com homepage.</p>
<p><strong>Projects Backlog</strong></p>
<p>I do a lot. I&#8217;m busy. Â I work a lot. Â Thus, prioritizing my time in helping with these projects actually creates a &#8220;Project Backlog&#8221; in my real life&#8230; one that I am not following very well. Â I can only do so much in a day, and if I don&#8217;t prioritize my tasks into a linear list, nothing will get done. Â So far, I&#8217;ve tried 3 day sprints where I focus on 1 project for 3 days, and then hop back to the other.</p>
<p>Some days, that doesn&#8217;t work, and I get confused on which one was I was working on. Â At the very least, I at least try to do my &#8220;5 minutes a day&#8221; rule: spend at least 5 minutes a day working on the task.</p>
<p>While the ivory tower solution is to focus on 1 project first, and get it done, it doesn&#8217;t work like that because there are dependencies. Â So, I&#8217;ve tried to balance it out by working on 1 project while the other is in a lull/waiting on someone else. Â Sadly, it seems a Project Backlog doesn&#8217;t really work because I can&#8217;t freeze it like a Sprint Backlog, and there are too many dependencies out of my control. Â I refuse to waste time, thus, I&#8217;ll just hop to some other project to keep productive.</p>
<p><strong>Conculsions</strong></p>
<p>If I had the choice, I&#8217;d probably just focus on project at a time. Â However, this is way different than coding. Â With coding, assuming I have a ton of user stories and design comps waiting for me, the onus is on me, and the time is full. Â With designing &amp; managing&#8230; sometimes I physically can&#8217;t do anything other than wait. Â Also, some of the tasks I need to do are a lot shorter. Â Writing a document takes 30 minutes vs. 4 hours to code a component. Â Therefore, it&#8217;s way easier to shuffle a schedule around, and make it full of multiple projects vs. just 1. Â While hard, I feel like I&#8217;m on the right track&#8230; I just need another 10 years of practice.</p>
<p>Bottom line, I&#8217;ve found the Backlog really helpful in both capturing all we want to do, and all that we don&#8217;t have time to do. Â It shields my from my clients inadvertently sabotaging my team&#8217;s development on their project, while ensuring we capture what they need. Â It ensures everyone knows what they need to do, are setup to succeed, and is trackable. Â It kills scope creep dead, and helps me reduce software complexity.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://jessewarden.com/2010/07/agile-chronicles-11-the-backlog-product-development-challenges.html/feed</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Agile Chronicles #10: Conclusions</title>
		<link>https://jessewarden.com/2009/04/agile-chronicles-10-conclusions.html</link>
					<comments>https://jessewarden.com/2009/04/agile-chronicles-10-conclusions.html#comments</comments>
		
		<dc:creator><![CDATA[JesterXL]]></dc:creator>
		<pubDate>Tue, 14 Apr 2009 15:11:46 +0000</pubDate>
				<category><![CDATA[Agile Chronicles]]></category>
		<category><![CDATA[Business Process]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[agilechronicles]]></category>
		<guid isPermaLink="false">http://jessewarden.com/?p=1559</guid>

					<description><![CDATA[The Agile Chronicles is a set of articles documenting my experiences using anÂ Agile process (Scrum) in software development on my current Flex project. Part 1 &#8211; Stressful Part 2 &#8211; Code Refactoring Part 3 &#8211; Branch Workflow Part 4 &#8211; POC, Strategy, and Design Challenges Part 5 &#8211; Acceptance Criteria &#38; Punting Part 6 &#8211; [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>The Agile Chronicles is a set of articles documenting my experiences using anÂ <a href="http://en.wikipedia.org/wiki/Agile_software_development">Agile</a> process (<a href="http://en.wikipedia.org/wiki/Scrum_(development)">Scrum</a>) in software development on my current Flex project.</p>
<ol>
<li><a href="http://jessewarden.com/2008/11/agile-chronicles-1-stressful.html">Part 1 &#8211; Stressful</a></li>
<li><a href="http://jessewarden.com/2008/11/agile-chronicles-2-code-refactoring.html">Part 2 &#8211; Code Refactoring</a></li>
<li><a href="http://jessewarden.com/2008/11/agile-chronicles-3-branch-workflow.html">Part 3 &#8211; Branch Workflow</a></li>
<li><a href="http://jessewarden.com/2008/11/agile-chronicles-4-p-to-the-oh-to-the-sea-strategy-and-design-challenges.html">Part 4 &#8211; POC, Strategy, and Design Challenges</a></li>
<li><a href="http://jessewarden.com/2008/11/agile-chronicles-5-acceptance-criteria-punting.html">Part 5 &#8211; Acceptance Criteria &amp; Punting</a></li>
<li><a href="http://jessewarden.com/2008/12/agile-chronicles-6-tools-extra-merge-day-and-postponed-transitions.html">Part 6 &#8211; Tools, Extra Merge Day, and Postponed Transitions</a></li>
<li><a href="http://jessewarden.com/2008/12/agile-bugs-unit-testing-throughput.html">Part 7 &#8211; Bugs, Unit Testing, and Throughput</a></li>
<li><a href="http://jessewarden.com/2009/01/agile-chronicles-8-demo-burnout-and-feature-juggling.html">Part 8 &#8211; Demo, Burnout, and Feature Juggling</a></li>
<li><a href="http://jessewarden.com/2009/01/agile-chronicles-9-scope-creep.html">Part 9 &#8211; Scope Creep</a></li>
<li>Part 10 &#8211; Conclusions</li>
</ol>
<p>In this article, I reflect on how my first time in Agile worked on my current project.</p>
<p><span id="more-1559"></span><strong>Last One to the Party</strong></p>
<p>In talking with friends andÂ colleagues, it was pretty apparent I am the last one the party. Â Somehow, I&#8217;m either one of the last people in the Flex/Flash world to have used Agile/Scrum on projects, OR they aren&#8217;t using it correctly/consistently, yet telling me otherwise.</p>
<p>Assuming I am in fact just unlucky enough to not have worked with Agile teams, the only thing I can then surmise is the following. Â In the initial days, I worked with a lot of agencies, and thus <a href="http://en.wikipedia.org/wiki/Cowboy_coding">Cowboy Coding</a> was the rule. Â By the time I started to get on larger software projects with more established software companies, I was in aÂ consultingÂ role. Â Thus, I&#8217;d be put into situations specifically for clients that DID NOT use Agile practices, hence the need for consultants. Â That&#8217;s the only logic that makes sense. Â My guess is, if I were to go find a company that produces software as a W2 employee, I&#8217;d potentially have a highÂ probabilityÂ of using Agile vs. some made up process or Cowboy Coding. Â Either that, or I&#8217;d demand they do, and get stuck being a manager. Â Not that it would be a bad thing.</p>
<p><strong>Design &amp; Functionality Importance</strong></p>
<p>I bring up this section because many have emailed me asking specifically about balancing getting functionality done in an iteration, and getting design changes/fixes into those iterations as well so the designer(s) can see how the design is working. Â Since RIA&#8217;s make a big point of incorporating a lot of custom design elements, this effort, while leveraging the platform, does take time; time in addition to all the regular software developer duties.</p>
<p>One thing that Scrum made pretty clear is what the client views as important. Â Scrum is a development process that involves the client. Â Throughout the years, the #1 reason teams that build RIA&#8217;s have friction is no clear edict of what is more important. Â The leadership and/or management does not dictate what is more important: design or functionality. Â Everyone just assumes it&#8217;s design AND functionality, and they are left to their own devices &amp; political clout to get their area ofÂ responsibilityÂ completed.</p>
<p>Developers already have a lot of things to do with not enough time to do them. Â When you add design to the mix, you are adding more work, yet not adding additional time. Â Do I make this dynamic list component draw without ravaging your CPU, or do I fix the menu bar to look like the design comps? Â They collectively will take more time than the developer has allotted. Â Therefore, they&#8217;ll end up doing whatever they think the client wants more; aka, what they&#8217;ll either get yelled at about less, or what the client will gloss over, perhaps not even mention. Â For a lot of developers, this is design.</p>
<p>While our client certainly put more importance than most on the designÂ becauseÂ we&#8217;re building a consumer, public facing product, they still wanted it to &#8220;work first, look hot second&#8221;. Â Naturally, they didn&#8217;t say that; they wanted both at the same time. Â Yet, I only got yelled at for non-working things; I was merelyÂ chastisedÂ every so often for the design not looking correct. Â Both implied I needed to get those tasks done. Â Using the law of <a href="http://en.wikipedia.org/wiki/Utilitarianism_(book)">Utiltarianism</a>, I&#8217;d often put priority on functionality since the client wanted those done. Â That, or I just would get more negative reinforcement for broken things, and less for non-nice looking things.</p>
<p>In the Scrum context, this means more user stories and defects were created towards functionality than design defects. Â Additionally, they were higher priority. Â Notice how I said design defects; ALL components that did not have the original design comp look and feel were defects. Â That means it was a failure on my part to not implement as designed, and thus did not pass acceptance criteria in our bi-weekly UAT. Â Since a lot of our components were custom and had challenging functionality, I had no choice but to focus on the functionality first, and design implementation second. Â Sadly, this happened on just about every component I did because I often did not allocate enough time to sit down with the designer ahead of time to ensure it looked correct. Â I did in the beginning of the project, but as we started finding our design needed some tweaking, I ended up spending more time re-factoring and re-writing code vs. making it look good; since we still didn&#8217;t know if would work right.</p>
<p>The downside to this is that you start to endanger the design if you don&#8217;t get it finished early enough. Â Design changes can be more costly than data model changes. Â When you&#8217;re data model changes, it usually affects everything in your app; your ValueObjects, your Model, your Controller code, and your Views. Â Sometimes this is minor, but the point is, it touches EVERYTHING. Â While a design change may just affect the View portion of your app, a lot of time, you can&#8217;t refactor to the design change because it&#8217;s so sweeping. Â Thus, you actually do yourself a disservice if you put it off.</p>
<p>The only thing I know to do to lessen this challenge is to ensure the UX and/or Visual Designer create designs that are more easily implementable; whether that means skinning in the Flex SDK, or Flash CS3 Components. Â That, or you&#8217;ve clearly thought out how much work is involved in creating a custom component that looks like it does in the design comp. Â Guessing tweak time is impossible, so you just have to hope your code is flexible enough if the designer/client decides to tweak it vs. scrap it.</p>
<p>While more innovative designs may make a major impact in both sales, marketing, and case study opportunities, it effectivelyÂ jeopardizesÂ your development schedule. Â Design wisely.</p>
<p><strong>Leadership &amp; Management</strong></p>
<p>One of the things I learned in my 2nd run at college was how leadership makes or breaks companies and projects. Â I feel like we had great leadership on this project, and great management on the Scrum process. Â Compared to my past experiences, and thinking what it&#8217;d be like without those resources, I can see how it would of risked this project from ever getting to alpha. Â No need for a lengthy section here: While Scrum has proven to be great for this particular project, nothing beats a great project manager experienced in Scrum with client buy-in.</p>
<p><strong>Project Appropriateness</strong></p>
<p>This leads me to being curious about my next project (yes, I&#8217;m now looking for my next gig&#8230; had too much fun to look during like you&#8217;re supposed to). Â Specifically, if Scrum is appropriate, and if not, what do I do.</p>
<p><strong>Startups = Yes</strong></p>
<p>For example, Scrum for this particular gig felt like it fit like a glove for the following reasons:</p>
<ul>
<li>working with a startup who wasn&#8217;t entirely sure what they needed; wanted to ensure they could explore, yet still have working software during the process in order to demo to investors if need be</li>
<li>working with new, untested technology, across the board (PyAMF + Flex GUI + Django + HTML/JS/CSS + custom camera firmware + bunch of back-end and middle tier stuff I don&#8217;t understand)</li>
<li>working with a startup on tight budgets; needed the ability to project how much functionality would cost, and when certain functionality would be done in order to coordinate multiple efforts</li>
</ul>
<p>So, I feel confident in working with startups in the future.</p>
<p><strong>Design Agencies = No</strong></p>
<p>In all the agency work I&#8217;ve done, you either A) never know requirements until it&#8217;s too late or B) think you know, and things go horribly, horribly wrong. Â Your designers are too busy to give you clarity, or they are awaiting clarity themselves. Â In that case, they aren&#8217;tÂ forthcomingÂ with information because they&#8217;ve already re-done their comps twice, given up on wireframes, and are seriously frustrated. Â You&#8217;re asked time estimations not for planning purposes, but merely as a formality to ensure sales hasn&#8217;t pissed you off enough to purchase a gun. Â I could go on and on&#8230;</p>
<p>Cowboy Coding, FTW.</p>
<p><strong>Small Components = No, but would like to</strong></p>
<p>Some of the smaller contract jobs I get in between the big ones are building small Flash or Flex components/widgets. Â They usually involve some agency or firm who already knows what they want, they just don&#8217;t have the in-house talent to build it so they outsource to me. Â The budgets are usually always pre-set, and deadlines aren&#8217;t as negotiable. Â That said, most already have wireframes and design comps, perhaps even a Flash prototype or two already built. Â I almost never use a framework (Cairngorm, PureMVC, Mate, etc) on these projects, although, some can last 3 months (complicated video players for example).</p>
<p>I don&#8217;t think Scrum could work with these types of projects. Â First, the client is usually at least 2 degrees away from me, and the relationship has already been created. Â Second, the client usually has their own process, which is slightly different since I&#8217;m an outsourced contractor (or remote team member for teamÂ augmentation). Â Therefore, I adopt theirs. Â Third, it&#8217;s a lot of times a component in a larger project, which already has it&#8217;s own team, process, and client relationship. Â Fourth, the deadline being &#8220;set&#8221; goes contrary to the point of using Sprint User Story completion metrics for Backlog completion projections (i.e. the team typically completes a certain amount of work each week, so since we have &#8220;y&#8221; amount of work, we&#8217;ll complete it in &#8220;average time per set of work&#8221; * y = total time to complete).</p>
<p>That said, it certainly would be a lot easier when there is a fixed budget, and the amount of work is still in question. Â Even when the deadline comes, there would be no surprise of where we&#8217;re at. Â A lot of times, those deadlines are so intense, it&#8217;sÂ challengingÂ to even get a build ready to show because by the time you do, the time is up.</p>
<p><strong>How Much Does It Cost? = No, but could be Yes</strong></p>
<p>I&#8217;ve worked with companies in the past where my efforts and those of my team directly dictated price quoted to client. Â I&#8217;d give time estimations with options, and those would be presented to the client. Â There were 2 problems with this. Â First, the time estimations, like all things done without using real Sprint metrics, are just guesses at worst, inferences at best. Â Both are not accurate. Â Second, they implied a false cost. Â Although I was never punished for going over/under pitched cost during actual development, I&#8217;d often get nervous project managers when I ran into &#8220;problems&#8221;. Â Showing them builds never seemed to help ease their pain since to them, they just wanted it &#8220;done&#8221; since they didn&#8217;t want to explain to a client why they were being shown a &#8220;half-done&#8221; project.</p>
<p>If they were sold upfront a variable cost project, with fixed costs used as a guide to show them how much it&#8217;d &#8220;probably&#8221; cost to build, and involved in weekly builds, it seemed Scrum would of worked really well there. Â In fact, I&#8217;d argue because of how fast we were at doing the same type of software over and over, they&#8217;d be inclined to spend more.</p>
<p><strong>Building Software Products = Yes</strong></p>
<p>There were a few companies I worked for in the past thatÂ definitelyÂ could of used a Scrum process. Â The first failed to benefit from early builds. Â This would of saved us in being able to demo a working build earlier to the stakeholders and potential customers.</p>
<p>The second company I worked for developed multiple products. Â In retrospect, one of their products WAS using a semi-Scrum process, while mine was not. Â I reckon the reason was mine was perceived as smaller in scope, and thus not worthy of spending the time building a Backlog of user stories since the very process of figuring out what we were doing was extremely exploratory.</p>
<p>A third company had a 6 month project that had a huge Backlog, but we only chewed a tincy bit&#8230; because no one knew we had a Backlog. Â Had we all involved management &amp; stakeholders into identifying what they really wanted, and started showing them valid progress of what we could do, it would of made it easier for them to predict time frames vs. guessing. Â Another challenge was that things were changing rapidly. Â Our project, in an Enterprise setting, took a 90 degree turn 4 months in. Â A lot of the code was still valid, but it wouldn&#8217;t have been aÂ noticeableÂ shock (vs. the near de-railing thatÂ occurred) if it were merely more user stories that suddenly had priority on the following Sprint.</p>
<p>Finally, for the B2B consulting I&#8217;ve done, I&#8217;dÂ definitelyÂ see it working great because the client relationships in those cases was already pretty intimate. Â It&#8217;d be wonderful to have planned UAT sessions vs. the makeshift builds and iterations we tried to do (and did do&#8230; sometimes&#8230;).</p>
<p><strong>Final Conclusions</strong></p>
<p>I&#8217;m glad I finally got to be a part of an Agile Scrum process done right. Â I finally see how software can be done right: People who care with a good process. Â In retrospect of my writing above, I can also see why my smaller Flash projects never got much better even as the technology improved. Â They just weren&#8217;t a good fit for a Scrum process because they were either so small in scope, the scope was unknown, or the process was already locked into place before I got involved. Â I can also see why I&#8217;ve gravitated towards Flex. Â It wasn&#8217;t just because the technology was better for building larger Flash projects. Â It is because I tend to get on more larger scoped software projects that often have a more established project management processes, and thus help ensure success. Â In my recent case, using Scrum.</p>
<p>In short, it&#8217;s nice to know if done right, I can focus on the important problems; like figuring out how to build software components in code instead of worrying about if the project itself will careen off course and die.</p>
<p>If you have a Flex project you need me to do, <a href="mailto:jesse@jessewarden.com?subject=Flex Project">let me know</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://jessewarden.com/2009/04/agile-chronicles-10-conclusions.html/feed</wfw:commentRss>
			<slash:comments>8</slash:comments>
		
		
			</item>
		<item>
		<title>Agile Chronicles #9: Scope Creep</title>
		<link>https://jessewarden.com/2009/01/agile-chronicles-9-scope-creep.html</link>
					<comments>https://jessewarden.com/2009/01/agile-chronicles-9-scope-creep.html#comments</comments>
		
		<dc:creator><![CDATA[JesterXL]]></dc:creator>
		<pubDate>Mon, 26 Jan 2009 14:25:56 +0000</pubDate>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Agile Chronicles]]></category>
		<category><![CDATA[Business Process]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[agilechronicles]]></category>
		<guid isPermaLink="false">http://jessewarden.com/?p=1361</guid>

					<description><![CDATA[The Agile Chronicles is a set of articles documenting my experiences using anÂ Agile process (Scrum) in software development on my current Flex project. Part 1 &#8211; Stressful Part 2 &#8211; Code Refactoring Part 3 &#8211; Branch Workflow Part 4 &#8211; POC, Strategy, and Design Challenges Part 5 &#8211; Acceptance Criteria &#38; Punting Part 6 &#8211; [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>The Agile Chronicles is a set of articles documenting my experiences using anÂ <a href="http://en.wikipedia.org/wiki/Agile_software_development">Agile</a> process (<a href="http://en.wikipedia.org/wiki/Scrum_(development)">Scrum</a>) in software development on my current Flex project.</p>
<ol>
<li><a href="http://jessewarden.com/2008/11/agile-chronicles-1-stressful.html">Part 1 &#8211; Stressful</a></li>
<li><a href="http://jessewarden.com/2008/11/agile-chronicles-2-code-refactoring.html">Part 2 &#8211; Code Refactoring</a></li>
<li><a href="http://jessewarden.com/2008/11/agile-chronicles-3-branch-workflow.html">Part 3 &#8211; Branch Workflow</a></li>
<li><a href="http://jessewarden.com/2008/11/agile-chronicles-4-p-to-the-oh-to-the-sea-strategy-and-design-challenges.html">Part 4 &#8211; POC, Strategy, and Design Challenges</a></li>
<li><a href="http://jessewarden.com/2008/11/agile-chronicles-5-acceptance-criteria-punting.html">Part 5 &#8211; Acceptance Criteria &amp; Punting</a></li>
<li><a href="http://jessewarden.com/2008/12/agile-chronicles-6-tools-extra-merge-day-and-postponed-transitions.html">Part 6 &#8211; Tools, Extra Merge Day, and Postponed Transitions</a></li>
<li><a href="http://jessewarden.com/2008/12/agile-bugs-unit-testing-throughput.html">Part 7 &#8211; Bugs, Unit Testing, and Throughput</a></li>
<li><a href="http://jessewarden.com/2009/01/agile-chronicles-8-demo-burnout-and-feature-juggling.html">Part 8 &#8211; Demo, Burnout, and Feature Juggling</a></li>
<li>Part 9 &#8211; Scope Creep</li>
<li><a href="http://jessewarden.com/2009/04/agile-chronicles-10-conclusions.html">Part 10 &#8211; Conclusions</a></li>
</ol>
<p>In this article, I discuss how Scrum for the most part brings Scope Creep under control, the areas where it doesn&#8217;t, and what you can do about it.</p>
<p><span id="more-1361"></span><strong>Introduction</strong></p>
<p>One of the most interesting things about Scrum that took me 4 months to realize is that Scope Creep hasn&#8217;t been a major issue.  It&#8217;s not totally 100% under control mind you, but I&#8217;m really impressed that it hasn&#8217;t come up in any defensive discussions like it usually does, aka, &#8220;It&#8217;s not my fault we&#8217;re not done, I&#8217;ve been working insane hours, blame it on scope creep&#8221;.</p>
<p>Scope creep refers to the ever increasing requirements of your software as a project progresses beyond what was initially agreed.  Scope Creep, to me, is one of the main reasons why <a href="http://en.wikipedia.org/wiki/Waterfall_model">Waterfall</a>, while still a valid way to make money, tends to produce non-useful software.  The view of most developers is that scope creep is bad because it&#8217;s new work that has to be done in the same time frame, a time frame that&#8217;s probably already aggressive.</p>
<p>The term is used a lot more in agency work because developers are more aggressive about ensuring they know the scope of what they are developing.  Since the time frames are a lot shorter, there is little to no room for screw ups and/or re-factoring.  Any misinterpretation of what the client wants and how it is supposed to work can be disastrous.  The developer(s) may have to re-code a lot of things from scratch, work longer hours when she/he/they are already exhausted, and be extremely frustrated the entire time doing it.  Naturally, this is the worst possible time to not only add additional work or modified work, but adding it without thinking about the consequences of doing so.  This is usually a recipe for bad software not being ready on time, with the project manager(s) left in the position of explaining why things weren&#8217;t done on time, and the developer(s) completely at the end of their rope.</p>
<p>It&#8217;s not usually this bad&#8230; it&#8217;s <strong>always</strong> this bad.  Scope creep sucks.</p>
<p>Being held accountable for additional work added after the fact is just cruel to designers and developers and a way to ensure things won&#8217;t get done, nor done even remotely correct.</p>
<p>Yet the sad truth is that scope creep probably doesn&#8217;t have malicious merits behind it. Business moves faster than software development. Rather, it is probably important (or perceived as such), a valid functionality addition/change, or a new business requirement because things have changed since the project/Sprint originally changed.  The target demographic for the site may have changed, the users had issues with a portion of the design after simple user testing, or perhaps a business to business application needs to solve a new need since the rules of engagement have changed.  While you may not WANT to change things, it could mean the difference between the software being useless vs. useful. Â Most importantly, like all software, the more you use it, the more you start to learn what will make it better. Â You don&#8217;t know this until features start working, hence getting new scope in the middle of a project.</p>
<p><strong>The Backlog Holds Scope</strong></p>
<p>Scrum defines the list of user stories (features you wish to your software to have) and defects (bugs) be documented in a &#8220;Backlog&#8221;.  This is a list of 60 or more things that you need to get done.  At the beginning of each Sprint, the project stakeholder(s) &amp; project manager decide what user stories and/or defects from the Backlog will be attempted each Sprint.  Each User Story will have an assigned point value (not the law, just some metric to identify the user story&#8217;s overall value &amp; challenge to implement) while defects are worth 1 point.  Based on the average user story points completed per sprint, you then add a few more to ensure developers are overloaded just a little as well as having tasks to fall back to in case a user story cannot be done or becomes invalid.</p>
<p>As you can see, Scope Creep is deflected (mostly) for 2 reasons.  First, you do not alter the user stories &amp; defects chosen for a sprint after the fact.  If you do, this sabotages Scrum.  You don&#8217;t know what your team can accomplish each sprint because you keep changing their tasks.  You never know what they completed in a normal instance, and therefore, have no metrics to use for projecting when things will get done.</p>
<p>Second, the additional scope is probably valid, so any additional scope creep is documented instead, and put on ice in the backlog.  Rad!</p>
<p>This has a few other benefits as well.  The client, who is already involved in the Scrum process and thus has transparency into what is going on can clearly see their additional scope adding to the projected project release date.  How?  Do the math:</p>
<ol>
<li>3 developers are completing 25 user story points on average per sprint</li>
<li>The Backlog contains 125 user story points worth of work</li>
<li>If each Sprint is 2 weeks, the project will take around 5 sprints, and thus 10 weeks</li>
</ol>
<p>The scope creep then adds 10 additional points worth of user stories. Â That&#8217;s at least another week&#8217;s worth of work.</p>
<p>This is powerful because you can totally stand by your point of, &#8220;Yes, adding scope does in fact push the deadline.&#8221; Â To this day, that &#8220;fact&#8221; falls on deaf ears. Â $10 says if it were a hammer, it still wouldn&#8217;t work. Â At least now you have factual data; best you can do.</p>
<p>Again, you don&#8217;t need to complete the entire backlog to finish the project. Â A lot of times you get the backlog 90% complete, and the stakeholders go, &#8220;Ship it! Â We&#8217;ll do it in version 2&#8221;. Â The point here is that a nice place is created for scope creep, the backlog, and the user stories can be re-prioritized each sprint so they do in fact become priority when it&#8217;s appropriate.</p>
<p><strong>Invalidating orÂ ModifyingÂ Existing User Stories</strong></p>
<p>This works for for new scope, but not modified scope. Â Modified scope is functionality that&#8217;s either modifies what you are currently making, or invalidates it. Â For instance, I was coding a scrubbable timeline graph in my current project. Â We found that the level of fidelity we were drawing at made scrubbing an ineffectiveÂ way of perusing the data because it wasn&#8217;t scrubbing at a high enough fidelity. Â You can only move something 1 pixel by hand, although Flash can draw at the sub-pixel level. Â We attempted to solve this by drawing the graph in 2 view&#8217;s with the 2nd view only showing 1/6th of the data, thus giving you a more zoomed in view. Â This still didn&#8217;t work because it negatively affected the importance of another design.</p>
<p>After trying this a few times, our project stakeholder and the designer called it quits and decided on using a separate view we had as the primary way of finding what the user was looking for. Â So, within 2 or 3 clicks, the user could find what they were looking for, knowing full well the capable fidelity of what they were currently using.</p>
<p>While effective, I coded the same stuff 3 different times 3 different ways. Â Very frustrating at first but I was really glad to get closer because we have a design that works; meaning, it&#8217;s actually been coded and tested and does what it&#8217;s been designed to do. Â If I look at the original design comps I was given 4 months ago, and compare to what we have now, it&#8217;s totally different. Â This increase of scope in coding new views, andÂ modifyingÂ old ones were based on good design decisions. Â I made that sound like it went smoothly, but it didn&#8217;t always. Â We all were very frustrated at times with our picture of how something should work not always bearing fruit of that vision in reality, ie, our bi-weekly UAT builds.</p>
<p>When I&#8217;d do daily builds to test things out, the temptation was to modify on the fly&#8230; and we did some of that. Â That is why a lot of my original time estimations on my user stories for the sprint were grossly under-estimated. Â Either the designer and I, or the client, designer and I would try different things each day or couple of days to see if they worked. Â While good for the app, the 3 main challenges were ensuring our decisions were well thought out, ensuring our decisions weren&#8217;t reactionary to a build-in-progress, and ensuring the extra scope was documented.</p>
<p>This got really fuzzy. Â Was it new scope? Â A new user story? Â A modified user story? Â Additional acceptance criteria? Â A defect? Â I felt like a lot fell to refined acceptance criteria, which naturally pissed me off because it sabotaged my time estimations. Â However, I&#8217;ve never been negatively held accountable for my time estimations, only my regressions (broken functionality that had been working in previous builds), so I got over it.</p>
<p>Another type of scope creep beyond the invalidation &amp; modifications of the above was when something compelling arises during development. Â Either the designer will take personal liberties that go beyond the initial requirements and create something that is just really frikin&#8217; cool, or we&#8217;ll use a stable build, and think, &#8220;Wouldn&#8217;t it be cool if&#8230;&#8221;. Â I will say the former has drastically changed the course of our project multiple times. Â For example, our application is not about video streaming, but reviewing already recorded video. Â Yet, when the designers created a Quicktime movie showing their vision of how it should visually work, the streaming really was a compelling part of the app. Â Suddenly the CEO of our client, who had been pretty adamant about about not supporting streaming at all, was taken aback, as all of us were, about how cool it looked.</p>
<p>To this day, streaming is still a tincy business value of the application we&#8217;re building, but originally none of us perceived spending any time on it until the designer took us to the next level. Â This was easy scope creep to manage because we&#8217;d just add a bunch of new tasks into the backlog, and modify existing ones that weren&#8217;t being worked on yet.</p>
<p>The worse ones, though, are the &#8220;Wouldn&#8217;t be cool if&#8230;&#8221;. Â Those are REALLY hard to track, and really hard not to immediately implement. Â At a bare minimum, I document most of those new tasks into <a href="http://versionone.com/">VersionOne</a>, our tracking tool. Â Keyword is &#8220;most&#8221; here because some are so small you wouldn&#8217;t think they&#8217;d negatively affect your time tracking metrics, yet they do because they are so numerous. Â This gets into the same theory people use a large upfront requirements gathering session during Waterfall in that they don&#8217;t want nit-picking on already gathered functionality. Â If it&#8217;s not in the spec, you aren&#8217;t doing it. Â Yet, perhaps there is a valid reason you should try to add functionality? Â Then for Scrum, this should technically be in your Acceptance Criteria&#8230; yet it can&#8217;t be there either, because you didn&#8217;t know it&#8217;d be cool till you actually saw it in action, and had that &#8220;ah hah!&#8221; moment. Â This would be the only area where I&#8217;ve seen scope creep negatively affect my time estimations, and strain my ability to be a developer vs. a client manager. Â When this happens, I struggle between being a developer that loves pleasing the client creating cool new stuff, and a consultant who doesn&#8217;t like the client disrespecting the process that they signed up for since that&#8217;s a reflection on you also not running your process correctly. Â It&#8217;s hard to balance, at least for someone who has a strong need for &#8220;approval&#8221; of those I work for.</p>
<p><strong>Conclusions</strong></p>
<p>Bottom line, I&#8217;m really impressed with Scrum&#8217;s innate handling of Scope Creep. Â It clearly recognizes the importance of new scope that&#8217;s late the game, scope that may hold the key to making the software relevant or not when it&#8217;s actually shipped. Â I think any new business requirement that drastically changes the needs your application needs to address won&#8217;t prevent your project from being sabotaged; business moves wicked fast compared to software development. Â Regardless, at least now the #1 reason I&#8217;ve seen projects be crap when they are actually released as well as creating massive amount of loathing in developers towards the client &amp; project managers they work for is brought under control. Â For the rest that slips by, as long as you document it, it won&#8217;t sabotage your tracking metrics used for projections.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://jessewarden.com/2009/01/agile-chronicles-9-scope-creep.html/feed</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Agile Chronicles #8: Demo, Burnout, and Feature Juggling</title>
		<link>https://jessewarden.com/2009/01/agile-chronicles-8-demo-burnout-and-feature-juggling.html</link>
					<comments>https://jessewarden.com/2009/01/agile-chronicles-8-demo-burnout-and-feature-juggling.html#comments</comments>
		
		<dc:creator><![CDATA[JesterXL]]></dc:creator>
		<pubDate>Sat, 17 Jan 2009 20:05:21 +0000</pubDate>
				<category><![CDATA[Agile Chronicles]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[agilechronicles]]></category>
		<guid isPermaLink="false">http://jessewarden.com/?p=1306</guid>

					<description><![CDATA[The Agile Chronicles is a set of articles documenting my experiences using anÂ Agile process (Scrum) in software development on my current Flex project. Part 1 &#8211; Stressful Part 2 &#8211; Code Refactoring Part 3 &#8211; Branch Workflow Part 4 &#8211; POC, Strategy, and Design Challenges Part 5 &#8211; Acceptance Criteria &#38; Punting Part 6 &#8211; [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>The Agile Chronicles is a set of articles documenting my experiences using anÂ <a href="http://en.wikipedia.org/wiki/Agile_software_development">Agile</a> process (<a href="http://en.wikipedia.org/wiki/Scrum_(development)">Scrum</a>) in software development on my current Flex project.</p>
<ol>
<li><a href="http://jessewarden.com/2008/11/agile-chronicles-1-stressful.html">Part 1 &#8211; Stressful</a></li>
<li><a href="http://jessewarden.com/2008/11/agile-chronicles-2-code-refactoring.html">Part 2 &#8211; Code Refactoring</a></li>
<li><a href="http://jessewarden.com/2008/11/agile-chronicles-3-branch-workflow.html">Part 3 &#8211; Branch Workflow</a></li>
<li><a href="http://jessewarden.com/2008/11/agile-chronicles-4-p-to-the-oh-to-the-sea-strategy-and-design-challenges.html">Part 4 &#8211; POC, Strategy, and Design Challenges</a></li>
<li><a href="http://jessewarden.com/2008/11/agile-chronicles-5-acceptance-criteria-punting.html">Part 5 &#8211; Acceptance Criteria &amp; Punting</a></li>
<li><a href="http://jessewarden.com/2008/12/agile-chronicles-6-tools-extra-merge-day-and-postponed-transitions.html">Part 6 &#8211; Tools, Extra Merge Day, and Postponed Transitions</a></li>
<li><a href="http://jessewarden.com/2008/12/agile-bugs-unit-testing-throughput.html">Part 7 &#8211; Bugs, Unit Testing, and Throughput</a></li>
<li>Part 8 &#8211; Demo, Burnout, and Feature Juggling</li>
<li><a href="http://jessewarden.com/2009/01/agile-chronicles-9-scope-creep.html">Part 9 &#8211; Scope Creep</a></li>
<li><a href="http://jessewarden.com/2009/04/agile-chronicles-10-conclusions.html">Part 10 &#8211; Conclusions</a></li>
</ol>
<p>In this article, I discuss how you fit (or don&#8217;t fit) a demo of your software into a Scrum process, the how burnout can skew your burn down, and the variety of ways of features can be cut, re-assigned, or re-designed.</p>
<p><span id="more-1306"></span><strong>Demo&#8217;s</strong></p>
<p>I&#8217;m working with a startup out in Cali. Â While it&#8217;s different for each startup, most get funding from some entity. Â Those providing the funding will eventually want an update to how the startup is progressing. Â I don&#8217;t know how these things usually progress, but based on my experienced combined with reading the startup blogs, it usually comes down to a demo. Â Those in charge of the startup will report their status to the board/investors, and give a demo of the current state of the software.</p>
<p>If you read some of the failed startup blogs, it&#8217;s always interesting to find out the reason, but more often the reasons (plural) why they failed. Â One in particular I read stuck with me. Â It discussed how an all star team was put together, and how the CEO (the one writing the series of blog entries) discussed the different type of developers you could get. Â The 3 classifications I&#8217;ll simplify here: git-r-done quickly, code her right, and experienced. Â Apparently the CEO had experience with the git-r-done ones in the past. Â They were great in that you could quickly get usable software, but once you had to actually sell it and support it, things went downhill since it was implied that writing things quickly resulted in hard to support software. Â We all know that it&#8217;s never that simple, but he was simplifying for the sake of writing.</p>
<p>The second developer, and the one he had hired, was a code her right. Â Meaning, the developer knew about writing scaleable &amp; maintainable software. Â The thinking goes that if you want to do it right, you spend the time up front to write it correctly, giving deep thought about your data model, your code architecture, and processes. Â The writer points out that this actually contributed to their failure because they missed 1 conference and 1 investor meeting because the software was never demoable since it was being &#8220;coded correctly&#8221;. Â In the end, the best written piece of software was never used by anyone. Â Obviously this makes the Agile crowd neverous because you should be able to demo your software at the end of your first sprint (2 weeks to a 1 month). Â I certainly know where the developer is coming from, though. Â You eat enough of your own bad code, or someone elses, and you avail yourself never to let such filth enter your coding projects again. Â It&#8217;s never that simple.</p>
<p>Finally, he laments on how he doesn&#8217;t know what is best; having the git-r-done for demo&#8217;s and having the code her rights for the actual software&#8230; thus you need a developer who is extremely experienced so they intrinsically know when they need to do both. Â To me, software is hard, hence experience being the only thing I&#8217;ve seen that makes anyone good. Â I&#8217;ve seen tons ofÂ geniusesÂ setup to fail, and they either fail to recognize it, or choose to ignore it.</p>
<p>The lesson here is that demo&#8217;s are extremely important in startups. Â If you have something to prove, aka validate you are making progress to your investors, you need to ensure you can give one well.</p>
<p><strong>How to Create Effective Code Demo&#8217;s</strong></p>
<p>Working in the agency world, <a href="http://en.wikipedia.org/wiki/Cowboy_coding">Cowboy Coding</a> rules. Â There is no way I can see Scrum working there the more I do it. Â A lot of your &#8220;builds&#8221; are in fact demo&#8217;s; demos you show to your creative director or even the client. Â Some, however are specifically created for certain situations such as client meetings, conferences, and most importantly sales meetings.</p>
<p>The client meetings are easy; if you know something is broken, you fake it. Â For example, I&#8217;ve had situations where the back-end wasn&#8217;t done, or was but was flaky as hell. Â So, I just used a local XML file instead and hardcoded a link to it instead of the server. Â This accomplishes 2 things. Â First, I can ensure the demo will always work when getting that data source. Â Second, I don&#8217;t have to worry about it and can focus on improving other areas, thus making a better demo.</p>
<p>The conferences are a whole different ballgame. Â There are many different opinions on it, but here are mine based on experience. Â If you want to succeed at a conference, fake it&#8230; all of it. Â A lot of the big software companies do it all the time at conferences, but never let on&#8230; that is, until a blogger spots it. Â A lot of the suits/bob&#8217;s/c crowd who are watching don&#8217;t read those blogs, though, so it&#8217;s all good. Â If someone technical body checks you, honestly explain that it is a work in progress, and you are seeing a demo. Â Make sure you articulate it in a matter-of-fact way. Â This makes the questioner look silly for assuming it was any other way, and takes the expectations of the audience off of you. Â Why fake? Â I have NEVER in my career had a dependable server when presenting. Â I don&#8217;t just mean a back-end, I mean reliable internet. Â I&#8217;m honestly not trying to be cynical, but Murphy&#8217;s Law always seems to be in major effect when presenting: if something can go wrong with your connection, it WILL go wrong. Â So, you fake all server connections. Â This also allows you to demo ANYWHERE, including on an airplane, at a bar (yes, geeks bring their laptops to bars), or when a nuke releases an EMP blast at your ISP&#8230; yet far enough away that your laptop still works. Â Most importantly, since you don&#8217;t have to worry about the back-end, you can focus 100% on your message, of showcasing the software. Â Yes, it&#8217;s fake, but the audience will hang the grace of your words because your confidence will show through. Â Keep in mind, it may not be you presenting, but your boss. Â If your boss trusts you, and you&#8217;re confident, then they can be confident.</p>
<p>Sales meetings are about the same as conferences, except you usually have a lot less prep time, and thus anything &#8220;real&#8221; risks actually meeting your deadline or even sabotaging the sales call.</p>
<p>Most important of all, the best demo&#8217;s are ones that you and your team are ready to do. Â If you&#8217;re not ready, don&#8217;t do it. Â Granted some demo&#8217;s, if not done, ensure you&#8217;re company will cease to exist. Â However, I&#8217;ve had some where I had to demo to my client progress of software. Â While I lost trust extending it a week, I gained it back when my software worked like I said it would. Â I&#8217;ve also had demo&#8217;s where I knew I was going to fail, and when it did, I drove home a major &#8220;I F&#8217;ING TOLD YOU SO!!!&#8221; to the sales guy who henceforth trusted me. Â Again, the point here is if you&#8217;re faking everything, you can do it faster. Â Even if you garner more time to create a great looking demo because you don&#8217;t have to worry about the &#8220;real&#8221; part, you still need to ensure it goes off well. Â If you assume everyone who see&#8217;s your demo knows jack about code, then all you have going for you is visuals that &#8220;look&#8221; like something is working. Â Make it count.</p>
<p><strong>Demo&#8217;s and Scrum &#8211; Round Peg, Square Hole</strong></p>
<p>So how does my version of a demo fit into Scrum? Â As I&#8217;ve found, it doesn&#8217;t&#8230; at all. Â This last sprint was one of the hardest for me. Â The whole point of Scrum is that you end up with user stories (features) from the backlog going into your software, and that they just magically work well on their own, and with others. Â That means at the end of every sprint, you should technically be able to demo real, trackable progress.</p>
<p>Any Software Developer, however, knows that some functionality can be done in 2 ways: the right way or the wrong way. Â A lot of times the &#8220;wrong way&#8221; is the &#8220;fastest way&#8221;. Â For demo&#8217;s, if you want to really impress someone, you put it chock full of features that you know will sell them on how cool it is. Â Again, demo&#8217;s only have to work for 30 minutes&#8230; after that, you don&#8217;t care if the code is crap. Â A lot of times, the demo is a separate build entirely that&#8217;s thrown away.</p>
<p>In Scrum, you don&#8217;t &#8220;throw away&#8221; code. Â Granted, you re-factor like crazy which is inÂ essenceÂ throwing away code, but the key is you are not throwing away effort whereas in a demo, I&#8217;ve had an entire week which I knew was going to be spent writing code for just a sales meeting that may or may not make the sale, and the code I was writing would never be touched again.</p>
<p>So, the whole concept of tackling a set of user stories and defects for a given sprint with the demo looming over my head felt 100% WRONG. Â It goes against every experience I&#8217;ve ever had, both in agencies and in software shops, at creating demo&#8217;s. Â If someone I&#8217;m demoing to understands Scrum, great, but that never happens&#8230; if they do, then it&#8217;s not a demo, it&#8217;s the Friday UAT, and they are invited; 2 ENTIRELY different things.</p>
<p>I made sure both my boss at <a href="http://enablus.com">Enablus</a> and the stakeholders at the startup knew I was extremely unhappy with continuing on. Â I totally wanted to create a separate build, and spend an entire week on just getting the demo ready. Â  Less risk, and more control. Â The suggestion was echoed once, but as we made progress and the software stabilityÂ solidified, we became a victim of our own success and the idea was scrapped. Â In fact, the only time I was working on tasks not related to my assigned user stories and defects was the day of the demo itself. Â Granted, I still documented these as unplanned user stories / defects, but the whole thing majorally stressed me out.</p>
<p>The whole point of faking things is inspire confidence in you and your code. Â You have control over what you are creating, and can focus on the concepts you&#8217;re trying to sell in the demo. Â This spits in the face of Scrum and software best practices such as unit testing. Â It makes you sound like a hypocrite who only does them because you&#8217;re told to, but you don&#8217;t actually agree with them. Â The conflict of interest is determining if your audience someone who understands Scrum and the software development process or not?</p>
<p>Going with business as usual felt the exact same way as it did in an agency when you&#8217;d show what the designers and developers were working on. Â The designers would show 2 hours worth of work, and those in the meeting would go, &#8220;Wow!&#8221;. Â The Developers would show a week&#8217;s worth of work, but because no one could see anythingÂ visual and they didn&#8217;t understand how code works, they&#8217;d have the perception the developers made little to no progress, and worse, that the developers perceived themselves as making progress when in fact they apparently did not.</p>
<p>Basically, I&#8217;m operating on faith that the investors knew how Scrum works, and recognize that not only was the software being demo&#8217;d real, but there &#8220;weren&#8217;t some additional bugs to be worked out before it&#8217;s done&#8221;. Â If you read Martin Fowler&#8217;s discussion on an &#8220;<a href="http://martinfowler.com/articles/newMethodology.html#TheAdaptiveCustomer">The Adaptive Customer</a>&#8220;, it really implies that you&#8217;ve sold the customer on your process. Â To me, this implies the customer recognizes the iterative process you are using, and can discern between a fake demo and real software because they are actively involved in the process. Â Most importantly, they can appreciate the effort, and recognize hopefully clearly where their money went.</p>
<p>In the end, I&#8217;m convinced the traditional demo does not fit into Scrum. Â Instead, you either need to inform those being demo&#8217;d to that it&#8217;s real software as of right now, or only demo when you are ready. Â That last part, again, would never fly with some of the sales teams I&#8217;ve seen that sell shit that doesn&#8217;t exist, and you have a week to make something that somehow magically works so the sales team can demo it, and sign the deal. Â That in itself, sabotages the whole Scrum process because that means you lose a week of a developer&#8217;s time, and thus skew your burn rate (the rate at which your team can complete user stories in a period of time). Â To me, the best suggestion is to outsource the demo to a contractor, or educate your sales team on how Scrum works so they can sell reality. Â If selling reality doesn&#8217;t work, because your customers are accustomed to &#8220;promise the world&#8221; sales teams, then why are you using Scrum?</p>
<p><strong>Burnout</strong></p>
<p>Another side effect of demo&#8217;s is that they tend to cause burnout more quickly, at least for me. Â As you work towards the crescendo of the demo, your stress level increases. Â At the end of the sales meeting / conference, you have to take some time to unwind. Â However, there is no &#8220;un-winding&#8221; in the Scrum I&#8217;m doing. Â The planning meetings we&#8217;d have every other Monday used to be kind of slack as you&#8217;d do some R&amp;D for time estimations, and get your affairs in order to ensure you could focus for the rest of the sprint. Â The post UAT sessions every 2 weeks were pretty slack afterwards as you were waiting for the planning meeting the following Monday, and you probably spent the rest of the day handling un-finished user stories / defects with reduced gusto.</p>
<p>The past 3 sprints, however, have reduced this. Â Because of the regression, I&#8217;ve been using those times to either increase my test coverage, learn how to write better test coverage, and &#8220;<a href="http://www.google.com/search?hl=en&amp;q=fixing+broken+windows+software&amp;btnG=Search">fix broken windows</a>&#8220;. Â That&#8217;s all well and good, but even with a 42 hour work week (my average), that doesn&#8217;t quite work with a demo. Â The traditional software problem of being relaxed in the beginning, and spending a lot more time towards deadline/demo time occurs, and suddenly burnout becomes more of a potential problem.</p>
<p>Now, theoretically, being a contractor should make this easier. Â If I don&#8217;t want to work on a given day, I shouldn&#8217;t have to because I&#8217;m my own boss, right? Â &#8230;well, not really. Â We still have our standup meeting every day at 1 pm est / 10 am pst. Â I still need to give a report of what I did, and what I plan on doing. Â Regardless, some days I just had life get in the way, and didn&#8217;t get as many hours in as I wanted. Â Other days, I&#8217;d get in a ton as well as knock out a bunch of tasks so it would even out. Â Aka, some days I&#8217;d have errands to run, or was just burnt out, and would only do 4 to 5 hours, whilst other days, I&#8217;d get in the zone and do 10 to 12. Â In the end, it evens out.</p>
<p>While I&#8217;ve enjoyed Scrum because my Sprint&#8217;s all planned out, I know what I&#8217;ve committed to, and no one is constantly pestering me with new stuff, the demo really threw a kink in things. Â Rather than being stressed about my bi-weekly UAT deadline for my given user stories, I was stressed for 2 sprints with the board meeting looming overhead. Â There are tons of blog entries out there that talk about how you recognize and solve burn out. Â For me, it&#8217;s pretty simple:</p>
<ol>
<li>stop working</li>
<li>turn off the work computer &amp; my cell phone</li>
<li>go do something else like playing games</li>
</ol>
<p>In places I&#8217;ve worked in the past, I&#8217;ve seen managers who can recognize it as well. Â Some would just send you home. Â This is rare, though. Â I get burnout more than most because I pour my heart out into what I do, and any a minor non-reciprocationÂ of my perceived effort really tires me out. Â In fact, I get burnt out at least a few times a year. Â I&#8217;ve been able to recognize it, and rather than fight it, I just go do the above 3 solutions, and it tends to get fixed faster. Â That&#8217;s all well and good, but the problem with Scrum is that it doesn&#8217;t &#8220;stop&#8221; because you&#8217;re tired. Â Missing a day negatively effects your burn rate. Â Because burnout may not happen for 3 months, you can&#8217;tÂ necessarilyÂ plan for it either. Â I&#8217;m sure my project manager would say &#8220;it evens out&#8221;, but if I were to run an Agile team, and I recognized one of my developers was burnt out, I&#8217;d say to hell with it, and just let the backlog of user stories not deflate as quickly for that particular sprint.</p>
<p>Another thing that makes it more of a potential problem is startups since they tend to be more stressful. Â I&#8217;m really really really spoiled in this case. Â I&#8217;m not financially invested, and won&#8217;t lose my shirt if the startup fails. Â That doesn&#8217;t really matter, though. Â To me, this is MY baby, and I&#8217;ve accepted ownership of making it succeed. Â I feel personally responsible for everything that goes wrong, and am 100% endeavoring to succeed. Â While I&#8217;ll get nothing for stock options when if/when they do succeed, the satisfaction of working on a kick ass product, hopefully having the opportunity to demo it at conferences, and having a major success under my belt is what drives me. Â The software can help make the world a better place (I think) as well. Â That helps me sleep at night. Â I play to win, and give it my all, and since working on products has more risk than services, there is a lot at stake here. Â I know it, and it adds to the pressure. Â I wouldn&#8217;t have it any other way, though.</p>
<p>Again, this isn&#8217;t related to other reasons; developers getting sick, having a doctor&#8217;s appointment, or vacation. Â Those 3 things for example, you can make up for in increased time, or working on the weekends. Â Burnout, however, is usually only solved by NOT working. Â Not sure how to resolve that in the schedule, but for now, I don&#8217;t have to, the Project Manager does.</p>
<p><strong>Feature Juggling &#8211; Resource Issues</strong></p>
<p>There are a few advantages of Agile from a business perspective. Â One is that you can change requirements late in the game to adjust to a changing business and/or technology landscape. Â If your customers are suddenly using a newÂ financialÂ reportingÂ mechanism, you can add this as a priority user story in the next sprint. Â That doesn&#8217;t work in <a href="http://en.wikipedia.org/wiki/Waterfall_model">Waterfall</a>.</p>
<p>Another is assessing progress. Â As you and your team mark off user stories and defects, the <a href="http://en.wikipedia.org/wiki/Scrum_(development)#Burn_down">burn down</a> is updated. Â As you compare it with the past burn rates, you can project with more confidence what your team is capable of doing. Â If one particular meta-user story isn&#8217;t projected to getting done anytime soon, yet is important, you need an additional resource. Â In our case, we needed reporting done for the demo, and for launch of our product. Â As you may know, Flex has some really nice charting controls, but also has the rich graphical abilities to create custom charts as well. Â Didn&#8217;t matter&#8230; my co-worker and I wereÂ overlyÂ busy on other sections of our app.</p>
<p>Worse, a very important configuration screen was needed for 2 reasons. Â First, it&#8217;s needed to help the server team write a good middle tier for the hardware. Â Second, that was one of the areas of the original design comps that were the least defined, since we still don&#8217;t know exactly how it should work. Â Iterations in software are great for &#8220;figuring&#8221; things out quickly. Â Yet, it didn&#8217;t sound like my co-worker and I were going to get there either in a reasonable time frame.</p>
<p>Even worse, Flex is still niche. Â While it&#8217;s been great over the years seeing Java and other traditional developers pick up Flex really quickly, this still hasn&#8217;t resulted in a marketÂ saturationÂ of able bodied developers. Â Flex Developer contracting rates are still high, consulting rates are still insane, and the Flex Developer body count is low. Â Those that do exist are usually &#8220;busy&#8221;. Â While I&#8217;ve seen in increase the past 3 months of Flex &amp; Flash Developer availability, their rates haven&#8217;t lowered. Â As a development manager, you&#8217;re left with 3 viable solutions. Â You can either train your existing developers, hire a developer from another technology and train them, or use another technology you already have competency in.</p>
<p>In our case, we&#8217;re a startup so can&#8217;t just go burning through cash on additional contractors and consultants. Â I&#8217;m speaking for the leadership here, but I&#8217;m pretty sure we&#8217;re also firm believes in the &#8220;small, agile teams&#8221;, so in this case, less is more. Â That makes the options go from 3 to 2. Â Learning Flex, while great, certainly reduces the time in whichÂ satisfactorilyÂ results can be achieved. Â For a software shop, that is totally fine. Â For a startup, time is the driverÂ especiallyÂ when you have many other facets you need to put in place beyond just the software, such as hardware, hosting,Â fulfillment, support, and processing.</p>
<p>In our case, those 2 sections were brought out of the Flex RIA and into HTML. Â The traditional server-side developers can be setup to succeed, and with the designer&#8217;s help, we can integrate it into the existing brand. Â I begrudginglyÂ agree with reporting, and disagree with configuration. Â I really feel that it&#8217;llÂ compromiseÂ the user experience. Â There is nothing I can do, though, but what? Â That&#8217;s right&#8230; code faster. Â From a pragmatic point of view, it&#8217;s better to have those sections working than not. Â With a given timetable, a given budget, and a given set of resources, you do what you have to do. Â This&#8217;ll ensure we continually eat through the backlog, although, I don&#8217;t think Scrum has a cost structure setup for user experience.</p>
<p><strong>Feature Juggling &#8211; Performance Issues</strong></p>
<p>The point of allocating a certain time length to your sprints is to have a system of measurement. Â These metrics can be used determine how your project is doing, and can be used to project &#8220;when you will be done&#8221;. Â Projections are only as good as the data, so Scrum IS a process that requires you to follow it to ensure you have good data. Â The theory goes that if your team completes 20 user story points consistently each sprint, each Sprint lasting a month, then doing the math, your team can complete the remaining 60 user stories in the backlog in 3 months. Â I&#8217;ve found theÂ minutiaeÂ of <a href="http://jessewarden.com/2008/11/agile-chronicles-5-acceptance-criteria-punting.html">acceptance criteria</a>, refactoring, and platform limitations can greatly skew this number.</p>
<p>For example, I did a POC to determine if we could do a few challenging things. Â After looking at the initial wireframes and design comps, and I made the recommendations we spend a week or two on 3 specific areas to determine if they can even be done. Â This was important because the reason of using Flex, and Flash Player in general, was based on around some of these compelling features. Â These proofs of concept would ensure we could do what we really wanted to do, and to a well performing degree. Â While the initial proof&#8217;s of concept proved as always that anything can be done in Flash Player if you try hard enough, to what performance level is in question.</p>
<p>The devil is in the details as they say, and as we found, we started to hit some bottlenecks, some un-solveable from a programming perspective. Â One thing I&#8217;ve learned in Scrum is that there need to be 2 criteria for completing a user story. Â First, a timeout on your task. Â If something takes too long, you re-assess where you are at. Â If no immediate programming solution can be found, and your stakeholder does not wish to allocate any more time to the user story, then the designer needs to design an alternative solution that is easier to code. Â In our case, I have 30 minutes for a given task. Â If I make zero progress, we usually move on. Â If this happensÂ repeatedlyÂ (like 3 sprints) we usually punt. Â My lack of ability for certain user stories / defects creates more work for the designer to create alternative solutions.</p>
<p>This isn&#8217;t so black and white with performance, however. Â What is the acceptance criteria? Â How &#8220;well&#8221; should something perform, and to what degree? Â We had one feature that was consistently causing performance issues. Â It was one of those things that if you just removed the feature entirely, caching of images, the ENTIRE app just &#8220;felt&#8221; better. Â Because we had long gone past the cut off period, the user story was in a state of purgatory. Â It wasn&#8217;t a user story at this point, but a defect, and thus only worth 1 point (vs. 5 for the hard user stories). Â Additionally, it was never prioritized above over existing user stories or newer defects. Â It just became &#8220;a fact of life&#8221;.</p>
<p>The point of building software in iterationsÂ is to try something and see how it works. Â If it works, great, add more things. Â If it doesn&#8217;t work, try something else. Â This implies a set time, again, the length of a sprint.</p>
<p>But what if you recognize something doesn&#8217;t work&#8230; say&#8230; 5 sprints later? Â While both me and the server-side developer had spent a good amount of time on getting the feature to work, ultimately it doesn&#8217;t add much to the user experience for what it costs in performance. Â Utilitarianism at work; the pain of the CPU hit for multiple SharedObject.flush calls vs. instantaneous images refreshes isn&#8217;t worth it. Â The responsiveness of the app, with an already quick image refresh from a fast Amazon S3 + server-side caching makes it quick. Â Additionally, with some clever cleanup &amp; optimizations of <a href="http://www.quietlyscheming.com/blog/2007/01/23/some-thoughts-on-doubt-on-flex-as-the-best-option-orhow-i-made-my-flex-images-stop-dancing/">Ely&#8217;s SuperImage</a>, and voila, you still have wicked fast images.</p>
<p>I bring this up, because if you read about Iterations online, it implies that you are trying things during a sprint, and assessing if they work or not during the sprint; aka, a SINGLE sprint. Â I&#8217;ve found 2 cases where things took 4 sprints or more to figure out. Â One had to do with performance of the Flash Player&#8217;s saving of Flash cookies, and the other had to do with our team&#8217;s collective agreement on a designÂ iterationÂ looking and working like we wanted it to.</p>
<p>What I don&#8217;t know is how this affects your burn down. Â Is it really aÂ satisfiedÂ user story if it you take it out? Â Technically adding a new user story, orÂ modifyingÂ an existing one still counts as features in the backlog, and completed user story points. Â What it doesn&#8217;t allow for, however, is the &#8220;figuring things out&#8221; in the above equation of using your points per sprint to determine completion.</p>
<p><strong>Conclusions</strong></p>
<p>I&#8217;m still convinced demo&#8217;s don&#8217;t work in Scrum. Â I&#8217;d say, if you are demoing your software you need to engage those who you are demoing to on how Scrum works so when you see working software, it is in fact working, what they are seeing is reality, and they have an a clear understanding of what&#8217;s left.</p>
<p>It seems burnout can greatly affect your burn down metrics. Â Since you technically need to not work to fix it, the only thing I can think of is factoring in burnout to your overall projections. Â If you feel you may be burning out, the only thing I could think of to do is ensure you have less user stories committed to for a given sprint. Â That way, you&#8217;ve accurately set expectations; the data is still good, and the math of story points per sprint will work itself out.</p>
<p>Resources can be really challenging to juggle. Â If a particular feature is taking one developer too much time, you&#8217;ll have to shuffle the tasks around so another developer can take it over. Â If you can&#8217;t hire another developer, or another existing developer doesn&#8217;t know the technology, your designer will have work with the stakeholders to create a new/modified design that&#8217;ll work in the new technology. Â It may seem it obvious, but I&#8217;ve seen this happen on a few projects where certain portions are done in HTML vs. Flash strictly because of resource issues. Â The thinking goes it&#8217;s better to have something vs. nothing. Â While everyone would prefer the better user experience, even having something vs. nothing is a better user experience.</p>
<p>Finally, whileÂ iterationsÂ are typically akin to sprints, you may notÂ necessarilyÂ determine if a piece of functionality, or a design will work for a few sprints.</p>
<p>Hopefully by now you&#8217;ve noticed a pattern in my articles where strong design leadership can make or break a project, design being the visual kind, not the architecture kind.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://jessewarden.com/2009/01/agile-chronicles-8-demo-burnout-and-feature-juggling.html/feed</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
	</channel>
</rss>
