An intro to using Design Docs aka RFC’s to help teams build better software and share knowledge
As software engineers our job is not to produce code per se, but rather to solve problems.
I love to say that “problems are good, we solve problems”. Part of solving a big problem is to clearly define it and then to outline a solution. This process can be formalized into a “Design Doc”.
Writing a Design Doc and having it reviewed does several things:
Start of Design Doc template
Date: [YYYY-MM-DD]
Status: [Draft | In Review | Approved | Rejected]
Authors: [Your name, co-authors]
[1-3 sentence description of the problem]
[1-2 paragraphs, giving more context than the problem statement]
[Short list of bullets, what’s in scope]
[Short list of bullets, what’s out of scope]
[Details on the chosen solution, including discussion of trade-offs]
[Diagram showing how this system fits into existing systems]
[Sketch of API endpoints with focus on parts relevant to this design and trade-offs]
[Sketch of data storage with focus on parts relevant to this design and trade-offs]
[What aspects of the existing system constrain the design, or what boundaries are needed to help constrain it]
[Other possible solutions, discussing trade-offs that each design makes and how those trade-offs led to the proposed design]
[What needs to be considered to keep systems secure]
[What needs to be considered to protect customers]
[Bullets to other docs and even Slack threads discussing the problem/solution]
[If useful to record notes, keep this free form section for notes as the document above takes shape]
End of Design Doc template