|
2 | 2 |
|
3 | 3 | ## Motivation and Goal |
4 | 4 |
|
5 | | -Implement the following attribute when delivering: |
6 | | - |
7 | | -1. Clear tracking of work across the teams so that when we says that a milestone is delivered, then: |
8 | | - - it is usable by all types of users (operators, web devs, system devs). |
9 | | - - It is documented (docs, dev rel) |
10 | | - - It is of high quality (QA, Dogfooding) |
11 | | -2. Items (Milestones, Deliverables, Tasks) can easily be closed and marked as complete thanks to: |
12 | | - - Minimal external dependencies |
13 | | - - Minimal intra-team dependency |
14 | | - - Finite, well-define scope. |
15 | | -3. Each milestone and the effort needed to achieve it has a clear value thanks to a well-defined, value-driven, and minimal scope. |
| 5 | +Provide a clear visibility to anyone (CCs or not) of: |
| 6 | + - What work is planned |
| 7 | + - What work is in progress |
| 8 | + - What work is done |
16 | 9 |
|
17 | | -## Terminology and Scope |
| 10 | +Software properties are considered *delivered* when: |
18 | 11 |
|
19 | | -| Name | Number of | Timeframe | Team Scope | Owner | Description | |
20 | | -|--------------|-----------------------|------------------------------------------------|-------------------------------------------------|------------------------|-------------------------------------------------------| |
21 | | -| Milestone | ? | Pencilled for the year, planned for 2 quarters | Most subteams | Waku Lead | A, or cohesive set of, feature(s). | |
22 | | -| Deliverable | Several per milestone | Set for a milestone | Subteam leads | Waku Lead | Deliverable may be the result of the work of one, some or all Waku subteams. | |
23 | | -| Task | Several per Deliverable | Set monthly-ish, delivered weekly*** | One subteam or individual | Team Member | May be one or several pieces of work, client specific. | |
| 12 | +- it is ready-to-use |
| 13 | +- the behaviour is documented in [specifications](https://waku.org/specs) |
| 14 | +- the software has been used (dogfooding) by the Waku team |
| 15 | +- documentation on how to use said properties is delivered |
24 | 16 |
|
25 | | -## Milestone Definition |
| 17 | +See [Waku Methodology](https://www.notion.so/Waku-Mission-and-Methodology-1a58f96fb65c80b9b789c1bbb9e99915) (draft) for more. |
26 | 18 |
|
27 | | -A *Milestone*: |
| 19 | +## Team Structure |
28 | 20 |
|
29 | | -1. **Provides a tangible user benefit:** The milestone should aim to provide a distinct benefit or feature to the user, whether they are end users, operators, or developers. In some cases, a milestone may be a bundle of small features. The bundle of features should be cohesive and the benefit to the users should be easy to summarize. Most likely, a bundled milestone will be scoped to a given track. |
30 | | -2. **Minimal Scope:** The milestone should be trimmed to a minimal scope, encompassing only what is *just enough* to assess the potential impact of these features on the project's metrics (e.g. number of users, revenue). This means descoping any advanced features and aiming for a MVP-level delivery. |
31 | | -3. **Transversal:** While the vertical scope of a milestone should be minimal, the delivery should be complete in terms of research, engineering, QA, documentation and dev rel assets so that the feature can be pushed to users once the milestone is marked as complete. Feedback loops should be as small as possible to ensure the value of a milestone is measured in a timely manner. |
32 | | -4. **Attached Estimate:** An estimate should be associated with the milestone to facilitate the measurement of potential ROI. Additionally, tracking the estimate versus the actual progress is crucial for identifying any deviation and making informed decisions (e.g., deciding whether to continue if we learn the estimate is likely to be overrun). |
| 21 | +The Waku team is currently organized in the following subteams: |
33 | 22 |
|
34 | | -## Workflow |
| 23 | +- Core Research |
| 24 | +- nwaku |
| 25 | +- js-waku |
| 26 | +- Chat/App Dev |
| 27 | +- Chat/App Research |
| 28 | +- Business Dev |
35 | 29 |
|
36 | | -A *Milestone* is divided into *Deliverables*. A *Deliverable* is divided into *Tasks* that are assigned to a given subteam. |
| 30 | +## Documents |
37 | 31 |
|
38 | | -### Accountability |
| 32 | +- [Waku FURPS](https://www.notion.so/Waku-FURPS-1498f96fb65c803faedef2a591c22c00) |
| 33 | +- [Waku Milestones](https://roadmap.logos.co/waku/waku-milestones) |
39 | 34 |
|
40 | | -For development teams, it is expected that design/break down is done by the *Deliverable* and/or *Task* owner. |
41 | | -But actual work can be picked up by other team members. |
42 | | -Task owner must: |
| 35 | +## Terminology and Scope |
43 | 36 |
|
44 | | -- Understand the change and its implications, |
45 | | -- Liaise with researcher for any doubt or questions or design issues related to specific client/use case, |
46 | | -- Create issues (_Tasks_) to break down work in client repo, include an _acceptance criteria_ in each issue to ensure that the objective/end goal/behaviour is clearly described. |
| 37 | +### FURPS |
47 | 38 |
|
48 | | -It is likely that the task owner will do the core change or first change for a given task. |
49 | | -However, subsequent/other changes may be picked up in parallel or sequentially by other team members. |
| 39 | +[FURPS](https://en.wikipedia.org/wiki/FURPS) are used to define software behaviour and property. |
| 40 | +They are defined as: |
| 41 | +- F: Functionality |
| 42 | +- U: Usability |
| 43 | +- R: Reliability |
| 44 | +- P: Performance |
| 45 | +- S: Supportability |
50 | 46 |
|
51 | | -Hence: |
52 | | -- dependencies must be clearly stated in _Task_ issue description |
53 | | -- Team members must assign _Task_ issues to themselves when work starts |
54 | | -- Team members must update issues to track progress |
| 47 | +Moreover: |
55 | 48 |
|
56 | | -The program manager should ensure that Deliverables are getting the right assignee in a timely fashion. |
57 | | -For example, when research work starts for a given milestone, Deliverable owners from development team should be assigned, so they know to participate in discussions. |
| 49 | +- A *set of FURPS* define the behaviour of a specific protocol implementation or feature. |
| 50 | +- "a FURPS" refers to an individual FURPS statement (e.g. "S1. available in libwaku"). |
| 51 | +- For every `P` (Performance) there should be a Grafana panel (pointed to fleet), and a **Vac-DST** simulation to *sign-off* the `P` (search for “**Vac-DST**”). |
| 52 | + If it cannot be measured, then it cannot be a statement (in some instances, DST simulation may be enough). |
| 53 | +- For every `R` (Reliability) there should be a test suite by Vac-QA that sign-off the `R` in unreliable network environment (search for “**Vac-QA**”); and potentially a Grafana panel (pointed to fleet), and a Vac-DST simulation (if relevant). |
58 | 54 |
|
59 | | -Program manager should also ensure that issues are being created in a timely fashion, and is encouraged to use client PM call as a forum to check deliverables to be assigned, for example when a given deliverable is near completion. |
| 55 | +### Feature |
60 | 56 |
|
61 | | -### Handovers |
| 57 | +A feature is a specific domain of Waku software behaviour. |
| 58 | +It can be a protocol, or a set of closely-related protocols. |
| 59 | +It has one related set of FURPS. |
62 | 60 |
|
63 | | -The following handovers are defined: |
| 61 | +For example, "End-to-end reliability" is a feature that refers to the SDS protocol. |
64 | 62 |
|
65 | | -| Handover | Expectations when handing over | Expectations when accepting handover | |
66 | | -|-------------------------------|----------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------| |
67 | | -| Research to development teams | - RFC PR is merged <br /> - PoC PR is merged | - RFC content and PoC are reviewed <br /> - Own code and functionality <br /> - Own minor RFC changes | |
68 | | -| Development teams to QA | - Happy path and selected error path tests exist <br /> - APIs are implemented to enable interop testing | - Review RFC <br /> - Review existing tests | |
| 63 | +### Deliverable |
69 | 64 |
|
70 | | -The group or person handing over is expected to initiate a sync (meeting) or async (chat or GitHub) discussion to go through the output and overview. |
| 65 | +A deliverable is the work tackled by one subteam in regards to one FURPS set. |
| 66 | +In other words, it tracks the delivery of specific FURP(S), for one feature, by one subteam. |
71 | 67 |
|
72 | | -Once the handover is accepted, the given deliverable can be closed. |
| 68 | +For example: |
73 | 69 |
|
74 | | -### GitHub Usage |
| 70 | +> Light Push FURPS |
| 71 | +> - F1. Light push returns itemized error code when the service node cannot forward a message. |
| 72 | +> - S1. nwaku service node |
| 73 | +> - S2. Browser edge node |
75 | 74 |
|
76 | | -A _Milestone_: |
77 | | -- MUST have a GitHub Milestone in https://github.com/waku-org/pm repo, to which relevant _Deliverables_ are added. |
78 | | -- The GitHub milestone MUST be used to track progress. |
| 75 | +To track the work to achieve these FURPS, two deliverables should be created: |
79 | 76 |
|
80 | | -A _Deliverable_: |
81 | | -- MUST be defined as an issue in the https://github.com/waku-org/pm repo. |
82 | | -- MUST be included in its parent _Milestone_. |
83 | | -- MUST have an _Output_ section in the description detailing the result of work of the Deliverable. |
84 | | -- MUST have a `Planned Start` and `Due Date` set |
| 77 | +1. [nwaku] Support error code in light push: Implement Light Push FURPS F1, S1. |
| 78 | +2. [js-waku] Support error code in light push: Implement Light Push FURPS F1, S2. |
85 | 79 |
|
86 | | -A _Task_: |
87 | | -- MUST be tracked as a todo item in a GitHub Issue (_Deliverable_) |
88 | | -- MUST have an _acceptance criteria_ and/or a list of _tasks_ (that can be other GH issues). |
| 80 | +When the **work** is not related to software behaviour (e.g. a contributor guide, some BD activities), |
| 81 | +then a deliverable is used to define the expected output, without referring to specific FURPS. |
89 | 82 |
|
90 | | -Finally, for _Tasks_ that do not belong to a _Deliverable_: |
91 | | -- MUST qualify as |
92 | | - - `Bugs` - bugs reported by users or discovered internally. |
93 | | - - `Tests` - maintaining and fixing broken tests, if a test must be fixed as a result from a change from a *Deliverable* the work should be tracked and group with that *Deliverable*. |
94 | | - - `Releases` - work related to releasing version upgrades. |
| 83 | +Deliverables are owned by one, and only one, subteam. |
| 84 | +If a deliverable's execution depends on a group external to Waku, then it should be explicitly stated. |
95 | 85 |
|
96 | | -Which means, in terms of _navigation_: |
97 | | -- Work for a Milestone is described in the [Roadmap](https://roadmap.logos.co/waku/waku-milestones) and tracked in the GitHub milestone in the pm repo. |
98 | | -- In the GitHub milestone, we have a list of _Deliverables_ to be achieved, the _Deliverables_ are being closed as the work is done and handed over. |
| 86 | +### Milestone |
99 | 87 |
|
100 | | -### Responsibilities |
| 88 | +A milestone describes a specific objective we aim to achieve. |
| 89 | +It holds the narrative of **why** we are doing this work and what is the value attached to completing the work. |
101 | 90 |
|
102 | | -| Task | Responsible | Accountable | |
103 | | -| ----------------------------------------------------------- | --------------- | --------------- | |
104 | | -| Set Milestones and Deliverables in master document | Waku Lead | Insights | |
105 | | -| Create GitHub milestones and deliverables issues in pm repo | Team Leads | Waku Lead | |
106 | | -| Create issues, PR (tasks) and link them to **deliverables** | Team Member | Team Lead | |
107 | | -| Close deliverable | Waku Lead | Program Manager | |
108 | | -| Handover to Vac-QA, Vac-DST | Team Lead | Vac PoC | |
109 | | -| Proceed with Dogfooding | Team Lead | Waku Lead | |
| 91 | +A milestone usually involves effort from most of the Waku team. |
| 92 | +The work should be organized to prioritise the delivery of complete milestones, over individual deliverables. |
110 | 93 |
|
111 | | -Responsible: who does the work |
112 | | -Accountable: delegates and reviews |
| 94 | +Milestone have estimation of effort and date of completion defined. |
113 | 95 |
|
114 | | -Waku Lead: @fryorcraken |
115 | | -Program Manager: @chair28980 |
116 | | -Team Lead: @plopezlpz @Ivansete-status @jm-clius @weboko |
117 | | -VAC PoC: @jm-clius |
| 96 | +### Task |
118 | 97 |
|
119 | | -## FURPS |
| 98 | +A *task* is a piece of work necessary to a deliverable. |
| 99 | +A task may be defined as a checkbox, or a GitHub issue. |
| 100 | +It is up to a subteam to decide how they organize their tasks (e.g. whether to use epics, issues per task, etc). |
120 | 101 |
|
121 | | -Fore each *milestone*, FURPS headlines are defined by the Waku Lead. |
| 102 | +## Rules |
122 | 103 |
|
123 | | -[FURPS](https://www.marcinziemek.com/blog/content/articles/8/article_en.html) are defined as: |
124 | | -- F: Functionality |
125 | | -- U: Usability |
126 | | -- R: Reliability |
127 | | -- P: Performance |
128 | | -- S: Supportability |
| 104 | +Here are some rules to ensure the efficacy of our process. |
| 105 | +What is not explicitly defined is left to the subteam's choice. |
| 106 | + |
| 107 | +A _Milestone_: |
| 108 | +- MUST have a GitHub Milestone in https://github.com/waku-org/pm repo, to which relevant _FURPS_ statements or _Deliverables_ are added. |
| 109 | +- MUST have an *estimated date of completion* |
| 110 | +- MUST have an effort estimate, stating how many CCs are needed to work on this for a given half-year (e.g. one research, half an engineer) |
| 111 | + |
| 112 | +A _Deliverable_: |
| 113 | +- MUST be defined as an issue in the https://github.com/waku-org/pm repo. |
| 114 | +- MUST be included in its parent _Milestone_. |
| 115 | +- MUST have an _Output_ section in the description detailing the result of work of the Deliverable, this may be a list of FURPS. |
| 116 | +- If tracking FURPS, the FURPS only belong to one feature aka FURPS set. |
| 117 | +- MUST have only one owner, assigned to the GitHub issue; a Waku subteam lead or team member. |
| 118 | +- MUST have a checklist to ensure the following items are done: |
| 119 | + - specs |
| 120 | + - code |
| 121 | + - dogfooding |
| 122 | + - docs |
| 123 | + |
| 124 | +Finally, for _Tasks_ that do not belong to a _Deliverable_: |
| 125 | +- MUST qualify either as (with related GitHub labels) |
| 126 | + - `bug`: bugs reported by users or discovered internally, SHOULD be linked back to a corresponding _FURPS_ and _Milestone_ |
| 127 | + - `test`: maintaining and fixing broken tests, SHOULD ideally be linked back to a corresponding _FURPS_ and _Milestone_ |
| 128 | + - `release`: work associated with releasing new versions. |
| 129 | + - `dependencies`: work associated with updating dependency versions. |
| 130 | + |
| 131 | +### Responsibilities |
129 | 132 |
|
130 | | -- For every `P` (Performance) there must be a Grafana panel (pointed to fleet), and a **Vac-DST** simulation to *sign-off* the `P` (search for “**Vac-DST**”). |
131 | | -- For every `R` (Reliablity) there should be a test suite by Vac-QA that sign-off the `R` in unreliable network environment (search for “**Vac-QA**”); and potentially a Grafana panel (pointed to fleet), and a Vac-DST simulation (if relevant). |
132 | | -- Deliverables deliver a number of FURPS: `deliverable name: FURPS they deliver` |
133 | | -- Deliverables are owned by one or several teams, specified in parenthesis after deliverable |
| 133 | +| Task | Does it | Ensure it's done | |
| 134 | +|------------------------------------------------------------------|-----------------|------------------| |
| 135 | +| Set Milestones, FURPS and Deliverables | Waku Lead | Insights | |
| 136 | +| Create GitHub milestones in pm repo | Program Manager | Waku Lead | |
| 137 | +| Create Deliverable issues in pm repo | Team Lead | Program Manager | |
| 138 | +| Create issues, PR (tasks) and link them to the deliverable issue | Team Member | Team Lead | |
| 139 | +| Handover to Vac-QA, Vac-DST | Team Member | Team Lead | |
| 140 | +| Proceed with Dogfooding | Team Member | Team Lead | |
| 141 | +| Close Deliverable | Waku Lead | Program Manager | |
| 142 | + |
| 143 | +- Waku Lead: @fryorcraken |
| 144 | +- Program Manager: @chair28980 |
| 145 | +- Team Lead: @plopezlpz @Ivansete-status @jm-clius @weboko @jazzz |
| 146 | +- VAC PoC: @jm-clius, @stubbsta for Vac-DST |
0 commit comments