George pointed out that sometimes we have to rebuild systems. Sometimes they just aren’t that good. Sometimes the technology we are using is out-of-date and no longer supported. Sometimes we need to add functionality, and the design is just so bad that we can’t figure out how to add it.
My previous post about re-engineering did not discuss what to do in these circumstances. I would recommend the following:
- Think really hard about it: is there a value proposition here? Or does the existing product do what we need it’s just not that great? Think about it again.
- If you are certain that there is value then start a new project to replace the existing product.
- This is the most important step. Forget everything about the existing product. Eliminate it from your brain.
- Develop the new product in the Agile way. Find out what the customer wants to do and build software that enables them to do it. Do it incrementally and get as much feedback as you can.
- Always, always challenge your assumptions. It is tempting to assume that the product has to work like the old one, or that you should do something that you wanted to do in the old one but never did. Forget it. Build what the customer needs.
It is worth repeating (again) that this is not a situation to enter lightly. You already have a product that is designed to meet this need. There is a real good chance you are throwing good money after bad. However, if you are going to do it, do it right — forget what you think you know. Start from the beginning. Learn at every turn.

