How to improve your project estimates? – Part 1

Regardless of your position and company, you’re quite often requested to provide estimates for the work you need to do. Providing an accurate estimate is definitely a tough task but there are ways to improve your chances to get closer to the actual time spent to develop the work.

For time estimation, we can categorize the estimation techniques in two groups: absolute and relative. Absolute estimation is the more traditional way where you provide a quantified value according to a specific unit, for instance, 16 hours, 2 days, a week. Relative estimation turned out to be quite common too and focus on comparing the sizes of two or more tasks by abstracting the unit itself. Story points and T-shirt sizes are usual examples of relative estimation approaches. In this post, we’ll be focusing more on absolute estimates. Relative ones will be covered in a future post.

Regardless of the estimation approach you decide to follow, there are a few common mistakes you should try to avoid:

  1. Provide estimate without knowing the scope: Usually, people are pushed to provide estimates without understanding what they are supposed to do. If you’re estimating stories or tasks, make sure you’re able, based on the acceptance criteria and/or description, start developing that piece of work right away. If you cannot do that, ask for more explanation, discuss more with the PO or with the team.
  2. Be the only person weighing in on an estimate: If the estimate process takes into account the opinion exclusively of the assignee, it’s likely that few factors will not be considered in the estimate. Challenging someone’s estimate is simple and effective to make sure that different variables were analyzed when providing the ‘magical’ number.
  3. Be restrict to the coding effort: Developers will probably take into account only the time to write the code and build it. If you ask a QA analyst for an estimate, they will probably consider only the time to start validating and provide test results. None of them are to be blamed. They are just reacting to the environment and the kind of activities they are expected to perform. Unless you have an explicit list of expected checks/activities to be performed, usually referred as Definition of Done (DoD), your team will not have a consistent and common understanding about what’s provided when something is marked as Done.
  4. Be afraid of saying ‘I don’t know’: Saying ‘no’ or ‘I don’t know’ is usually seen as a sign of weakness or lack of experience. If your team is saying that, you’re blessed! Don’t judge them! Realize that’s an indication that they are being honest and that additional work may need to be done before an estimate can be provided. In those scenarios, you could 1) have more discussion to try to clarify the work or 2) create spikes (or Proof of Concept – PoC) stories/tasks to build the knowledge and reduce the risks of unrealistic estimates.

Absolute estimating

Without taking sides (absolute vs. relative), there are ways to improve your chances to come up with a realistic (or at least kind of). See below two techniques used for absolute time estimates:

  1. PERT (stands for Program Evaluation and Review Technique): Instead of providing one single value and stick to it, PERT requires the estimator to provide three values considering three different scenarios: pessimistic, most likely and optimistic. Those three values are included in a weighted average assuming weight = 4 for the most likely estimate. Optimistic estimates can, for instance, consider that some dependencies will be provided right away, while pessimistic ones can assume some risks will become true and will inflate the work to be done. The PERT formula is as follows: P = (O + 4*M + P) / 6.  Adding one or two standard deviations can give you an extra cushion for unknowns. More details about how to calculate the standard deviation you can find here. By using PERT, you’re explicitly thinking about other scenarios and that exercise will help you to improve your estimates.
  2. Analogous estimation: This technique relies on estimates of past similar tasks to size a piece of work. Historical information is used and the differences between the past and current work are discussed with the team to come up with the estimate. Even though this can a useful technique, there are two aspects to keep in mind:
    1. Software development tasks are hard to be similar: While engineering activities (like building or painting a wall) can be quite similar from project to project, software tasks can look similar but may end up being quite different depending on the environment and the assignee.
    2. The time required to find a similar task: Depending on the amount of historical information, finding a similar task can lead to a waste of time. If using analogous estimation will slow down considerably your process, it’s an indication that it may not be a good fit. Remember that unconsciously everybody will end up using their previous experiences to estimate the work.

An elementary mistake is to consider effort = duration. If you estimate the effort in days and use that as the task duration, you’re unrealistically assuming 100% of allocation with no room for attending meetings, resting, reading e-mails and so on. A decent strategy (even though it requires more management work) is to consider a percentage (you could start with 75%, for instance) and tweak it for each team member depending on the average actual hours worked. That percentage will be tightly coupled with the environment and the internal processes of the company. The leaner and the more agile your company is, the higher that percentage will be.

In the next post, we’ll cover relative estimating and the different techniques to improve it.

 

Is your Daily Scrum effective?

If you have adopted Scrum for some time, you have probably worked in a team that has pushed back to have Daily Scrums or that haven’t seen much value in doing so. There are few common reasons that could lead to that situation:

  1. The team sees the Daily Scrum as a daily report to the Scrum Master or another member who attends the meeting
  2. The level of details is not properly set (too many details or too superficial and generic comments)
  3. The team believes they already talk during the day and don’t see a reason to have a formal event for that
  4. and many other reasons…

Those issues can be managed individually by showing the actual value of that Scrum ceremony. However, even if they bought in the idea, how do you know if your meeting is being effective? How do you know that you’re getting practical value from that theory?

Being effective is all about meeting its goals and IMHO the goals of a Daily Scrum should be:

  1. Setting (or adjusting) direction
  2. Understanding how the team is doing to meet the Sprint goals
  3. Understand where we want to be when we meet again

When attending the last TriAgile event, there were sessions and discussions about how to make Daily Scrums more effective. An interesting outcome from that day was the idea of slightly changing the 3 Daily Scrum questions to focus more on what can get done until the team meets again. According to the Scrum Guide, these are the 3 Daily Scrum questions:

  • What did I do yesterday that helped the Development Team meet the Sprint Goal?
  • What will I do today to help the Development Team meet the Sprint Goal?
  • Do I see any impediment that prevents me or the Development Team from meeting the Sprint Goal?

Although these questions help on understanding what was done and what is planned to be done, it does not set short-term (1 day) commitments for each member to pursue and to get things done. You can easily say what you’ll do until tomorrow and have nothing actually done by tomorrow. What if instead of saying what you will work on you said what you’ll get done by tomorrow? It’s not about sharing what you’ll do. It’s about sharing which small increment of value you’ll be completing until the next meeting. With something simple like that you can change the perception of Daily Scrums from ‘reporting/planning’ to ‘achieving’. That will also force your team to have smaller tasks that can be done in a day or so.

Having said that, see below the suggested questions to make your Daily Scrum more effective:

  • What did I say yesterday I would get done to help Development Team meet the Sprint Goal?
  • What will I get done today to help the Development Team meet the Sprint Goal?
  • Do I see any impediment that prevents me or the Development Team from meeting the Sprint Goal?

Give it a try and share your experience!

Should I plan future Sprints?

I’d like to cover one topic that may be a little controversial among managers or agile practitioners: whether planning sprints in advance is acceptable or not in a Scrum project. Should I plan only the Sprint my team will start or should I plan future Sprints?

Being agile is about identifying and reacting to problems as soon as possible. The three pillars of a Scrum project emphasize how to do that by inspecting, adapting and being transparent during the Scrum events. However, there is no Scrum event to go beyond the planning of the current Sprint. This is why the most purist people don’t plan future Sprints.

Even though Scrum guide does not mention this, positive results may be realized when planning more Sprints in advance. These are some benefits of doing that:

  1. Anticipate problems that require immediate actions
  2. Increase likelihood of meeting external milestones (i.e. those that do not depend on or cannot be controlled by Scrum team)
  3. Identify need of hiring new people for the team

However, how can this be done without impacts (or with minimum impacts) in the current sprint, since team members should be focused on developing the scope of the Sprint?

Slightly change Backlog grooming sessions can be a good alternative. During grooming sessions the Scrum team and the Product Owner discuss about the Product Backlog with a clear goal: finish the meeting with an improved Backlog. The definition of “improved backlog” can vary from team to team, but usually attendees focus on detailing more the user stories and their acceptance criteria. However, these sessions can also be used to create sub-tasks, to estimate and to assign them.

With a Backlog with sub-tasks and their estimates, the Scrum Master can distribute Product Backlog items in the future sprints, based on the Product Owner prioritization. Having done that, it is possible to check if some milestones look feasible, if people are over-allocated, which may require hiring new people to meet some dates and features, and so on. In addition to this, having 1:1 meetings between the Scrum Master and each team member, once a Sprint for 30-60 minutes, to review estimations and assignments improve the accuracy of the Backlog. This would require an additional effort for the Scrum Master of about 8 hours / sprint, considering a 8-member team, as well as a total of 8 hours when summing up 1 hour of each member. This can be an important practice to mitigate risks.

Important: What is planned for future sprints is not a commitment. A Scrum team can only commit to a Sprint goal after the Sprint Planning.