Should I rewrite OR reengineer a software system? Neither will work. Why? Watch Eric Evans – Strategic Design
Switching off the legacy system completely is a bad idea (unless it is really expensive to run)
- While the new system is built, customers need new features in the old system -> leads to a race condition between the old and the new system
- The complexity of the old system lies in the grown interconnection between all the parts of the system -> complexity of the old system is always underestimated
Reengineering a big legacy system is also a bad idea
- If refactoring efforts are spread across the whole codebase -> no big benefit will be seen -> those refactorings are drops in the ocean
- If refactoring efforts are spent only on specific parts of the system, that seems to be important -> irresponsible hackers will destroy your redesigned areas later on
- Expert (responsible) developers that are able to refactor the codebase cannot produce new features -> Managers see no real outcome -> leads to less trust for the experts
- Non-expert (inexperienced) developers (or hackers) implement the new features instead -> Managers see those benefits -> leads to more trust for hackers
Determine which parts of the system are both your unique selling point and complex (because if it wouldn’t be complex, your competitor could just copy your unique selling point). These parts are your core domain. Clean that parts up and “seal” them to avoid “attacks” from hackers (the irresponsible developers)
Try to outsource or buy all other parts of the system
Don’t try to create an enterprise model. There is no “one model” that rules them all!
Know what is important for the business, and then work on your core domain.