Incrementally replacing existing legacy system

I had recently two projects that while completely different in underlying technology, their purpose and complexity, tasks that I got were similar in following:

* System are very complex and contain a lot of business rules and knowledge that is not documented

* System or application is monolithic in design

* System is outdated and any change is very hard to implement, brings a lot of further bugs

Essentially we were given dilemma that we have two choices which both are bad.

1. Recreate whole system – really bad as development would have to stop while existing system is redeveloped, plus we don’t really have knowledge of all business rules, so we can’t estimate how much this might take

2. Continue to work with current system – also very bad as any even small change brings numerous bugs that are difficult to track and even when they are discovered it is never clear when they were introduced

Faced with such choice, I found one really good strategy that works pretty well. We would create a new application, apply facade pattern to current app and begin to refactor and slowly extract parts of old app into new one. For users, everything seems the same, they might see new parts as somewhat different as we apply fresh design on them, but generally overall process is seamless and transparent. Also it is easy to test.

In terms of time, it doesn’t require more time and I would even argue that it might in the end take less time then redevelopment. Also, there is never uncertainty over result, results can be seen and used in live environment and if some part turns out not to be that good, we can always work on that. Plus new features and benefits are slowly getting into existing app and can be seen.

For developers, it is less stressful and more fun way to deal with this otherwise difficult problem.

Advertisements

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s