In this phase you will produce a [Design Document], and get that approved. At a high level what you need to do is:
What Does A Design Doc Do? #
- Reference the requirements you are trying to meet
- Lay out the logical “components” and describe how they will work together
- Specify the inner function of each component
- You can delegate this to sub-designs with more technically-focused requirements
- Specify what technical decisions were made and why
- Address cross-cutting concerns (operations, security, extensibility)
- Provide a breakdown of the needed work, with estimates of how much engineer time each step will take
- Get all the way down to individual tasks, even if it means making sub-designs
- Get approval from all people and teams who will probably be involved in the work
How to think through a design #
- Figure out what the fundamental shape of the problem is
- Create [“action/information” flow diagrams]
- Group sets of actions in the flow diagram that can serve as distinct components
- Each component should be uniquely identified by a clear, independent responsibility (see “Separation of Concerns”)
- Try many different breakdowns
- Get into how each component will be implemented
- What would each component look like? A service? A DB? A library? A webpage?
- Think about applicable [System Archetypes]
- Think about whether anyone else in your company is solving each subproblem
- Dive into the details
- What does the data flowing between the components look like?
- What is the specific interface of each component (inputs, outputs)
- What happens when something goes wrong in a component?
- What is the exact sequence of interactions that will happen?
If your problem is very large, you may have multiple “sub-breakdown” stages before you get to hard details – in those cases it may be appropriate to have one “High-Level Design” doc as well as “Component Design” docs.
When Am I Done? #
When you’ve filled in [this whole design doc template] and gotten it approved by your key approvers.
NOTE: You can get informal approval in 3 phases as you build the document:
- Requirements, to make sure you’re solving the right problem
- Proposal, to make sure your overall approach makes sense
- Details, to make sure you’re getting all the details right and it’s ready for planning