Skip to content

Developers Aren't Gonna Read It

November 20, 2008 by Przemysław Bielicki


Picture courtesy of austinevan@flickr

Developers are the customers - from time to time. They are the customers for product definition/specification team that is preparing technical specification documents. It doesn't really matter whether you work in an agile or non-agile environment - I'm sure you have some technical documentation and the main goal of it is to answer developers' questions on technical issues (e.g. how to configure some components to work with others, how to map fields from GUI forms to XML message, etc.) It also helps test or QA team to prepare acceptance tests and to verify whether what developers implemented is what was specified (I know it stinks a bit the waterfall but stay tuned - I will say something about agile documentation soon).

I would suggest you reading an article on TAGRI (They Aren't Gonna Read It) by Scott W. Ambler - it's really great. And in my post I'm going to give you real-life example from what I experienced regarding documentation. I will share with you my opinions of what kind of documentation sucks and what documents are really cool and useful (btw. my dream documentation is the one with which I'm able to find accurate information of my interest quickly and be able to put this information into my head in less than 10 minutes - the picture you see is a total contradiction of my dream - it's a waterfall process).

Developers won't read it

At the beginning of the project I met with the specification creators in order to discuss what we are going to deliver. They described me the project goals, business value and the requirements, of course. They also showed me two big books (sorry, specification docs) with around 300 pages in total. And the project was quite simple - it was basic CRU (Create, Read, Update) with one type of objects to be stored and queried. Believe me - the system was simple.

I was responsible for the web UI part of this system (100 pages) but had to understand also how the backend works (200 pages). Wow! That's a lot of, for a simple system, to read - imagine how much time you need to read this. And it's nothing comparing to how much time and effort it cost to produce it - and you still have no single line of code working.

So, did I read the documentation? I didn't.

I didn't have to because I preferred direct communication with the guys who know the system throughout. I didn't have to read the documentation because the guy who specified the GUI prepared screen mockups and I knew exactly how the pages should look like. And I didn't need 100 pages of documentation for it. I just needed couple of screen mockups - it was enough for me to deliver the software

Tests and examples are the best documentation ever

And they are not only the best documentation - they also define a design of the system to great extent. When I was integrating UI forms with the XML to the backend I was still not referring to any documentation. I just asked guys responsible for specification and preparation of tests to give me example messages (requests and responses). I got what I needed and basing on the examples I was able to integrate UI with the backend - simple. Here I will give kudos for the specification that explained how to map UI form fields into XML message (XML schema was not self-explanatory in many places e.g. I could store the phone number in different XML tags - I had to know which one I should fill). I also used a piece of documentation that explained what should be the format of input data - I had to validate user's input somehow. But that was all I needed - I used 5% (roughly) of the overall documentation stack.

KISS (Keep It Stupid Simple)

In that simple project we had three different documents and I was finding discrepancies between them almost every day - yes, some of the fields, data types, etc. were specified in all three documents (often differently). The part developed by me was quite resistant to this because I was still keeping my one source of information. If I didn't know something I just asked specification team - I wasn't looking for the answer in the documentation because it would take more time and it appeared that I was asking questions that were mostly not covered by the documentation. Again, verbal communication was the best choice for me - I was able to fix some mistakes in the documentation on the fly - because I reported every technical problem I had to those guys - they were adjusting details according to technical constraints.

To summarize this point - keep it simple. Have one source of information and you will win. I do - every time I follow this rule.

Not all documentation sucks

That's true - some level of documentation is necessary, as I showed it before. Some mappings are sometimes required, list of required fields, error codes, etc. Many of this can and should be covered by unit tests and automated GUI tests - but it's pretty hard to record GUI tests not having it. Usually in waterfall-like process documentation is considered as a good - very important good. I don't understand why? It doesn't represent any business value for the customer (except the user's guides) but a lot of people value documentation more than the working software. I think this is the reason they fail so often.

In my opinion the best documentation is the one that is very easily changeable. For example Word documents stored in Lotus Notes folders is a bad idea. Developers cannot easily change or even comment the specification/documentation - they should. I often faced the problem that I saw something really really stupid in the docs and I wanted to change it but I wasn't able. Wiki is the best option here - it's easily searchable (through many projects) and changeable. And if you want to have a Word doc - your business - just export the page to the format of your choice.

Solution

My main recommendation is to communicate verbally with people who know your product as often as you need; have one source of information - you will not be surprised by different requirements for the same thing; start with unit testing your code and keep your UI tests up to date; automate as many acceptance tests as possible - consult the results with customers (or customer proxies).

I'm not going to copy-paste the whole article but I totally support the Solution part of TAGRI article - I strongly recommend you reading it. I have nothing more to add.

What is your experience with documentation? Do you read huge stacks of papers your team lead gives you? What is the value of the documentation? Please, share your opinions here.

About the Author: Przemysław graduated from Gdańsk University of Technology in 2004 having specialized in Distributed Information Systems. He worked in Lufthansa Systems, Intel Corporation in the past where he developed complex IT solutions in many Java-related technologies. In professional life he is a real Java expert holding couple of Sun Java certificates (Programmer, Developer, Web Developer) and Certified Scrum Master, of course.

Przemysław is a regular contributor to AgileSoftwareDevelopment.com and the author of "From Java to Java EE" blog. He now works as a Software Craftsman in an international company that is the leading Global Distribution System (GDS) and the biggest processor of travel bookings in the world. Contact Przemysław

Comments

This is squared for end user manuals

November 20, 2008 by sginter, 1 year 16 weeks ago
Comment id: 2018

If they (users) are not technical, they will abandon you product first.
If they are technical, they will issue a support request so that you find the appropriate part of the manual for them.

Design should be like te user interface - self explanatory.

I agree with you, I don't

November 20, 2008 by Tiago Fernandez (not verified), 1 year 16 weeks ago
Comment id: 2019

I agree with you, I don't think developers need to read heavy documentation before actually implementing something. But in other the company will always need to have/maintain formal specs, mainly because people can quit and the developer might end up not having anybody to talk about what's already done and working. This is absurd, but I experienced that a lot (mostly when dealing with aggregated software when one company buys another). In this case a full unit tests suite will be great, but it won't replace free text description with diagrams and user interfaces.

I didn't read it.

November 20, 2008 by Anonymous (not verified), 1 year 16 weeks ago
Comment id: 2020

Good try with the marketing -- but I kinda expected you to tell me in plain english somewhere near the top or under the heading "Developers Aren't Gonna Read It" exactly what It is and why I ought to read it. But, because you can't seem to put that on paper, no, I am not going to read it. I think most developers like hearing about new perspectives and many might have been blown away by your article. But, please take a queue not from marketers with strategies like naming an article or snub "Developers Aren't Gonna Read It" but rather from writers who know how to capture the attention of their audiences. You know, I've never visited whatif or whatnow or whatever that stupid website is that keeps advertising on television and has a significantly lower page rank and Alexa rating that my website. Gimmicks don't work. Give me content or give me death.

You're absolutely right Tiago

November 20, 2008 by pbielicki, 1 year 16 weeks ago
Comment id: 2021

You're absolutely right Tiago - that's why I think not all docs is crap. But documentation should be easily searchable and encourage everyone to change it, to participate in it. Documentation should change together with the product - unfortunately it often doesn't.

@Anonymous

November 20, 2008 by pbielicki, 1 year 16 weeks ago
Comment id: 2022

I understand you pretty well - I personally think this post is a bit too long ;)

I Agree

November 20, 2008 by Steph (not verified), 1 year 16 weeks ago
Comment id: 2023

It's more than that, often trying to decipher the requirements documentation is much more complex than just reading 200 pages. Some requirements documents I read looked they were intentionally encrypted.

Like you say, it's much much easier to just ask (minutes versus hours to days deciphering the meaning of the document which is often unclear in the first place), and it's always right when you ask whereas the documentation can be out of date.

Keep it simple :)

A dissenting opinion

November 20, 2008 by John Haugeland (not verified), 1 year 16 weeks ago
Comment id: 2024

If they aren't going to read it, you shouldn't be employing them. Much of what you say here is a question of professionalism. If you want a well designed house, you don't hire architects who aren't going to read your specification; if you want a well designed car, you don't hire design engineers who ignore your specification; et cetera.

On well run teams, specifications are required reading, time is set aside for reading, and the engineer is quizzed to make sure not only that they've read, but also that they've, understood, the documentation. You can enforce reading. Developers are gonna read it, if you make them, and the product will be infinitely better for doing so. The more you allow young, unsophisticated workers in any field to get away with skipping their work, they will. The purpose of management is to prevent these sorts of shenanigans.

Developers want to work in healthy, profitable companies with reliable product. All you have to do is create an environment where they don't make these careless, sloppy mistakes.

You might want to start by reading about PSP/TSP and the Capability Maturity Model. They'll help you understand how to prevent this sort of problem.

They are going to read it. You just have to make them understand that.

(Incidentally, KISS stands for "keep it simple, stupid". Stupid refers to the person hearing the term. Swapping those words changes the meaning. Don't do that.)

What do you call

November 20, 2008 by pbielicki, 1 year 16 weeks ago
Comment id: 2027

What do you call professionalism? "Developers are gonna read it, if you make them" - who are you? A dictator? What is your goal? I thought the goal of the software organization (besides earning money) is to produce good quality software not reading documentation. Yes - some documents are useful - mostly those that tell who to ask about the details. Documentation should help you achieving the goal - it is not the goal itself.
And BTW. I just reminded myself the first law of documentation by Robert C. Martin: "Don't produce any documentation unless its need is immediate and significant".

What's really necessary...

November 20, 2008 by Ilja Preuss (not verified), 1 year 16 weeks ago
Comment id: 2028

... is that the developers understand what is needed from the system they develop. And reading a written spec is hardly the best way to get that understanding into the developers' heads.

I agree with A Dissenting Opinion

November 20, 2008 by paperdummy (not verified), 1 year 16 weeks ago
Comment id: 2029

You can make something that works without reading the spec. But you can't make something that conforms to the spec without reading the spec. You are talking about inductive logic--inferring a rule from examples. But the final say on the rules is the spec. If you infer incorrectly, you will deviate from the spec.

What you need is a well-written spec and concise, well-organized documentation The reason TAGRI is because most documentation is terrible.

(FULL DISCLOSURE: I am a tech writer)

You're absolutely right in

November 21, 2008 by johnw (not verified), 1 year 16 weeks ago
Comment id: 2030

You're absolutely right in that live one on one interaction with the user is essential - but for different reasons. It's an opportunity for the developer to confirm their understanding of the written requirements, both up front, and ongoing. I'd be interested in understanding how you handled scenarios where most, but not all, of the requirements were not met because the document was not read (we're human, it happens!).

Stating the obvious

November 21, 2008 by Anonymous (not verified), 1 year 16 weeks ago
Comment id: 2032

rather like a lot of documentation.
hneh.

You'll need it in the future

November 21, 2008 by Model Man (not verified), 1 year 16 weeks ago
Comment id: 2035

Now we face a situation, where a customer has a huge, mission-critical system without any documentation and the system is about to crash in any minute. They asked for help but without detailed use cases, specification of the aging system, how would anybody be able to fix issues or migrate to a new version, if nobody knows exactly, what the system is going to do?

First of all I didn't write

November 21, 2008 by pbielicki, 1 year 16 weeks ago
Comment id: 2036

First of all I didn't write that you should not document AT ALL. Please read my post carefully.
Second of all I've never met a company who had a mission critical system without having specialists who know the system pretty well and who can help other team(s) (probably taking over the project). But if it happens - how can this system be a mission critical?
As I wrote in my post some level of documentation is useful (it also depends on the system) but the more is in the people's heads the better (see "pair programming" and "collective code/system ownership" from XP).

Again - the best documentation for big and critical system I've ever found was a Wiki page with names and phone numbers.

Thanks for your comment.

"But the final say on the rules is the spec."

November 22, 2008 by Ilja Preuss (not verified), 1 year 16 weeks ago
Comment id: 2037

That's not true, in my experience. When the customer and the spec disagree, it's the customer who is right, and the spec is wrong. To build the right system, you need good, regular feedback from the customer.

Re: You'll need it in the future

November 22, 2008 by Ilja Preuss (not verified), 1 year 16 weeks ago
Comment id: 2038

Have you ever seen a spec that actually described what the system really did? I haven't. What I have seen are specs that ambiguos, full of holes, inconsistent, illogical, or simply plain out of sync with what actually was implemented.

So, if I was asked for help by that customer, I'd like to have two things to help me know what the system is supposed to do: access to the users and domain experts of the system, and an extensive suite of acceptance and unit tests.

K.I.S.S.

November 22, 2008 by James (not verified), 1 year 16 weeks ago
Comment id: 2039

stands for "keep it simple, stupid" not "keep it simple stupid"

Hit by a Bus

December 11, 2008 by Scott Perez (not verified), 1 year 13 weeks ago
Comment id: 2103

I agree that a lot of documentation is useless to developers and makes life difficult. With that said documentation is an absolute and no product without complete documentation is destined to fail. Verbal communication is great until that person is hit by a bus and no one has thier vision any longer. Having error codes and validation in unit test is wonderful but have you ever meet a programmer with proper english. Someone needs to write done what they would like the validation messages to say and they certainly do not want to work in source code. So what is the trade-off. I believe that requirements go throught stages and that the final documentation does not need to match with the original requirement. Things change and trying to keep track of that change can be a waste of time. During a release cycle of a product your need to have clear requirements going into the release. During the next 10 weeks or however long the release cycle is requirements may change and that change needs to be reflected in the software. It is not neccessary to go back and update the original requirements, design documents and specification. After a release the end result of the release needs to be documented so that there is a baseline for the next release. it is almost like fixing a bug before production. Why do I want to update these specific documents when chances are it will just change again. Let's stay flexible to change but still provide specification for the next release because you never know when the entire team will get hit by a bus.

Note! I am talking about projects that have fewer thatn 10 people working on them and communication is good. If you are working on a product like Windows were one small change could effect other groups then CMMI and full design reviews and documentation are essential.

re. hit by a bus

December 12, 2008 by Ilja Preuss (not verified), 1 year 13 weeks ago
Comment id: 2107

Verbal communication is great until that person is hit by a bus and no one has thier vision any longer.

So you think that if your visionary is hit by bus, you are safe because he wrote his vision down beforehand? I don't think so - you'd better off finding a new visionary with his own vision (who best was in close contact with the old visionary).

Having error codes and validation in unit test is wonderful but have you ever meet a programmer with proper english. Someone needs to write done what they would like the validation messages to say and they certainly do not want to work in source code.

Yes, I've actually met programmers with proper English. Anyway, if someone else needs to write validation messages or something, let them do it in property files, or their automated tests - much more effective than documentation. (If you are working with developers without proper English, do you really trust them to correctly copy those messages from the documentation to the code?)

During a release cycle of a product your need to have clear requirements going into the release.

Yes. And you need to know whether the requirements have actually been met, which is best accomplished by having the requirements be executable. In Agile Software Development we typically call those executable requirements "Acceptance Tests".

During the next 10 weeks or however long the release cycle is requirements may change and that change needs to be reflected in the software. It is not neccessary to go back and update the original requirements, design documents and specification.

In fact, it is highly desirable to change the executable requirements specification, so that it still can be used to communicate what is actually wanted, and to check whether the system actually does what is wanted.

After a release the end result of the release needs to be documented so that there is a baseline for the next release.

Yes. You definitely don't want that future releases break already existing functionality. Acceptance Tests are good for this, too.

Note! I am talking about projects that have fewer thatn 10 people working on them and communication is good. If you are working on a product like Windows were one small change could effect other groups then CMMI and full design reviews and documentation are essential.

Are they? I'm not so sure, but I don't have any experience with such big projects. Others have: http://www.jeckstein.com/agilebook/

SCRUM THIS!!!

August 28, 2009 by Anonymous (not verified), 28 weeks 6 days ago
Comment id: 3181

I recently completed my first Agile software development project with a development team that chose a vendor with NO FORTUNE 500 experience.
That vendor bleed the company dry and fought their client (IT Dept.) and their client's internal customer every step of the way. They continually argued about documentation and out right refused to even give explanations of their work or simple screen shots. That vendor delivered an inferior product that did not meet the initial requirements of their client.
On the GO-LIVE date of the product, the vendor dissolved due to past debt and all the snotty little computer geeks I worked with on the project were out of a job. Now in the Support phase, the Product Manager gets in trouble for inheriting a shoddy software that was pushed through to production that was not built to spec because of the LACK of participation in the documentation process. Agile software development is an inferior pre-school method of billing the client that adds no value, except for the hefty price tag.
I would be happy to bash this Agile process and that dissolved vendor for the rest of my natural life!

Documentation

September 22, 2009 by Felix Mkhzie (not verified), 25 weeks 2 days ago
Comment id: 3533

CMM Level 3 states that a Softwware house should have a methodology to make processes stable,repeatable and managable.Otherwise its plum pudding model.A plum can be anywhere in the pudding.

In Opensource technologies, documantation is crucial as the the field is rapidly changing and as many become novice now and then before they master the new technologies.

The aim is to make money.The faster your development the more you deliver.Time spent trying to google if there exits someone who tried to do what you are stuck with,is money waisted.

Even Forums imply document something!

So there is a solid business case for Documantation especialy for novice developers and for avoiding legacy systems of our times.

Post new comment

The content of this field is kept private and will not be shown publicly.
  • Allowed HTML tags: <a> <b> <i> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <img> <br> <blockquote>
  • Lines and paragraphs break automatically.
  • Web page addresses and e-mail addresses turn into links automatically.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>. Beside the tag style "<foo>" it is also possible to use "[foo]".

More information about formatting options

CAPTCHA
This question is for testing whether you are a human visitor and to prevent automated spam submissions.
Image CAPTCHA
Enter the characters (without spaces) shown in the image.

Best of AgileSoftwareDevelopment.com