Story estimation on Agile teams

Story estimation is an important part of the Agile process where the developers on the team get to vote on the level of effort required to implement a story. Here are some guidelines, in the form of Q&A, that I have used on my teams. These are meant for a practitioner of the technique, some body who is conversant with the basic mechanics of estimation. There are some good books on estimation which should be referred to, if you are beginner.

Q: Who should be involved in an estimation session?
A: Primarily the developers and business/product owners. If the stories are UI intensive, it is always a good idea to involve the UX owners too. People with purely managerial responsibilities should not be present, as it could put pressure on the developers to throw lower estimates.

Q: Should all developers on the team participate in the estimation session?
A: Yes, everyone should be present at estimation for a decent sized team (3-4 pairs). An anti-pattern would be to pick people, who have worked or have the most context on the story to be estimated contributing to siloing of information. Having everyone present, helps the team to realize if the knowledge is not being shared around enough. Also if people who have no context, end up working on the story, it could lead to a bad estimate. Estimation requires the developers to throw a number and hence keeps them fully engaged and leads to better understanding of the story and the application as a whole. Estimation is also a time to spread awareness about technical debt surrounding the story. It is also a quick way to get acquainted with unknown parts of the application and the system/technical landscape. Certain implementation decisions are also made/communicated at estimation time.

Q: Should stories be completely fleshed out before estimation?
A: They should be fleshed out so as to give the developers enough context to estimate the level of effort. Having product/business owners at the estimation helps to answer questions or concerns that the developers have during estimation. Better story narratives lead to better estimates and better assumptions.

Q: Should stories be time-boxed?
A: Absolutely, time boxing of stories is very important. Developers tend to discuss technical issues in detail during estimation. This is ok if the story is straight-forward but if the discussion goes on for too long it is a waste of everyone’s valuable time: developers and the business. A rough guideline would be to limit the story discussion to 8 minutes. The business/product owner starts by explaining the business case for the story and the scope. At the end of the time limit, if the developers feel they do not have enough information to estimate the story, the discussion should continue for another minute. If the story still cannot be estimated, it could be because the team does not understand the business domain well enough or there are technical concerns. If it is the earlier case, then separate workshops could be held for the developers by the business to provide an overview of the business domain. If there are technical issues, then the team should decide on 2 possible options: one, a pair should do tech analysis for the story or do technical spike and then estimate it at the next estimation session. Tech analysis is where a pair of developers attempt to answer all the outstanding questions, technical or business related. This may involve coming up with a technical solution, analyzing external dependencies like data ingestion, database schema creation, services, etc. Technical spike goes one step further and involves writing code to prove technical feasibility of the solution, when using new technologies or to understand the performance implications of the solution. It is important the pair records the outcome of the analysis or spike on the card itself, for it to be referred to, at the next estimation session. The 8 minute time limit generally works for most stories, but it could be adjusted based on the team feedback.

Q: Should every story be tech analyzed before it is estimated?
A: If you notice a trend that every story ends up being a long technical discussion or exceeding the time limit, then it makes sense to do it before hand so as to save everyone’s time.

Q: Where should estimation assumptions be captured?
A: Estimation assumptions should be explicitly noted on the story card. A change in story assumptions can potentially lead to re-estimation of the story. Story assumptions include notes about external dependencies and significant technical implementation details like system should display real-time data as opposed to cached.

Q: Should technical debt surrounding a story be factored into the estimate?
A: Yes, it should be. In fact, it is the best possible way to tackle technical debt on the project. Two arguments can be made in favor of it: the code in that area will be touched, might as well make it better. Second, it would make it easy to build on top of the code in the future. The extent of technical debt should be investigated by doing some tech analysis. The outcome of the tech analysis should be the scope of the technical debt that would be dealt with, as a part of the story. This can be a slippery slope and care should be taken to not add too much technical scope outside the realms of the story in consideration.

Q: Should testing efforts be included in the estimate of a story?
A: For run-of-the-mill stories, the estimate should not account for the testing efforts, be it manual/QA testing or automated testing done by developers. There should be a testing strategy in place and all the stories should more or less follow those patterns so that the estimates are evened out for an iteration. If new testing strategy gets introduced that negatively affects the velocity, then appropriate expectations should be set with the team and management rather than polluting the estimates. But for stories that require an exceptional amount of testing effort, it should be factored in.

Q: Should stories be ever re-estimated?
A: Stories should be re-estimated only in exceptional cases like changes in team, architecture, scope and assumptions.

Q: Should different versions of the story be estimated? Different UI look and feel? different implementations – service vs local database?
A: This is a tricky one. One one hand, it gives the business/UX a great feedback on the different options and the associated cost. But it can also be a source of confusion and a potential waste of valuable developer time. If this happens too often, then the business needs to be made aware of the time spent on the estimation, and if it is worth it. One way to tackle this could be to estimate different variants separately and then add them up to get a feel for the effort. But in the end, the story should be estimated holistically.

Q: Should bugs be estimated?
A: Bugs should not be estimated, since they are misunderstood/unfulfilled expectations whose effort have already been accounted for. They should be given the smallest possible estimate to account for the time spent analyzing the root cause and not necessarily the time to fix it.

Q: Should chores/tech debt be estimated?
A: Chore cards or Tech Debt cards should be absolutely estimated. Making them go through a rigorous estimation process helps the primary beneficiary enunciate clearly the requirements and also an idea of, if the cost is worth the effort.

Q: Should stories be broken down during estimation?
A: Yes, if it makes sense. Smaller stories are much easier to be developed and tested. There is a business tendency to lump stories together since they wish to deliver the entire chunk of work in the same iteration but the counter argument could be that since stories have been broken into pieces they could be played in parallel. If the story gets broken down, the story should not be estimated until the story is completely fleshed out.

Q: How early or late should estimation be done before a story gets played?
A: The estimation should be done typically an iteration or two before the scheduled iteration. Things change fast on Agile teams so if stories are estimated too much in advance, there is a possibility they might have to be re-estimated. Doing it just in time means people on the team have the context fresh in their heads when the story is played. Doing it before the iteration starts, gives the business an opportunity to not play a story if they feel the benefit is not worth the effort.

Q: How often should the estimation sessions be held in an iteration? Should there be ad hoc estimation sessions?
A: The estimation sessions should be held twice every iteration on specific days of the week, typically right after lunch. This sets a natural rhythm for the team and also the discipline of doing tech analysis is rigorously followed the day before or the morning of the estimation. Ad hoc estimation sessions should be avoided and should be held only under exceptional circumstances since any kind of meeting disrupts the rhythm of the team.

Q: How many stories should be estimated before an iteration begins?
A: More than what could possibly fit in an iteration. Firstly, it gives the business an opportunity to adjust the scheduling of a story based on the estimate and secondly if the team runs out of stories mid-iteration, there are buffer stories. If a story does not get played for a scheduled iteration, it could be played in a later iteration provided not much has changed in terms of team, architecture, scope and assumptions.

Q: Can a story be changed after estimation?
A: Only in exceptional cases. If the changes do no affect the estimate(approved by team or team representative), it is ok, else the story should be re-estimated.

Q: Can estimates for a story be used for a different team?
A: Estimates are contextual and always unique to a team. They cannot be enforced upon a different team. The estimates are made by a certain group of people who have certain knowledge of the application and the code base.


Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s