Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update Milestone process #107

Merged
merged 9 commits into from
Jan 22, 2024
Merged

Update Milestone process #107

merged 9 commits into from
Jan 22, 2024

Conversation

fryorcraken
Copy link
Contributor

No description provided.

Each epic should have an owner per affected subteam (research, js-waku, go-waku, nwaku).
Each epic should have an owner per subteam.
Most epics will have a unique owner (e.g. a Waku Research team member owns a `E:Research` epic).
For _Dogfood_ and _QA_ epics, one owner per client should be set.
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Dogfood is a separate epic to ensure it happens. It also encourage interoperability testing so that dogfooding happens across all clients.

We need to try and see if it works.

Copy link
Contributor

@chair28980 chair28980 Jan 10, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we envision a new repo dedicated for the dogfood epics?

Edit: I see the detail now of a specific issue within a team's epic for dogfooding ✔️.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think all epic will have to continue to live in pm repo as per #107 (comment)

For example, when PoC is near completion then breaking down the work should be started.
an is encouraged to use client PM call as a forum to check epics to be assigned, for example when a given epic is near completion.

#### Handovers
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I do not think we need a strict handover process. However, I believe it is worth mentioning.
It helps ensure the quality of the output.
It also means that once a team has handed over, then can close an epic.

Work may happen after a handover, especially in terms of maintenance and support but it is now out of the hand of the team that handed over.

README.md Outdated

| Handover | Expectations when handing over | Expectations when accepting handover |
|-------------------------------|-----------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------|
| 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 |
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Regarding RFC, the aim is to ensure that researcher can focus on the next task.
It does not mean that they are totally out of the loop, but that dev engineers are taking ownership and can process with small RFC adjustment raised through implementation and interop.

In case of major issue with a protocol discovered at a late stage, then we can review on an adhoc basis on how to handle it.

- MUST have a matching GH issue in the https://github.com/waku-org/pm repo with `milestone` label assigned.
- MUST have a GH Milestone in https://github.com/waku-org/pm repo, to which relevant _Epics_ are added.
- SHOULD have a roadmap to delivery done at planning phase, the GH milestone is then used to track progress.
- MUST have a matching GitHub issue in the https://github.com/waku-org/pm repo with `milestone` label assigned.
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe one of the limitation we have is that a GitHub milestine is only on one repo and hence we need the related epics to be in the same repo.

I don't think there is a way to get the epic issue in the subteam repo.


### GitHub Usage

A _Milestone_:
- MUST have a matching GH issue in the https://github.com/waku-org/pm repo with `milestone` label assigned.
- MUST have a GH Milestone in https://github.com/waku-org/pm repo, to which relevant _Epics_ are added.
- SHOULD have a roadmap to delivery done at planning phase, the GH milestone is then used to track progress.
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Having a roadmap in the milestone description that is not updated is not great so I removed this and expect to only use github fields for planning. Let's see how it goes.

- OR MAY be tracked as a single GH issue
- that MUST be labelled with related _Epic_ label (`E:...`),
- OR MAY be tracked as a GH Pull Request
- that MUST be labelled with related _Epic_ label (`E:...`),
- that MUST have a reference to the related GitHub _Task_ or _Epic_ issue
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nobody label their PR.
I don't think it impacts project management too much so that fine.

But I do expect a reference to the relate issue to appear in a PR so that context is provided.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

IMO, a Task with sub-Tasks is an Epic. Then, I don't see the need for a Task to keep a list of other Tasks

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We are abusing the word "epic" to have a common terminology across dashboards.

README.md Outdated
| `E:Research` | Waku Research | PoC, RFC, Protocol Simulations/Studies | Initial work done by the research team to create or change a protocol. Engineering-only Milestones may not have such epic |
| `E:nwaku` | nwaku | MVP quality software | Bring software to MVP level, proceed with re-architecture of PoC if needed, ensure functionality is usable, refine APIs, auto-generated/API documentation, ensure interoperability works |
| `E:js-waku` | js-waku | MVP quality software, including all supported env (e.g. React Native) | Implement protocol in js-waku, same as nwaku. |
| `E:go-waku` | go-waku | MVP quality software, include all supported bindings (i.e. C and Rust) | Implement protocol in go-waku. May not always be relevant - need to conclude multiple client discussion. Otherwise, same as nwaku. |
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No matter how the multiple client discussion goes. I propose to ensure that Rust and C bindings are considered as support and included in any work

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we include this in the same epic than go-waku or have a dedicated one? I 'd suggest same epic @waku-org/go-waku-developers

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

But I am wondering whether the priority would be same for C-bindings and rust similar to Golang API's for all milestongs. Maybe it is better to decide per milestone and based on SDK usage whether to deprioritize something?
Some milestones may not have changes in these bindings as well.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think there is a fair question of scope for each client. Which we are trying to clarify with the multiple client implement.
e.g. if js-waku is only for the browser then relay and service node side of req-res protocol do not need to be implemented.
go-waku scope is currently library for Status so strictly speaking it does not need RLN or autosharding either.

Once we set a scope for a client or binding then it will be clear whether a milestone should be done on such client.

For now, Rust is awkward. Created by Nomos for Nomos but used by TheGraph. TheGraph is valuable user but they do not see intending to use The Waku Network.

Also, our focus was on building The Waku Network, over having an array of language available (see how #42 is planned for later).

However, once we decide that Rust or any specific client should be fully supported, then I think it should be included in milestone work and not be considered a second class citizen.
If we push documentationf or the Rust bindings on docs.waku.org then we should aim for parity, and not wait for a project to tell us "hey this js-waku functionality, would be useful for us in Rust" before we decide to implement.

README.md Outdated Show resolved Hide resolved
Copy link

@jm-clius jm-clius left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In general this LGTM. One clarification from my side - this seems to imply that the Epics-per-milestone is only used to distribute the responsibilities towards the same milestone to different subteams. In other words, we won't also use epics to break the milestone into smaller deliverables (that may also span several teams) as I've done in https://www.notion.so/Waku-Research-Milestones-2024-56b1d8c869f14acc934c2d2b2564fa2a ? For example, the Milestone delivery of Store Sync can be broken down into distinct phases: (1) improved Store protocol (2) basic sync protocol. Both of these phases would in turn require effort to be scheduled for each of the subteams. In my mind it make sense to use Epics to also indicate this further breakdown of the milestone.

@chair28980
Copy link
Contributor

@jm-clius I agree with your point that Epics should breakdown into appropriately sized batches of work. Using the Milestone you referenced as a rough template of what the work might break down to coming out of the Research phase would be a similar breakdown into Epics as described in the Research doc https://www.notion.so/Waku-Research-Milestones-2024-56b1d8c869f14acc934c2d2b2564fa2a.

image

-  Milestone: Store Upgrade (SU)
- - Epic (SU1) [nwaku]
- - Epic (SU1) [go-waku] -- post mvp approval
- - Epic (SU1) [js-waku] -- post mvp approval
...
- - Epic (SU2) [nwaku]
- - Epic (SU2) [go-waku] -- post mvp approval
- - Epic (SU2) [js-waku] -- post mvp approval
...

If the feature moves forward out of the nwaku mvp implementation, the Epics would breakdown by subteams and phases.

Copy link

@Ivansete-status Ivansete-status left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM! Thanks for it! 💯

Comment on lines 22 to 28
- research:
- js-waku:
- nwaku:
- go-waku:
- QA:
- Docs:
- Eco-Dev:

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How should we use this list?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This was meant to have the link tot he various github issues but I opted to remove it as it is dupe info.

README.md Outdated

| Name | Number of | Timeframe | Team Scope | Owner | Description |
|--------------|-----------------------|------------------------------------------------|-------------------------------------------------|------------------------|-------------------------------------------------------|
| Deliverable | 3-5 per year | Set yearly for grant request | Waku Team | Waku Lead | TBD |

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think is better to just have three possible terms: Milestone; Epic; and Taks. The simpler the better

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Deliverable is something asked by C&J for grant reason.
For now, this can be ignored. I'll actually remove it from the doc for simplicity purposes.

README.md Outdated Show resolved Hide resolved
README.md Outdated Show resolved Hide resolved
README.md Show resolved Hide resolved
README.md Outdated
Comment on lines 65 to 68
| `E:QA` | Vac/DST | RFC-based + functionality based tests, both unit and integration tests. | Test engineers take over and complete unit tests + add scenarios in integration test framework. In future, also add scenario to benchmark suite. |
| `E:Dogfood` | js-waku, go-waku, nwaku | Lab example updates, own nodes updated, etc. | Each dev team proceed by dogfooding the feature/API by using it themselves. Whether it is running their own node, or updating a selected number of examples. |
| `E:Docs` | Doc | Documentation (not auto-generated) | Document the new feature across all implementations, using the dogfooding output as handover material from engineering teams. |
| `E:Eco-Dev` | Eco Dev | Dev Rel assets (examples, video tutorial, etc), comms plan (X threads, blog posts) | Dev Rel can now prepare assets to push the feature to developers, comms can prepare copies to communicate about it, BD can push it to projects and partners. |

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shall we restrict to only use low-case in our labels?

Suggested change
| `E:QA` | Vac/DST | RFC-based + functionality based tests, both unit and integration tests. | Test engineers take over and complete unit tests + add scenarios in integration test framework. In future, also add scenario to benchmark suite. |
| `E:Dogfood` | js-waku, go-waku, nwaku | Lab example updates, own nodes updated, etc. | Each dev team proceed by dogfooding the feature/API by using it themselves. Whether it is running their own node, or updating a selected number of examples. |
| `E:Docs` | Doc | Documentation (not auto-generated) | Document the new feature across all implementations, using the dogfooding output as handover material from engineering teams. |
| `E:Eco-Dev` | Eco Dev | Dev Rel assets (examples, video tutorial, etc), comms plan (X threads, blog posts) | Dev Rel can now prepare assets to push the feature to developers, comms can prepare copies to communicate about it, BD can push it to projects and partners. |
| `E:qa` | Vac/DST | RFC-based + functionality based tests, both unit and integration tests. | Test engineers take over and complete unit tests + add scenarios in integration test framework. In future, also add scenario to benchmark suite. |
| `E:dogfood` | js-waku, go-waku, nwaku | Lab example updates, own nodes updated, etc. | Each dev team proceed by dogfooding the feature/API by using it themselves. Whether it is running their own node, or updating a selected number of examples. |
| `E:docs` | Doc | Documentation (not auto-generated) | Document the new feature across all implementations, using the dogfooding output as handover material from engineering teams. |
| `E:eco-dev` | Eco Dev | Dev Rel assets (examples, video tutorial, etc), comms plan (X threads, blog posts) | Dev Rel can now prepare assets to push the feature to developers, comms can prepare copies to communicate about it, BD can push it to projects and partners. |

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I just made client name lowercase for now. I think whatever reads best as these are then used in insight dashboards.
The dashboards are then supposed to be public.

@chair28980 what do you prefer?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@fryorcraken i prefer lowercase 😄

README.md Show resolved Hide resolved
README.md Outdated Show resolved Hide resolved
README.md Show resolved Hide resolved
- OR MAY be tracked as a single GH issue
- that MUST be labelled with related _Epic_ label (`E:...`),
- OR MAY be tracked as a GH Pull Request
- that MUST be labelled with related _Epic_ label (`E:...`),
- that MUST have a reference to the related GitHub _Task_ or _Epic_ issue

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

IMO, a Task with sub-Tasks is an Epic. Then, I don't see the need for a Task to keep a list of other Tasks

@fryorcraken
Copy link
Contributor Author

(1) improved Store protocol (2) basic sync protocol.

Can (1) be done, delivered and useful to developers and users without (2)? If so, then I would consider (1) as a milestone. and (2) as a different milestone.
They can be both in the same track and "Milestone: TWN Store Upgrade (SU)" could simply be viewed as 2024 message reliability track work.

The idea is to have minimal scope for the milestone so we can push them from research to dev rel asap.

In the case of (1) and (2). If I remember correctly as soon as (1) is done in go-waku and nwaku, Status will want to use it. Likely before (2) is finished.
Which means that all the steps after research (nwaku, go-waku, dogfooding, doc) for (1) need to happen independently from (2).

IMO, this also makes it simpler to understand what is done, and what remains to be done.

@fryorcraken
Copy link
Contributor Author

I agree with your point that Epics should breakdown into appropriately sized batches of work. Using the Milestone you referenced as a rough template of what the work might break down to coming out of the Research phase

I also accept we need some flexibility for research. Thinking incentivization for example. Research can focus on having a bear minimum PoC but then consider that such PoC would be useless without some addition.

In this case, the "research epic" is not really completed. The work can continue with a second PoC. Once a useful PoC is out, then the scope of the PoC makes the milestone scope and gets pushed across to dev, docs, dev rel etc.

Remaining work can then be scoped in a new milestone.

@fryorcraken
Copy link
Contributor Author

@Ivansete-status (not sure why I could not comment).

IMO, a Task with sub-Tasks is an Epic. Then, I don't see the need for a Task to keep a list of other Tasks

Similarly to above. The aim is to scope epics to a specific team.
Each team has their own epic for a milestone.
A milestone is minimal in scope.

Now, to achieve your team epic (e.g. E:nwaku Autosharding for autoscaling) you need to do a number of tasks.

This framework is very flexible on how your organize the task. Whether it's a bunch of GitHub issues on the repo, or just a check list in the epic issue, or both.

As long as:

  • The GitHub issue related to the epic have the right epic label
  • The PR related to the epic are referring back to a GitHub issue with the label.

This way nobody has to remember to set epic labels in PRs.

@chair28980
Copy link
Contributor

(1) improved Store protocol (2) basic sync protocol.

Can (1) be done, delivered and useful to developers and users without (2)? If so, then I would consider (1) as a milestone. and (2) as a different milestone. They can be both in the same track and "Milestone: TWN Store Upgrade (SU)" could simply be viewed as 2024 message reliability track work.

The idea is to have minimal scope for the milestone so we can push them from research to dev rel asap.

In the case of (1) and (2). If I remember correctly as soon as (1) is done in go-waku and nwaku, Status will want to use it. Likely before (2) is finished. Which means that all the steps after research (nwaku, go-waku, dogfooding, doc) for (1) need to happen independently from (2).

IMO, this also makes it simpler to understand what is done, and what remains to be done.

I agree with this approach but note that it deviates from the approach of approach of fewer, larger milestones.

@jm-clius
Copy link

Can (1) be done, delivered and useful to developers and users without (2)

It can. This is just an example, though. There are other milestones with interdependent "subcomponents" that becomes a bit difficult to schedule as individual milestones with clear user benefits. Take the milestone to provide basic service protocol incentivization: we could divide this into milestones each for Store, Filter, Lightpush, etc. but this now becomes a breakdown that does not quite match the practical reality. We're more likely to complete this as a Store PoC, followed by generalisation to all service protocols and then concerted dogfooding to come up with a blueprint for productionisation. Each of these could be communicated as a milestone in its own right, but the "clear user benefit" IMO is best expressed as the overall goal of "basic service protocol incentivization". Some of these fine-grained milestones may also not even impact any team other than the Research team - PoCs for example can be done up to production plan without any other team involvement. Epics would then allow us to differentiate which tasks, towards the same milestone, belong to which teams. That said, this is mostly a matter of semantics and organisation, so I'm also happy to use finer-grained milestones.

@fryorcraken
Copy link
Contributor Author

Can (1) be done, delivered and useful to developers and users without (2)

It can. This is just an example, though. There are other milestones with interdependent "subcomponents" that becomes a bit difficult to schedule as individual milestones with clear user benefits. Take the milestone to provide basic service protocol incentivization: we could divide this into milestones each for Store, Filter, Lightpush, etc. but this now becomes a breakdown that does not quite match the practical reality. We're more likely to complete this as a Store PoC, followed by generalisation to all service protocols and then concerted dogfooding to come up with a blueprint for productionisation. Each of these could be communicated as a milestone in its own right, but the "clear user benefit" IMO is best expressed as the overall goal of "basic service protocol incentivization". Some of these fine-grained milestones may also not even impact any team other than the Research team - PoCs for example can be done up to production plan without any other team involvement. Epics would then allow us to differentiate which tasks, towards the same milestone, belong to which teams. That said, this is mostly a matter of semantics and organisation, so I'm also happy to use finer-grained milestones.

I think it's important to go back to the reason why the new process is designed as it is and I realized I may have not expressed it clearly.

The attributes I am aiming for are:

  1. Clear tracking of work across the teams so that when we says that a milestone is delivered, then:
  • it is usable by all types of users (operators, web devs, system devs).
  • It is documented (docs, dev rel)
  • It is of high quality (QA, Dogfooding)
  1. Items (epic, milestones) can be easily be closed and marked as complete thanks to:
    • Minimal external dependencies
    • Minimal inter team dependency (e.g. nwaku epic can be closed without waiting for QA)
    • Finite, well-define scope.
  2. Each milestone and the effort needed has a clear value thanks to a well-defined, value-driven, minimal, scope.

I understand that you are saying that research may need several PoC before we can handover to dev.

I think it's fine if we have a system where a team may have several epics under a milestone. E.g:

Milestone: Store Incentivization

  • E:Research Store incentivization - Improved protocol
  • E:Research Store incentivization - Basic sync protocol\

Then, once All PoC are done and ready to be handed over:

  • E:nwaku Store incentivization

The point of having a process and some guidelines is to make it easy to operate with the wanted attributes (see above), and hard to go against the attributes.

In the case you mentioned, there are 2 paths:

  1. Take store incentivization from PoV to MVP to Prod
  2. Take store incentivization to PoV, then take generalization to PoV to MVP to Prod

I would argue that (1) is the preferred path.
Minimal scope to bring a useful value to the users and validate assumptions around req-res protocol incentivization before making it generalized.
If we decide to increase the scope and go for (2) we need to have a clear justification (e.g risk assessment etc).

@fryorcraken
Copy link
Contributor Author

I am merging to also re-org the files and avoid conflicht with weekly update but we can do more changes down the line.
It seems the only contention point is around having several epics for a give team (see #107 (comment)).

@fryorcraken fryorcraken merged commit 6698706 into master Jan 22, 2024
@fryorcraken fryorcraken deleted the milestone-process branch January 22, 2024 00:38
@fryorcraken
Copy link
Contributor Author

#112

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants