Skip to content

Commit 938c124

Browse files
authored
Adding initial proposal docs (#1)
1 parent 193b403 commit 938c124

File tree

6 files changed

+494
-0
lines changed

6 files changed

+494
-0
lines changed

0001-P-proposal-process.md

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
# Improving the Dapr proposal process
2+
3+
* Author(s): John Ewart (@johnewart), Mukundan Sundararajan (@mukundansundar)
4+
* State: Draft
5+
* Updated: 10/25/2022
6+
7+
## Overview
8+
9+
This proposal is to formalize the structure and lifecycle to proposals with three primary goals: first, make it easier for contributors to both put forth proposals as well as review them, second, increase the clarity and focus of proposals themselves, and, third, provide guidance on what is expected for a well defined feature to be "dev complete". In order to do this, we should:
10+
11+
1. Create a template for new proposals.
12+
2. Define the core requirements for a feature that is being proposed to be considered complete.
13+
3. Implement a process for reviewing and accepting new proposals.
14+
15+
## Background
16+
17+
### Why define a proposal process and templatize it?
18+
19+
As a community project, Dapr relies on contributors to help advance the project the goal of this proposal is to simplify the process of contributing, and evaluating, new ideas. We want to make it more inviting for community members to propose new ideas (or evaluate them) as well as ensure that the time being spent evaluating proposals or working on new features is well spent.
20+
21+
Adding clarity to the proposal process, as well as some amount of structure, will hopefully make it easier for contributors of all experience levels to both contribute and review new ideas. As a new contributor it can sometimes feel a bit daunting to propose a new idea -- not knowing quite where to start, whether or not what you are proposing has the right level of information, etc. Having structure makes it easier for a new contributor who wants to propose a new idea to know what is expected and feel confident that their proposal meets those expectations. In addition, for anyone putting forward a proposal, the structure proposed prompts thinking about how someone else would use the feature, how they might benefit from it, and what other ways the feature they are proposing might be solved using existing features (or other technology).
22+
23+
On the other side of the equation are the community members who are reviewing those proposals; it can be challenging to review something if you feel that information or context is lacking. A consistent structure means that reviewers can know what to expect out of a proposal document and clearly ask for more information if some is missing. And, the suggested structure would make sure that reviewers have the right information needed to have a conversation about the proposal (as well as reduce the scope of the review).
24+
25+
As a community, we want to be welcoming of new people and also respectful of the time and energy that everyone devotes to make this project great. I believe that adding this small amount of structure to the proposal process will help not only make it easier to propose new ideas, but also ensure that everyone who is participating can make the best use of the time they have available to improve Dapr!
26+
27+
### Why define minimum requirements for a feature to be complete?
28+
29+
As Dapr increases in scope and brinds on more contributions, it is important that we define what we expect before a new feature is added to Dapr. In order to assure that all aspects of the feature have been completed for release we need to provide clear guidance on what needs to be accomplished before it is accepted into Dapr. This will help us to qualify these features as complete for a particular release milestone and be confident in what is being released. For example, most features would require, at a minumum:
30+
31+
* Completion of the code
32+
* Maintainer signoff on the implementation by the feature freeze date
33+
* Code merged into the main branch well before the code freeze date (feature freeze date at the latest)
34+
* During the time between feature freeze and code freeze, any P0 regressions/bugs related to this feature that are identified need to be fixed.
35+
* Adding / updating performance tests, e2e tests etc.
36+
* Documentation for the new feature has been committed to `dapr/docs`
37+
* Creating / updating quick starts, tutorials (if relevant)
38+
39+
In addition, some features would require changes to SDKs or have additional requirements in order for it to be considered fully complete, and so those requirements should also be tracked in order to ensure completion.
40+
41+
42+
## Background vs Design
43+
44+
> "Your scientists were so preoccupied with whether they could, they didn’t stop to think if they should." - Dr. Ian Malcolm (Jurassic Park)
45+
46+
The intent of the proposal is to focus on three primary areas:
47+
48+
* _What_ the proposal is putting forth
49+
* _Why_ the proposal is required (what will it do for users?)
50+
* _How_ the proposal will work
51+
52+
53+
### A bit about the _why?_
54+
55+
In order to be effective, a proposal must provide both the background on the idea: what it is and how it works (at a high level) as well as _why it should be introduced to Dapr_. The why part of this proposal is just as important (if not more so) than what is being proposed, as it lets the reviewers understand better what kinds of use cases that the feature shall enable, how it shall make Dapr better or improve the experience of Dapr users. By going through and clarifying _why_ something should be added to Dapr, it forces us as developers to think carefully about what we are taking on as a community and how it will impact others - the benefits and potential drawbacks that it might bring.
56+
57+
In addition, it must also convey what is in scope and what is out of scope (i.e what things have been deliberately omitted) along with any alternatives that have been considered and why they were not a good fit.
58+
59+
### Design
60+
61+
The second half of the process focuses on the implementation of the proposal - the goal of this part is to show the community not only how it will operate, but also provide information on how success shall be measured and also include a list of activities that must be completed in order for this proposal to be complete.
62+
63+
## Proposed templates for Design and Build Phases
64+
65+
See the following file: [templates/proposal.md](templates/proposal.md)
66+
67+
## Related Items
68+
69+
### Related proposals
70+
71+
N/A
72+
73+
### Related issues
74+
75+
N/A
76+
77+
## Expectations and alternatives
78+
79+
### What is in scope for this proposal?
80+
81+
This proposal covers the process for creating, storing, and reviewing proposals. The intention is to improve the process and increase clarity around proposals, their status, and their design.
82+
83+
### What is deliberately *not* in scope?
84+
85+
The planning process for including proposals in a given release is not a part of this proposal, the assumption is that process will continue to operate as it currently does.
86+
87+
### What advantages / disadvantages does this proposal have?
88+
89+
This proposal has the advantage of increasing clarity of proposals as well as implicitly creating a record of design decisions; however, it is a little more involved and structured than the previous process, which may be viewed as a disadvantage. The authors of this proposal believe that the advantages significantly outweigh any potential disadvantages, however.
90+
91+
## Implementation Details
92+
93+
### Completion Checklist
94+
95+
- [ ] A new repository (`dapr/proposals`) is created as a copy of this repository
96+
- [ ] Any relevant documentation around submitting proposals or the development process point to this new repository and process
97+
- [ ] Migration of existing _in-flight_ proposals from GitHub issues to this repository
98+
- [ ] _(Optional)_ Migration of previous proposals to this repository

README.md

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
# Dapr Proposals
2+
3+
## Introduction
4+
5+
This repository stores proposals and designs for new features in Dapr (i.e not bug fixes or minor changes) with the intention of improving visibility, historical record-keeping and maintaining a consistent process.
6+
7+
### What types of changes warrant a proposal here?
8+
9+
As mentioned above, any significant change that needs design and a conversation around that design should go here. As a guideline, anything that would warrant a change in the Dapr SDKs would probably require a proposal. Some specific examples would include:
10+
11+
* New Dapr building blocks
12+
* New APIs or breaking API changes (especially to a non-alpha component)
13+
14+
## How do I create a proposal?
15+
16+
1. Create a fork of this repository.
17+
2. Copy the proposal template [templates/proposal.md](templates/proposal.md) following the format outlined below.
18+
3. Edit the template, filling it in with the proposal (for guides, see information in `guides/`)
19+
5. Submit a PR to `dapr/proposals` for community review.
20+
21+
## Proposal name format
22+
23+
Proposal file are named in the following format:
24+
25+
> `NNNN-FLAGS-description.md`
26+
27+
Where *NNNN* is the next incremental number in the proposal repository, as a 4 digit number (i.e 0001, 0002...), and *FLAGS* is one (or possibly more) of:
28+
29+
* B - Building block change / creation
30+
* C - Components change / creation
31+
* I - Affects Dapr CLI
32+
* P - The proposal Process itself
33+
* R - Runtime
34+
* S - Affects SDKs
35+
36+
So, for example, a proposal to create a new building block, such as the workflow building block, might be something like `0004-BRS-workflow-building-block.md`, whereas a change to the actor system, which does not require any changes to the SDKs themselves, would be something like `0005-R-actor-reminder-system.md`
37+
38+
## Proposal Process
39+
40+
* The proposal will be opened as a PR against this repository
41+
* Proposal will be reviewed by the community and the author(s) of the proposal
42+
* The author(s) address questions/comments from the community in the proposal and adjust the proposal based on feedback
43+
* Once the feedback phase is complete, and a proposal has been accepted, the proposal will be merged into this repository
44+
* An issue needs to be created in dapr/dapr created from the template in [templates/lifecycle.md](templates/lifecycle.md) to track the work that needs to be done to implement this proposal
45+
* Release of the feature will be slated for a specific release version of Dapr
46+
47+
48+
## Feature lifecycle outline
49+
50+
Features in Dapr have a lifecycle (e.g [Components](https://docs.dapr.io/operations/components/certification-lifecycle/)) and, as such, should have a defined set of milestones / requirements for progression between the lifecycle phases. For example, can a user expect from a feature when it is Alpha quality? Once that is released, what is the plan to progress from Alpha to Beta, and the subsequent expectations? What is the expectation when this feature becomes Stable? It is important to identify what functionality or perfomance guarantees we are making to users of Dapr when adding something new.
51+
52+
For example, the lifecycle expectations of a "Foobar API" that is going to replace an existing API might look something like:
53+
54+
Alpha:
55+
* Initial contract for the Foobar API is complete
56+
* Performance is expected to be >10TPS
57+
* Will not support serialization via XML
58+
* Data stored will not be compatible with old API, existing data will be unavailable through this API (will need to use old API to access old data)
59+
* Only available when feature flag `foobar-api` is enabled
60+
* No migration of existing data from the old API available
61+
62+
Beta:
63+
* Performance meets or exceeds 1,000TPS
64+
* Enabled by default, users can opt-out via feature flag / configuration
65+
* Existing APIs marked as deprecated
66+
* Migration from previous data source / format can be done manually
67+
* XML will be supported
68+
* Backwards-incompatible changes may be made
69+
70+
71+
Stable:
72+
* Enabled by default, existing APIs have been removed fully
73+
* Documentation has been changed to remove previous API definitions
74+
* Migration from previous data source / format will be done automatically (lazily)
75+
* API is stable and changes will not be backwards-incompatible
76+
77+
78+
79+
## Proposal Language
80+
81+
This information can be included either in the template or in a README -- and is designed to provide a common language for proposals so that the expectations are clear.
82+
83+
84+
### Terminology
85+
86+
_(This is an incomplete list and should / will be expanded over time)_
87+
88+
| Term | Meaning |
89+
|------|-------------------------------------------------------------------------------------------------------------------------------------------------------------|
90+
| Building block | Capabilities that solve common developmental challenges in building distributed applications |
91+
| API | Application Programming Interface - functionality exposed to end-users that can be used to interact with Dapr's building blocks in the application they are building |
92+
| Feature | New or enhanced functionality that is being added to Dapr |
93+
94+
### Keywords
95+
96+
The keywords “MUST”, “MUST NOT”, "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY",
97+
and "OPTIONAL" in this document are to be interpreted as described in RFC 2119.
98+

0 commit comments

Comments
 (0)