Modernization Strategy - FullstackCodingGuy/Developer-Fundamentals GitHub Wiki

Focus Points

  • Better scalability
  • Better reliability
  • Better security
  • Cost reduction
  • Optimize user experience
  • Improve application scalability
  • Functional improvements
  • Increase engineering velocity
  • Integration with other apps
  • Introduce new delivery toolchains, new access points, new data feeds, or different architectural models

What to focus?

When you want to modernize an application, there are various aspects to consider, below listed are some of the important aspects to modernize:

  • Remove the State from your application and make it horizontally scalable
  • Make the Storage volume horizontally scalable
  • If you want your service to be self healed, then the service should be scalable

Why to modernize?

  • Monolith systems are resource heavy
    • It requires higher configuration server - causing scalable issues
    • It requires lot of network bandwidth to serve the page loads and responses
    • Maintainability issues
    • Issues in releases, entire application should be released even if the changes are in one segment
    • Scalability of a segment/module not feasible
    • QA/Regression Testing challenges - entire application needs to be tested even if the changes are small
  • Are the current applications slow to respond?
  • Is it challenging to make updates when necessary?
  • Do legacy applications integrate well with the latest applications?
  • Are new features required that would necessitate application modernization?

Challenges in modernization

Despite the increasing adoption of modern solutions, many large-scale companies still rely on old-fashioned business. Although modernization has gained momentum in recent years, a few challenges act as resistance.

To identify likely problem areas and mitigate the impact of challenges, one needs to ponder upon a few things,

  • Are your team and infrastructure capable of handling a modernized application?
  • How much will the modernization project cost, and how to budget it?
  • Do you have the internal expertise required to define and manage such a project?
  • Do you have an organization wide buy-in on the project and the new processes it will bring into the system?

Tactical or Strategic approach

To ensure a successful modernization in the organization, you must simultaneously take tactical and strategic approaches.

  • A tactical approach involves making small changes to your current systems or processes with the goal of improving them in the short term. This approach is generally more focused on immediate problem-solving and maximizing ROI. Ex: Rehost, Replatform, Refactor (to some extend).

  • In the long run, embracing a strategic approach is beneficial where the organization’s overall growth is crucial over a faster ROI. By creating a transition strategy along with your modernization service provider, you can make well-informed decisions about the approach that best suits your project requirements. Ex: Rearchitect, Replace

Modernization Process

  • Sufficient resources/training on the right tools and technologies
  • Optimized timing
  • Open communication
  • Encouragement for active participation
  • Budget allocation and Executive sponsorship
  • Focusing on customer centric business objectives and modernization goals

Selecting the optimal application modernization approach

Now is the time to look at the modernization options, which vary by implementation ease, individual’s impact on the system, and the risk involved. You should select one or more that fit your current state environment, motivations, and long-term strategy. Here they are:

Rehost

TL;DR - Uplifting a On-Prem application to a Cloud Infra without structural changes

Known in the industry as "Lift & Shift," rehosting is the process of migrating an on-premises application to the cloud without modifying it, moving it to a cloud-infrastructure ready platform. In this migration approach, current on-premises applications migrate or rehost to an Infrastructure-as-a-service (IaaS) platform. Applications will have almost the same composition as before, but they now deploy to virtual machines (VMs) in the cloud. This strategy is used mostly to migrate large-scale applications to satisfy specific business goals, such as launching a product in an accelerated timeline or leaving an on-premises data center.

Moving the application from an on-premise environment to a new infrastructure (physical, virtual, or cloud) without (or very few) modifications to its code, features, or functions.

Rehosting (lift and shift) is the process of migrating your on-premises application to the cloud without modifying it. This strategy is used mostly to migrate large-scale applications to satisfy specific business goals, such as launching a product in an accelerated timeline or leaving an on-premises data center.

Advantages

  • Rehosting provides the following benefits, when compared with on-premises .NET applications:
  • Minimum effort, because it requires no code or architectural changes
  • Reduced cost
  • Better compliance and security, because it uses the AWS infrastructure and security best practices

Disadvantages

  • Doesn’t take full advantage of the performance, scalability, and resiliency options of the AWS Cloud
  • Difficult to integrate with state-of-the-art cloud services

Reasons to select

  • Relatively simple and the fastest option
  • Improve hardware utilization, scalability, and monitoring
  • Reduce maintenance costs and recovery time
  • Retain service uptime with minimal disruption

When to select

  • You want to free up data center space or exit a datacenter
  • Your IT team has limited cloud knowledge

Re-Platforming

TL;DR - Upgrading the hosting platform from IIS to container based environment without structural changes

At this level, additional benefits are gained from running an app in the cloud with modern technologies like containers and additional cloud-managed services, making it cloud optimized without altering significant code. This maturity model allows containers to deploy on IaaS or Platform-as-a-Service (PaaS) while using additional cloud-managed services related to databases, cache as a service, monitoring, and continuous integration/continuous deployment (CI/CD) pipelines. Replatforming a .NET application as a Windows container provides the advantage of container technologies without changing the core architecture of a .NET application.

Replatforming is often chosen when the current platform is outdated, lacks support, or hampers scalability and performance. It offers a faster time to market, cost-efficiency, and the ability to leverage new platform features.

This migration strategy is useful in any of the following scenarios:

  • You’re unable to resolve .NET Framework dependencies.
  • You’re unable to resolve Windows dependencies.
  • You don’t have the resources to refactor the application to .NET Core or .NET 6.

Advantages

  • This migration approach provides the following benefits, when compared with on-premises .NET applications:
  • Minimal effort
  • Improved resource utilization
  • Improved security
  • Better deployment options

Disadvantages

  • License costs for the host Windows operating system

Example

Several high-profile examples of successful re-platforming efforts include Netflix, which migrated from its legacy data center infrastructure to Amazon Web Services (AWS), and Capital One, which relocated from its legacy mainframe systems to the cloud.

These efforts have enabled these companies to achieve greater scalability, agility, and cost-effectiveness while improving performance and security.


Refactor

Refactoring involves rewriting or restructuring the existing codebase to improve its design, scalability, and maintainability. This approach requires a more significant investment of time and resources but offers the opportunity to optimize the system thoroughly.

Refactoring is typically chosen when the existing codebase is poorly structured, hard to maintain, or when new functionalities need to be added seamlessly. It allows for greater control and customization but may involve higher risks and longer development cycles.

Making significant changes to the source code of an application by splitting monolithic applications into microservices, implementing caching and cluster support, optimizing the most heavily-loaded business logic, moving some data to a NoSQL database, and so on.

Reasons to select

  • Ability to deal with frequent updates and innovation
  • Code optimization
  • Tech debt removal
  • Reduce operational costs

When to select

  • An application becomes complex with evolution
  • The application wasn’t built for the required scaling
  • To improve operating performance without changing existing functionality
  • To take advantage of the common PaaS offerings

Re-architect

Involves Re-factoring

With rearchitecting, PaaS services are used to move applications to PaaS computing platforms. Cloud-native applications and microservices architecture are implemented to evolve applications with long-term agility, and to easily scale based on demand. This type of modernization usually requires architecting specifically for the cloud by writing new code. This approach can help gain the benefits that are difficult to achieve in a monolithic and on-premises application environment. By breaking down a monolithic application into smaller services, each service serves a single purpose and is deployed as a container. The ability to follow a microservices-based approach, where some components are built with .NET and others with Java, but all can run on a common, supported platform on RHEL and OpenShift Container Platform.

Completely rewriting/redesigning your application from the ground up to shift it to a new architecture with greater capabilities.

Reasons to select

  • Reduce the total cost of ownership (TCO)
  • Improve the application resilience against performance issues and outages

When to select

  • The application is not cloud-native
  • You want to replace proprietary APIs and software dependencies

Advantages

  • Faster innovation because it’s easier to add new features in a microservices architecture
  • High availability and reliability
  • Increased agility and on-demand scalability
  • Independent deployment and modern continuous integration and continuous deployment (CI/CD) pipelines
  • Strong module boundaries and technical diversity

Disadvantages

  • Effort and cost of refactoring
  • Potential operational complexity

Rebuild

Involves Re-Factoring and Re-Architecture

Building an individual or various components of an application right from scratch to introduce new technologies or fulfil operational requirements while preserving its scope and specifications.

Reasons to select

  • The process can be completed over time
  • Accelerate innovation
  • Build applications faster
  • Reduce operational cost

When to select

  • Extensive efforts are required to rearchitect or refactor
  • No alignment with current business needs or processes
  • To leverage cloud-based services
  • Adopt modern-day DevOps practices

Replace

Building a new application and replace it with old one.

Analyzing the root cause of the problem and finding the right solution to retire the legacy application.

Reasons to select

  • Relatively simple and faster option
  • Standardization around industry best practices
  • Accelerated adoption of business-process-driven approaches
  • Reallocating investments into applications that can provide competitive advantages

When to select

  • No longer working for various business reasons
  • Easy availability of SaaS option
  • Another existing application of your organization can replace
  • Not worthwhile to invest further in revival

References