Writing technical specification

by Jerry Sky

Writing code before writing a good technical spec document can be disastrous to the project being worked on. The idea of writing code and figuring out the “what and how” of a solution to a given problem is irresponsible.
This note is based on an article by Zara Cooper.

1. Why write such a document

One can think of such spec document as the model of the solution to the given problem, meaning the shape of the programs and other utilities that will be crafted during the implementation process. It is the first mock-up that is the foundation of later iterations of a proposed solution. A draft that is later perfected, a first input solution that we inject into the metaheuristic algorithm that the team working on a solution is.

In simpler terms: a set of guidelines that enables the creators of the project to converge towards the perfect solution.

2. Benefits

This spec document can be beneficial to all members of the team working on given project.

Engineers are forced to fully understand the topic and better prepare for creating an appropriate solution.

It is still a technical way of describing given problem, but much more understandable (human-readable text instead of pure code) for the other non-engineer members of the team.

The document sums up the purpose of the project and the proposed solution to the problem.

3. Gathering data

The spec document also gives an opportunity to gather as much vital (both about the problem and about possible solutions) information, compile it and avail it to all members of the team.

Afterwards, feedback can be acquired from members of the team or from external sources.

4. Document contents

4.1. Front cover

4.2. Introduction

4.2.1. Overview

Problem description, summary, abstract

High-level abstract description (from the perspective of a standard user). Gives information about the “what and how” in simple terms, the context and a proposed solution to the problem.

4.2.2. Terminology

Set of definitions specific to this project

For better communication between various users and creators of the solution a set of terms and their clear definitions should be established.

4.2.3. Context

4.2.4. Technical requirements

List of all technical utilities that are necessary to create a solution to the problem. These include both what hardware and software has to be used to accomplish tasks set out in the proposed solution.

4.2.5. User wish-list

A set of stories, requirements and wish-lists of the actual to-be-users of this solution.

4.2.6. Out of scope

List of all goals that will not be achieved.

4.2.7. Future goals

Future research that can be conducted on the problem and list of all concerns that may be a problem after the solution is implemented.

4.3. Solutions

4.3.1. Current handling of the problem

4.3.2. Proposed solution

4.3.3. Test Plan

4.3.4. Monitoring and altering plans

4.3.5. Deployment plans

4.3.6. Rollback plan

4.3.7. Alternate solutions

4.4. Further Considerations

4.4.1. Impact on other teams

How will this increase the work of other people?

4.4.2. Third-party services and platforms considerations

4.4.3. Cost analysis

4.4.4. Security considerations

4.4.5. Privacy considerations

4.4.6. Regional considerations

4.4.7. Accessibility considerations

4.4.8. Operational considerations

4.4.9. Risks

4.4.10. Support considerations

4.5. Success Evaluation

4.5.1. Impact

4.5.2. Metrics

4.6. Work cost

4.6.1. Work estimates and timelines

4.6.2. Prioritization

Categorization of tasks by urgency and impact

4.6.3. Milestones

4.6.4. Future work

List of tasks that will be completed in the future.

4.7. Deliberation

4.7.1. Discussion

Elements of the solution that members of the team do not agree on and need to be debated further to reach a consensus.

4.7.2. Open questions

Questions about things you do not know the answers to or are unsure that you pose to the team and stakeholders for their input. These may include aspects of the problem you don’t know how to resolve yet.

4.8. End cover

Any work external to the proposed solution that is similar to i in some way is worked on by different teams. It’s important to know this to enable knowledge sharing between such teams when faced with related problems.

4.8.2. References

Links to documents and resources that were used when coming up with the desing and wish to credit.

4.8.3. Acknowledgements

Credit people who have contributed to the desing that you wish to reorganize.


5. Source

Original article by Zara Cooper

This note is mainly based on the above mentioned article with some minor modifications.