Skip to content

Commit 965b012

Browse files
authored
Introduce a new planning system. (#107)
* Introduce a new planning system. * Update long-term workflow page from contributing rework. * Add more details checklist for task creation.
1 parent 4183245 commit 965b012

File tree

2 files changed

+174
-13
lines changed

2 files changed

+174
-13
lines changed

docs/contributing/long-term-workflow.md

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# Long term workflow
22

3+
:::info
4+
5+
For an overview of planning, please see [planning](./planning.md).
6+
7+
:::
8+
39
In order to devise long term plans, the-draupnir-project uses a planning system.
410

511
## Where can I find Draupnir's plans?
@@ -8,19 +14,6 @@ Draupnir's plans are kept within the
814
[planning issue tracker](https://github.com/the-draupnir-project/planning/issues).
915
This is a separate github repository that holds Draupnir's plans.
1016

11-
## How are plans structured?
12-
13-
Draupnir's plans are usually comprised of user stories. Which may be collected
14-
into an Epic. The system is adhoc, but should be familiar to anyone who has
15-
engaged with project management in software development.
16-
17-
User stories are a description of how to solve a problem or implement a feature
18-
for a specific actor. They usually derive a solution for issues found in the
19-
draupnir repository.
20-
21-
Alongside stories, tasks may also be documented. Which are just descriptions of
22-
a unit of work that can be implemented.
23-
2417
## Finding issues which may need planning
2518

2619
Once issues have been [triaged](./triaging), it is possible to view a list of

docs/contributing/planning.md

Lines changed: 168 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,168 @@
1+
# Planning
2+
3+
Planning is essential to project management and organising work. Contributors
4+
are free to make plans however they please or make none at all. However, the
5+
_root contribution circle_ uses a specific model in order to document progress
6+
and assess the future.
7+
8+
This system helps the _root contribution circle_ in several ways:
9+
10+
- Principally helps us to explore problems more deeply before working on a
11+
solution to a particular problem. As otherwise it is easy to converge on a
12+
solution without considering the bigger picture.
13+
- Keeps work and planning transparent and easy to share with the _draupnir
14+
longhouse assembly_. So it is easy to explain to stakeholders what is being
15+
worked on and why.
16+
- Makes it easier to check that work is implemented correctly and to a high
17+
quality.
18+
- Helps new contributors to onboard as the tasks show them which parts of the
19+
project to change.
20+
- Preserves a record of decisions and history of problem exploration that is
21+
well documented.
22+
23+
## Problems
24+
25+
After triage issues are consolidated into a "bigger picture" discussion that
26+
captures and describes the problem. This is done at as higher level as possible
27+
without implementation detail. It is extremely important to refrain from the
28+
temptation to describe the problem in a way that precludes it to a specific
29+
solution. Keeping the problem abstract gives us the opportunity to consider our
30+
options and the trade-offs with each of them. This is strategically significant
31+
as without this step, the consideration likely will not happen.
32+
33+
Problems should have the following properties:
34+
35+
- A list of actors involved.
36+
- The current workflow for the problem, how does the system already work
37+
- The problems with this workflow and what commands / prompts / protections are
38+
involved in the interaction.
39+
- A concise high level description of what the actors are attempting to achieve
40+
with the current workflow in the absence of implementation detail, commands,
41+
prompts, or protections.
42+
- A specific high level analysis of the problem in the absence of implementation
43+
detail.
44+
- No requirements or language that attempts to form requirements is used at all.
45+
This is not the place for requirements engineering. As this risks sneaking
46+
solutions into the problem statement
47+
48+
Problems should also record the following:
49+
50+
- A list of issues that are considered
51+
- The triage score of those issues
52+
- A list of solutions that have been explored
53+
- Possibly an analysis of why a solution failed if exploration brought us back
54+
to the problem space.
55+
56+
## Solution hypotheses
57+
58+
Once a problem has been described, a solution can be designed. Solutions should
59+
have the following properties:
60+
61+
- An approach for how the problem is going ot be solved.
62+
- An overview of any planning risks with the approach or any trade-offs.
63+
- The success criteria with reference to actors.
64+
- A list of tasks that break down the solution into workable units.
65+
66+
If a line of work makes a discovery that compromises the solution, then a new
67+
solution should be created after the problem is updated.
68+
69+
Discovery tasks should be included under solutions that have uncertainty or need
70+
refinement.
71+
72+
Solutions should be iterated from feedback experienced from working on tasks.
73+
74+
## Deliverable Tasks
75+
76+
Once a solution hypothesis has been designed. The solution needs to be broken
77+
down into instructions for work that can be delivered. These tasks are the only
78+
planning issue that can be reliably estimated in development cycles with.
79+
80+
Tasks are also used to document any work that has been undertaken.
81+
82+
Tasks should explain very specifically what protections, commands, library code
83+
is going to be edited and how.
84+
85+
Tasks can be thought of as "document what you intend to change and work on
86+
before you change it". It helps to build a picture of the size of the task
87+
without actually committing to or doing much work. They also help contributors
88+
less familiar with the project pick up work easily.
89+
90+
Solutions may have one task which is to simply explore the problem space and
91+
write up the other tasks. A workload cycle would then simply only include this
92+
one task.
93+
94+
Tasks typically include:
95+
96+
- A high level description of the task.
97+
- A description of what pieces of software are going to be changed.
98+
- The acceptance criteria for the task.
99+
- The details of any work undertaken on the task.
100+
101+
For a concrete problem, Tasks should typically be created for:
102+
103+
- Implementation how-to for a specific part of a deliverable.
104+
- Regression test for a piece of functionality.
105+
- End-user documentation is to be created for a deliverable.
106+
- Implementation how to for a library change that may be required.
107+
- Discovery placeholders when library changes have other dependants.
108+
- Development documentation for new patterns or abstractions.
109+
110+
For a planned problem, Tasks should be created for:
111+
112+
- Research and planning tasks for deriving or exploring a solution.
113+
- Refinement placeholders when solutions remain abstract.
114+
115+
## Review
116+
117+
Work that is completed should first be reviewed against the solution, and then
118+
reviewed against the original problem
119+
120+
## Success vs acceptance criteria
121+
122+
Success criteria are related to solutions, they're related to the problem and
123+
are always grounded with actors.
124+
125+
Acceptance criteria aren't grounded with actors and are specific to making sure
126+
important aspects of the task are complete.
127+
128+
## Common actors
129+
130+
### Contributor
131+
132+
Someone who contributes to the draupnir project.
133+
134+
### Room moderator
135+
136+
A moderator for a room on Matrix.
137+
138+
### Homeserver administrator
139+
140+
A moderator managing users resident to a Matrix homeserver, and rooms that the
141+
homeserver is joined to.
142+
143+
### System administrator
144+
145+
This is someone who is deploying and managing draupnir at a software systems
146+
level, rather than someone who necessarily uses it.
147+
148+
## Why we do not use story pointing
149+
150+
<!-- cspell:ignore Goodhart's -->
151+
152+
Story pointing may work in some environments. We used to use it for this project
153+
but we have identified some weaknesses:
154+
155+
- We do not have reliable historical information on completion of other tasks,
156+
it's also very difficult to do this if you need to change methodologies.
157+
- The bigger a story is, the more inaccurate the estimate is going to be,
158+
because there is going to be less detail and less consideration with reference
159+
to the implementation.
160+
161+
We also became prone to Goodhart's law: "When a measure becomes a target, it
162+
ceases to be a good measure". If you note that you work on 20 story points in a
163+
week, you'll start scoring things to fit that. It is very difficult to avoid
164+
this bias and everyone involved has an interest to score lower or higher.
165+
166+
Using Tasks as the fundamental unit of work means that they are always grounded
167+
in the implementation. And there is no estimation of task size required, they're
168+
all the same size.

0 commit comments

Comments
 (0)