How to Mitigate Risks of Legacy Software Re-engineering

ModLogix
5 min readMay 10, 2022

--

How to Mitigate Risks of Legacy Software Re-engineering

It does not matter how well your current product is built if it is not supported by a well-designed software development process. Every software product becomes obsolete at some point in its lifetime and stakeholders have no option but to upgrade or discard it.

New devices, software, and operating systems are being released all the time, creating an environment where old software no longer works as it did a few decades back. As a result, many businesses have turned to software modernization for the following reasons:

  • Cost — the costs of maintaining legacy software far outweigh its benefits.
  • People — an ever-growing workload on in-house engineers and a shortage of qualified specialists to keep an eye on outdated technologies means that more resources have to be spent on newer products.
  • Security — legacy code is easily vulnerable to cyber-attacksbecause it lacks security updates. Besides, old software may not comply with modern regulations.
  • New technologies — outdated technologies have limited flexibility to integrate with other technologies, making it harder or even impossible to customize the application and add new features.

When a business decides to modernize the software application, there can be three general approaches to solve the problem:

  • Move somewhere, for example, to the cloud or a new platform, or refactor some parts.
  • Change something in the codebase — this involves restructuring and cleaning up the code and or changing its architecture and programming language.
  • Change everything — a complete re-engineering of legacy software could mean having to rewrite the application from scratch.

In this article, we’ll focus on legacy application re-engineering, the pros and cons for enterprises, and how to create an effective and up-to-date re-engineering strategy.

What is Legacy Software Re-engineering?

Legacy software re-engineering is one of the effective software models to solve legacy app issues and modernize outdated code.

There seems to be no universal definition of what software reengineering is. Different authors imply various techniques when talking about re-engineering. Starting from the software maintenance automation and even all activities performed after the software implementation. In our opinion, the most relevant definition of the re-engineering process is understanding and changing a legacy system, and after that, reconstructing and implementing it in a new form.

Legacy System Re-engineering vs. Other Software Modernization Approaches

As mentioned earlier in the introduction, the software modernization problem can be solved in the following ways:

  • Move — migratethe application to the cloud or to a new platform.
  • Change something.
  • Change everything and rewrite the application.

Let’s explore each of the software modernization approaches in depth.

Moving the application. This means moving the application “as-is” to a more modern environment. For example, from on-premises to cloud environments or moving to new hardware entirely. It is useful when the company resources are limited, and the code is relatively well-built. In most cases, when you need to migrate .NET Framework to .NET Core, the process involves well-defined steps without a total system makeover.

Such an approach uses rehosting or replatforming techniques. Their main benefits are the following:

  • Minimal changes in the code,
  • No change in the core features,
  • Moderate resources and expertise are required to do everything promptly.

However, there are obvious disadvantages of the given approaches:

  • Migration may entail porting code errors and legacy components into the target system
  • The owner can’t adjust the software to its needs;
  • Can’t expand functionality on the go.

Changing everything. In comparison to legacy system re-engineering, this means software redevelopment — starting from rethinking business requirements, redocumenting, and even rewriting the application. This does not mean the whole application at once but incrementally throughout time. It can be useful for extremely problematic projects, in which there is no technical or business documentation, no original developers, and no robust software architecture.

Such an approach uses rewriting and rebuilding techniques, or total replacing — using a third-party alternative product with utterly different infrastructure. As an example, it can be complex re-architecting of monolith systems to service-oriented architectural style. Oftentimes, organizations apply a split of these software modernization services to achieve better results.

Their main benefits are as follows:

  • Significant changes and introduction of new features,
  • Revision of project goals and business processes,
  • Future-proof solutions.

The challenges and pitfalls of changing everything in software are also substantial:

Changing something. Finally, we get to the bottom of things! Here’s where software reengineering comes to play. This approach concentrates on improving the technology itself eithermodifying the software architecture or the code structure and refactor problematic code pieces. It requires highly skilled engineers and a software architect for the project.

Re-engineering of legacy systems is used when the codebase is far from perfect, and the team can justify the benefits of new technologies for the enterprise. This is probably the most common case with a vast variety of implementation techniques. Legacy software reengineering has the following main benefits:

  • Increased performance,
  • Code transparency and predictability,
  • Overall software enhancement,
  • Reduced maintenance costs.

What about the major drawbacks of this approach?

  • Lack of documentation can lead to poor programming decisions,
  • Require a dedicated team that’s familiar with the system.

Legacy Software Re-engineering Process

Re-engineering the legacy system includes three stages:

  1. Reverse engineering
  2. System transformation
  3. Forward engineering

What’s hidden inside this terminology?

Reverse engineering (backward engineering or back engineering). This is the key point of software platform re-engineering, which is the understanding of the initial program. Depending on the nature of software properties to be discovered, reverse engineering performs a static or dynamic analysis.

  • During the static analysis, programmers examine the source code and create data structure representations.
  • The dynamic analysis is done during the code execution.

The result of reverse engineering is a set of abstract representations of the software system under consideration.

System transformation. This is the second stage of legacy software re-engineering. In the system transformation stage, the abstract representations obtained during the reverse engineering are further transformed into other representations at the same abstraction level. The aim is to improve the software structure, quality, and stability. The system transformation stage includes the following processes: refactoring, rearchitecting, and rewriting.

  • Refactoring — is restructuring the code at the level of methods and classes.
  • Rearchitecting — is refactoring at the level of modules and components.
  • Rewriting — is rearchitecting at the highest possible level.

Forward engineering. After system transformation, the transformed system representations can be used to generate physical implementations of the initial system — at a low abstraction level. Forward engineering starts with system specification and includes the design and implementation of a new system — like an ordinary software development process.

This step completes the re-engineering legacy application process where the renewed software meets the ultimate criteria of upgrading.

Read the full article on ModLogix.

Originally published at https://modlogix.com on May 10, 2022.

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

--

--

ModLogix
ModLogix

Written by ModLogix

ModLogix helps organizations move legacy applications to new secure, stable, and scalable platforms. To explore more, please visit https://modlogix.com/

No responses yet

Write a response