A common question is how to deal with legacy applications. There is a lot of confusion on how to deal with legacy with most people confused on what to actually do. They end up maintaining and patching the old code eventually to the point where a full rewrite is ordered and the cycle then repeats.
Then the rewrite proceeds to do a one for one replication of features in a new architecture but then degeneration starts again any after the new version is released in one fell swoop after many months or years of development. This also fails to take into account whether the legacy features are actually needed and therefore waste is introduced during the rebuild.
How about if you could enhance the legacy application by applying patterns that help remove the legacy code in a gradual and calculated manner. Yes, it can be done and has been done.
Here are some sources of information you can look at:
- StranglerApplication by Martin Fowler – draws an analogy to strangler vines in North Queensland rain forests and provides a link to Case Studies by Paul Hammant
- Strangling Legacy Code by Mike Thomas – same patterns to help
- Working Effectively with Legacy Code by Mike Feathers – this is the definitive source on the matter
- Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation by Jez Humble and Dave Farley – provides some pointers in dealing with legacy
There are other sources in the Agile space that help. You many know of other sources directly related to the subject.
Please let me know if you know of anymore.