Heraclitus, a Greek philosopher, once said - “Change is the only constant”. We may or may not wish but things are going to change and this leaves us with two options – we can be too stubborn to change or we can embrace the change. Most of the times, especially when it comes to technology, we have nothing but the second option to go with. We need to keep on upgrading, modifying, reinventing, refactoring, and repurposing the way our IT applications, systems, environments operate. Application Modernization is one of the solutions which can be your answer to the questions asked by ever-changing technology needs.
In layman terms, application modernization means modifying your existing applications and environment with the latest available technology, which may involve breaking down or replacing monolithic, complex, single deployment architecture into a much faster, lightweight, and agile one.
Why do you need to Modernize Applications?
“They can live in my new world or they can die in their old one.” – a famous dialogue from very famous TV series, Game of Thrones, by Daenerys Stormborn of the House Targaryen, First of Her Name, the Unburnt, Queen of the Andals and the First Men, Khaleesi of the Great Grass Sea, Breaker of Chains, and Mother of Dragons :P
There are technologies which are more than 30 years old or may be 50 in some cases and still running fine. Consider mainframe computers for that matter which are still running and used by most of the government agencies. If that is the case, then what is all this application modernization fuss about? The thing is, any technology starts aging the moment it is invented because someone is trying to make a better version of it from the very next moment. I would like to stick to mainframe example again; we are still using mainframes but that doesn’t mean they are the same mainframes operated with punch cards, paper or magnetic tapes. In its dwindling times, IBM, which is the most linked name when we talk about mainframes, always kept on adding something to the technology to keep it up. May be that is why they have System Z still chugging along making profits for them.
On the same belief, we need to modernize applications to help them keep up in the race to deliver what the end users expect. There are a lot of costs involved in maintaining aging infrastructure, out of date languages and technologies; if you are still thinking of sticking to the old, then good luck with that. Software applications are not wines that get better with time. Modernizing your software applications will add new business value to the existing systems. It will make systems more scalable to handle more business needs, make it easy to deploy and make it feasible for non-disruptive upgrades. It will improve functionality, user experience, and most importantly the security of the overall application environment.
What are the things which we should consider before starting on any Application Modernization journey?
Before we start with the actual modernization process of the legacy application, it is very vital to consider few things and to have a clear strategy.
- Information: First step of any application development is information and requirements gathering. Same is the case with application modernization. For any application to be modified, it is important that we know all functional and technical facets of the application. We can collect this information from the application architects, programmers, owners, and the end users.
- Analyze and Identify: The next step involves analyzing the gathered information to get a clear idea of application workflows, processes, technology, and tools used based on which we can identify the bottlenecks or congestion areas which require upgrading and any dependencies which could potentially affect the modernization process.
- Plan to Simplify, Remove, Automate, Modernize: Planning for complex workflows that can be simplified, any duplication that can be removed, re-hosting options, automated code transformation options, outdated and expensive applications, technology that can be replaced with available alternatives, off the shelf third party plugins or vendor software.
- Roadmap: Strategy and plan for the identified processes and defining the architectural patterns, standardization opportunities, possible automation prospects, selecting proper infrastructure platforms like a cloud service provider or container orchestration platforms, re-engineering options and roadmap of the actual modernization process keeping in mind the continuously changing business prospects and service functionalities.
Application Modernization Strategies
For any application, there can be many approaches for modernization but in simple terms, we can categorize them in two straight options viz., rip-and-replace and bit-by-bit approach.
Build an entirely new system with new technology, tools and scrap the old
A gradual process of modernizing with step by step replacement or modification of tools and technology
|Level of modernization||High||Moderate|
|Risk involved||High||Moderate or low|
|Time required||Moderate||Long because it is an ongoing process|
|Gain from modernization||Immediate but moderate||Long term and high|
In case of legacy systems and applications, because of the interdependency and vital business functionalities, we should prefer incremental or what I like to call the bit-by-bit approach. What this does is reduce the risk and give the enterprise enough time to analyze the effect of changing interdependent functionalities.
Cloud and Containers
Breaking monolithic, complex, tightly coupled, and slow applications into agile, lightweight, and fast applications can be a much-sorted process with multiple possibilities because of cloud and containers. We can fit everything - code, runtime, system tools, system libraries, settings required to run the application on a single lightweight container image. With containers, possibilities are unlimited. Container abstraction, application portability, automation, distributed computing capabilities, better security, standardization, governance, and scalability are some of them. We can deploy this on the cloud of our choice and integrate to CI/CD and automation systems and then microservices can come into play as and when required. All this with the inherent advantages that the cloud, containers, and microservices bring.
Application Modernization with Microsoft
For a considerable period, cloud space was dominated by Amazon and it still is but now Microsoft with Azure is catching up fast. Microsoft has an alternative for everything provided by AWS. In fact, some of these services are even better than AWS. To decide which one is better is completely dependent on the application requirements. In the past few years, Microsoft Azure has come up with a strong portfolio of services. Compute with the likes of Virtual Machines, database solutions like SQL Database, storage solutions, app services like RemoteApp, networking with Virtual Network, DNS with Azure name resolution, monitoring and management like Resource Manager are just some of those services. Based on Apache Mesos, Azure Container Service can help to monitor containers at a fine-grained level.
Application Modernization with AWS
AWS is the dominant force in the application modernization space and it has seen increasing number of users in past few years to move applications to AWS services. In fact, AWS provides support for most of the products from its nearest competitor Microsoft. According to this AWS whitepaper, AWS provides support for number of Microsoft applications including Microsoft Windows Server, Microsoft SQL Server, Microsoft Active Directory, Microsoft Exchange Server, Microsoft Dynamics CRM and Dynamics AX, Dynamics ERP, Microsoft SharePoint Server, Microsoft System Center, Skype for Business (formerly Microsoft Lync), Microsoft Project Server, Microsoft Visual Studio Team Foundation Server, Microsoft BizTalk Server, Microsoft Remote Desktop Services. Not only Microsoft, the wide range of services from AWS practically help you with any application modernization initiative you can think of. AWS has more than 50 services which I have already covered in my last blog “Ops with AWS”. With the compute abilities powered with management, development, and migration tools, database and storage services which can fit in any application requirement, and DevOps and CI/CD services which can automate most of the workflows and operations, AWS can take care of almost all application modernization needs.
The increasing competition between cloud service providers is only making it better from the end users and developer point of view resulting in better services at a lower cost. In addition to this, we are witnessing a lot of innovative services around the container space from players like Docker, Kubernetes, CoreOS, etc., which is making it easy to re-architect and facilitate the smooth migration of legacy applications. I won’t say application modernization is an absolute necessity but maintaining old technology, applications, and environment is like sitting on a time bomb with an unknown amount of time left on the clock. So, we can wait for it to explode and face the consequences which are not going to be good for our business or for our customer’s business or modernize it to stay at par or outrun the competition.