I am currently working with a great customer, and the people around me are reasonably sharp and have done a pretty good job of the development given the organisational constraints they faced. I’m trying to “fly the agile flag” around the group, and haven’t really had much success at present. It’s not because they’re bad, or stupid, if anything it’s the opposite, they just can’t see how a Domain Model (in particular) and software can grow as new requirements are bought into play. They can’t see how doing the simplest thing leads to more flexible designs that allow the software to be come malleable and more easily changed. They can’t see how a system can be built without a large up front planning and design exercise so you can “work out all the problems”.
But I persist, and I do really like asking questions about their designs, especially when they are puzzling over how to change things. I had a couple of pretty good conversation the other day and it went along these lines.
- So, why is this allocation scheme built this way ? Surely it would have been easier to just store each allocated number in a separate row, rather than this bitmap
- That’s so we didn’t have any performance problems later on
- Oh, but this only works if your allocation is contiguous, is that what really happens ?
- No. It would have been much easier to build it the other way, and easier to debug
and then later on:
- Why do you persist all your objects this way ?
- That’s because we thought we’d need this additional functionality
- Did you ?
- No. It would have been much, much simpler and easier to build it the other way.
So, after spending a significant time up front doing design and analysis activities. They were still wrong. How often do you make the same mistakes on your projects ? All I ask is, give it a go. Try to get away by only designing and building what you know is needed, and build your software so that it is malleable enough to accomodate the features should they become required. This isn’t an appeal to do no design, or architecture, or more importantly thinking. Edmund Blackadder had it right, “I think thinking is very important Baldric”.