<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
    <channel>
        <title>Agile Development - Blogs at Near Infinity</title>


        <link>http://www.nearinfinity.com/blogs/</link>
        <description>Employee Blogs</description>
        <language>en</language>
        <copyright>Copyright 2012</copyright>
        <lastBuildDate>Fri, 13 May 2011 21:19:22 -0500</lastBuildDate>
        <generator>http://www.sixapart.com/movabletype/</generator>
        <docs>http://www.rssboard.org/rss-specification</docs>
        
        <item>
            <title>Are You Really Done?</title>
            <description><![CDATA[<p>People often have a hard time determining if they're done with a
software development task. It's a great idea to sit down with your team
and together decide what you're going to consider as criteria for
declaring a task done. If you haven't done that yet, here's one
question you can ask yourself to help decide if you're done.</p>

<blockquote>
  <p>Is there any reason I'll need to think about this code again in the
  near future?</p>
</blockquote>

<p>If you didn't quite implement all the unit tests you think you should
have, the answer is yes and <strong>you're not done</strong>. If you cut a corner or
two to squeeze it in before the end of the iteration, the answer is yes
and <strong>you're not done</strong>. If you're uncomfortable with the implementation
and would like to refactor it, the answer is yes and <strong>you're not done</strong>.
If there are a few details on the UI you left out in the interest of
time, the answer is yes and <strong>you're not done</strong>.</p>

<p>Too many times I've seen people close out a task only to revisit it the
next week to polish up some loose ends, write a few more tests,
refactor a confusing piece, etc. Don't do it.</p>

<p>Software development is hard enough without having to keep mental notes of
all the needed tweaks and adjustments to things you've already <em>done</em>.
Your goal should be to knock out a task so totally and completely that
you can get it out of your brain and focus on the next one. Doing so
will do wonders for your sense of accomplishment.</p>
]]></description>
            <link>http://www.nearinfinity.com/blogs/jeff_kunkle/are_you_really_done.html</link>
            <guid>http://www.nearinfinity.com/blogs/jeff_kunkle/are_you_really_done.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Agile Development</category>
            
            
            <pubDate>Fri, 13 May 2011 21:19:22 -0500</pubDate>
        </item>
        
        <item>
            <title>Advanced Burn Up Charts</title>
            <description><![CDATA[<p>If you've read my previous posts on the subject you know that I love agile <a href="http://www.nearinfinity.com/blogs/lee_richardson/forget_burndown_use_burnup_charts.html">burn up charts</a> for managing SCRUM style projects, particularly compared to burn down charts.</p>
<div style='float:right; margin-left:10px;'> 
<script type='text/javascript'> 
        var currentPageUrl = 'http://rapidapplicationdevelopment.blogspot.com/2011/04/advanced-burn-down-charts.html';
 
        /* Digg */
        var diggIframe = document.createElement('iframe');
        diggIframe.setAttribute('src', 'http://digg.com/tools/diggthis.php?u=' + currentPageUrl);
        diggIframe.setAttribute('height', '80');
        diggIframe.setAttribute('width', '52');
        diggIframe.setAttribute('frameborder', '0');
        diggIframe.setAttribute('scrolling', 'no');
        diggIframe.setAttribute('style', 'margin-left:auto; margin-right:auto; display:block; text-align:center;');
 
        /* DotNetKicks */
        var dotnetkicksLink = document.createElement('a');
        dotnetkicksLink.setAttribute('href', 'http://www.dotnetkicks.com/kick/?url=' + currentPageUrl);
        var dotnetkicksImg = document.createElement('img');
        dotnetkicksImg.setAttribute('src', 'http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=' + currentPageUrl);
        dotnetkicksImg.setAttribute('alt', 'Kick this article (a good thing) on DotNetKicks');
        dotnetkicksImg.setAttribute('border', '0');
        dotnetkicksImg.setAttribute('style', 'margin-left:auto; margin-right:auto; display:block; text-align:center;');
        dotnetkicksLink.appendChild(dotnetkicksImg);
 
        var div = document.createElement('div');
        div.appendChild(dotnetkicksLink);
        div.appendChild(document.createElement('br'));
        div.appendChild(diggIframe);
 
        document.write(div.innerHTML);
    </script> 
</div> 
<blockquote>
The problem is that burndown charts lack two essential pieces of information. First, how much work was actually accomplished during a given iteration (as opposed to how much work remains to be completed) and second how much total work the project contains (or if you prefer how much scope has increased each iteration). </blockquote>
<p>What you might not know is how flexible they can be.  In particular the example I gave last time has a problem.  Can you spot it?</p>
<p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_gez10dNhuPk/SQExi1j16lI/AAAAAAAABlM/pqg4SgFBkIs/s1600-h/Burnup.gif"><img style="cursor:pointer; cursor:hand;width: 400px; height: 273px;" src="http://4.bp.blogspot.com/_gez10dNhuPk/SQExi1j16lI/AAAAAAAABlM/pqg4SgFBkIs/s400/Burnup.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5260540314308176466" /></a></p>
<p>The problem is that the scope increase of 20 points in iteration six might very well have had zero impact on the actual deployment date.  Those points might have all been low priority tasks that the team will work on after they deploy the initial 100 points.  Wouldn't it be nice if the burn up chart could convey priority information as well?</p>
<p>So that's exactly what I did on my current project last week, and it appeared to be a big hit.  And with the addition of some Excel trend lines the chart was able to convey a lot of insight into the project:</p>
<p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-nqHRslSmh3I/TaL1f1sZ2CI/AAAAAAAABt4/Z5i4iyXrFh8/s1600/Burnup1.png"><img style="cursor:pointer; cursor:hand;width: 400px; height: 173px;" src="http://1.bp.blogspot.com/-nqHRslSmh3I/TaL1f1sZ2CI/AAAAAAAABt4/Z5i4iyXrFh8/s400/Burnup1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5594303614485649442" /></a></p>
<p>Obviously all that data is made up, but the chart still tells an interesting story:</p>
<ul>
<li>The customer hasn't been adding high priority tasks, perhaps because there is a hard deadline approaching</li>
<li>Because of the customer's restraint in adding high priority tasks the team can be fairly confident that they will finish all the high priority tasks by Iteration 3</li>
<li>While the customer hasn't added high priority tasks they have still been able to be agile by adding normal and low priority tasks</li>
</ul>
<p>What's really wonderful about this way of reporting is that it gives the customer the flexibility to add scope to future iterations while maintaining near term deadlines.  In short it supports what agile is supposed to be about.</p>
<p>But why stop there?  Depending on the story you need to tell or the scenario you need to evaluate perhaps you could incorporate team member contributions.  For example:</p>
<p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-J0lMgjTfmFw/TaL1fwd7rqI/AAAAAAAABuA/p1QyRmW5Byk/s1600/Burnup2.png"><img style="cursor:pointer; cursor:hand;width: 400px; height: 162px;" src="http://3.bp.blogspot.com/-J0lMgjTfmFw/TaL1fwd7rqI/AAAAAAAABuA/p1QyRmW5Byk/s400/Burnup2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5594303613082775202" /></a></p>
<p>In this example we can try to show what might happen if we remove a particular team member or if we'd never had a particular team member.  What's unique about this way or reporting is that it's incorporating the backlog's increasing trend into account.  While it's possible that the backlog may increase or decrease at a different rate with a different team makeup, it's a better scenario than ignoring the rate of increase of the backlog all together.</p>
<p>Perhaps we could incorporate other information.  Maybe bug vs. feature information.  Or planned vs. actual (e.g. task slippage) information.  It seems like there is a lot of potential.  Any other ideas out there?  Feel free to post in the comments or via <a href="http://www.twitter.com/lprichar">twitter</a>.  If there's enough interest I'd be happy to post another screencast similar to the last one I did on <a href=" http://www.nearinfinity.com/blogs/lee_richardson/video_how_to_create_burndown_c.html">how to produce burn up and burn down with SharePoint and Excel</a> except this time with trends and priorities.</p>
<p>So overall while these charts may be a little more complicated than a traditional burn down chart they would make an excellent talking point during a PowerPoint presentation, or as part of your iteration close out.  And with a little training I bet just about any customer would learn to love the insight they provide.</p>]]></description>
            <link>http://www.nearinfinity.com/blogs/lee_richardson/advanced_burn_up_charts.html</link>
            <guid>http://www.nearinfinity.com/blogs/lee_richardson/advanced_burn_up_charts.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Agile Development</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">burndown</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">burnup</category>
            
            <pubDate>Mon, 11 Apr 2011 08:52:53 -0500</pubDate>
        </item>
        
        <item>
            <title>Is system refactoring possible?</title>
            <description><![CDATA[<p>People have talked about it for years. Even if you're new, you've certainly been on the receiving end of more war stories than you care to remember; it's that old legacy system. You know, the one that started out small but now has all kinds functionality tacked on here or growing out of there. Corporate architects most certainly call this growth subsystems but you know better. It's really just the junk that's built up over time because the <em>system</em> was never refactored.</p>

<p>It's widely accepted that refactoring is a best practice for keeping code simple, DRY, and maintainable. What doesn't seem so widely accepted is the habit of applying the same practices at a broader system level. </p>

<p>Why don't we refactor systems? I started thinking about this very question during a recent all-day system design presentation, one of several in a series mind you. As I ingested slide after slide of barely visible text accompanied by Visio diagrams packed with boxes and arrows pointing in every direction, I wondered how things became so complicated. </p>

<p>In my experience, there seems to be some kind of stigma around reworking (aka refactoring) interconnected systems. New features are always bolted on to our existing systems, but nothing is ever redesigned, reorganized, or re-anything'ed. Over time, we end up with bolts on top of bolts until the thought of reworking any part of the system is completely overwhelming. </p>

<p>So why is the concept of refactoring an interconnected system so foreign when it's been used so successfully for more discrete pieces of software? Is it possible?</p>
]]></description>
            <link>http://www.nearinfinity.com/blogs/jeff_kunkle/is_system_refactoring_possible.html</link>
            <guid>http://www.nearinfinity.com/blogs/jeff_kunkle/is_system_refactoring_possible.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Agile Development</category>
            
            
            <pubDate>Mon, 01 Nov 2010 11:16:50 -0500</pubDate>
        </item>
        
        <item>
            <title>Advanced Git with Scott Chacon Comes to NIC-U December 4th</title>
            <description><![CDATA[Our friends at Jumpstart Lab will be holding an <a href="http://jumpstartlab.com/trainings/3-git-reston-va">Advanced Git</a> class December 4th, taught by GitHub's <a href="http://scottchacon.com/">Scott Chacon</a>, at the new NIC-U Training Center.<br /><div id=":42">
<br />
The Git source control system is quickly taking over the development world, replacing SVN and CVS. It's strengths lie in fast, distributed control of source code for teams from one to thousands. The real power of Git comes when you move beyond simply "doing what you used to do in SVN, just with Git." It's more than just commits and clones. In this advanced session you'll explore topics like:<br />
<br /><ul><li>
 Managing and merging multiple branches</li><li>
 Workflow best practices (rebasing, merging, etc)</li><li>
 Finding issues with bisect and blame</li><li>
 Hooks</li><li>
 Submodules</li><li>
 Customizing</li></ul>
<br />
This class will be taught by Scott Chacon, chief Git evangelist at <a href="http://github.com/">GitHub</a>, creator of <a href="http://gitcasts.com/">GitCasts</a>, and author of <a href="http://progit.org/book/">Pro Git (Apress) </a>and <a href="http://peepcode.com/products/git-internals-pdf">Git Internals (Peepcode)</a>. Don't miss this chance to learn Git from a true expert.<br />
</div> <br />The training provider, <a href="http://jumpstartlab.com/">Jumpstart Lab</a><a href="http://www.jumpstartlab.com/"></a>, is a DC-based training company with a long history of bringing interesting technology courses to our area. We are happy to have convinced them to hold this excellent course in our facility.<br />
<br />
Be sure to check out our <a href="https://www.nearinfinity.com/trainingcenter/coursecatalog/upcoming/">Upcoming NIC-U Training Courses</a> page for upcoming courses.<br />]]></description>
            <link>http://www.nearinfinity.com/blogs/gray_herter/advanced_git_with_scott_chacon.html</link>
            <guid>http://www.nearinfinity.com/blogs/gray_herter/advanced_git_with_scott_chacon.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Agile Development</category>
            
                <category domain="http://www.sixapart.com/ns/types#category">Git</category>
            
                <category domain="http://www.sixapart.com/ns/types#category">Ruby</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">Git</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">GitHub</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Rails</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Ruby</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">training</category>
            
            <pubDate>Mon, 01 Nov 2010 08:40:00 -0500</pubDate>
        </item>
        
        <item>
            <title>The Agile Attitude Part 2: Letting Go</title>
            <description><![CDATA[For many of us in the IT industry, the popularity of Agile development has been a freeing experience.&nbsp; When an organization understands its role in Agile development and allows the team to self organize and come up with creative solutions, many of the stress and tensions that can be felt by the development team can melt away.&nbsp; This is because Agile processes allow development teams to do what they do best: develop software.&nbsp; The drivel that follows is advice for development teams on how to let go of some habits or preconceptions in order to better benefit from using an Agile development process.<br /><font style="font-size: 1.25em;"><br /><font style="font-size: 1em;">Follow the Agile Process - it will make your life easier</font></font><font style="font-size: 1em;"><br /></font><br />One of my favorite things about Agile development is that it removes the burden of decision making from the development team.&nbsp; The team gets to provide facts to the decision maker (Product Owner) and then execute once a decision is made.&nbsp; There is no more need to hide problems or try to make up schedule time (although I'm sure that no IT professional has ever done such a thing).&nbsp; Developing software is what it is - unpredictable - and Agile development accounts for that through continuous planning.&nbsp; The best thing that a team can do is be as transparent as possible, help decision makers gather all the information that they need in order to make a decision and then sit back and wait for the next Sprint's marching orders.&nbsp; This allows the team to spend more time and energy on what they do really well - building good software.<div><br /><img src="file:///Users/jborst/Library/Caches/TemporaryItems/moz-screenshot.png" alt="" /><br /><font style="font-size: 1.25em;">Remember who owns the system</font><br /><br />The majority of software developers out there are building a system for somebody else.&nbsp; Yes, there is a tremendous amount of pride and sweat equity that is built up when building any system, but we always need to keep in mind who it is for.&nbsp; Many times its not our system that we our building, its our customer's.&nbsp; Software developers get paid to develop software and thanks to Scrum, Product Owners now get paid to make decisions that directly shape the software.&nbsp; They get to make big decisions every month, and they should be making little decisions every day.&nbsp; So remember, what makes sense to you should be a starting point for implementation.&nbsp; Many times as developers we understand how our users think and can implement features in ways that are both elegant and intuitive - but not always.&nbsp; Sometimes we completely fail to grasp our customer's environment or needs and if left to our druthers would create a system that would completely miss the mark.&nbsp; This is the way of the past.&nbsp; The future (powered by Agile process) is to let our customer's be intimately involved with the software right from the beginning, and let them shape our actions so that the systems we build will be as useful as possible to their users.<br /><br /><font style="font-size: 1.25em;">Help Make Decisions</font><br /><br />It may sound like I want to purge thought and creativity from the development team, but I really don't.&nbsp; The team is the Product Owner's biggest asset.&nbsp; The team should let the Product Owner understand the possibilities that technology can provide.&nbsp; We are responsible for keeping our Product Owners informed, providing suggestions, and laying out the pros and cons of various options so that they can make good decisions. There is nothing more beautiful in software development than a well oiled development team that has an intimate relationship with its Product Owner.&nbsp; With ideas flying all over the place, creativity and experience can come together to create game changing software that really adds value on top of the regular automation of business processes that we have learned to do so well over the past 10 - 20 years.&nbsp; Just remember, ultimately it is the Product Owner who is responsible for the return on investment for the system, and when it is all said and done, they have final say for implementation.<br /><br /><font style="font-size: 1.25em;">Don't fight the process</font><br /><br />Agile requires a different way of thinking than many IT professionals are used to.&nbsp; Agile development asks us to give up some control over the process for building software.&nbsp; For many, this change can be hard to swallow, especially when we are asked to do things that we don't agree with, be it adding a particular feature or changing the layout of the UI. In these cases, feel free to voice your opposition, but remember your role. System design and implementation is your thing.&nbsp; Deciding what to do and when is up to your Product Owner.&nbsp; You will likely have very good input on these matters, and if you voice your opinion respectfully (not forcefully) in time your Product Owner will come to trust and depend on your sage advice.&nbsp; Allow the iterative nature of the Agile process to work to your advantage.&nbsp; If your Product Owner fails to follow your advice and makes a bad decision, it will be brought to light rather quickly.&nbsp; Its OK to cut them some slack. &nbsp;One thing that as developers we love about Agile is that it tells us that we don't always need to have all of the answers.&nbsp; I think its reasonable that we don't expect our Product Owners to always have all of the right answers either.<br /><br /><font style="font-size: 1.25em;">Let me sum up</font><br /><br />Agile development isn't easy.&nbsp; Bridging the gap between the business side of an organization and the IT side of an organization is extremely hard.&nbsp; As software developers, by giving up a little bit of control and not giving in to our egos always telling us we have the right answer, it will be easier to benefit from all of the wonderful joys that Agile Development has to offer.<br /></div>]]></description>
            <link>http://www.nearinfinity.com/blogs/jeff_borst/the_agile_attitude_part_2_lett.html</link>
            <guid>http://www.nearinfinity.com/blogs/jeff_borst/the_agile_attitude_part_2_lett.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Agile Development</category>
            
            
            <pubDate>Sun, 14 Mar 2010 23:04:03 -0500</pubDate>
        </item>
        
        <item>
            <title>Hanging out with industry leaders...</title>
            <description><![CDATA[Thanks to Near Infinity's generous training budget, I had the opportunity last week to spend 3 days with several members of the&nbsp;<a href="http://www.objectmentor.com/">Object Mentors</a>&nbsp;group. These guys have an enormous amount of experience, especially&nbsp;<a href="http://www.objectmentor.com/omTeam/martin_r.html">"Uncle" Bob Martin</a>. So I thought I would share a few of the pearls of wisdom they dropped along the way:<div><br /><div><ul><li>"Programming is a social exercise" - I thought this was a really good point. It was mentioned in the context of pair-programming, but I think it has far-reaching implications. Software development is more than just running through a bunch of formulas and crunching out an answer. Interaction within the team and with domain experts is crucial, to not only build the software right, but build the right software.</li><li>"A refactoring is something that takes a few seconds, or a few minutes at most" - I was really impressed with the importance of automated refactorings in his discussions. I think most of the time that I spend "refactoring" is in small, manual edits, whereas most of the time that he spends is in using automated refactoring to "chunk" his edits. I definitely need to learn these keystrokes and refactorings better. Maybe I should start a "Refactoring Driven Development" movement...</li><li>"Don't put refactoring on the schedule; do it all the time" - Simple, but effective. My tendency is to want to spend all my time refactoring, but this curbs that, because it forces me to refactor while I'm delivering user stories.&nbsp;</li><li>"There are 3 essential design skills: nose, vision, and plan" - A nose for recognizing design smells, a vision for seeing a good design for your codebase, and an ability to come up with a plan to get from point A to point B.&nbsp;</li><li>"Testing trumps good design" - This bothered me at first, but I think it's a really good point. The idea &nbsp;here is not to say that design is not important. But, rather, if you are forced to choose between between a "bad" design that allows better test coverage (e.g., less encapsulation), and "good" design which is hard to test, choose testability. The reason here is that the biggest roadblock to changing your codebase is not bad design, but FEAR of breaking something. If you know you will know when you've broken something, then you can retrofit a better design later.</li><li>"There is self-worth tied up in "finishing" something" - He also drew a distinction between having something working (which some developers will call "finishing" it), and finishing it - making it not only work, but be thoroughly tested, maintainable, etc.</li><li>Presentation layer - he talked about having the thinnest possible UI layer, which talks to a presentation layer to find out everything about how it should render. Then test the UI and business logic completely separately</li><li>"You aren't doing agile development unless you are tracking your velocity and remaining story points in terms of passing, automated acceptance tests" - I balked at this at first, feeling like it was too easy to use this as a performance to beat the team over the head with. After I thought about it, though, it's really about the definition of done. We are done if all the features we said would be working are working. And how can we know this? Only by testing them. Continuously. Which means it should be automated.</li><li>Acceptance tests don't need to be end-to-end, and, in fact, shouldn't be. This is another one that made me hesitate. After all, how do you know the feature is really working unless you go all the way from the UI to the database and back? Well, in short, because you're the developer. There's more value in being able to test features fast, constantly, than in being able to truly test them all the way from one end to the other. Mock/stub out what you need to to make that happen.</li><li>FitNesse is cool. This is the second time I've played around with that tool, and the second time I've been impressed with its power and simplicity. I definitely need to play around with it some more.</li></ul></div></div>]]></description>
            <link>http://www.nearinfinity.com/blogs/andrew_wagner/hanging_out_with_industry_lead.html</link>
            <guid>http://www.nearinfinity.com/blogs/andrew_wagner/hanging_out_with_industry_lead.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Agile Development</category>
            
                <category domain="http://www.sixapart.com/ns/types#category">General</category>
            
                <category domain="http://www.sixapart.com/ns/types#category">Testing</category>
            
            
            <pubDate>Fri, 26 Feb 2010 09:50:17 -0500</pubDate>
        </item>
        
        <item>
            <title>[video] How To Create Burndown Charts For User Stories in SharePoint</title>
            <description><![CDATA[ <p>I love tracking user stories in SharePoint.  It's free (assuming you have access to a Windows Server 2003 or 2008 machine with WSS turned on) and is extremely flexible.  Adding new custom columns is easy.  Adding custom views is easy.  Bulk editing is amazingly simple and powerful (assuming you're willing to use IE).  And building a custom home page "portal" with all the states of your team's workflow (e.g. unassigned, stories I'm working on, my resolved stories, to peer test, etc) is easy and is intuitive to use.</p>

<div style='float:right; margin-left:10px;'>
<script type='text/javascript'>
        var currentPageUrl = 'http://rapidapplicationdevelopment.blogspot.com/2010/02/video-how-to-create-burndown-charts-for.html';

        /* Digg */
        var diggIframe = document.createElement('iframe');
        diggIframe.setAttribute('src', 'http://digg.com/tools/diggthis.php?u=' + currentPageUrl);
        diggIframe.setAttribute('height', '80');
        diggIframe.setAttribute('width', '52');
        diggIframe.setAttribute('frameborder', '0');
        diggIframe.setAttribute('scrolling', 'no');
        diggIframe.setAttribute('style', 'margin-left:auto; margin-right:auto; display:block; text-align:center;');

        /* DotNetKicks */
        var dotnetkicksLink = document.createElement('a');
        dotnetkicksLink.setAttribute('href', 'http://www.dotnetkicks.com/kick/?url=' + currentPageUrl);
        var dotnetkicksImg = document.createElement('img');
        dotnetkicksImg.setAttribute('src', 'http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=' + currentPageUrl);
        dotnetkicksImg.setAttribute('alt', 'Kick this article (a good thing) on DotNetKicks');
        dotnetkicksImg.setAttribute('border', '0');
        dotnetkicksImg.setAttribute('style', 'margin-left:auto; margin-right:auto; display:block; text-align:center;');
        dotnetkicksLink.appendChild(dotnetkicksImg);

        var div = document.createElement('div');
        div.appendChild(dotnetkicksLink);
        div.appendChild(document.createElement('br'));
        div.appendChild(diggIframe);

        document.write(div.innerHTML);
    </script>
</div>

<p>This 13 minute screencast shows you how to create a user stories list in SharePoint and build burn up and burn down charts off of the data using Microsoft Excel.  It includes the custom fields you'll need in SharePoint, the formula's you'll have to create in Excel, and shows tips along the way like how to simplify refreshing your reports when data changes.</p>

<object width="580" height="435"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=9404991&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=0&amp;show_portrait=0&amp;color=e97000&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=9404991&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=0&amp;show_portrait=0&amp;color=e97000&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="580" height="435"></embed></object>

<p>Once you've watched the screencast if you want to implement this yourself here is the information you'll need:</p>

<p><b>Custom SharePoint Columns</b></p>

<ul>
<li>Iteration (Choice column e.g. Iteration00, Iteration01, zBacklog)</li>
<li>Released (Date - the date the iteration was closed out)</li>
<li>Points (Number)</li>
<li>Created Date (for demo only, you should be able to use "Created" on your project)</li>
</ul>

<p><b>Calculated Columns in Excel</b></p>

<ul>
<li>Total Points to Date
  <ul>
  <li>The total points on a specific date including backlog, current iteration and all completed stories</li>
  <li>=SUMIF([Created Date],CONCATENATE("<=",Table_owssvr_1[[#This Row],[Released]]),[Points])</li>
  </ul>
</li>
<li>Completed To Date
  <ul>
  <li>Total points for stories released prior to current story's release date</li>
  <li>=SUMIF([Released],CONCATENATE("<=",Table_owssvr_1[[#This Row],[Released]]),[Points])</li>
  </ul>
</li>
<li>Backlog
  <ul>
  <li>What remains to be completed at a point in time (e.g. don't include user stories added to the backlog in iteration 4 if this is for a task in iteration 03)</li>
  <li>=Table_owssvr_1[[#This Row],[Total Points to Date]]-Table_owssvr_1[[#This Row],[Completed to Date]]</li>
  </ul>
</li>
</ul>

<p><b>Burndown Pivot Table Values</b></p>

<ul>
<li>Row: Released</li>
<li>Filter: Released After [Some Date]</li>
<li>Values: Max(Backlog)</li>
</ul>

<p><b>Burnup Pivot Table Values</b></p>

<ul>
<li>Row: Released</li>
<li>Filter: Released After</li>
<li>Values
  <ul>
  <li>Max(Total Points to Date)</li>
  <li>Max(Completed To Date)</li>
  </ul>
</li>
</ul>

<p><b>Summary</b></p>
<p>I hope you found the presentation useful and if you are currently using SharePoint for tracking user stories please comment on your experiences.</p>]]></description>
            <link>http://www.nearinfinity.com/blogs/lee_richardson/video_how_to_create_burndown_c.html</link>
            <guid>http://www.nearinfinity.com/blogs/lee_richardson/video_how_to_create_burndown_c.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Agile Development</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">agile</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">burndown</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">burnup</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">excel</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">project management</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">SharePoint</category>
            
            <pubDate>Fri, 12 Feb 2010 16:46:16 -0500</pubDate>
        </item>
        
        <item>
            <title>Business Process Modeling for Software Developers</title>
            <description><![CDATA[<p>As a software developer I never thought I'd be saying this (I suppose eight years of working for the company that invented this technique might bias me), but you can not underestimate the value of business process modeling when starting a new project.  This is especially true if it's a small project and you don't have the benefit of a dedicated requirements analyst.</p>

<div style='float:right; margin-left:10px;'>
<script type='text/javascript'>
        var currentPageUrl = 'http://rapidapplicationdevelopment.blogspot.com/2009/12/business-process-modeling-for-software.html';
 
        /* Digg */
        var diggIframe = document.createElement('iframe');
        diggIframe.setAttribute('src', 'http://digg.com/tools/diggthis.php?u=' + currentPageUrl);
        diggIframe.setAttribute('height', '80');
        diggIframe.setAttribute('width', '52');
        diggIframe.setAttribute('frameborder', '0');
        diggIframe.setAttribute('scrolling', 'no');
        diggIframe.setAttribute('style', 'margin-left:auto; margin-right:auto; display:block; text-align:center;');
 
        /* DotNetKicks */
        var dotnetkicksLink = document.createElement('a');
        dotnetkicksLink.setAttribute('href', 'http://www.dotnetkicks.com/kick/?url=' + currentPageUrl);
        var dotnetkicksImg = document.createElement('img');
        dotnetkicksImg.setAttribute('src', 'http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=' + currentPageUrl);
        dotnetkicksImg.setAttribute('alt', 'Kick this article (a good thing) on DotNetKicks');
        dotnetkicksImg.setAttribute('border', '0');
        dotnetkicksImg.setAttribute('style', 'margin-left:auto; margin-right:auto; display:block; text-align:center;');
        dotnetkicksLink.appendChild(dotnetkicksImg);
 
        var div = document.createElement('div');
        div.appendChild(dotnetkicksLink);
        div.appendChild(document.createElement('br'));
        div.appendChild(diggIframe);
 
        document.write(div.innerHTML);
    </script>
</div>

<p>As a consultant (or as a person who is learning someone else's business) your job is to understand your customers existing business <i>better than they do themselves</i>.  And you need to be on the same page with others regarding how you are going to change their day to day functions.  And that's what business process modeling is for.</p>

<p>You may ignore this document after the first week on the project, in fact I would encourage you to. But even if you throw it away immediately after creating it, the process of developing the document will still:</p>

<ul>
<li>Flush out important questions</li>
<li>Show your customer you understand their world</li>
<li>Help document the project to other developers</li>
<li>Facilitate communication (especially with the people who pay the bills)</li>
<li>Generate user stories (requirements) </li>
<li>Identify the entities that can feed into an <a href="http://rapidapplicationdevelopment.blogspot.com/2007/06/entity-relationship-diagram-example.html">Entity Relationship Diagram</a> (or database I suppose)</li>
<li>Aid making good choices for the decisions it be hard to undo later (like whether to manually code workflows or use <a href="http://en.wikipedia.org/wiki/Windows_Workflow_Foundation">Windows Workflow Foundation</a>)</li>
<li>More clearly identify pain points and areas where your software can help end users; and</li>
<li>Identify metrics that can help determine project success from an ROI and product owner's perspective</li>
</ul>

<p>Convinced this is a tool you need in your toolbelt yet?  As long as the answer isn't "I only write code leave me alone" then check out this quick how-to:</p>

<p><b>Start with the AS-IS diagram</b></p>

<p>As soon as possible on a new project you should plan to interview your future end users.  This shouldn't be an unstructured Q&amp;A session.  You should start with a rough draft of what you think their business process is and ask questions that identify the places where you were wrong.<p>

<p>In order to start the diagram you need to identify both the end users and existing systems and put those in "swimlanes" down the left side of a diagram.  Swimlanes are important because they help you be explicit about who is performing what activities.  Then flush out activities in the happy path in appropriate swimlanes like so:</p>
 
<p><a href="http://3.bp.blogspot.com/_gez10dNhuPk/SzISYvjEwvI/AAAAAAAABrg/8X9h_xxiDvw/s1600-h/AS-IS.gif"><img style="cursor:pointer; cursor:hand;width: 400px; height: 344px;" src="http://3.bp.blogspot.com/_gez10dNhuPk/SzISYvjEwvI/AAAAAAAABrg/8X9h_xxiDvw/s400/AS-IS.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5418413517969867506" /></a></p>
 
<p>As soon as you talk to end users (like the clerk in the example above) you will discover unhappy paths.  What if the warehouse is out of a product?  What if the payment was declined?  What happens if a customer needs to return something?</p>

<p>Obviously you document these using standard activity diagram notation:</p>

<p><a href="http://2.bp.blogspot.com/_gez10dNhuPk/SzISZP5NmgI/AAAAAAAABro/Q6AeYSTx7eo/s1600-h/Choice.gif"><img style="cursor:pointer; cursor:hand;width: 389px; height: 400px;" src="http://2.bp.blogspot.com/_gez10dNhuPk/SzISZP5NmgI/AAAAAAAABro/Q6AeYSTx7eo/s400/Choice.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5418413526652656130" /></a></p>

<p><b>Identifying Pain Points/Opportunities</b></p>
<p>The interesting part about unhappy paths is how often they occur, how they affect the customers of your customer, and ultimately how they affect your customer's bottom line.  For instance, how often is payment declined in the example above?  Fairly frequently?  Can you get an actual percentage?  If it turns out it's because the original application failed to validate credit cards, then a small amount of programming effort can provide a large benefit to length of time until order fulfillment.  Sometimes you can make the process more efficient without writing a line of code.</p>

<p>And at the end of your project if you can show that you've decreased the average length of time it takes to go through the process, ideally by showing less time was spent in unhappy paths, you will likely have made yourself one happy customer.  This can be especially effective if your new system can show statistics (like percent of orders that are declined) and compare those to the old process.</p>
<p><b>Developing the TO-BE diagram</b></p>
<p>AS-IS process diagrams are completely useless unless you can effectively describe what the process will look like after you implement your new system.  The process of developing these documents is pretty similar to the AS-IS diagram except of course you're trying to fix the pain points.</p>

<p>One technique I like for generating a backlog of user stories (tasks) is to put unique numbers with each step in the TO-BE process, then ensure there is at least one user story per step in the process.  You may be surprised at how easily activities in your new project's swimlane map to user stories.</p>
<p><b>Summary</b></p>
<p>I'm a fan of writing code as soon as possible on a project, but if you fail to understand an end user's business process you may be writing the wrong code.  Business process modeling can ensure you're writing the right code to solve the most important problems first.  And that may be the difference between project success and project failure.</p>]]></description>
            <link>http://www.nearinfinity.com/blogs/lee_richardson/business_process_modeling_for.html</link>
            <guid>http://www.nearinfinity.com/blogs/lee_richardson/business_process_modeling_for.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Agile Development</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">agile</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">process</category>
            
            <pubDate>Wed, 23 Dec 2009 09:01:57 -0500</pubDate>
        </item>
        
        <item>
            <title>Agile in School</title>
            <description><![CDATA[I have recently been taking some graduate classes in the field of Information Technology Management.&nbsp; After the first few core classes, I have come to the conclusion that there are WAY too many higher education institutions that are avoiding Agile methodologies when they begin teaching software development practices.<br /><br />To give some background on where I'm coming from, the program that I had started included a class on project management.&nbsp; The semester had a week or two going into detail about the standard software development life cycle (SDLC).&nbsp; The way they described it was exactly the way waterfall works.&nbsp; All work was done in phases, requirements, design, development, test, deployment, all of which revolves around mountains of documentation and paperwork.<br /><br />Seeing as I have been working on an Agile based project for over 3 years, I thought I would inject some of my thoughts for the class on how things could be better.&nbsp; I couldn't believe how much negativity I got from other students and even the professor.&nbsp; I was told numerous times how the Agile methodologies (in general, not specific implementations) wouldn't work for large projects and is only good for prototyping functionality.&nbsp; The professor even made the comment that Agile was too restrictive when it comes to the time constraints (this I had a good laugh at).<br /><br />To make matters worse, if I was to continue the program, the last 5 classes are all different steps in the waterfall process.&nbsp; There is a class on Requirements, there is a class on Design, etc., all leading up to a final course that puts it all together.&nbsp; I don't see a problem with teaching students different ways to gather requirements or how to go about thinking about and designing a system.&nbsp; What I do have a problem with is that these higher education institutions are still forcing a specific system down the throats of students when they should be training the students on how to be most effective in their jobs and provide them with as many tools to accomplish that goal.<br /><br />Agile isn't just a new fad, it has been around for quite a while now and has taken some of the best practices from years of experience and made those the focus.&nbsp; Furthering oneself through education should benefit the student not waste their time.&nbsp; My hope is that one day there will be a reform in the software development education programs so that new software development managers will have the necessary tools to be effective rather than being restricted out of the gate.&nbsp; If there isn't some change soon, the industry is going to pass the education system by and getting a masters isn't going to do anyone any good.<br />]]></description>
            <link>http://www.nearinfinity.com/blogs/chris_rohr/agile_in_school.html</link>
            <guid>http://www.nearinfinity.com/blogs/chris_rohr/agile_in_school.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Agile Development</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">agile</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">education</category>
            
            <pubDate>Wed, 20 May 2009 15:33:24 -0500</pubDate>
        </item>
        
        <item>
            <title>The Agile Attitude Part 1: Transparency</title>
            <description><![CDATA[<p>Transparency: <em>Implies openness, communication, and accountability</em></p>
<p>Agile has always espoused the importance of transparency within the development team, but it is also important to be as transparent as possible with your customer. In fact, the use of transparency can build the foundation of your customer relationship. </p>
<p>At Near Infinity most of our projects are consulting efforts where we build software for other people. In these situations, our customers place an enormous amount of trust in us, and it is incumbent upon us to do everything that we can to earn this trust. </p>
<p>Most Agile development methodologies have clear roles that serve to simplify the development process. In Scrum, the development team is responsible for delivering complete, tested, working software each iteration. The product owner is responsible for making decisions about which features should be developed at what time, and for deciding when there is enough new functionality in the software to make a release to production. </p>
<p>For anything not related to feature development the product owner is the decision maker on the project, but many times the software developers have more information about the state of the software than the product owners do. This puts the development team in a position of power. As we all know, with great power comes great responsibility. You have the knowledge that your product owner needs to effectively drive the project to success. You should share as much of this information as your product owner can stomach - whether it is good news or bad news. Especially when it is bad news. </p>
<p>Too many times in our industry, development teams will hide bad news from decision makers, hoping that they can adjust resources or shuffle the order of features that need to be developed in order to make up schedule time. We rationalize this by saying that our customers wouldn't want to know all of the "implementation details" and there is no reason to get the customer involved with something that may not even be an issue. This idea of the development team insulating their customers from development issues is flat out wrong. Nothing good can happen from this. In software development, we almost never make up schedule time and things don't magically get better because we shuffle around resources.</p>
<p>&nbsp;So instead, share the bad news. You may think that it makes the development team look bad, but it won't. Software development is not an exact science. Pretending that it is can be a recipe for disaster. A good product owner will know this and should expect some setbacks during the course of the project. Sharing these setbacks shows your customer that you are their partner in this effort. It gives your product owners the valuable information that they need in order to make the critical decisions that will affect the overall success of your project. </p>
<p>As software developers, we want to prove our expertise. This is our profession; we are supposed to know what we are doing, right? <em>(Right!)</em> So then doesn't admitting our mistakes and pointing them out to our customer make us look incompetent? Absolutely not. The truth is that by owning our mistakes and exposing them, we look more confident in our abilities. It shows your customer that making mistakes is part of the development process and is normal. Confidently owning mistakes, learning from them, and addressing them with better solutions shows your customer that you are experienced and you know how to deal with adversity. It shows that you can be trusted to make decisions that will benefit the project and the customer, and that you are not just looking out for yourself. </p>
<p>It is easy to fall into the trap of always wanting to please our customers. This is a very shortsighted view of software development. If you aren't concerned with repeat business, then by all means, always tell the customer what they want to hear. The truth of the matter is that sharing information that upsets your customer is almost always the right thing to do. It may mean having an awkward meeting or a tense few days, but it allows your customers to do their jobs more effectively, to plan appropriately and it better enables them to meet their expectations in the long run. </p>
<p>Don't mistake honesty for transparency. Customers expect honesty. They expect truthful responses to their questions. Transparency goes one step further. It means sharing information when you don't have to. It means sharing information when things go wrong. It means partnering with your customer in order to deliver the best software possible in order to return value to the business. </p>
<p>Being transparent isn't always easy. Just remember, the most important time to be transparent is when it is the hardest.</p>]]></description>
            <link>http://www.nearinfinity.com/blogs/jeff_borst/the_agile_attitude_part_1.html</link>
            <guid>http://www.nearinfinity.com/blogs/jeff_borst/the_agile_attitude_part_1.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Agile Development</category>
            
            
            <pubDate>Mon, 03 Nov 2008 15:55:38 -0500</pubDate>
        </item>
        
        <item>
            <title>Forget Burndown Use Burnup Charts</title>
            <description><![CDATA[<p>Agile projects traditionally use burndown charts to visually show work remaining over time. This could be for the current iteration or it could be for the duration of the project. Either way they can help managers (or the Project Owner in Scrum) track velocity, estimate either the project or iteration completion date, or find trends in past performance. But burndown charts have a major shortcoming: they fail to show what makes agile projects agile: new requirements. And that's where burnup charts come in. But first let's examine burndown charts.</p>
<div style="FLOAT: right; MARGIN-LEFT: 10px">
<script type="text/javascript">
        var currentPageUrl = 'http://rapidapplicationdevelopment.blogspot.com/2008/10/forget-burndown-use-burnup-charts.html';

        /* Digg */
        var diggIframe = document.createElement('iframe');
        diggIframe.setAttribute('src', 'http://digg.com/tools/diggthis.php?u=' + currentPageUrl);
        diggIframe.setAttribute('height', '80');
        diggIframe.setAttribute('width', '52');
        diggIframe.setAttribute('frameborder', '0');
        diggIframe.setAttribute('scrolling', 'no');
        diggIframe.setAttribute('style', 'margin-left:auto; margin-right:auto; display:block; text-align:center;');

        /* DotNetKicks */
        var dotnetkicksLink = document.createElement('a');
        dotnetkicksLink.setAttribute('href', 'http://www.dotnetkicks.com/kick/?url=' + currentPageUrl);
        var dotnetkicksImg = document.createElement('img');
        dotnetkicksImg.setAttribute('src', 'http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=' + currentPageUrl);
        dotnetkicksImg.setAttribute('alt', 'Kick this article (a good thing) on DotNetKicks');
        dotnetkicksImg.setAttribute('border', '0');
        dotnetkicksImg.setAttribute('style', 'margin-left:auto; margin-right:auto; display:block; text-align:center;');
        dotnetkicksLink.appendChild(dotnetkicksImg);

        /* Reddit */
        var redditIframe = document.createElement('iframe');
        redditIframe.setAttribute('src', 'http://reddit.com/button?t=2&url=' + currentPageUrl);
        redditIframe.setAttribute('height', '80');
        redditIframe.setAttribute('width', '52');
        redditIframe.setAttribute('frameborder', '0');
        redditIframe.setAttribute('scrolling', 'no');
        redditIframe.setAttribute('style', 'margin-left:auto; margin-right:auto; display:block; text-align:center;');

        var div = document.createElement('div');
        div.appendChild(dotnetkicksLink);
        div.appendChild(document.createElement('br'));
        div.appendChild(diggIframe);
        div.appendChild(document.createElement('br'));
        div.appendChild(redditIframe);

        document.write(div.innerHTML);
    </script>
</div>
<p><b>The Problem with Burndown</b></p>
<p>A typical burndown for the life of a project might look like this:</p>
<p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_gez10dNhuPk/SQExigphzWI/AAAAAAAABlE/CxANEtBwb2Q/s1600-h/Burndown.gif"><img id="Img1" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 271px" alt="" src="http://3.bp.blogspot.com/_gez10dNhuPk/SQExigphzWI/AAAAAAAABlE/CxANEtBwb2Q/s400/Burndown.gif" border="0" /></a></p>
<p>It shows the project started with 100 points of work in the backlog; it's completed eight iterations; the team accomplishes about ten points an iteration; and if everything continues at the current velocity the project will complete all work within another two iterations. Great.</p>
<p>But what happened in iteration six? Very little appears to have been accomplished. Maybe the team all took a vacation. Maybe there was a major problem or the team incorrectly estimated complexity. Or perhaps a large set of new requirements were added to the backlog because the customer decided what they thought they wanted wasn't what they really needed: namely the exact scenario agile was designed for.</p>
<p><b>Burnup Charts</b></p>
<p>The problem is that burndown charts lack two essential pieces of information. First, how much work was actually accomplished during a given iteration (as opposed to how much work remains to be completed) and second how much total work the project contains (or if you prefer how much scope has increased each iteration). A burnup chart for the exact project above might look like this:</p>
<p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_gez10dNhuPk/SQExi1j16lI/AAAAAAAABlM/pqg4SgFBkIs/s1600-h/Burnup.gif"><img id="BLOGGER_PHOTO_ID_5260540314308176466" style="WIDTH: 400px; CURSOR: hand; HEIGHT: 273px" alt="" src="http://4.bp.blogspot.com/_gez10dNhuPk/SQExi1j16lI/AAAAAAAABlM/pqg4SgFBkIs/s400/Burnup.gif" border="0" /></a></p>
<p>We can now clearly see that the team did not take a breather in iteration six. They continued to complete about ten points per iteration, but during the sixth iteration the scope increased by about twenty points.</p>
<p>One could imagine the opposite happening as well. Later in the project the team might delete old user stories that were envisioned during project inception and thus decrease the total scope. The burndown chart would incorrectly show such a scenario as a sudden increase in velocity.</p>
<p><b>Summary</b></p>
<p>Either way the burndown chart hides essential information. I propose we throw it away and show the slightly more complicated, but infinitely more useful burnup chart. After all you wouldn't want upper management thinking you were lazy in iteration six would you?</p>]]></description>
            <link>http://www.nearinfinity.com/blogs/lee_richardson/forget_burndown_use_burnup_charts.html</link>
            <guid>http://www.nearinfinity.com/blogs/lee_richardson/forget_burndown_use_burnup_charts.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Agile Development</category>
            
                <category domain="http://www.sixapart.com/ns/types#category">General</category>
            
            
            <pubDate>Thu, 23 Oct 2008 22:41:25 -0500</pubDate>
        </item>
        
    </channel>
</rss>

