Software Rebuilding: Make IT or Break IT?
Software Rebuilding: Make IT or Break IT?
Deciding to rebuild your software is never an easy decision. Read on to learn how a few Agile processes can ease the pain of a rebuild.
Join the DZone community and get the full member experience.Join For Free
[Latest Guide] Ship faster because you know more, not because you are rushing. Get actionable insights from 7 million commits and 85,000+ software engineers, to increase your team's velocity. Brought to you in partnership with GitPrime.
“Change is the new constant” – applies truly to the core when it comes to catering to a highly competitive market where software and technology are effervescent. “Trending-Brand-New” technology has always ruled the roost but what fails to meet the eye of a business decision maker is how to capitalize with “Reengineering.” Touted as a business revolution, reengineering software is eagerly sought after. Let us unravel the Why and How. Ask Why. Ask How. Ask whether it makes sense. Ask what if not? ~ Christopher Danielson
Signs That Rebuilding Software System Is Inevitable
Deciding when to implement a complete rebuild or an incremental rebuild is subjective and a complicated decision throughout the product engineering process. It has two key determining factors: the cost associated with rebuilding and the risks involved with postponement. Deciding between a complete rewrite or an incremental rebuild is easier said than done and thus you must look out for obvious signs.
Every system has a lifespan determined by the relevance of the technology if the technology is completely outdated, obsolete, and there are newer and better alternatives available. In case the technology is no longer supported and a migration to modern technologies is a must or the stale code often turns into a nightmare for maintenance, there is no point in plugging the holes when you can rebuild it.
Developer Ramp-Up Time Is High:
When the original project team is gone or it is more difficult to find the right talent for your legacy software. In instances where it is both frustrating and time-consuming to work on maintenance or bug fixing, it’s probably time that you get your system redesigned and software rebuilt.
High Maintenance Costs
- Is the cost of maintaining the older infrastructure very high?
- Does the slower processing speed of the system, inefficient real-time capabilities, lack of agility in making changes contribute to high maintenance?
- Is the existing software not scalable and with increased usage, technical requirement and additional storage, it is probably cracking under the pressure?
Taking stock of the total cost of ownership can also be an eye-opener since it helps quantify the financial impact of either continuing/rebuilding software. It includes:
- The cost of hosting the hardware.
- Expenses of maintenance staff of hardware and software.
- The cost of replacement hardware.
- Licensing fees.
- Maintenance fees.
- The staff that maintains the software.
- The opportunity cost of time spent to bridge gaps in functionality.
- Costs of errors due to manual mistakes.
It helps you assess the opportunity cost of rebuilding and how sooner you can realize the benefits and ROI.
Do your clients prefer the options provided by your competitors, that offer better tech and ease of use? Due to decline in renewals and increasing churn of current customers you may realize the need to make a major technological shift to mobile and cloud in order to make your product more relevant and stay competitive. For instance, an old e-commerce site can remain transactional, but poor UX and performance issues may fail to convert customers and you may be falling behind the competition.
Generation Shift in Customers:
Your emerging customer base has very different expectations compared to the previous generation and due to this major generational shift, you’re required to address demands and expectations of this new generation of customers or workforce.
How to Approach a Legacy System Rebuild
Apart from technology, cost and availability of resources are critical factors when rebuilding software. While functionality is indeed an important component, you also need to consider the software’s real-time capabilities, processing speed, ability to support new mobile devices, and application integration.
Identify the Gap:
Do an assessment to identify the gap between what your existing software system can deliver and what you expect out of the system now and in the future.
Assessment of Current Software’s Capacity and Limitations
What are the problems with your legacy system? Does it include no automation, insubstantial documentation, outdated frameworks, or inconsistent codes? Is it able to support new mobile platforms and devices? Do you have the talent and team to work on the system?
Partial or Complete Rebuild?
Although rebuilding software from the ground up may have its benefits and appear tempting, rebuilding requires substantial investment upfront. Therefore, for some businesses, it is worthwhile to consider only modernizing the parts that bring the most value to the business. While for some other businesses, it is best to pursue a complete rebuild of the custom software system that is tailored to their unique needs in order to offer immediate and solid improvements over the legacy software.
ABC of Rebuilding Software Success
The mantra isn’t, build one to throw away, because you may make most of the old mistakes again and even introduce new problems. A complete rewrite from scratch is always severely underestimated and demands more time and more effort than anticipated. The best alternative is to partition the job into smaller chunks and gradually replace components of the old code one by one through a system wherein two systems coexist and run parallel over a period. Redesigning incrementally not only gives you the opportunity to reuse at least some parts of the existing design, moreover, it allows you to improve based on the user experiences you're seeing.
Architectural: Agile Approach
An Agile approach, or an incremental rebuild, is considered the most effective tactic for rebuilding software, as you rebuild the software over a series of steps while ensuring two critical points:
Retain UX of Legacy software
This highly competitive technology market has made it tough for customers to keep up, thus making them reluctant to heed frequent/major UX updates. While you plan for partial/complete redevelopment, make sure not to overwhelm users since they are already invested in the existing design and accustomed to working with it. While you may make major changes in the backend, it is equally important to have a deep understanding of the existing users, analyze their journey, and incorporate the valuable insights and feedback from daily users while retaining the UX of the legacy software.
Parallel Existence of Old and New Systems
Often compared to ‘rebuilding the plane in the air,’ at the outset, software rebuilding proceeds with two systems that run parallel over a period and eventually migrate to the new version. This enables you to factor in users' views and improve the new software for more relevance and productivity. A popular approach includes the ‘Strangler Pattern Approach’ which allows you to build a new system around an existing one and then incrementally migrate functionality from the old system to the new one. So, you transform, co-exist, and eliminate to create incremental value in a much faster time frame.
Business Value: Behavior Driven Development
It is critical that you know what you’ll be building and choosing BDD (Business Driven Development) process means that you arrange for closer collaboration amongst developers, testers, and product owners to ensure that all new functionalities are discussed between them to arrive at acceptance scenarios that are then automated by the development team using tools like Behat or Cucumber.
Continuous Delivery Process
CD helps keep the focus on quality with no delay in testing. It ensures that the changes are built and tested with the latest version of the entire codebase. As a result, it eliminates DIY for continuous delivery, automates the repetitive tasks, makes deployment frictionless, and connects existing tools and technologies. Continuous Delivery improves overall productivity.
Published at DZone with permission of Manmay Mehta . See the original article here.
Opinions expressed by DZone contributors are their own.