xref: /openbmc/docs/designs/design-template.md (revision 17dbdee6f08b4995a9998b814e5d1faaa0280a41)
1____
2### Design Guidelines - *Delete this section*
3
4* Not all new features need a design document. If a feature can be
5  contributed in a single reasonably small patchset that has little impact
6  to any other areas, it doesn't need a design discussion and documentation.
7* The focus of the design is to define the problem we need to solve and how it
8  will be implemented.
9* This is not intended to be extensive documentation for a new feature.
10* You should get your design reviewed and merged before writing your code.
11  However you are free to prototype the implementation, but remember that
12  you may learn of new requirements during the design review process that
13  could result in a very different solution.
14* Your spec should be in Markdown format, like this template.
15* Please wrap text at 79 columns.
16* Please do not delete any of the sections in this template.  If you have
17  nothing to say for a whole section, just write: None
18* To view your .md file, see: https://stackedit.io/
19* If you would like to provide a diagram with your spec, ASCII diagrams are
20  required.  http://asciiflow.com/ is a very nice tool to assist with making
21  ASCII diagrams.  Plain text will allow the review to proceed without
22  having to look at additional files which can not be viewed in Gerrit.  It
23  will also allow inline feedback on the diagram itself.
24____
25
26### Example design - this is the design title
27
28Author:
29  < Name and IRC nic >
30Primary assignee:
31  < Name and/or IRC nic or None >
32Other contributors:
33  < Name and/or IRC nic or None >
34Created:
35  < Date initially created, revisions in will be tracked in Gerrit >
36
37#### Problem Description
38(1 paragraph) What are we doing and why? What problem are you trying to
39solve? What are the goals and NON-goals? Please make the objective
40understandable for someone unfamiliar with this project by including the
41necessary context, but keep it short. Elaborate on the details below in the
42Background and Requirements sections.
43
44#### Background and References
45(1-2 paragraphs) What background context is necessary? You should mention
46related work inside and outside of OpenBMC. What other Open Source projects
47are trying to solve similar problems? Try to use links or references to
48external sources (other docs or Wikipedia), rather than writing your own
49explanations. Please include document titles so they can be found when links
50go bad.  Include a glossary if necessary. Note: this is background; do not
51write about your design, specific requirements details, or ideas to solve
52problems here.
53
54#### Requirements
55(2-5 paragraphs) What are the constraints for the problem you are trying to
56solve? Who are the users of this solution? What is required to be produced?
57What is the scope of this effort? Your job here is to quickly educate others
58about the details you know about the problem space, so they can help review
59your implementation. Roughly estimate relevant details. How big is the data?
60What are the transaction rates? Bandwidth?
61
62#### Proposed Design
63(2-5 paragraphs) A short and sweet overview of your implementation ideas. If
64you have alternative solutions to a problem, list them concisely in a bullet
65list.  This should not contain every detail of your implementation, and do
66not include code. Use a diagram when necessary. Cover major structural
67elements in a very succinct manner. Which technologies will you use? What
68new components will you write? What technologies will you use to write them?
69
70#### Alternatives Considered
71(2 paragraphs) Include alternate design ideas here which you are leaning away
72from. Elaborate on why a design was considered and why the idea was rejected.
73Show that you did an extensive survey about the state of the art. Compares
74your proposal's features & limitations to existing or similar solutions.
75
76#### Impacts
77API impact? Security impact? Documentation impact? Performance impact?
78Developer impact? Upgradability impact?
79
80#### Testing
81How will this be tested? How will this feature impact CI testing?
82