The following books should be mandatory material for anyone who works with other people:
- Out of the Crisis, and also, The New Economics – W. Edwards Deming.
- Good to Great – Jim Collins.
- Congruent Action – Gerald Weinberg.
Added on 21/07/03 in response to comments: They’re all books that really open your eyes about the nature of working with others, what quality really means, and what it takes to build a truly great company and have fun while doing it.
One of the laws of physics (can’t remember which) states that entropy always increases. Put another way, a local decrease in entropy must cause an overall increase. This is how refrigerators work. Lowering an object’s temperature also lowers it’s entropy, however, the heat given off by the coils at the back is increasing the entropy of the surroundings (by raising the air temperature), thus overall entropy goes up. In heat terms, the heat dissipated by the coils will be greater than the heat removed from the contents of the fridge.
The refrigerator analogy works rather well for software. Any time a developer makes a change to some code, its entropy (ie. software entropy, which in this case can be considered ‘disorder’) will tend to increase. In order to maintain the same level of entropy in the code, the developer has to put in more effort than strictly needed to just make the desired change. This effort might be expressed as adding extra tests or refactoring around the changed code. The extra effort takes energy (time + brainpower). To maintain the code’s level of entropy when making changes, the overall entropy must increase – measured in this case by the extra mental effort causing an increase in temperature of the air around the developer’s head.
How do you make a maintainable system? Make all your developers spend at least some of their time doing maintenance and support. There is no better way to really see and feel the impact of all the ad-hoc decisions that get made when developing.
One year older and hungover.
So today I learned that the current state of the art in reliable scalable peer-to-peer network communications owes a lot to neighbours gossiping over the garden fence and the study of disease epidemics. Cool. There’s an obvious similarity to the way computer virii spread as well. Each message ‘infects’ the receiving node, which then spreads it to surrounding nodes. Once a node is infected with a message it becomes ‘dead’ to that message, thus preventing endless retransmission. The gossip part comes in when you need to pick up on missed messages. Each node chats to its neighbours along the lines of ‘Have you heard the latest news about Mabel down the road? No? Let me tell you…’
Just goes to show that whatever wondrous things humans imagine themselves inventing, nature got there first.