Why specs matter. (Programming)

Oct 15, 2005 14:19

Once my friend, also a software professional, had asked me to look through some new standard.

Instead of answer I sent him the semi-joke link:
http://diveintomark.org/archives/2004/08/16/specs

(If you want to understand the further text, please take a look through this good article. In short form: all the programmers are classified onto two groups: assholes and morons. And all the standard specs are results of battles between them.)

His response was a long letter that looked interesting to me.
Long time later I have decided to publish it here in an anonymous form.
I consider it as a very representative and respectable point of view.

* * *
OK. I generally agree, but not unconditionally. And I emphasize the importance of the last paragraph.

I certainly agree that only asshole would read the spec before writing the code. It is completely useless. On the other hand it is important that a good "moron" makes it right "the second time around". Otherwise we will not be able to live in this world...

And of course NO GOOD IMPLEMENTATION is 100% compliant with spec. What is interesting GOOD specs DO NOT REQUIRE COMPLIANCE. Well, sorry, I am taking my words back; there is ONE example: JVM. But probably the main reason for existence of this example is a condition of active war. We just had no other choice than to be compliant 100%.

And also there are some practical considerations. I have to make my living and pay my mortgage. For this shameful reason I need somebody to buy what I write. And here, alas, specs come into play.

Sure there are some prospects who say: I do not care about any spec, just give me a piece of software that will do 20,000 operations per second on my old Pentium I laptop and I will be happy to pay you money. I LOVE these prospects and they usually turn into customers. But unfortunately they are not enough to make my living. And others say: we need software that is compliant with XYZ. Note the usual difference between "I" in the first case and "we" in the second. Quite often this difference means different money. Because "I" may mean a great contract with *** (did you ever heard about it? I bet, no.) for some millions and "we" means a contract with **** or ****. Who cares what amount is stated in the contract with **** or ****? We just know that it will be enough to keep us alive.

And it is often frustrating. They say: we need you to implement XYZ. We can argue as much as we like that XYZ is a piece of shit, and they will agree and then say: yeah, you are right, but we need you to implement XYZ. And they just will not continue to talk.

So, why specs do matter? For many reasons, but not those that are usually stated. Here are some of them:

1. Specs allow people to share their experience.

2. It is easier to get a corporate approval for something that is called "spec" than for the best possible technology with no name. You can easily imagine something like: "From now on it is allowed to use Java micro mega connectivity dividers in all products developed by ***." But how will you put on one sheet of paper that it is now OK to use this stuff developed by S.T. when he was working on a project for the big *** company? And also, *all the time* when big (and small too) prospects ask me about my products they say: yes, we like it, just tell us two or three of big names that already use it, please one in Europe, one in US and one in Asia.

3. When you write something it is good to stop time from time and ask yourself: am I compliant with XYZ? If not, what was the reason that I am not? Quite often you will just find mistakes in your design...

4. And, you know what? Sometimes it is really useful to have a middle layer that can switch both back and front ends. Well, I am not saying without any amount of work, but just without complete rewriting of the stuff. I get a lot of fun from running my tests against MMM and NNN.

So, why all this? Why did I send you this link? It is easy. I do not like to read specs (though I looked through it) before I have written an application that should have used it. And you have done so. So I wanted your opinion whether it deserves to pay attention to it?
Previous post Next post
Up