Skip to content
This repository was archived by the owner on Aug 17, 2023. It is now read-only.

Commit 7f601d6

Browse files
Update estimation process with two-factor estimation.
1 parent 4ad8c70 commit 7f601d6

File tree

1 file changed

+151
-49
lines changed

1 file changed

+151
-49
lines changed

docs/process/Estimation-Process.md

Lines changed: 151 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -27,73 +27,130 @@ below the estimate. These assumptions translate to risks - because if
2727
they turn out to be incorrect, then they will add more time to the
2828
task.
2929

30-
It's also possible to provide confidence intervals around an
31-
estimation to quantify the uncertainty. For example, a development
32-
task could be estimated to take 30 hours expected, +20 hours worst
33-
case, -5 hours best case. However even then, how often do we expect
34-
that actual time will come in longer than "worst case?"
30+
## Capturing uncertainty in our estimates
3531

36-
## Story points estimates
32+
One common way to express an estimate for a given task is to give a single
33+
number: the number of remaining days of effort the task owner believes that he
34+
or she will require to finish that task.
3735

38-
We accept that accurate estimation is hard, for multiple reasons, so
39-
instead adopt the "just in time" planning technique from XP.
36+
However, a single number alone is unable to capture the degree of confidence or
37+
uncertainty the author of an estimate has. To allow estimate authors to record
38+
their confidence or uncertainty, we need a bit more information.
4039

41-
This uses unitless "story points" for estimation of each
42-
ticket. Possible story point values are on the Fibonacci sequence:
43-
1, 2, 3, 5, 8, 13.
40+
Therefore, we attach to each task a **pair** of estimates:
4441

45-
The idea is that these point values represent task size in an abstract
46-
way. An estimate in time for a task can be calculated from the
47-
estimate in story points divided by the project velocity, adjusted
48-
according to staff availability, other factors, etc.
42+
- **Most-probable estimate (days)**: the number of remaining days of effort the
43+
task owner believes he or she will most likely need to finish that task.
4944

50-
The decision on whether a task is included in the next sprint is
51-
based on its points estimate and the project velocity.
45+
- **Most-pessimistic estimate (days)**: the number of remaining days of effort
46+
the task owner believes he or she will need to be 90% of confident of
47+
finishing that task, given a pessimistic appraisal of the situation, and
48+
taking into account all of the potential things that could go wrong.
5249

53-
This approach is clearly a **gross simplification of reality**, and so
54-
we need to be very careful not to produce garbage estimates.
50+
Note that it's impossible (in general) to predict all the things that could go
51+
wrong with a task. This is why estimates are estimates, and not commitments.
52+
Pilots and co-pilots should feel free to give estimates based on their personal
53+
experience. They may use their accumulated knowledge of how long similar tasks
54+
have taken in the past to develop new estimates.
5555

56-
### Points
56+
The **deviation** between the most-probable estimate and most-pessimistic
57+
estimate allows the authors of each estimate to express their degree of
58+
uncertainty in the estimate, and it allows people viewing the estimates to have
59+
insight into that uncertainty.
5760

58-
| Points | Size |
59-
| -----: | ----------------------------------------------- |
60-
| 1 | |
61-
| 2 | |
62-
| 3 | |
63-
| 5 | |
64-
| 8 | |
65-
| 13 | |
66-
| > 13 | This ticket needs to be split up further. |
61+
A very large deviation between the most-probable and most-pessimistic estimate
62+
tells us that the author is very uncertain in their estimate. We might use
63+
this information to take action, for example, by breaking up a task into
64+
smaller, more well-defined pieces.
6765

68-
### Each _Task_ ticket has an estimate
66+
It's important to realize that:
6967

70-
We assign an estimation to every single task ticket. If there's no
71-
estimate, then it can't be added to the sprint.
68+
- These estimates pertain to the number of days of remaining effort required to
69+
perform that task **in isolation**. If two or more tasks are performed in
70+
parallel, with context switching, then we need to keep the additional cost of
71+
that context switching in mind.
7272

73-
### Ticket must be ready to estimate before estimation
73+
- These estimates refer to a number of days **remaining**, and as such they
74+
should be regularly updated as circumstances change, rather that set in stone
75+
and left unchanged.
7476

75-
If there is not enough information about a task ticket, then the
76-
estimation will be rubbish. So before estimation starts we need:
77+
## Guidelines for creating estimates
7778

78-
1. The _Task_ ticket is linked to a _User Story_ ticket.
79-
2. The ticket description contains adequate information about what is
80-
expected to be done.
81-
3. The ticket includes acceptance criteria.
82-
4. The ticket is sufficiently small to estimate.
83-
5. Task dependencies are defined with jira issue links.
79+
- Estimates should only be created and updated by the pilot and co-pilot
80+
responsible for a given task.
8481

85-
## Team Estimation
82+
- Estimates should be created only after a _Task_ ticket has entered the
83+
"READY" state. This means that a task should not be estimated if either the
84+
pilot or the co-pilot are unclear on what must be done.
8685

87-
Story point estimations are done by the development team together in
88-
the [[Meetings|sprint planning meeting]].
86+
This implies that:
8987

90-
We use the [Pointing Poker](https://www.pointingpoker.com/) tool to
91-
facilitate estimation sessions.
88+
- The _Task_ ticket should have a complete set of acceptance criteria.
9289

93-
The team should agree on a single number. If they don't then someone
94-
is missing some information about the task.
90+
- The _Task_ ticket should have a clear design that the pilot and co-pilot are
91+
capable of estimating. Justification: there are many possible designs for a
92+
given set of acceptance criteria. The time to deliver a task will depend very
93+
strongly on the design that is chosen.
9594

96-
This practice lets us share knowledge about tasks.
95+
- The _Task_ ticket should be linked to a _User Story_ ticket, **if** it
96+
pertains to a user story. (It's important to note that not all tasks must
97+
have a corresponding user story. In the case of technical debt tasks or pure
98+
refactoring tasks, it might not be practical to even identify a user story.)
99+
100+
- The _Task_ ticket is sufficiently small to estimate.
101+
102+
- Task dependencies are defined with Jira issue links.
103+
104+
## Process for updating estimates
105+
106+
One of the main benefits of estimation is that both project management and other
107+
team members can gain visibility on how much time might be required to bring
108+
certain tasks to completion.
109+
110+
Since we have one project planning meeting per week, it makes sense to update
111+
our estimates at around the same frequency.
112+
113+
Before each project planning meeting (currently on Wednesday), each team member
114+
should:
115+
116+
- Identify the tasks he or she is currently working on, in JIRA.
117+
118+
- Make sure that each task has an updated pair of estimates that best reflect
119+
their current understanding of how much remaining time would be required to
120+
bring these tasks to completion.
121+
122+
## Interpreting estimates
123+
124+
Estimates do not represent commitments on behalf of those who create them.
125+
126+
The actual time required to finish tasks, when compared to initial estimates,
127+
can vary wildly, with some tasks taking many times longer than initially
128+
predicted.
129+
130+
This factor: the actual time divided by the estimated time, is often known as
131+
the "blowup factor".
132+
133+
There is some research to indicate that the "blowup factor" (actual time
134+
divided by estimated time) can be reasonably modelled using a log-normal
135+
distribution. See https://erikbern.com/2019/04/15/why-software-projects-take-longer-than-you-think-a-statistical-model.html
136+
137+
TODO:
138+
139+
- [ ] When we have a task with a chain of dependent tasks, devise an automated
140+
method of calculating a most-probable estimate and a most-pessimistic
141+
estimate for the entire chain of tasks. This method might use the log-normal
142+
distribution model suggested above in order to capture the possible blowup
143+
factor for the entire chain.
144+
145+
- [ ] When we have a release that contains large numbers of tasks with
146+
dependencies between them, devise an automated method of determining the most
147+
likely critical paths required to deliver the release, and a method of
148+
calculating a most-probable estimate and a most-pessimistic estimate for
149+
delivering the entire release.
150+
151+
In some situations, there will be one obvious critical path, but in more
152+
complex situations, there may be multiple contenders for the critical path, and
153+
the critical path may change as we make progress through a release.
97154

98155
## Implicit acceptance criteria
99156

@@ -129,6 +186,38 @@ main task and linked.
129186
We have found that Jira _subtasks_ aren't especially useful. They just
130187
make things confusing, so avoid using them.
131188

189+
# Other methods of estimation
190+
191+
## Story points estimates
192+
193+
This method uses unitless "story points" for estimation of each
194+
ticket. Possible story point values are on the Fibonacci sequence:
195+
1, 2, 3, 5, 8, 13.
196+
197+
The idea is that these point values represent task size in an abstract
198+
way. An estimate in time for a task can be calculated from the
199+
estimate in story points divided by the project velocity, adjusted
200+
according to staff availability, other factors, etc.
201+
202+
The decision on whether a task is included in the next sprint is
203+
based on its points estimate and the project velocity.
204+
205+
This approach is clearly a **gross simplification of reality**, and so
206+
we need to be very careful not to produce garbage estimates.
207+
208+
## Team Estimation
209+
210+
Story point estimations are done by the development team together in
211+
the [[Meetings|sprint planning meeting]].
212+
213+
This method can use the [Pointing Poker](https://www.pointingpoker.com/) tool
214+
to facilitate estimation sessions.
215+
216+
The team should agree on a single number. If they don't then someone
217+
is missing some information about the task.
218+
219+
This practice lets us share knowledge about tasks.
220+
132221
## Updating estimations
133222

134223
By rights, the estimation of a ticket should not change once the
@@ -139,6 +228,19 @@ suggested, then the team velocity will decrease. The idea is that in
139228
theory the velocity figure records under-estimation tendencies of the
140229
team, so that future sprints may be better planned.
141230

231+
### Points
232+
233+
| Points | Size |
234+
| -----: | ----------------------------------------------- |
235+
| 1 | |
236+
| 2 | |
237+
| 3 | |
238+
| 5 | |
239+
| 8 | |
240+
| 13 | |
241+
| > 13 | This ticket needs to be split up further. |
242+
243+
142244
## TODO: Put remaining time on ticket
143245

144246
- [ ] Write process for updating tickets with "remaining time" value.

0 commit comments

Comments
 (0)