Skip to content

Commit cba8fda

Browse files
committed
initial commit
0 parents  commit cba8fda

File tree

5 files changed

+151
-0
lines changed

5 files changed

+151
-0
lines changed

README.md

Lines changed: 151 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,151 @@
1+
# The Design-Driven Development Process
2+
3+
During a sprint planning meeting, the team will discuss whether any of the issues to be worked on require a design document.
4+
5+
Something likely qualifies for a design document if it:
6+
7+
- Creates or changes an interface
8+
- Introduces new concepts, data structures, or algorithms
9+
10+
If so, the owner of the issue will:
11+
12+
1. **Create a new design document in `./in-progress`**:
13+
- Follow the naming convention `NNNN-title.md`
14+
- `NNNN` is the issue number
15+
- `title` is a short description of the design (in `kebab-case`).
16+
17+
18+
2. **Establish initial approvers**:
19+
- The first approver is your team lead. If you are a team lead, choose another approver.
20+
- If you are an approver, you can add other approvers or remove yourself as needed.
21+
- Work with your first approver to identify other approvers and stakeholders.
22+
23+
3. **Collaborate and iterate on the design document**:
24+
- Create and refine the first draft, then submit a PR
25+
- When you are ready, share the PR in the #engineering-designs channel in slack.
26+
- Include the design approvers, stakeholders, and the target approval date in your message
27+
- e.g.: [feature]. [target approval date]. cc @alice, @bob, @carol"
28+
- Open the thread and paste the "Executive Summary" from your design.
29+
- Iterate on the design based on the feedback and discussions
30+
31+
4. **Get approval**:
32+
- When approvers are satisfied with the design, they will approve the PR on github.
33+
- When all approvers have signed off, merge the PR with the design
34+
35+
5. **Implement the design** based on the finalized design document.
36+
- Any changes or decisions made during the implementation phase should be captured in user docs or protocol spec *and flagged in PRs*.
37+
- When the design has been implemented, create a PR to move it from `./in-progress` to `./implemented`
38+
- Include a brief explanation of changes to the original design
39+
40+
41+
If a design is ultimately rejected, the owner should update PR to merge the design document into the `./rejected` directory after adding a comment explaining why it was rejected.
42+
43+
If a design is approved for implementation and then abandoned, the owner should create a PR to move it from `in-progress` to `abandoned` after adding a comment explaining why the design was abandoned.
44+
45+
46+
## Approvers vs Stakeholders
47+
48+
Stakeholders are anyone materially impacted by your change. This should be a large-ish set: PMs, DevRel, engineers across the stack, so on. Shoot for at least 5 stakeholders.
49+
50+
Approvers are a subset intimately familiar with what you're doing who will share the responsibility for the outcomes from the design. Shoot for 2-5 approvers.
51+
52+
## Rejected Designs
53+
54+
If a design is ultimately rejected, the untag the document with `design-wip`, and tag it with `design-rejected`. Include a brief explanation of why the design was rejected.
55+
56+
Note, rejected designs are good. It saves us from implementing bad designs, and allows us to point back at why certain decisions were made.
57+
58+
59+
## Zen-spiration
60+
61+
Why do we care about designs?
62+
63+
> "The beginning is the most important part of the work." - Plato
64+
65+
A design means we can move faster because we all have more clarity on what we're building and how all the users interact.
66+
67+
> "Design is not what you see, but what you make others see." - Edgar Degas
68+
69+
Speed is paramount: it allows us to more rapidly provide value to users, and refine that value.
70+
71+
> "Design is an iterative process. The key is to generate ideas, test them, and iterate until you find the right solution." - John Maeda
72+
73+
Designs are solutions to problems. Problems are experienced by users. Therefore, a design-driven mindset is a user-centric mindset.
74+
75+
> "The role of the designer is that of a good, thoughtful host anticipating the needs of his guests." - Charles Eames
76+
77+
Users include end-users, external developers, internal developers, and even/especially components of the system itself. When we think about designing components as users, we can think about the "primitives" that we need.
78+
79+
> "Primitives are the raw parts or the most foundational-level building blocks for software developers. They’re indivisible (if they can be functionally split into two they must) and they do one thing really well. They’re meant to be used together rather than as solutions in and of themselves. And, we’ll build them for maximum developer flexibility. We won’t put a bunch of constraints on primitives to guard against developers hurting themselves. Rather, we’ll optimize for developer freedom and innovation." - 2003 AWS Vision document
80+
81+
Keeping yourself in a purposeful, user-centric mindset is a discipline.
82+
83+
> "Quality is not an act, it is a habit." - Aristotle
84+
85+
86+
# Template
87+
88+
| | |
89+
| -------------------- | --------------------------------- |
90+
| Issue | [title](github.com/link/to/issue) |
91+
| Owners | @you |
92+
| Approvers | @alice @bob |
93+
| Target Approval Date | YYYY-MM-DD |
94+
95+
96+
## Executive Summary
97+
98+
Provide the executive summary on your major proposed changes.
99+
100+
## Introduction
101+
102+
Briefly describe the problem the work solves, and for whom. Include any relevant background information and the goals (and non-goals) of this implementation.
103+
104+
## Interface
105+
106+
Who are your users, and how do they interact with this? What is the top-level interface?
107+
108+
## Implementation
109+
110+
Delve into the specifics of the design. Include diagrams, code snippets, API descriptions, and database schema changes as necessary. Highlight any significant changes to the existing architecture or interfaces.
111+
112+
Discuss any alternative or rejected solutions.
113+
114+
## Change Set
115+
116+
Fill in bullets for each area that will be affected by this change.
117+
118+
- [ ] L1 Contracts
119+
- [ ] Enshrined L2 Contracts
120+
- [ ] Private Kernel Circuits
121+
- [ ] Public Kernel Circuits
122+
- [ ] Rollup Circuits
123+
- [ ] Aztec.nr
124+
- [ ] Noir
125+
- [ ] AVM
126+
- [ ] Sequencer
127+
- [ ] Fees
128+
- [ ] P2P Network
129+
- [ ] Cryptography
130+
- [ ] DevOps
131+
132+
## Test Plan
133+
134+
Outline what unit and e2e tests will be written. Describe the logic they cover and any mock objects used.
135+
136+
## Documentation Plan
137+
138+
Identify changes or additions to the user documentation or protocol spec.
139+
140+
141+
## Rejection Reason
142+
143+
If the design is rejected, include a brief explanation of why.
144+
145+
## Abandonment Reason
146+
147+
If the design is abandoned mid-implementation, include a brief explanation of why.
148+
149+
## Implementation Deviations
150+
151+
If the design is implemented, include a brief explanation of deviations to the original design.

abandoned/.gitkeep

Whitespace-only changes.

implemented/.gitkeep

Whitespace-only changes.

in-progress/.gitkeep

Whitespace-only changes.

rejected/.gitkeep

Whitespace-only changes.

0 commit comments

Comments
 (0)