I still remember my first assignment on my first job. It was a four-month project to improve the performance of an application critical to providing workforce services to the state of North Dakota. The year was 1987 and the application was written in COBOL. Our team worked for four months on tens of thousands of lines of code and improved performance to more than the target. An achievement to be proud of, but all we did for four months was refactor code. We developed no new functionality.
In the years since those snowy four months, I’ve had the opportunity to work on significant reengineering, modernization and transformation projects at many Fortune 500 companies. And every one of them involved software re-architecture, refactoring, migration or retirement to address years of technical debt. Throughout this journey, I have seen the problem of software maintenance from many perspectives: as a developer, project manager, and architect as well as a senior executive.
Organizations spend millions on software migration and modernization efforts. But even more importantly, these maintenance efforts get in the way of building the future. IT organizations spend years on legacy modernization projects instead of building new business features, choking off business growth and, in this hyper competitive business environment, sometimes jeopardizing the company’s very existence.
Software development methodologies and tools have made steady progress in the last three decades. Today’s software development is iterative, incremental and continuous.
Continuous integration and continuous automated testing have become standard practices in most software development projects and go hand-in-hand with lean and agile development methodologies. More recently, DevOps and continuous delivery are starting to take hold, with promising tools and a growing number of success stories.
However, the vast majority of these tools and practices target new software development. Post-deployment software maintenance practices have seen minimal evolution with equally limited evolution in software maintenance tools.
As a result, there is a dire need for a new class of practices and tools for software maintenance, what we, at Sema, call Continuous Software Maintenance (CSM).
Continuous Software Maintenance (CSM) is the natural evolution of the agile development trend. Stated simply, CSM is the iterative, incremental and continuous maintenance of post-deployment software.
Continuous software maintenance does not replace continuous testing, integration and delivery but rather extends these processes to make the entire software development and maintenance value chain lean and agile. And it does not replace production monitoring and maintenance tools but strengthens them to provide visibility into the code-level design defects in applications.
The opportunity offered with continuous software maintenance is immense. With CSM, software is continuously improved, leading to little or no technical debt. Problems are fixed as they occur, rather than being put on a backlog waiting to be grouped into a maintenance project at some mythical future date. And if maintenance is required on code with years of technical debt, CSM tools can make it much faster and more efficient.
Imagine: software teams focusing on the future, on new features rather than fixing old code. How cool would that be?
That's why I'm so excited to be part of Sema, a new company that applies machine learning for continuous software maintenance, including refactoring and modernization of software and web services.
In future articles, I will provide details on how Sema's Detect and Refactor CSM products are transforming software maintenance.
Sanjay Khunger is Chief Technology Officer at Sema Lab