<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>duncanMgunn.com - Agile</title>
    <link>http://www.duncangunn.me.uk/dasblog/</link>
    <description />
    <language>en-us</language>
    <copyright>Duncan M Gunn</copyright>
    <lastBuildDate>Thu, 08 Jan 2009 19:17:53 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.0.7226.0</generator>
    <managingEditor>dasblog@example.com</managingEditor>
    <webMaster>dasblog@example.com</webMaster>
    <item>
      <trackback:ping>http://www.duncangunn.me.uk/dasblog/Trackback.aspx?guid=ac33c59a-8e2a-4241-bbfd-c59143dcf676</trackback:ping>
      <pingback:server>http://www.duncangunn.me.uk/dasblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.duncangunn.me.uk/dasblog/PermaLink,guid,ac33c59a-8e2a-4241-bbfd-c59143dcf676.aspx</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <wfw:comment>http://www.duncangunn.me.uk/dasblog/CommentView,guid,ac33c59a-8e2a-4241-bbfd-c59143dcf676.aspx</wfw:comment>
      <wfw:commentRss>http://www.duncangunn.me.uk/dasblog/SyndicationService.asmx/GetEntryCommentsRss?guid=ac33c59a-8e2a-4241-bbfd-c59143dcf676</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Our new project is off and running, but we have hit a few snags.  Before we get
too alarmed, it is important to remember that it is Sprint 1, and if ever you're going
to hit problems this is the time to do it, so they are sorted out by the end of the
project.  Incidentally, this is what I see as one of Agile's best features -
because each sprint is considered a mini-project in its own right, we get the chance
to stand back and assess the situation before moving to the next phase of the project,
rather than just ploughing on and hoping for the best.
</p>
        <p>
Towards the end of this sprint, the burn-down seems to have flatlined - for every
hour of work that seems to get done, someone experiences a problem elsewhere
which causes production to seize up. 
</p>
        <p>
My own analysis of the situation is just that there were too many unknowns at the
beginning, and the tasks identified at the beginning of the sprint quickly became
out-dated.  This can happen on any sprint, but normally it would only affect
one area - this time it seemed to affect the majority of task lists and that's why
it's had such a dramatic effect.  
</p>
        <h3>What are the unknowns?  
</h3>
        <p>
For me, it's three things:
</p>
        <ol>
          <li>
            <strong>Developers being assigned to domains and/or codebases they are not familiar
with</strong>.  Although there is some documentation available, it is easy to
forget how complex the current system has become, even at a conceptual level. 
Sometimes with the resources available then putting developers in unfamiliar areas
can't be avoided - besides, learning is always a part of this job. 
</li>
          <li>
            <strong>Unfamiliarity with new third party controls or tools</strong>.  Until
you have looked at the control documentation in-depth and played around with it in
your sandbox, you can only take a real guess as to how you would accomplish something
with it, and therefore hazard an estimate.   Some controls might implement
the entire feature just by calling a method, in others something you would EXPECT
to be there, just isn't.  We tend to ask A LOT of our third-party controls, rarely
do we find it acceptable to use just out-the-box, so this sometimes requires communication
with the vendor support teams. 
</li>
          <li>
            <strong>Software Development in general</strong>.  I don't think there's anything
we can do about this.  It happens.  People will make the odd mistake - underestimating, overestimating, perhaps identifying
the wrong approach to a problem.  The only thing you can do is learn from it
and move on.</li>
        </ol>
        <h3>What are we going to do about it?
</h3>
        <p>
Well, if you want a highly accurate result then before we estimate <strong>ANYTHING</strong>,
we should have a good, firm understanding of <strong>EXACTLY</strong> what you'll
be doing over the next 3 weeks.  For this, you'd need to design the components
and complete any prototyping - effectively implementing the feature - before this
would be achieved.  This also is trapped in <a href="http://www.pmhut.com/letting-go-of-bduf">BDUF</a> world,
as opposed to the flexible, feature-driven delivery of the agile paradigm.
</p>
        <p>
Personally, I don't think this is the way to go.  In fact, there are <a href="http://xp123.com/xplor/xp0111a/index.shtml">a</a><a href="http://epistemologic.com/2007/05/12/estimation-considered-harmful/">couple</a> (or <a href="http://agilefun.com/?p=32">more</a>)
arguments out there that question the usefulness of task level estimation full
stop.  I'm not sure if I'd go that far, although it is an interesting argument.
</p>
        <p>
My own proposal is one that I half-introduced in my last task breakdown, but didn't
have the conviction to stick to it, although it made an appearance again in the retrospective. 
The basic idea is that you identify as many tasks as you can that you're confident
of, and estimate these as normal.  For those areas that you're unsure of - be
it the domain, an area that you know will require significant design/architecture,
or even familiarisation with a third-party control or codebase - then there should
be two 'types' of task identified: Investigation &amp; Implementation.
</p>
        <p>
Investigation tasks are brief descriptions of work that you're just unsure of, for
example "Investigate how to bind Control X to data", or "Investigate how to use this
new tool" or "Investigate the refactoring approach I need to take".  An estimate
is provided for these.  
</p>
        <p>
The Implementation task is a traditional rough guess, probably based on the story
points assigned, of how long you think it would take to implement the feature. 
A rough guess.  This differs from normal breakdown estimates as you aren't identifying
the tasks yet, and people should expect this estimate to be high-risk.
</p>
        <p>
During the sprint, when the investigation tasks have been completed, the developer
should then be at a stage where they have a much better idea what is going on. 
'Proper' Tasks can then be identified, which take the place of the Implementation
placeholder.  In addition, further Investigation tasks may be identified at this
stage, and the cycle continues.
</p>
        <h3>A Brief Example
</h3>
        <p>
          <img src="http://www.duncangunn.me.uk/dasblog/content/binary/estimate1.png" border="0" />
        </p>
        <p>
In the above example, we start with an Investigation task at 7 hours and an Implementation
task estimated at 14.  Once the first Investigation has been completed, Tasks
1, 2 and 3 will be identified and estimated with some degree of certainty, where Task
3 is another Investigation task from which Task 4 and 5 will be identified at a later
stage.  As you can see, the first Implementation estimate had delivery of the
feature within 14 hours - but the reality is it took at least 4 + 7 + 3 + 4 + 2 = 20.  A
third more than the initial estimate.  
</p>
        <p>
This gives the SCRUM-master (and other stakeholders) a much clearer visibility into
the state of the sprint.  They can tell at-a-glance where the 'red-flag' areas
are, and have confidence that when the implementation phase begins there are no more
'brick-walls' where a developer can lose days without realising it.
</p>
        <p>
          <em>
            <strong>Honesty really is the best policy, even if sometimes the truth hurts.</strong>
          </em>
        </p>
        <h3>But with this approach, how is time-boxing possible?
</h3>
        <p>
Calculating the exact number of tasks to fit into any given sprint isn't going to
happen.  The estimates will either be under or over - the key here is to be agile. 
With this approach, I would propose that no more than 50% of the tasks on the sprint
should be Must-Haves - this allows us breathing space by letting tasks of a lesser
priority slide to the next sprint, if necessary.  50% may seem like a large
margin, but the rule of thumb for planning is always to double your initial estimates
(and the very worst case scenario is that if a developer finishes early then the sprint
can be ended or more work added from the backlog)
</p>
        <p>
 
</p>
        <p>
 
</p>
        <p>
This approach also has the advantage that sprint turn-arounds are much quicker - you
really shouldn't spend more than an hour or so planning for a 2 or 3-week sprint.  
</p>
        <p>
Based on experience, I'm fairly confident the above approach could resolve a lot of
the estimation and task identification issues that we have from time-to-time. 
The important thing is that we have realised this early, and taking action to resolve
it.
</p>
        <img width="0" height="0" src="http://www.duncangunn.me.uk/dasblog/aggbug.ashx?id=ac33c59a-8e2a-4241-bbfd-c59143dcf676" />
      </body>
      <title>Sprints, Task Breakdowns and Estimation</title>
      <guid isPermaLink="false">http://www.duncangunn.me.uk/dasblog/PermaLink,guid,ac33c59a-8e2a-4241-bbfd-c59143dcf676.aspx</guid>
      <link>http://www.duncangunn.me.uk/dasblog/2009/01/08/SprintsTaskBreakdownsAndEstimation.aspx</link>
      <pubDate>Thu, 08 Jan 2009 19:17:53 GMT</pubDate>
      <description>&lt;p&gt;
Our new project is off and running, but we have hit a few snags.&amp;nbsp; Before we get
too alarmed, it is important to remember that it is Sprint 1, and if ever you're going
to hit problems this is the time to do it, so they are sorted out by the end of the
project.&amp;nbsp; Incidentally, this is what I see as one of Agile's best features -
because each sprint is considered a mini-project in its own right, we get the chance
to stand back and assess the situation before moving to the next phase of the project,
rather than just ploughing on and hoping for the best.
&lt;/p&gt;
&lt;p&gt;
Towards the end of this sprint, the burn-down seems to have flatlined -&amp;nbsp;for every
hour of work that seems to get done,&amp;nbsp;someone experiences a problem elsewhere
which causes production to&amp;nbsp;seize up.&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
My own analysis of the situation is just that there were too many unknowns at the
beginning, and the tasks identified at the beginning of the sprint quickly became
out-dated.&amp;nbsp; This can happen on any sprint, but normally it would only affect
one area - this time it seemed to affect the majority of task lists and that's why
it's had such a dramatic effect.&amp;nbsp; 
&lt;/p&gt;
&lt;h3&gt;What are the unknowns?&amp;nbsp; 
&lt;/h3&gt;
&lt;p&gt;
For me, it's three things:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Developers being assigned to domains and/or codebases they are not familiar
with&lt;/strong&gt;.&amp;nbsp; Although there is some documentation available, it is easy to
forget how complex the current system has become, even at a conceptual level.&amp;nbsp;
Sometimes with the resources available then putting developers in unfamiliar areas
can't be avoided - besides, learning is always a part of this job. 
&lt;li&gt;
&lt;strong&gt;Unfamiliarity with new third party controls or tools&lt;/strong&gt;.&amp;nbsp; Until
you have looked at the control documentation in-depth and played around with it in
your sandbox, you can only take a real guess as to how you would accomplish something
with it, and therefore hazard an estimate.&amp;nbsp;&amp;nbsp; Some controls might implement
the entire feature just by calling a method, in others something you would EXPECT
to be there, just isn't.&amp;nbsp; We tend to ask A LOT of our third-party controls, rarely
do we find it acceptable to use just out-the-box, so this sometimes requires communication
with the vendor support teams. 
&lt;li&gt;
&lt;strong&gt;Software Development in general&lt;/strong&gt;.&amp;nbsp; I don't think there's anything
we can do about this.&amp;nbsp; It happens.&amp;nbsp; People will make the odd mistake - underestimating,&amp;nbsp;overestimating,&amp;nbsp;perhaps&amp;nbsp;identifying
the wrong approach to a problem.&amp;nbsp; The only thing you can do is learn from it
and move on.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;What are we going to do about it?
&lt;/h3&gt;
&lt;p&gt;
Well, if you want a highly accurate result then before we estimate &lt;strong&gt;ANYTHING&lt;/strong&gt;,
we should have a good, firm understanding of &lt;strong&gt;EXACTLY&lt;/strong&gt; what you'll
be doing over the next 3 weeks.&amp;nbsp; For this, you'd need to design the components
and complete any prototyping - effectively implementing the feature - before this
would be achieved.&amp;nbsp; This also is trapped in &lt;a href="http://www.pmhut.com/letting-go-of-bduf"&gt;BDUF&lt;/a&gt; world,
as opposed to the flexible, feature-driven delivery of the agile paradigm.
&lt;/p&gt;
&lt;p&gt;
Personally, I don't think&amp;nbsp;this is&amp;nbsp;the way to go.&amp;nbsp; In fact, there are &lt;a href="http://xp123.com/xplor/xp0111a/index.shtml"&gt;a&lt;/a&gt; &lt;a href="http://epistemologic.com/2007/05/12/estimation-considered-harmful/"&gt;couple&lt;/a&gt; (or &lt;a href="http://agilefun.com/?p=32"&gt;more&lt;/a&gt;)
arguments out there that question the usefulness of&amp;nbsp;task level estimation&amp;nbsp;full
stop.&amp;nbsp; I'm not sure if I'd go that far, although it is an interesting argument.
&lt;/p&gt;
&lt;p&gt;
My own proposal is one that I half-introduced in my last task breakdown, but didn't
have the conviction to stick to it, although it made an appearance again in the retrospective.&amp;nbsp;
The basic idea is that you identify as many tasks as you can that you're confident
of, and estimate these as normal.&amp;nbsp; For those areas that you're unsure of -&amp;nbsp;be
it the domain, an area that you know will require significant design/architecture,
or even familiarisation with a third-party control or codebase&amp;nbsp;- then there should
be two 'types' of task identified: Investigation &amp;amp; Implementation.
&lt;/p&gt;
&lt;p&gt;
Investigation tasks are brief descriptions of work that you're just unsure of, for
example "Investigate how to bind Control X to data", or "Investigate how to use this
new tool" or "Investigate the refactoring approach I need to take".&amp;nbsp; An estimate
is provided for these.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
The Implementation task is a traditional rough guess, probably based on the story
points assigned, of how long you think it would take to implement the feature.&amp;nbsp;
A rough guess.&amp;nbsp; This differs from normal breakdown estimates as you aren't identifying
the tasks yet, and people should expect this estimate to be high-risk.
&lt;/p&gt;
&lt;p&gt;
During the sprint, when the investigation tasks have been completed, the developer
should then be at a stage where they have a much better idea what is going on.&amp;nbsp;
'Proper' Tasks can then be identified, which take the place of the Implementation
placeholder.&amp;nbsp; In addition, further Investigation tasks may be identified at this
stage, and the cycle continues.
&lt;/p&gt;
&lt;h3&gt;A Brief&amp;nbsp;Example
&lt;/h3&gt;
&lt;p&gt;
&lt;img src="http://www.duncangunn.me.uk/dasblog/content/binary/estimate1.png" border=0&gt;
&lt;/p&gt;
&lt;p&gt;
In the above example, we start with an Investigation task at 7 hours and an Implementation
task estimated at 14.&amp;nbsp; Once the first Investigation has been completed, Tasks
1, 2 and 3 will be identified and estimated with some degree of certainty, where Task
3 is another Investigation task from which Task 4 and 5 will be identified at a later
stage.&amp;nbsp; As you can see, the first Implementation estimate had delivery of the
feature within 14 hours - but the reality is it took at least 4 + 7 + 3 + 4 + 2 =&amp;nbsp;20.&amp;nbsp;&amp;nbsp;A
third more than the initial estimate.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
This gives the SCRUM-master (and other stakeholders) a much clearer visibility into
the state of the sprint.&amp;nbsp; They can tell at-a-glance where the 'red-flag' areas
are, and have confidence that when the implementation phase begins there are no more
'brick-walls' where a developer can lose days without realising it.
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;&lt;strong&gt;Honesty really is the best policy, even if sometimes the truth hurts.&lt;/strong&gt;&lt;/em&gt;
&lt;/p&gt;
&lt;h3&gt;But with this approach, how is time-boxing possible?
&lt;/h3&gt;
&lt;p&gt;
Calculating the exact number of tasks to fit into any given sprint isn't going to
happen.&amp;nbsp; The estimates will either be under or over - the key here is to be agile.&amp;nbsp;
With this approach, I would propose that no more than 50% of the tasks on the sprint
should be Must-Haves - this allows us breathing space by letting tasks of a lesser
priority slide to the next sprint, if necessary.&amp;nbsp; 50% may seem like&amp;nbsp;a large
margin, but the rule of thumb for planning is always to double your initial estimates
(and the very worst case scenario is that if a developer finishes early then the sprint
can be ended or more work added from the backlog)
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
This approach also has the advantage that sprint turn-arounds are much quicker - you
really shouldn't spend more than an hour or so planning for a 2 or 3-week sprint.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
Based on experience, I'm fairly confident the above approach could resolve a lot of
the estimation and task identification issues that we have from time-to-time.&amp;nbsp;
The important thing is that we have realised this early, and taking action to resolve
it.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.duncangunn.me.uk/dasblog/aggbug.ashx?id=ac33c59a-8e2a-4241-bbfd-c59143dcf676" /&gt;</description>
      <comments>http://www.duncangunn.me.uk/dasblog/CommentView,guid,ac33c59a-8e2a-4241-bbfd-c59143dcf676.aspx</comments>
      <category>Agile</category>
    </item>
    <item>
      <trackback:ping>http://www.duncangunn.me.uk/dasblog/Trackback.aspx?guid=a75d75ff-0608-4e77-abd4-f2dc5c9210f2</trackback:ping>
      <pingback:server>http://www.duncangunn.me.uk/dasblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.duncangunn.me.uk/dasblog/PermaLink,guid,a75d75ff-0608-4e77-abd4-f2dc5c9210f2.aspx</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <wfw:comment>http://www.duncangunn.me.uk/dasblog/CommentView,guid,a75d75ff-0608-4e77-abd4-f2dc5c9210f2.aspx</wfw:comment>
      <wfw:commentRss>http://www.duncangunn.me.uk/dasblog/SyndicationService.asmx/GetEntryCommentsRss?guid=a75d75ff-0608-4e77-abd4-f2dc5c9210f2</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
There's a buzz about starting a new project.  A clean slate, the chance to do
implement all the new ideas you have - and most importantly for me - <em>the chance
to do it THE RIGHT WAY - </em>to put into practice all the things you've learned from
your last work.
</p>
        <p>
Software construction is sometimes compared to construction of other 'real-world'
projects - whether it be building a house or even installing a new kitchen or bathroom. 
There is a tendency for people to think "well, a plumber can look at a job and know
that it'll take him 2 days - why can't software engineers do the same?".  
</p>
        <p>
The problem here is that no two projects are ever the same, and even then the tools
that we use change all the time.  Imagine the same plumber asked to estimate
a job, but this time the laws of physics have changed and water now flows up instead
of down, and he's got to use his tools in his left hand instead of his right this
time.
</p>
        <h4>
          <font color="#0000ff" size="2">Getting the Requirements</font>
        </h4>
        <p>
So the way I see it, and the way Agile sees it, is to first of all deliver the requirements
in the form of FEATURES, which are mini-stories of what the user is trying to achieve. 
It's then a case of getting a gut-feel for these features and putting down a relative
sizing for each.  If the story is too big, it's further broken down and so on. 
But we're still no closer to giving an estimate in terms of hours yet.
</p>
        <p>
My own opinion is this is fine, but the project managers have to be very forgiving
of any figures we supply here.  Mainly it's because the stories are still far
too lacking in any detail whatsoever (that is half the point!) - but that really doesn't
help when you're being asked for an estimate.
</p>
        <p>
The approach I have taken with this project is UI-First.  If it's good enough
for <a href="http://gettingreal.37signals.com/ch09_Interface_First.php">37signals</a> then
it's going to work for me. 
</p>
        <p>
But how to liaise with the customer, especially one who, and no disrespect is intended
here, can't visualise a software system outside of Excel, Word and a couple of company-specific
applications?  
</p>
        <p>
I tried <a href="http://en.wikipedia.org/wiki/Paper_prototyping">Paper Prototyping</a>. 
But I could tell that the customer was struggling with this, and it was definitely
running the risk of missed/erroneous requirements.  You know, this old chestnut:
</p>
        <p>
 
</p>
        <p>
          <img src="http://www.duncangunn.me.uk/dasblog/content/binary/requirements_toon.gif" border="0" />
        </p>
        <p>
 
</p>
        <h5>
          <font color="#0000ff">Prototyping</font>
        </h5>
        <p>
So I switched instead to actually building a workable, clickable, hands-on prototype
of the <a href="http://www.duncangunn.me.uk/readingsprototype/default.aspx">application</a>. 
The customer was instantly able to see what their end product would look like, and
came back with several new or modified requirements that they were previously unable
to visualise.  It also had the added bonus of allowing me to familiarise myself
with the UI controls that I would be using, which saves time when I come to fully
implement this software.
</p>
        <p>
Okay, so Joel <a href="http://www.joelonsoftware.com/news/20030516.html">doesn't like
it</a>.  Or at least he didn't (that article was a while ago now).  But
I would argue the case that I'd never have someone work on a whole week prototyping
ONE feature.   
</p>
        <p>
But the way I see it, you don't have to prototype EVERYTHING.  It's not a replacement
for sitting down and conversing with your end-users.  Put placeholder screenshots
in place of complex dialogs, hard-code sample data values.  It has to be robust
enough not to fall over often, but user input should be limited anyway, so there aren't
that many cases this should happen.  Having said that, my particular prototype
for this app is probably quite brittle, but that's only because it is being demonstrated
in a very controlled manner.
</p>
        <p>
Now, from start to finish, that took me 8 hours.  ONE day.  Admittedly,
it's only a handful of screens, but that included the time to design the UI and basic
data model.  I'm 100% positive that I've saved time in the long run - all it
takes is for ONE feature to be misunderstood and you've got a disgruntled user. 
It doesn't matter that they haven't given you all the right information - <strong>IT'S
THE DESIGNER THAT HASN'T ASKED THE RIGHT QUESTIONS</strong>.
</p>
        <p>
And In addition, I can now more accurately guage my estimates.  I'll be
posting a breakdown of these features soon, using the Agile/Function Points technique
that I've outlined in an earlier post.
</p>
        <p>
 
</p>
        <p>
 
</p>
        <p>
 
</p>
        <p>
 
</p>
        <img width="0" height="0" src="http://www.duncangunn.me.uk/dasblog/aggbug.ashx?id=a75d75ff-0608-4e77-abd4-f2dc5c9210f2" />
      </body>
      <title>New Project - Estimation and Requirements Gathering</title>
      <guid isPermaLink="false">http://www.duncangunn.me.uk/dasblog/PermaLink,guid,a75d75ff-0608-4e77-abd4-f2dc5c9210f2.aspx</guid>
      <link>http://www.duncangunn.me.uk/dasblog/2008/06/14/NewProjectEstimationAndRequirementsGathering.aspx</link>
      <pubDate>Sat, 14 Jun 2008 12:59:30 GMT</pubDate>
      <description>&lt;p&gt;
There's a buzz about starting a new project.&amp;nbsp; A clean slate, the chance to do
implement all the new ideas you have - and most importantly for me - &lt;em&gt;the chance
to do it THE RIGHT WAY - &lt;/em&gt;to put into practice all the things you've learned from
your last work.
&lt;/p&gt;
&lt;p&gt;
Software construction is sometimes compared to construction of other 'real-world'
projects - whether it be building a house or even installing a new kitchen or bathroom.&amp;nbsp;
There is a tendency for people to think "well, a plumber can look at a job and know
that it'll take him 2 days - why can't software engineers do the same?".&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
The problem here is that no two projects are ever the same, and even then the tools
that we use change all the time.&amp;nbsp; Imagine the same plumber asked to estimate
a job, but this time the laws of physics have changed and water now flows up instead
of down, and he's got to use his tools in his left hand instead of his right this
time.
&lt;/p&gt;
&lt;h4&gt;&lt;font color=#0000ff size=2&gt;Getting the Requirements&lt;/font&gt;
&lt;/h4&gt;
&lt;p&gt;
So the way I see it, and the way Agile sees it, is to first of all deliver the requirements
in the form of FEATURES, which are mini-stories of what the user is trying to achieve.&amp;nbsp;
It's then a case of getting a gut-feel for these features and putting down a relative
sizing for each.&amp;nbsp; If the story is too big, it's further broken down and so on.&amp;nbsp;
But we're still no closer to giving an estimate in terms of hours yet.
&lt;/p&gt;
&lt;p&gt;
My own opinion is this is fine, but the project managers have to be very forgiving
of any figures we supply here.&amp;nbsp; Mainly it's because the stories are still far
too lacking in any detail whatsoever (that is half the point!) - but that really doesn't
help when you're being asked for an estimate.
&lt;/p&gt;
&lt;p&gt;
The approach I have taken with this project is UI-First.&amp;nbsp; If it's good enough
for &lt;a href="http://gettingreal.37signals.com/ch09_Interface_First.php"&gt;37signals&lt;/a&gt; then
it's going to work for me.&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
But how to liaise with the customer, especially one who, and no disrespect is intended
here, can't visualise a software system outside of Excel, Word and a couple of company-specific
applications?&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
I tried &lt;a href="http://en.wikipedia.org/wiki/Paper_prototyping"&gt;Paper Prototyping&lt;/a&gt;.&amp;nbsp;
But I could tell that the customer was struggling with this, and it was definitely
running the risk of missed/erroneous requirements.&amp;nbsp; You know, this old chestnut:
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.duncangunn.me.uk/dasblog/content/binary/requirements_toon.gif" border=0&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;h5&gt;&lt;font color=#0000ff&gt;Prototyping&lt;/font&gt;
&lt;/h5&gt;
&lt;p&gt;
So I switched instead to actually building a workable, clickable, hands-on prototype
of the &lt;a href="http://www.duncangunn.me.uk/readingsprototype/default.aspx"&gt;application&lt;/a&gt;.&amp;nbsp;
The customer was instantly able to see what their end product would look like, and
came back with several new or modified requirements that they were previously unable
to visualise.&amp;nbsp; It also had the added bonus of allowing me to familiarise myself
with the UI controls that I would be using, which saves time when I come to fully
implement this software.
&lt;/p&gt;
&lt;p&gt;
Okay, so Joel &lt;a href="http://www.joelonsoftware.com/news/20030516.html"&gt;doesn't like
it&lt;/a&gt;.&amp;nbsp; Or at least he didn't (that article was a while ago now).&amp;nbsp; But
I would argue the case that I'd never have someone work on a whole week prototyping
ONE feature.&amp;nbsp;&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
But the way I see it, you don't have to prototype EVERYTHING.&amp;nbsp; It's not a replacement
for sitting down and conversing with your end-users.&amp;nbsp; Put placeholder screenshots
in place of complex dialogs, hard-code sample data values.&amp;nbsp; It has to be robust
enough not to fall over often, but user input should be limited anyway, so there aren't
that many cases this should happen.&amp;nbsp; Having said that, my particular prototype
for this app is probably quite brittle, but that's only because it is being demonstrated
in a very controlled manner.
&lt;/p&gt;
&lt;p&gt;
Now, from start to finish, that took me 8 hours.&amp;nbsp; ONE day.&amp;nbsp; Admittedly,
it's only a handful of screens, but that included the time to design the UI and basic
data model.&amp;nbsp; I'm 100% positive that I've saved time in the long run - all it
takes is for ONE feature to be misunderstood and you've got a disgruntled user.&amp;nbsp;
It doesn't matter that they haven't given you all the right information - &lt;strong&gt;IT'S
THE DESIGNER THAT HASN'T ASKED THE RIGHT QUESTIONS&lt;/strong&gt;.
&lt;/p&gt;
&lt;p&gt;
And In addition, I can now more accurately guage my estimates.&amp;nbsp; I'll&amp;nbsp;be
posting a breakdown of these features soon, using the Agile/Function Points technique
that I've outlined in an earlier post.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.duncangunn.me.uk/dasblog/aggbug.ashx?id=a75d75ff-0608-4e77-abd4-f2dc5c9210f2" /&gt;</description>
      <comments>http://www.duncangunn.me.uk/dasblog/CommentView,guid,a75d75ff-0608-4e77-abd4-f2dc5c9210f2.aspx</comments>
      <category>Agile</category>
    </item>
    <item>
      <trackback:ping>http://www.duncangunn.me.uk/dasblog/Trackback.aspx?guid=9294475e-f19f-449a-9fd5-2d69f76d71bb</trackback:ping>
      <pingback:server>http://www.duncangunn.me.uk/dasblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.duncangunn.me.uk/dasblog/PermaLink,guid,9294475e-f19f-449a-9fd5-2d69f76d71bb.aspx</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <wfw:comment>http://www.duncangunn.me.uk/dasblog/CommentView,guid,9294475e-f19f-449a-9fd5-2d69f76d71bb.aspx</wfw:comment>
      <wfw:commentRss>http://www.duncangunn.me.uk/dasblog/SyndicationService.asmx/GetEntryCommentsRss?guid=9294475e-f19f-449a-9fd5-2d69f76d71bb</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
So it's Estimation time again.  We've been using the Agile methodology for our
project management for well over a year now, and while I think it's dramatically better
than the waterfall model we had before, I can't help but think we've still to get
it right in terms of estimation.
</p>
        <p>
          <img src="http://www.duncangunn.me.uk/dasblog/content/binary/riddler.jpg" border="0" />
        </p>
        <p>
Our estimation technique involves the traditional agile approach of using Story Points,
and comparing each Backlog Feature to eachother, and deciding on a relative size. 
So, if I think that one story is worthy of size 10, but then I get a gut-feeling that
another story will take twice as long to complete, then that story would be sized
at 20.
</p>
        <p>
Once you agree on how many Story Points you can achieve in a given cycle (Sprint,
to use the terminology), you can select your immediate workload.
</p>
        <p>
Fair enough, estimation is never going to be an exact science.  But I've got
that feeling we can be a bit more accurate, or at the very least give <em>reasons</em> for
our figures rather than just a shrug of the shoulders and a "sounds good to me" stare.
</p>
        <h3>Function Point Analysis
</h3>
        <p>
I've given Function Point Analysis a whirl before.  And it's probably best filed
under "Learning Experiences".  Not the best effort, but then I was fresh out
of uni and the spec was incomplete, so that's understandable.  Also, I think
we were trying to fly before we could crawl.... which is where maybe merging this
approach with that of Agile's flexibility might, I repeat, might work.
</p>
        <p>
Another slight criticism of Agile I have is that it's really really really hard to
try and estimate how big a task is when all you've got to go on is a sentence from
a product backlog.  No spec, no prototype, no nothing.  Okay, so you've
got a bit of domain understanding and there's always people you can speak to beforehand
to give you a picture as to what's involved, but until you've actually built a picture
in your head in terms of Objects, I/O, UI etc.... it's all a bit 'up in the air'. 
Admittedly, as is my current understanding, this is okay, and your estimations will
get better as the project begins to take shape... but if we performed FPA on each
feature then you would need to know, <em>in advance</em>, the following:
</p>
        <ul>
          <li>
Internal Logical Files 
</li>
          <li>
External Files 
</li>
          <li>
External Inputs 
</li>
          <li>
External Outputs 
</li>
          <li>
Queries</li>
        </ul>
        <p>
As well as the Value Adjustment Factor based on general system characteristics of
the project, this would give some quantitative measurement of what is to be delivered. 
And it has proof!  You can go back to someone's estimates and actually find out
why Feature A came out as twice as complex as Feature B.  
</p>
        <h3>Agile Function Points
</h3>
        <p>
So, this output then is just treated as Story Points are by Agile, in that x number
of story points can be delivered in a week, and velocity can be used to guage future
performance.
</p>
        <p>
What the engineers are saying is, "look, we don't need a full functional spec and
UI screenshots describing exactly how everything will work, but all we need to know
is 1) What's coming in, 2) What's going out and 3) How much user interaction is there
going to be?".  And the goal donors can say "Okay, so we've not told you exactly
how we want it done, but we've given you enough information to go on that you can't
come back to us in a month and say that the database schema has doubled in size".
</p>
        <p>
And that seems like a decent compromise to me.  
</p>
        <p>
 
</p>
        <img width="0" height="0" src="http://www.duncangunn.me.uk/dasblog/aggbug.ashx?id=9294475e-f19f-449a-9fd5-2d69f76d71bb" />
      </body>
      <title>Software Estimation with Agile: Can Function Points help?</title>
      <guid isPermaLink="false">http://www.duncangunn.me.uk/dasblog/PermaLink,guid,9294475e-f19f-449a-9fd5-2d69f76d71bb.aspx</guid>
      <link>http://www.duncangunn.me.uk/dasblog/2008/03/17/SoftwareEstimationWithAgileCanFunctionPointsHelp.aspx</link>
      <pubDate>Mon, 17 Mar 2008 19:57:08 GMT</pubDate>
      <description>&lt;p&gt;
So it's Estimation time again.&amp;nbsp; We've been using the Agile methodology for our
project management for well over a year now, and while I think it's dramatically better
than the waterfall model we had before, I can't help but think we've still to get
it right in terms of estimation.
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.duncangunn.me.uk/dasblog/content/binary/riddler.jpg" border=0&gt;
&lt;/p&gt;
&lt;p&gt;
Our estimation technique involves the traditional agile approach of using Story Points,
and comparing each Backlog Feature to eachother, and deciding on a relative size.&amp;nbsp;
So, if I think that one story is worthy of size 10, but then I get a gut-feeling that
another story will take twice as long to complete, then that story would be sized
at 20.
&lt;/p&gt;
&lt;p&gt;
Once you agree on how many Story Points you can achieve in a given cycle&amp;nbsp;(Sprint,
to use the terminology), you can select your immediate workload.
&lt;/p&gt;
&lt;p&gt;
Fair enough, estimation is never going to be an exact science.&amp;nbsp; But I've got
that feeling we can be a bit more accurate, or at the very least give &lt;em&gt;reasons&lt;/em&gt; for
our figures rather than just a shrug of the shoulders and a "sounds good to me" stare.
&lt;/p&gt;
&lt;h3&gt;Function Point Analysis
&lt;/h3&gt;
&lt;p&gt;
I've given Function Point Analysis a whirl before.&amp;nbsp; And it's probably best filed
under "Learning Experiences".&amp;nbsp; Not the best effort, but then I was fresh out
of uni and the spec was incomplete, so that's understandable.&amp;nbsp; Also, I think
we were trying to fly before we could crawl.... which is where maybe merging this
approach with that of Agile's flexibility might, I repeat, might work.
&lt;/p&gt;
&lt;p&gt;
Another slight criticism of Agile I have is that it's really really really hard to
try and estimate how big a task is when all you've got to go on is a sentence from
a product backlog.&amp;nbsp; No spec, no prototype, no nothing.&amp;nbsp; Okay, so you've
got a bit of domain understanding and there's always people you can speak to beforehand
to give you a picture as to what's involved, but until you've actually built a picture
in your head in terms of Objects, I/O, UI etc.... it's all a bit 'up in the air'.&amp;nbsp;
Admittedly, as is my current understanding, this is okay, and your estimations will
get better as the project begins to take shape... but if we performed FPA on each
feature then you would need to know, &lt;em&gt;in advance&lt;/em&gt;, the following:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Internal Logical Files 
&lt;li&gt;
External Files 
&lt;li&gt;
External Inputs 
&lt;li&gt;
External Outputs 
&lt;li&gt;
Queries&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
As well as the Value Adjustment Factor based on general system characteristics of
the project, this would give some quantitative measurement of what is to be delivered.&amp;nbsp;
And it has proof!&amp;nbsp; You can go back to someone's estimates and actually find out
why Feature A came out as twice as complex as Feature B.&amp;nbsp; 
&lt;/p&gt;
&lt;h3&gt;Agile Function Points
&lt;/h3&gt;
&lt;p&gt;
So, this output then is just treated as Story Points are by Agile, in that x number
of story points can be delivered in a week, and velocity can be used to guage future
performance.
&lt;/p&gt;
&lt;p&gt;
What the engineers are saying is, "look, we don't need a full functional spec and
UI screenshots describing exactly how everything will work, but all we need to know
is 1) What's coming in, 2) What's going out and 3) How much user interaction is there
going to be?".&amp;nbsp; And the goal donors can say "Okay, so we've not told you exactly
how we want it done, but we've given you enough information to go on that you can't
come back to us in a month and say that the database schema has doubled in size".
&lt;/p&gt;
&lt;p&gt;
And that seems like a decent compromise to me.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.duncangunn.me.uk/dasblog/aggbug.ashx?id=9294475e-f19f-449a-9fd5-2d69f76d71bb" /&gt;</description>
      <comments>http://www.duncangunn.me.uk/dasblog/CommentView,guid,9294475e-f19f-449a-9fd5-2d69f76d71bb.aspx</comments>
      <category>Agile</category>
    </item>
  </channel>
</rss>