Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@mattBrzezinski
Last active January 26, 2024 23:41
Show Gist options
  • Star 6 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mattBrzezinski/a87f61e6fe85ff0bcc7cdee9e5f943a3 to your computer and use it in GitHub Desktop.
Save mattBrzezinski/a87f61e6fe85ff0bcc7cdee9e5f943a3 to your computer and use it in GitHub Desktop.
Design Document Template

Contact Info

List of project members and their contact information.

Tenets

Tenets are a list of guiding principles for your project. Your tenets will keep you focused on your objective and keep you heading in the right direction.

Tenets are independent of each other, are clear and memorable. They are used to define what a team cares more about.

Tenets are used to to help make difficult choices and trade offs in design decisions.

Executive Summary

A high-level paragraph explaining the purpose of the document. This should be written with the scope that anyone in the company can view this document and have an understanding of the proposal. Include a summary of the problem, any background information and the proposed solution.

Measures of success

What will make this project successful? This can be listed as a bullet point list of key features, workflows, and qualitative metrics; such as increasing performance by X%. These measurements should not be considered pass/fail, but rather used in the retrospective to probe further questions into the system if needed.

In Scope

A list of things that you will do / address / solve as a bullet point list.

Out of Scope

A list of things that you will not do / no address / not solve as a bullet point list. Sometimes it is easier to start with this before writing what is In Scope.

Open issues

List of issues that you currently do not know how to solve. When having a design document review, these issues should be addressed and solutions proposed.

Use cases

Create an architecture diagram of your proposed system including any external systems that it will interact with. For more information on Use Cases visit the Wikipedia article.

Proposed solution summary

Write about how your solution works in a detailed narrative, refer to appendices for diagrams, APIs, data structures, database schemas, etc.

Other solutions

Describe any alternative solutions that you may have prototyped. Compare these alternative solutions to the proposed solution. List off the pros and cons of each solution, and why the proposed solution is the one you decided to go with.

Dependencies

List any external dependencies that your solution has, and why.

Functional requirements

A list of properties that can be expressed as “the system must do ”. The requirements should be measurable. Think of metrics. E.g.:

  • Users should be able to easily download prediction results.
  • The system should have a logically defined API.
  • The service should be able to handle 10,000 concurrent users.

Non-functional requirements

A list of properties that can be expressed as “the system shall be ”. E.g.:

  • The system shall be secure
  • Maintaining the system should be well defined and simple
  • The service should be easily extendible, its components should be modular.

Some categories which non-functional requirements can be placed in are:

  • Security
  • Extendability / Maintenance
  • Scalability
  • Availability / Resilience
  • Performance

Metrics

Define metrics for both functional and non-functional properties of your solution.

Alarms

Define your alarms based off of the metrics above.

Appendix

Include things such as:

  • Glossary
  • FAQ
  • One pagers
  • API definitions
  • Database Schemas
  • Links to dependencies
  • External documentation
@mattBrzezinski
Copy link
Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment