@@ -27,73 +27,130 @@ below the estimate. These assumptions translate to risks - because if
27
27
they turn out to be incorrect, then they will add more time to the
28
28
task.
29
29
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
35
31
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.
37
35
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.
40
39
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:
44
41
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.
49
44
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.
52
49
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.
55
55
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.
57
60
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.
67
65
68
- ### Each _ Task _ ticket has an estimate
66
+ It's important to realize that:
69
67
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.
72
72
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.
74
76
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
77
78
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.
84
81
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.
86
85
87
- Story point estimations are done by the development team together in
88
- the [[ Meetings|sprint planning meeting]] .
86
+ This implies that:
89
87
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.
92
89
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.
95
94
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.
97
154
98
155
## Implicit acceptance criteria
99
156
@@ -129,6 +186,38 @@ main task and linked.
129
186
We have found that Jira _ subtasks_ aren't especially useful. They just
130
187
make things confusing, so avoid using them.
131
188
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
+
132
221
## Updating estimations
133
222
134
223
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
139
228
theory the velocity figure records under-estimation tendencies of the
140
229
team, so that future sprints may be better planned.
141
230
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
+
142
244
## TODO: Put remaining time on ticket
143
245
144
246
- [ ] Write process for updating tickets with "remaining time" value.
0 commit comments