Craig Williams
Categories
Pioneering Modernisation for Ageless Applications
After completing numerous application modernisation and digital transformation projects over the past several years, Webtonic has positioned itself as an expert in revamping applications with ageless usability.
While ruling out a complete overhaul, businesses often underestimate the intrinsic value embedded within their legacy applications, some of which have been meticulously constructed over extended periods. This value resides within the intricate data structures and refined business logic that have been honed over time—frequently accurate and reliable. While the user interaction paradigms may have grown outdated, the user interface might lack contemporary allure, or the underlying components and libraries could be obsolete, leading to challenges when implementing changes. In such cases, opting for a complete rewrite is akin to discarding the baby along with the bathwater.
Considering this perspective, a rewrite is rarely recommended, as the existing code base holds considerable value. Below, Webtonic elucidates a series of actions, presented without any specific sequence, that we would undertake to rejuvenate and modernise an application.
Component and Library Update
For older applications lagging industry standards, the most accessible improvements lie in updating outdated components and libraries. This entails upgrading to non-disruptive minor versions. Upgrading to the latest secure version is advisable when security vulnerabilities are identified.
Establishment of a Safety Net
Developers seek a safety net to facilitate changes and avoid unnecessary disruption. One approach is employing end-to-end automation tests, leveraging tools like Cucumber and Cypress. The adoption of Cucumber’s Behaviour-Driven Development style fosters functional knowledge capture, often absent or lost over time.
After this, unit tests bolster the safety net. Depending on the software architecture, these “unit tests” might start as integration tests, encompassing infrastructure elements like databases and external APIs (Application Programming Interfaces). When true unit tests are unfeasible, a gradual transition toward a software architecture that permits infrastructure mocking is recommended. A “ports and adaptors” architecture is often preferred for this purpose.
Cosmetic Enhancements
Injecting modern CSS into an application can yield significant improvements. As an illustrative example, we implemented a UI (User Interface) modernisation project for a 15-year-old J2EE JSP application with an outdated interface. While some subtle alterations were made to user flows, most effort was directed at revitalising UI components and incorporating a modern CSS framework like MDB. This swift transformation added substantial value to the business and restored user confidence, paving the way for further modernisation by relieving initial pressures.
Containerisation and Automation
Many legacy applications rely on manual build and deployment processes. By transitioning to updated build and deployment procedures and executing these tasks using a CI/CD server like Jenkins, precious developer time is liberated from repetitive and mundane responsibilities. This shift empowers developers to concentrate on value addition.
Containerising the application and deploying it within a container orchestration engine, such as Kubernetes, future-proofs the application in terms of scalability and software updates. The infrastructure becomes code generated.
Embracing Possibilities
An array of possibilities emerges with the application modernised and the safety net established. Considerations may involve transitioning to a micro-services architecture or service-enabling the application, embracing a headless approach with a Single Page Application (SPA) built using React or Angular. However, the initial steps outlined above revolve around creating the adaptability necessary for more significant transformations.
The journey to a successful modernisation endeavour entails acknowledging the lasting value inherent in current systems, carefully revitalising components, cultivating a protective framework, enriching the user interface, optimising deployment via containerisation, and embracing a spectrum of potential transformations—all aimed at empowering broader-scale change.