Legacy System Migrations

Breathing New Life into Old Systems

Many software systems, especially those built many years ago 1 when technologies and development processes were less mature, were designed to perform a specific task, with little thought given to the system’s architecture at the time, or as the system grew to accommodate new features. In many systems like this, when new requirements arrived, changes may not have been implemented following modern software engineering best-practices, and new functionality may have been added in a piecemeal fashion, resulting in duplication in the code-base. This results in a system with a poor ability to adapt to further changes, and one that performs poorly or erroneously under certain conditions.

If this situation is left unmanaged over a prolonged period, the technical debt may build up to such an extent that a rewrite may be seen as the only way of addressing problems of instability, poor performance or lack of extensibility.

At BlackJet Software, we have seen many systems that fit this pattern and have a great deal of experience in resolving these kinds of problems. For small problematic systems, where the system’s structure has deteriorated too far, a ground-up rewrite may be the most cost-effective solution. However, in many cases it is more cost-effective to ring-fence system components to allow a managed evolution from the old system to a new system without subjecting the business to unnecessary risk.

With our extensive experience, we can recommend the most appropriate strategy based on your specific situation. Please contact us to discuss your needs.

1. Software Engineering is still a relatively young discipline and over the last ten to fifteen years new techniques, tools and technologies have emerged that enable modern software to now be reliably built in a way that readily facilitates future extension. Using techniques such as SOLID and DRY a system can be designed to be capable of permitting future changes in a way that does not destabilise the existing system.

Unit testing frameworks and continuous integration (CI) servers provide valuable protection for existing system behaviour, preventing new changes from breaking old behaviour.

At BlackJet Software, all our software is delivered with a comprehensive unit test suite, which exercises all critical system behaviour. We strongly believe in automating as much of the development process as possible, especially for often-repeated tasks, such as tests that must be repeated in full after every change to ensure the system continues to behave as intended.