Frans Bouma's blog

Generator.CreateCoolTool();

Syndication

News



    Visit LLBLGen Pro's website

    Follow me on Twitter

    Add to Technorati Favorites

About me

Fun stuff I created

My work

Maintainable software: why you can't live without proper solid documentation

This post is a reply to Jeremy D. Miller's post 'A Train of Thought, June 17, 2007'. It's part of an on going discussion about maintainability of software and what's necessary for having maintainable software. I'm not going to link to every post in the discussion, you can find most of them from Jeremy's post.

Before I continue, I'd like to say that I'm not participating in this discussion to disqualify TDD/Agile as a set of useful methodologies because I do think they have some solid points everyone can benefit from. I'm also not participating in this discussion because I'm a waterfall-follower, because I'm not a waterfall follower. Waterfall is a methodology which could be very beneficial but it has to suit the project. For example, you really want to use waterfall in software for some medical equipment as you don't want to run the risk to miss a spot because you didn't anticipate a particular use-case would be possible. I don't use waterfall myself as I'm not in the medical equipment business and I'm also not a consultant payed by the hour. But more on that later on in the article. The post is build up as replies to things Jeremy said in his post, so the blockquotes are quoted from his post.

The summary comes down to this: Documentation describes the what and the why, code describes the how. You need both documentation and code to have the complete overview, not just the code.

Granted, I've got an almost knee jerk reaction to disagree with Frans on almost anything related to software development, but I'd still prefer a much stronger emphasis on the "what" and "how" a system is put together than I would the design documentation.

And why is it that you want to disagree with me about software development so often, Jeremy? Is it because you think I am a true waterfall-adept and anti-agile/TDD ? Well, I'm not.

Focussing on the what and how is OK, and I'm not saying that solid, clear, easy to understand code isn't more maintainable than a big steaming pile of spagetti-crap, but just focussing on getting solid clear easy to understand code doesn't necessarily bring you a great maintenance experience: if essential information is missing, you're still doomed. Furthermore, it's not to say that proper code is thus the result of TDD/Agile principles. It's just that your experiences show that Agile/TDD gives good easy to understand code. Well, good for you . The thing is though: a team of good software engineers which works like a nicely oiled machinery will very likely create proper code which is easy to understand, despite the methodology used. If all of those software engineers move on to other projects, you could have shared as much knowledge inside the team, but that's not going to be available to the successors unless you provide solid, easy to understand documentation about the code.

I don't really care so much "why" it was written that way, only what it is. And by solidly written code I mean code that I can understand by looking at that readily accepts change.

This is the essential part where you make a trivial, but costly mistake: The why is of up-most importancy. The reason is that because you have to make a change to a piece code, you might be tempted to refactor the code a bit to a form which was rejected earlier because for example of bad side-effects for other parts. If you don't know the why of a given routine, class or structure, you will sooner or later make the mistake to refactor the code so it reflects what wasn't the best option and you'll find that out the hard way, losing precious time you could have avoided.

That's why the why documentation is so important: the documented design decisions: "what were the alternatives? why were these rejected?" This is essential information for maintainability as a maintainer needs that info to properly refactor the code to a form which doesn't fall into a form which was rejected.

The other element of your remark, about understanding code, is showing some lack of understanding why humans are so bad in writing code: you assume you will understand code when you read it. Well, I have news for you, Jeremy: you will not. Not now, not ever. And not only you, but everyone out there who writes code, thus that includes me as well, will not be able to read code and understand it immediately. That's not because you lack experience or knowledge, but because you and I are human. Sure there will be code snippets we will understand in a heartbeat. However there's an essential part of understanding code which is missing in a human body: a code interpreter which can understand why at time T element A has the state S and why at time T+t it has state S'. Only with such a code interpreter you'll understand what code does in full. As a human lacks such an interpreter, we can only try to understand the code and we will very easily make mistakes doing so. That's also why there are tools like Resharper and everybody's friend, the debugger.

Besides, I've never seen a long technical document that was entirely useful. Time and manpower is finite. I'd rather sink more energy and resources into better, cleaner, well-structured code than comprehensive documentation because I think the payoff is higher. To me, one of the biggest advantages of moving from a waterfall shop that produced a lot of intermediate documents to XP shops was that I now get to spend much more time on a project focusing on the design, architecture, and code than I did when I was on the hook for much more documentation. I write fewer documents, but I get to create better code with far better configuration management practices. I call that a net win.

Let me be blunt here: do you hate documentation that much? Do you think having a lot of documentation hurts your project and will make it, oh behold! look like it is written using waterfall? Code isn't documentation, it's code. Code is the purest form of the executable functionality you have to provide as it is the form of the functionality that actually gets executed, however it's not the best form to illustrate why the functionality is constructed in the way it is constructed. I'll get more into that in a second.

Oh, and besides that: just because you haven't seen a technical document which makes sense doesn't mean having them is effectively useless. I've seen technical documents which did make a lot of sense and were essential to understanding what was going on at such a level that making changes was easy.

You see, Jeremy, the thing is that if a set of features has to be added to a project that is in production for a while, you really need overview where to make the changes and in what form. If your project consists of say 400,000 lines of code, it's not a walk in the park to even get a slightest overview where what is located without reading all of those lines if there's no documentation which is of any value. Code is for formulating functionality in an executable form, it's not documentation of any kind. If you think that it is, I really pity the one who has to maintain your code in say, 2 years from now.

As a quick aside, Frans also more or less makes the claim on Sam's blog that TDD doesn't do anything for maintainability, or just wonders what in the world it does do for maintainability.

No I didn't make that claim, you think I made that claim. What I was trying to say was that TDD/Agile is advocated as a set of methodologies which will make your project the best that can be written. However, the elements for properly maintainable software don't require TDD at all! Furthermore, you seem to suggest that TDD/Agile will give better results no matter what, which isn't guaranteed: it depends on the people in your team and a lot of other factors if the results of your software project will be up to par. TDD/Agile can help, but aren't a guarantee. They're also not a ticket for maintainable software.

Orthogonality. Codebase's developed with Test Driven Development will almost always exhibit better qualities in regards to cohesion and coupling, the very same qualities that make code easier and safer to change. I know Frans is going to come back and argue that he gets it done with lots and lots of documentation and very careful upfront design. I'm going to respond to that by saying the instant feedback loop from doing detailed design with TDD pushes me in the direction of orthogonality more efficiently and effectively than any form of upfront design. Why is this true? Because you can't use TDD on code that isn't loosely coupled and not easily on code that isn't highly cohesive.

Ah, so now you also know how I design my software, Jeremy? Don't you agree that what you said above is actually pretty stupid? Especially when I say to you that I've used TDD/Agile style development for the last 5 years now? The code base of LLBLGen Pro alone is massive: the designer gathers meta-data which is fed to a code generator stack executed by tasks in a queue which consume templates which produce code which is a specialization of compiled code in the runtime libraries. Meta data affects generated code affects the total class stack in the project and vice versa. It's pretty complex, if I may say so. Do you think I've designed that all up-front in a waterfall-esk way, spend months and months writing document after document and then started with writing a lot of code? No way! It's vertically developed, use case after use case. Every feature is seen as a use case or set of use cases, depending on the feature, first analysed what the feature embodies, what impact it might have etc. etc., if necessary tests are written up front. Ok, then I'll do a weird thing: I'll open the design document and will write a piece of documentation how the feature is designed and why particular parts are the way they are and why alternatives won't work. After that, I'll go into the code base and write the code for that feature, run the tests I've written before and update documentation if I was wrong what I wrote there.

You see, documentation isn't a separate entity of the code written: it describes in a certain DSL (i.e human readable and understandable language) what the functionality is all about; the code will do so in another DSL (e.g. C#). Thats the essential part: you have to provide functionality in an executable form. Code is such a form, but it's arcane to read and understand for a human (or is your code always 100% bugfree when you've written a routine? I seriously doubt it, no-one is that good), however proper documentation which describes what the code realizes is another. These two aren't separate entities and you can't write the documentation after you're done writing code, as you then will document how the code works. Which is nice, but not enough. You need the why part too.

I'm very very glad that I've written these documentation parts since the beginning of the project back in 2002. You see, I've written the majority of the system and if someone should know how all code works, it would be me, right? Well, perhaps I'm not as talented as you, Jeremy, but I'm not able to remember every design decision I made in detail for this massive code base. Also, if something happens to me, I really want to hand it to someone else so s/he can continue my work. With documentation that's written on the spot, you can. When I need to make a change and need to know why a routine is the way it is, I look up the design document element for that part and check why it is the way it is and which alternatives are rejected and why. After 5 years, your own code also becomes legacy code. Do you still maintain code you've written 2-3 years ago? If so, do you still know why you designed it the way it is designed and also will always avoid to re-consider alternatives you rejected back then because they wouldn't lead to the right solution? Without proper documentation you can't possibly avoid missteps you probably already made before.

The unit tests are a form of documentation. Reading the unit tests for a class should be a great way to learn how to use any given class. I can think of several cases where someone else's unit tests have made it easier to use a class or API.

Unit tests are tests. They test a given piece of functionalty written in code to see if that code indeed represents that functionality. Very valuable feature and an essential part of quality assurance. What's missing is that a unit test isn't documenting anything: code isn't documentation, it's code. It describes the same functionality but in such a different DSL that a human isn't helped by wading through thousands and thousands of unit tests to understand what the api does and why. The why will never be represented by unit tests, the unit tests will only show how in a particular situation you can use a given routine or class. Use tests to see what you think is OK, is actually OK. Use documentation for documenting what you've written in code. Unit tests also don't reveal why the inner workings of methods / classes are the way they are. They just confirm that they work in the particular case the unit test tests for.

Using unit tests for learning purposes or documentation is similar to learning how databases work, what relational theory is, what set theory is etc. by looking at a lot of SQL queries. You will only see a lot of SQL, there's no context, there's no explanation why the statement is written that way and not in another way. Wouldn't you agree that learning how databases work is better done by reading a book about the theory behind databases, relational theory, set theory and why SQL is a set-oriented language? Then why is it so odd that in the case of the theory behind a piece of software you've written, it's OK to fall back on the code which uses it in a limited set of situations?

High levels of unit test coverage gives you so much more ability to change existing code without introducing regression errors. No matter how much upfront analysis and design you try to do, the users will always come with something completely new that you couldn't reasonable anticipate in your initial construction. It's awfully nice to have that immediate safety net of focused unit tests as you make changes to existing code. Documents are passive. Unit tests will shout out when they're broken -- assuming anybody runs them of course. Good unit tests will even tell you exactly where the regression breaks happen.

Unit tests are valuable, there's no disagreement there. However their name already implies that they're not documentation, they're tests. Documentation also isn't passive. It's active, as it describes in another DSL what functionality is implemented and why it is implemented the way it is implemented. If I may, I'd like to describe documentation as a projection result of the functionality to deliver onto human readable and understandable text and code as the projection result of that same functionality to deliver onto machine executable elements.

This implies that if the functionality changes, documentation and code will change, not just the code, simply because the documentation is the projection result of the same source as the code is.

Or are you suggesting that the code you're writing is actually a result of whatever came up in your mind at that time and some test will tell you if that thought was actually acceptable or not? I doubt it. You're a professional, passionate about computer science, however never forget, Jeremy: so am I.

Published Monday, June 18, 2007 11:59 AM by FransBouma

Comments

# re: Maintainable software: why you can't live without proper solid documentation@ Monday, June 18, 2007 6:24 AM

Actually I believe that the best form of documentation lies exactly in the middle from both of you. The best documentation consists out of both the "what" and the "why". But writing such documentation will cost lots of time, so you will need to make some tradeoff because of the costs. Most developers almost automatically will document the "what", but I agree that "why" is far more valuable, the "what" can be retrieved from the code and debugger (if nessary). You want to know why for example: string s = "test"; if(s == "") was used instead of a default string method (string.IsNullOrEmpty(s)). Maybe that framework method was bugged in this implementation? Your code won't tell you that, untill you refactor it and you will notice it yourself. But then you already have introduced a problem which was tackled before..

JV

# re: Maintainable software: why you can't live without proper solid documentation@ Monday, June 18, 2007 7:49 AM

II'd just like to say that your particular choice of winking smiley emoticon makes your posts seem much more smug that would otherwise be the case.

commenter

# re: Maintainable software: why you can't live without proper solid documentation@ Monday, June 18, 2007 8:15 AM

Commenter: the smileys are there to illustrate that the point shouldn't be taken offensively, i.e. the smiley is there to take off the rough edges of the comment, as with 'text' one can't express a facial expression so a point in text can be expressed as-is and therefore its tone can be mis-interpreted.

So they're not there to make it look 'smug', as I'm not that kind of person. The smileys are my own, so if they're not reflecting what they should, blame my lack of artistical skills ;)

FransBouma

# re: Maintainable software: why you can't live without proper solid documentation@ Monday, June 18, 2007 8:21 AM

"This is the essential part where you make a trivial, but costly mistake: The why is of up-most importancy"

I all heartedly agree that the you need some documentation- overview, what and why (and the why not) I think it is also important to emphasize that this doesn't have to translate into overly long documents or that you have to write them before you begin to code or that you have to do BDUF or anything like it.

We need to remember that software spends most of it time in maintenance and we need to provide the tools to make that work smoothly. maintainable code is essential but we also need to supply the road map to help navigate it

I wrote a little about that in my blog (www.rgoarchitects.com/.../PermaLink,guid,0976ad17-b78c-4fd8-a8c4-776b1a5f9fb5.aspx)  in post on Agile architecture and documentation)

Arnon Rotem-Gal-Oz

# re: Maintainable software: why you can't live without proper solid documentation@ Monday, June 18, 2007 11:20 AM

You are absolutely correct on the why.

Sometimes the reason something was done in a particular way was just to get it done and move on.  As such, there's a nice opening for doing it in a better way.

Other times the reason why something is done was because it had to be to deal with a particular scenario.

To often I've seen smug developers deride stuff without really knowing why it is the way it is.  More often then not, the original developer would loved to have done it in a better way but he could not either due to time constraints, or some logic constraint.

The Other Steve

# re: Maintainable software: why you can't live without proper solid documentation@ Monday, June 18, 2007 1:16 PM

Maintainable code isn't about writing reusable code.  Maintenance is replacing code; you're not reusing it, you're rewriting it.

Maintainable code is about a reusable code framework.  You don't want to get into a situation where, to rewrite and test something for maintenance, you also must rewrite and test a dozen other different things, because the thing you're rewriting is tightly coupled to those things.

Maintainable code is about writing code that can be replaced easily, not reused.

Documentation helps.  Code as simple as you can make it helps more.

Joe Chung

# re: Maintainable software: why you can't live without proper solid documentation@ Monday, June 18, 2007 2:57 PM

I was actually trying to post this at Jeremy and Sam's blog but the CAPTACHA numbers always give me an error.

I do read several blogs about agile methods and extreme development practices. These blogs always tell you that you will be a better developer if you follow these processes. In a way this is so, but these processes are very much geared to the

developer who handcrafts his code and uses only a limited number of tools to actually do that.

A question I have: Are you really sure these methods are still valid, when software in general approaches the level of sophistication and complexity of say a nuclear submarine, a 2km long 8 lane bridge or even only a modern sedan car? I mean those engineers use modern modelling tools (yes these are pretty pictures and animations to the outsider) to actually design these kinds of objects. There is no way they could do it by hand. They have 100 years ago already

came to the conclusion that hand crafting techniques would'nt get them any further. In the beginning the tools were very crude and a lot of hand craftsman actually could do a better job. But after a while the tools and processes got better and better until they were trusted to do the job they were designed for.(Engineers do design for fail over, by over designing by 2, 3, 4* the specification - depending on how critical the component is). In fact some of the modern tools are so sophisticated, that no human being can even match them.

To get there, specification for the tools, processes and materials were developed. The architect now can rely on these specification to comunicate to the engineer what he wants, say a building, schould look like. The engineer implements the design using the specification as input for his tools and hands the plans to the builder. Neither the engineer nor the architect will tell the builder how to construct, only to what specification he needs to construct.

To my mind the same has to happen to software development. (Afterall building software and constructing buildings are not that different -

software developers even call themselves engineers these days).

I also observe that any technique which does not conform to what is regarded as agile practice, is often immediately shot down. The real reason for this to my mind is not so much that the technique is bad, but that the agile process does not make room for this.

So the agile practitioner tries to ignor it.

Case in point creating and maintaining documentation (including design documentation). From the software users point of view, this is very much more important than any underlying code. The poor writer of those documentation has to rely on outdated design/specification (or even non existant) documentation, since the developer did not deem it neccessary to maintain them or only thought

of his fellow developer who has access to the source code. There is really no automated tool to actually abstract specification from the developers work and transform into a form which the writer then can use for his work.

Another case in point XAML in Acropolis/WPF or any XML configuration. The agile processes, as they have been developed until now, are only really usefull in the form the developer understands ie. his programing language and XML is not regarded as such.

Now, panic, horror, I have to maintain XAML and I do'nt understand it. Oh god I, now have to learn XAML too. What he actually did not see is that the XAML is just used as specification for a tool to transform it into a form, the designer on one hand and the developer,

with a different tool, in a different form, on the other hand can use. Thus both can comunicate with each other and build on the work of each other. The same can be done between the software architect and other personal involved with software development, like IT deployment staff. Each has its own tools for his own purposes and abstraction.

At the begining these kind of tools are going to be crude, but after a while one cannot do without them anymore and you learn

to trust them. The kind of trust developer have with their compilers. If people needed to maintain the code, the compiler actually spits out (have a look what the compiler does in MSIL and not in C# through the Reflector tool) by hand, we would never have

build the kind of software we are building now. For the developer it is just another abstraction and he does'nt care about it.

Some of the agile processes can and will be adopted to the more automated 'Software Factory' kind of world. However developers

who see the program language code as the only true kind of software artifact, will have hard time to adapt.

eilert

# re: Maintainable software: why you can't live without proper solid documentation@ Monday, June 18, 2007 4:12 PM

"Unit tests are tests."

"Unit tests are valuable, there's no disagreement there. However their name already implies that they're not documentation, they're tests."

Next time someone questions the terminology change from TDD to BDD, remember this. No, they're not tests, Frans - they're executable specifications. They're executable use case stories, if you prefer.

Marcel Popescu

# Understanding Bad Code@ Monday, June 18, 2007 4:36 PM

Understanding Bad Code

Ayende @ Rahien

# re: Maintainable software: why you can't live without proper solid documentation@ Monday, June 18, 2007 4:47 PM

@Marcel: I know what BDD is all about, but code stays code: they're not documentation, they're executable forms of functionality.

If you like it to wade through thousands of lines of code, suit yourself, but I rather read a document which explains it all in plan human readable text.

FransBouma

# re: Maintainable software: why you can't live without proper solid documentation@ Monday, June 18, 2007 4:54 PM

Why do you think wading through thousands of lines of text, written by "documentation writers" who have no clue about what's actually happening in the code, and which goes out of date with every bug fix, is better?

Marcel Popescu

# re: Maintainable software: why you can't live without proper solid documentation@ Monday, June 18, 2007 9:02 PM

A couple of points.

Your software needs to do what the client wants. Your documentation not only describes what your code does in a form that the client understands, it also describes what the client wants in a form that you, the developer, understands. A client's business has its own DSL, it looks like English (or Dutch) but common words have very specific meanings for them. I need to ensure that every bit of code I write or change is compatible with what they want. This high level documentation is invaluable.

Second, maybe it is my age, but I can't remember too many things at once. If I change a piece of code it's good that my unit tests tell me if I have broken some other code. But the documentation will tell me why it is broken. The danger is that without the documentation I follow the TDD route and make the simplest change to turn the bar green. But this doesn't assure me that the now tested code produces the desired result. I need to check the documentation, probably use cases, to be sure.

Finally, the proof is in the pudding. Jeremy disagrees "with Frans on almost anything related to software". Frans has written an O/R mapper with a large user base. But the impressive thing is that bugs are fixed almost immediately. I don't know if his methodology is Agile, but it is certainly agile.

Richard Wright

# re: Maintainable software: why you can't live without proper solid documentation@ Monday, June 18, 2007 10:53 PM

I like to generate the tourist guide to the system  specifications from BDD-style tests (or specifications as Marcel points out).

Tests can't be tests as long as they're written as a QA exercise.  Specifications are written as specifications.  They're intended to document as well as verify.

In our shop, our technical writer actually has some say in the way that we write the BDD specification names because we use this content as part of our product's documentation, and for internal documentation purposes.

If our technical writer doesn't like the wording of a spec, she'll entitled to ask for a clarification.  If a clarification can be formulated, the spec name is often changed to suit a better choice of language or expression.

We've already been led to inconsistencies and design flaws in our code by following this exercise.

Executable specifications, when done well, are pretty darned good programmer docs.  Specifications when not done well are just specifications that aren't done well.

Scott Bellware

# re: Maintainable software: why you can't live without proper solid documentation@ Monday, June 18, 2007 10:57 PM

In an under-resourced development environment, documentation is always the first thing to get dropped.  That's why it's critical to keep the barrier to writing documentation as low as possible.

I'm currently very under-resourced, so I like to

1) encourage in-code documentation (XML docs in C#, perldoc, javadoc, etc.)

2) use a wiki to maintain the documentation

I hope MS to comes full circle and develops 2-way editing between XML documentation in code and associated wiki pages in SharePoint.

Richard Ponton

# re: Maintainable software: why you can't live without proper solid documentation@ Tuesday, June 19, 2007 2:01 AM

BDD really does go a long way with addressing this though.  Well written spec style tests can generate pretty reasonable documentation like:

This blog post:

 - should mention bdd

 - should be concise

 - should contain at least four hyperlinks

 - should be written by me

In terms of documentation, for large systems, i'd like some overview, and then the rest i'd like to find in well written code and tests.

Dave Newman

# re: Maintainable software: why you can't live without proper solid documentation@ Tuesday, June 19, 2007 2:35 AM

"The thing is though: a team of good software engineers which works like a nicely oiled machinery will very likely create proper code which is easy to understand, despite the methodology used."

Couldn't agree more!!! A team that has the experience of working together(!) for some time is probably more valuable then any methodology or principle.

What kind of bothers me is that everyone's talking like this is an ideal world. Where everyone gets the time to write his/her tests, documentation, design, refactor, etc. Most projects I've been on and at most clients I'm at now don't have that luxury.

So maybe it's time for some new methodology called "Ad-hoc" that will introduce some principles to create better and more maintainable code using the least possible amount of time, going out-of-scope every iteration, etc, etc! :)

Dennis van der Stelt

# re: Maintainable software: why you can't live without proper solid documentation@ Tuesday, June 19, 2007 2:50 AM

@Marcel:"Why do you think wading through thousands of lines of text, written by "documentation writers" who have no clue about what's actually happening in the code, and which goes out of date with every bug fix, is better?"

If documentation is a projection of the functionality to provide onto human readable / understandable text, how can that ever get out of sync and be wrong? That's important: it has to be the result of that projection, it also has to be written during the development, otherwise the design decisions can't be documented properly.

About BDD: it's an interesting technique and brings more to the table than pure TDD, I agree. What I miss a bit however is that the design decisions NOT to take algo B or C but algo A aren't really worded into the tests, however these are essential. Perhaps not for a simple routine, but definitely for a complex class hierarchy with a lot of methods working together. ANd yes, code sometimes gets that complex, no matter how hard you try to keep/make it simple.

FransBouma

# Insane World : Documentation Can Be Ambiguous in the Most Insidious Ways@ Tuesday, June 19, 2007 3:29 AM

Pingback from  Insane World : Documentation Can Be Ambiguous in the Most Insidious Ways

Insane World : Documentation Can Be Ambiguous in the Most Insidious Ways

# re: Maintainable software: why you can't live without proper solid documentation@ Tuesday, June 19, 2007 7:32 AM

I believe we come from different directions. You have the luck to have a technical writer who gets to sit on your... tail and bug you about everything, so that he/she can keep the documentation up to date. I work on a system where there's no internal documentation, and the customer one is *at least* one year out of date. Worse, it's not the technical writer's fault... it's mine. She keeps asking for clarifications, I keep *hating* to document stuff. It's in the freaking code, what's so hard about it?

But those are details. The thing is, I know how utterly useless the documentation on my system is, and even though we're far from 100% test coverage, they're still better than the documentation. I do not disagree that if everyone could have your kind of technical writer, it would be a good thing; but, given what I know about programmers, I think shooting for 100% test coverage is a much more realistic (and thus useful) target than shooting for a permanently up-to-date technical documentation.

I'm not trying to pick a fight, in other words :)

Marcel Popescu

# re: Maintainable software: why you can't live without proper solid documentation@ Tuesday, June 19, 2007 4:45 PM

Unit Tests = Good for documenting specifications

Comments = Good for documenting design decisions.

Unit Tests + Comments = Good for documenting specifications and design decisions. = Easily maintainable software.

Mike G

# re: Maintainable software: why you can't live without proper solid documentation@ Thursday, June 21, 2007 8:03 AM

I think the biggest issue I have with your entry is that you don't take the time to describe what you mean by "proper solid documentation".  Those words are warning bells for those who have experienced tyrannical processes.  As someone who has had the displeasure of having to review a 17 volume piece of fluff called a design spec, I am very curious what you consider proper documentation.

Check out my views of good documentation here:

jroller.com/.../bloritsch

Berin Loritsch