"The past can be used to renew the present, not just to bury it."
– Terry Eagleton

Our client used an outdated system for their backbone service. The system became too expensive to maintain and add new features to, but it was in heavy duty – how could we replace the service while keeping it running 24/7?

Business success in today's competitive market depends on the ability to keep up with constant changes. It's especially true if you rely on technology. Our client is a tour operator, their business depends on a booking service that's easy to use and loads fast. This system is the main source of information about package tours, accommodation and service options, and it's used internally by everyone from customer service to top level managers.

The legacy system used by our client was still functioning okay, and it was able to support more than 40,000 bookings each year. To keep up with the new trends, mobile devices, personalised marketing campaigns however, it required expensive maintenance. Today there are excellent frameworks for many of those tasks, but how would the whole system communicate with the external services? How could we make sure that what we build today will be extendible and easy to maintain in the foreseeable future?

This particular system was developed over 15 years ago, written in a programming language called Perl. Perl is a great language built in the 80s, it's general-purpose and used for everything from mathematical computations to building websites.

However, the number of people who use the language is decreasing, and the custom framework the client built is difficult to learn for newbies. With the constant evolution of technology, the invention of new algorithms and methods to get things done, many IT experts are leaving Perl behind. Large financial institutions and banks employ those who can write code in Perl on high day rates. As a result, maintenance of the client's legacy system has become too expensive to handle.

We accepted this challenge and structured a plan to:

  1. Design a system of multiple smaller services that are easy to maintain. Ideally using frameworks that are well maintained and trustworthy – we want to be able to find developers to support them now, and in 10 years time.
  2. Add new extensions to the current system to enable communication between the newly built parts and the old database. These new application-programming interfaces are designed to be future-proof and provide a common language for continuous integration & continuous delivery tools.
  3. Work on each new micro-service one by one. As an example, we rewrote the interface for the partnering tour operator's bookings as a separate, lean application that was still communicating with the old database behind the courtains.
  4. Once all micro-services were in place, we replaced the old database and service with the brand new system that produced identical APIs.

The plan worked with a total of 25 minutes planned downtime. We were able to test and monitor the complete process via introduced continuous delivery and integration tools. These tools are providing a good service today, to alert the client about potential system errors, to catch all those before users see them.

In a relatively short timeframe – in a bit over a year –, we replaced old systems, marketing websites, and booking engines with new micro-services that are fast and easy to maintain on a lower budget. As an example: the client's marketing website is running WordPress now and utilizes custom plug-ins to interact with the old system. Thanks to our out-of-the-box tools and approach, the client is able to use frameworks that are easy to navigate, cheap to run, and are way more future-proof than the outdated system was.

We don't share names in these case studies – while we are proud of our clients and their stories, we respect their privacy and business. For references, please get in touch with us directly.