Estimating Effort
Traditionally absolute duration measures – such as person hours – are used to estimate tasks. Agile approaches generally apply relative measures, especially for large work items such as epics, use cases, and larger user stories. When estimating smaller work items of a duration of a few hours, it is still common to use person-hours. The reasoning is that it is difficult to accurately estimate weeks- or months-duration work items, but there is better accuracy in estimating small work items of 1–4 hours.
There are a number of means by which effort can be estimated, but the one we will discuss in this recipe is called planning poker. This is a cooperative game-like approach to converge on a relative duration measure for a set of work items.
Purpose
The purpose of effort estimation is to understand the amount of effort required to complete a work item. This may be expressed in absolute or relative terms, with relative terms preferred for larger work items.
Inputs and preconditions
A backlog of work items for estimation.
Outputs and postconditions
The primary outcome is a set of relative effort estimates of the work required to complete each work item from the set, or shelving a set of work items that the team agrees requires additional clarification or information.
How to do it
Work durations come in different sizes. For the most part, epics are capabilities that require at least two iterations to perform. Epics are typically broken down into use cases that are expected to be completed within a single iteration. User stories and scenarios are singular threads within a use case that require a few hours to a few days to complete. To be comparable, the epic’s work estimates must be, in some sense, the sum of the work efforts for all its contained use cases, and the use case work estimates are the sum of the effort of all its contained user stories and scenarios.
Of course, the real world is slightly more complex than that. The last sentence of the preceding paragraph is true only when the user stories and scenarios are both independent and complete; this means that all the primitive behaviors contained within the use case appear in exactly one use case or user story. If there is overlap – that is, a primitive behavior appears as a part of two scenarios – then the use case estimate is the sum of the user story estimates minus the overlapping behavior. This removes “double counting” of the common behavior. Since these are relative and approximate measures, such subtleties are generally ignored.
How it works
Use case points or user story points are a relative measure of effort. The project velocity (see the Measuring your success recipe for more details) maps points to person-hours. Velocity is often unknown early in the project but becomes better understood as the project progresses. The value of use case or user story points is that they remove the temptation of being overly (and erroneously) precise about estimated effort. All absolute work estimates assume an implied velocity, but in practice, velocity varies based on team size, team skill, domain knowledge, work item complexity, tools and automation, development environment factors, and regulation and certification concerns.
Figure 1.25 shows the workflow for planning poker:
Figure 1.25: Planning poker
Moderator prepares a list of work items
The moderator of the planning sessions prepares a list of work items, which are generally epics, use cases, user stories, or scenarios. In addition to these common items, spikes, technical work items, defect repairs and other work items may be considered as a part of the session as well.
Moderator hands a set of planning cards to each player
These “planning cards” have an effort estimate on one side but are otherwise identical.
Most commonly, numbers in a Fibonacci sequence (1, 2, 3, 5, 8, 13, 21, 34, 55, 89, and 144) or something similar are used.
Get the next work item
Start with the first work item. I recommend beginning with what appears to be the smallest work item, and this will often serve as a standard by which subsequent work items will be judged. As each work item is either estimated or shelved, go to the next.
Team discusses the features and asks questions of the product owner
It is crucial to have a common understanding of what the work item entails. The product owner is the person who generally has the best understanding of the user needs but others may play this role for technical work items.
Each team member selects one card to represent their estimate and places it face down
The estimates are approximately linear, so an estimate of “5” will be more than twice as much work as a work item estimate of “2” but less than twice the effort required for an estimate of “3.” The cards are placed face down to ensure that the initial estimate of the work item is the unbiased opinion of the team member.
When all team members have made their choice, the cards are flipped over
Flipping the card over exposes the estimates to the group.
The common value is used as the estimate
If the estimates all agree, then that value is used as the “job size” estimate for the work item, and the team moves on to the next work item.
Shelve that work item with a TO DO to get the missing information
If the team is unable to reach a consensus after multiple voting rounds on a single work item, then the item is shelved until it can be resolved. The underlying assumption is that there must be some crucial bit of misunderstanding or missing information needed. The team agrees to a task to identify the missing information and re-estimate this item in a later session.
Team members discuss why they voted as they did
If the estimates differ, then the team must share why they estimated as they did. This is particularly important for the lowest and highest estimated values.
Considerations
It is important that the relative size of the work items is consistent. If the average user story point is “8,” and on average, a use case contains four user stories, then you would expect the average use case size to be about 34–55 points. If the average epic is split across three use cases, you would expect the average epic estimate to be 144–233 (selecting numbers only from the Fibonacci series). While strict adherence isn’t crucial, planning well is made more difficult if you have a user story, a use case, and an epic with independent point scales.
Example
This example is for the user stories derived from the use case Control Resistance.
Use case: Control Resistance
Purpose: Provide variable resistance to the rider to simulate on-road riding experience for ad hoc and planned workouts in Resistance Mode. In ERG mode, the power output is held constant independent of the simulated incline or pedal cadence.
Description: This use case provides variable resistance to rider pedaling depending on a number of factors. The first is gearing. As with on-road cycling, a larger gear ratio results in a higher torque required to turn the pedals. The user can select gears from the emulated gearing (see Use case: Emulate Gearing) to change the amount of torque required to turn the pedals. Next, the user can set the “incline” of the bike. The incline adds or subtracts torque required based on the effort it would take to cycle up or down an incline. Lastly, the base level can be set as a starting point from which the previous factors may offset. By default, this is set by the estimated rider effort on a zero-incline smooth grade. The above are all factors in “Resistance Mode,” in which the power output varies as a function of the cadence, gearing, and incline, as described above. In ERG mode, the power is held constant regardless of these factors. ERG mode is intended to enforce power outputs independent of rider pedal cadence. The power level in ERG mode can be manually set by the user or externally set by a training application. In all modes, the power level can be controlled in a range of 0 to 2,000 W.
Now let’s consider the user stories derived from this use case:
User story: Provide Basic Resistance
As a rider, I want basic resistance provided to the pedals so I can get a workout with an on-road feel in Resistance Mode.
This means that for a given gear ratio and simulated incline, the rider feels a smooth and consistent resistance to pedaling.
User story: Set Resistance under user control
As a rider, I want to set the resistance level provided to the pedals to increase or decrease the effort for a given gearing, cadence, and incline-simulated road riding.
User story: Set Resistance under external control
As a rider, I want the external training app to set the resistance to follow the app’s workout protocol to get the desired workout.
User story: ERG mode
As a rider, I want to pedal at a constant power regardless of variations in simulated terrain, cadence, or gearing to follow the prescribed power settings for my workout protocol.
The other use cases and user stories will be similarly detailed. See the recipes in Chapter 2, System Specification: Functionality, Safety, and Security Analysis, for more details on use cases and user stories.
The team votes via planning poker on the efforts for each of these elements, negotiating when there is no agreement, until a consensus on the efforts is reached.
Table 1.8 shows the results:
Work item type |
|
|||
Epic |
Work item use case |
Work item user story |
Spike or technical work item |
Job size (user story points) |
|
|
|
Spike: Team availability |
2 |
|
|
|
Spike: Aggressive schedule |
3 |
|
|
|
Spike: Agile MBSE impact |
3 |
Resist |
Control resistance |
Provide basic resistance |
|
55 |
|
|
|
Spike: Motor response lag time |
8 |
|
|
|
Spike: Robustness of the main motor |
5 |
Set up physical bike |
Set up bike fit |
Adjust seat height |
|
3 |
Set up physical bike |
Set up bike fit |
Adjust seat reach |
|
3 |
|
|
Calibrate power output |
|
8 |
Emulate gearing |
Emulate front and rear gearing |
|
|
34 |
Emulate gearing |
Emulate mechanical gearing |
|
|
34 |
Emulate gearing |
Emulate basic gearing |
|
|
89 |
Set up physical bike |
Manually adjust bike fit |
|
|
13 |
Set up physical bike |
Set up bike fit |
Adjust handlebar height |
|
3 |
Set up physical bike |
Set up bike fit |
Adjust handlebar reach |
|
3 |
Monitor ride metrics |
|
Monitor power |
|
13 |
Monitor ride metrics |
|
Monitor speed |
|
5 |
Monitor ride metrics |
|
Monitor distance |
|
5 |
Monitor ride metrics |
|
Monitor cadence |
|
5 |
Communicate with apps |
Communicate with low-power Bluetooth |
|
|
34 |
Set up physical bike |
Set up bike fit |
Select crank length |
|
5 |
Resist |
Control resistance |
Set resistance under rider control |
|
21 |
Configure bike for rider |
Connect personal data to the app |
|
|
21 |
Set up physical bike |
Estimate bike fit with external parameters |
Compute fit from professional fit data |
|
1 |
Monitor ride metrics |
|
Monitor incline |
|
8 |
Communicate with apps |
Communicate with ANT+ |
|
|
34 |
Communicate with apps |
Communicate with ANT FEC |
|
|
55 |
Set up physical bike |
Estimate bike fit with external parameters |
Load GURU bike fit data |
|
13 |
Set up physical bike |
Estimate bike fit with external parameters |
Load trek bike fit data |
|
13 |
Resist |
Control resistance |
ERG mode |
|
55 |
|
Manage personal data |
|
|
5 |
Set up physical bike |
Predict bike fit with a camera image |
Access camera image |
|
2 |
Set up physical bike |
Predict bike fit with a camera image |
Retrieve road bike dimensions from the camera image |
|
5 |
Set up physical bike |
Predict bike fit with a camera image |
Compute fit parameters from road bike dimensions |
|
2 |
Resist |
Control resistance |
Set resistance under external control |
|
39 |
Emulate gearing |
Emulate DI2 gearing |
|
|
55 |
|
|
|
Spike: USB robustness |
5 |
Table 1.8: Story point estimates for work items