Kent Beck gave the keynote at the p&p Summit today and had some interesting thoughts on strategies for evolving your design.
- Leap from one design to another. This seldom works but when it does it’s great.
- Parallel implementations of different designs, get them both working at the same time and gradually migrate. This may require a lot of data migration.
- Stepping stones to divide and conquer. Build some infrastructure–a framework or DSL–to make your hard problem simpler. The challenge is that building the infrastructure doesn’t give you feedback on the problem you want to solve. You may invest in the stepping stones only to find that they don’t take you in the right direction.
- Simplification of the problem to something tractable so you can build something that works. If your simplification becomes naive then you may run into problems later when you try and add complexity. For example building a simplified single threaded implementation when you know that multithreading will be required.
Kent also came out with several entertaining one liners. I particularly liked this one, which to me is really a comment on how people tend to think that they have the answer.
“The answer to every interesting question in software engineering is, it depends… The thing that frustrates me about the XP mailing lists is that people ask questions and get answers”