## How to write useful technical specs

I might be not that wrong in assuming that a lot of IT people out there encounter same problems regarding tech specs all the time – they become obsolete sooner than they are written. Mostly created to show the client – hey, we’re doing stuff here, here is the result, 100 pages of pure informational power. However, the result is often the same – after one glance, each team member will soon forget that this spec ever existed.

So how make specs more useful? In this article I won’t show how to formulate your spec, but more how (technically) to manage, that your spec stays up to date.

## Use LaTeX

No, not in the bedroom with your girlfriend (on the other side – who am I to judge you?), but the document markup language (according to Wikipedia).

LaTeX is not only cool – writing specs feels almost like writing code – but it allows you to maintain a healthy development process considering your spec.

### Problem No. 1

When your specs are starting to get bigger and you add stuff here and there, it is very (VERY!) hard for your team to follow up on changes. Using GIT in combination with LaTeX allows you to commit any changes just if it were code. And GIT markup fantastically highlights all changes that were made. So next time you can just give your team a link to the latest commit to they will see only the new and recent parts.

### Problem No. 2

Have you ever tried to create links within a document, say in MS Word? Yeah, you kinda able to do that, but if you add, say, a new point to your numerical list, all your links will get messed up. Regardless to say what happens if you add a whole new chapter at the beginning. LaTeX allows you to define variables, just like any programming language. Just use a simple

/label{section:intro}

where section:intro is just a clear variable meaning that your content is in the section called „intro“.

### Problem No. 3

As soon as you try to maintain your MS Word spec you realize how this program is clearly not created to write large documents. Ever tried to create a numerical list, then add a break and continue the list? Then you’ll know how easy it is to screw things up. By being completely controllable there is always an easy solution for almost everything you want to achieve with a LaTeX document.

## Use GIT

I mentioned it already in the previous paragraph, but I can’t stress it out enough – your LaTeX spec will really shine bundled with GIT. Not only you have a neat version control (and don’t need to save „project_x_tech_spec.v.1.0.docx“, „project_x_tech_spec.v.1.8.docx“ and so on), an ability to link only your recent changes by sending a commit link, but you also have one place for your always up-to-date end format, because recently github learned how to display pdf-files.

So basically your pdf url stays always the same, something like this:

## My setup

Since TeX is permissive free software (to me it sounds a lot like open source), there is a bunch of good free editors (honestly, even notepad will do it). However I felt in love with Texpad – it’s available only for MacOS (and iOS) and makes full usage of your retina display. It costs 25 \$ and is available for download at Texpad homepage.

Starting writing documents with TeX may be a bit hard the very first time (on the other hand – what isn’t hard the very first time?), but there are plenty amount of templates out there on the interwebs helping your out to fire your document up. My personal favorite (there are few Russian language related things which you might omit) :

\documentclass[DIV=calc, paper=a4, fontsize=11pt]{scrartcl} % Документ принадлежит классу article, а также будет печататься в 12 пунктов.
\usepackage{ucs}
\usepackage[T1,T2A]{fontenc}
\usepackage[utf8x]{inputenc} % Включаем поддержку UTF8
\usepackage[russian]{babel} % Пакет поддержки русского языка
\usepackage{titling} % Allows custom title configuration

%for frames
\usepackage{framed}

%For image using
\usepackage{graphicx}

%Numbering subsubsubsections etc
\setcounter{secnumdepth}{5}

%For code highlightning
\usepackage{listings}

%Further enumeration - you might omit that! It can lead to strange numeration!
\usepackage{enumitem}
\setenumerate[1]{label=\theparagraph.\arabic*.}
\setenumerate[2]{label*=\arabic*.}
\setenumerate[3]{label*=\arabic*.}

%For referencing within enumeration lists
\usepackage{enumitem}

%Packages for word-like comment style
%This is really awesome! You can add marks that are highlighted.
%My personal favorite usage is like this: \todo[inline]{some comment goes in there}
\usepackage{todonotes}

%Package for images
\usepackage{float}
\floatstyle{boxed}
\restylefloat{figure}

%For a nicer reference
\usepackage{fancyref}

\usepackage{titlesec}

\titleformat*{\section}{\LARGE\bfseries}
\titleformat*{\subsection}{\Large\bfseries}
\titleformat*{\subsubsection}{\large\bfseries}
\titleformat*{\paragraph}{\large\bfseries}
\titleformat*{\subparagraph}{\large\bfseries}

%For some math formulas if needed
\usepackage{mathtools}

% Some nice visualization
%\usepackage[svgnames]{xcolor} % Enabling colors by their 'svgnames'
\usepackage{fullpage}
%\renewcommand{\footrulewidth}{0.4pt} % Thin footer rule
% End visualization

%smart enumeration
\renewcommand{\labelenumi}{\arabic{enumi}.}
\renewcommand{\labelenumii}{\arabic{enumi}.\arabic{enumii}}

\title{Some title goes in there}
\date{22/04/2015}

\begin{document}

\maketitle

... Here goes your content with \section{} and \subsection{} and everything else...

\end{document}

Happy writing!