As a software engineer, your primary role is to solve technical problems. Your first impulse may be to immediately jump straight into writing code. You can think through difficult technical problems by writing a technical spec. But writing a technical spec increases the chances of having a successful project, service, or feature that all stakeholders involved are satisfied with. Technical specs have immense benefits to everyone involved in a project: the engineers who write them, the teams that use them, even the projects that are designed off of them.
Here are some reasons why you should write one. By writing a technical spec, engineers are forced to examine a problem before going straight into code, where they may overlook some aspect of the solution.
Technical specs, because they are a thorough view of the proposed solution, they also serve as documentation for the project, both for the implementation phase and after, to communicate your accomplishments on the project. With this well-thought out solution, your technical spec saves you from repeatedly explaining your design to multiple teammates and stakeholders.
They may catch exceptional cases of the solution that you may have neglected, reducing your liability. The more eyes you have on your spec, the better. A technical spec is a straightforward and efficient way to communicate project design ideas between a team and other stakeholders.
The whole team can collaboratively solve a problem and create a solution. As more teammates and stakeholders contribute to a spec, it makes them more invested in the project and encourages them to take ownership and responsibility for it.
With everyone on the same page, it limits complications that may arise from overlapping work. Newer teammates unfamiliar with the project can onboard themselves and contribute to the implementation earlier. Investing in a technical spec ultimately results in a superior product.
Since the team is aligned and in agreement on what needs to be done through the spec, big projects can progress faster. A spec is essential in managing complexity and preventing scope and feature creep by setting project limits. It sets priorities thereby making sure that only the most impactful and urgent parts of a project go out first. Post implementation, it helps resolve problems that cropped up within the project, as well as provide insight in retrospectives and postmortems.
The best planned specs serve as a great guide for measuring success and return on investment of engineering time. Gather the existing information in the problem domain before getting started.
With this knowledge of the problem history, try to state the problem in detail and brainstorm all kinds of solutions you may think might resolve it. Pick the most reasonable solution out of all the options you have come up with. Invite them to a meeting and explain the problem and the solution you picked. Lay out your ideas and thought process and try to persuade them that your solution is the most appropriate.
Gather their feedback and ask them to be a reviewer for your technical spec. Block off time in your calendar to write the first draft of the technical spec. Usea collaborative document editor that your whole team has access to. Get a technical spec template see below and write a rough draft. There are a wide range of problems being solved by a vast number of companies today. Each organization is distinct and creates its own unique engineering culture.
As a result, technical specs may not be standard even within companies, divisions, teams, and even among engineers on the same team. Every solution has different needs and you should tailor your technical spec based on the project. You do not need to include all the sections mentioned below. Select the sections that work for your design and forego the rest.
From my experience, there are seven essential parts of a technical spec: front matter, introduction, solutions, further considerations, success evaluation, work, deliberation, and end matter. Go through your draft as if you were an independent reviewer. Ask yourself what parts of the design are unclear and you are uncertain about.
Modify your draft to include these issues. Review the draft a second time as if you were tasked to implement the design just based on the technical spec alone. Make sure the spec is a clear enough implementation guideline that the team can work on if you are unavailable.
If you have doubts about the solution and would like to test it out just to make sure it works, create a simple prototype to prove your concept. Address all comments, questions, and suggestions as soon as possible. Set deadlines to do this for every issue. Schedule meetings to talk through issues that the team is divided on or is having unusually lengthy discussions about on the document.
If the team fails to agree on an issue even after having in-person meetings to hash them out, make the final call on it as the buck stops with you. Update the document with any changes in the design, schedule, work estimates, scope, etc. Writing test specs can be an impactful way to guarantee that your project will be successful. A little planning and a little forethought can make the actual implementation of a project a whole lot easier.
Great article. It summarized all the reasearch I had to do months ago in a single page! It will help a lot. I had the same exact frustrating problem earlier. Having a template definitely helps out a bunch. I am a civil engineer and you just helped a great deal. Some people cannot explain the thought process behind their good writing so it is difficult to learn from them. Thank you. Can I translate this article, please? I am the editor of InfoQ China. I think your article, is really great and will help Chinese readers learn how to write technical specifications.
By the way, InfoQ China is a formal media organization, we strictly follow copyright requirements, and all translations we publish will include the original information. I respect your opinion and abandon the plan to translate. This is a great overview, gonna add it to my list of reference materials for new projects that I check to see what I forgot to do! Very nice, clear and concise. A checklist every engineer should have in the back of his notebook. A lot of what was in the template could be applied to a wide range of specs.
Great article! Well written and laid out. I already write technical documentation for the projects I work on and this will help me to have a more organized and template moving forward. Hopefully this article will help the dying art come back to life.
Then I enforce that we should document what is needed, whether it is a big amount of specs. Then I tell people about spec by example way of doing things, so we can have the minimum. Finally, I usually present the articles related to the Joel Test, on Joel Spolsky — co founder of Stack Overflow btw — which also says something about having specs and how to write one, despite I think BDD can be used to promote a having a spec to having a runnable spec.
I agree Star, first planning before implementing a design yields way more benefits and saves you the agony of fixing something wrong in production or the final product, especially when stakes are high. So I have always written myself something to follow even if no one else is going to read it. Agile seems to mean correcting mistakes. I prefer not to make too many and have a clear idea of what I am doing and why I am doing it.
My only criticism of this template is that it seems to roll a few documents into one — I am more used or used to be to a hierarchy of documents than one colossal one. Generally I have seen technical specs more at a Unit level whereas this seems to be all-encompassing. If there are not enough employees on staff to manage projects, this means longer turnarounds or unhappy clients who cannot get their questions answered quickly enough. Therefore, a company will want to look at how many people work full-time within a team before accepting any projects to avoid problems later down the road.
When choosing a software developer, many factors contribute to the overall result. Companies can ensure that everyone is happy with the final product by keeping these critical aspects in mind when looking for software developers. Here are the ten most important aspects involved in software development.
Quality Assurance When choosing a software development company, a company should look at quality assurance QA testing ; this is also known as quality control. Project Management Support Another critical aspect of working with a desirable software developer involves project management support; this means having someone to oversee work done on the project from start to finish. Technical Expertise Another essential aspect to look for is technical expertise when selecting a software developer.
Specialized Experience As with its technical capabilities, a company will want to see its portfolio and what types of apps they typically work on. Cost and Pricing Model When looking for a software developer, cost and pricing models play an essential role in ensuring that both parties are satisfied with the result.
Time to Market Another essential aspect to consider when picking a software developer is how long it takes them to complete projects. Service to Client Ratio When choosing a software developer, they must have the right staff for the job at hand.
Conclusion When choosing a software developer, many factors contribute to the overall result. Tweet Share. More Decks by Yuichi Tsunematsu. See All by Yuichi Tsunematsu. Other Decks in Technology. See All in Technology. See All Featured. Minutes from the discussion of the coupon verification process of "Go to Eat" campaign.
0コメント