Software is far more a community than it is a well-ordered bag of bits. This feeling struck me hard during a "transfer of knowledge" session for software I've worked on for over 6 years. The transfer of knowledge is due to an unfortunate plant closing.
Just how do you transfer knowledge of a huge piece of software that you have so lovingly worked on for 6 years? It is a daunting task. There's no real place to start and there's no real place to end. The stories are fractally infinite.
You hope you are transferring knowledge so that the software might live and even prosper. But in the back of my mind I know that this is not the case.
I can talk about the software for days. I can demo it. I can document it better and better. But that's not the software.
The software is really all the people and circumstances that gave rise to it, along with the culture that sustained it.
The meaning for the software isn't in the code. It comes from the society of people who used it. From the traditions and culture that were built around it. The exciting moments when you were able to add something that made someone else's life easier.
Software is its community. Without a community, software can not be said to live.
Anything complex does not stay alive by the written word. Software lives through continual use; through old people handing down knowledge to new people, sharing tips, tricks, and workarounds; through steady continual improvement based on the feedback of actual caring users so that the software fits its niche so well nobody can imagine it working any other way.
When going over each feature, I can remember when it was added, who wanted it added, and why they wanted it. I can remember when the feature was completed and their thanks when it worked. Without that person or their living descendants, any explanation of the feature makes no sense. Inside, I know it will never be used again. It will just die.
Over and over again, as I explain things, I get the feeling that this won't be used again. No matter how much I document, they won't understand. They can't really understand. It will just fall unremembered and unused.
A feature grows from an intersection of people, a need, a technology, a time, and a place. Once that context is gone nothing makes sense.
It's hard to understand how unbelievably crushing this is. It's just a piece of software, right? No, it's a community that is going away.
-- ToddHoff
http://radio.weblogs.com/0103955/categories/stupidHumanProgramming/ (English corrected.)