@@ -27,73 +27,130 @@ below the estimate. These assumptions translate to risks - because if
2727they turn out to be incorrect, then they will add more time to the
2828task.
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.
129186We have found that Jira _ subtasks_ aren't especially useful. They just
130187make 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
134223By 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
139228theory the velocity figure records under-estimation tendencies of the
140229team, 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