A role for AI and people in software lifecycle management
Consider this common scenario: a line-of-business manager has a great idea and wants IT to provide a software platform to support the new business initiative. It’s another IT project on a growing “to-do” list.
A short time later, resourcing and budgets are juggled and the project is formally started. Eventually the great idea is programmed as a software-enabled business initiative; the application is deployed and everyone’s a winner.
If only this was true. Even in the highly unlikely case where the application achieves exactly what it was originally designed to do, as soon as it ships it becomes legacy code and adds to the mountain of technical debt the IT team needs to manage.
In fact, between the time the project began and when the code is deployed in production, chances are, somewhere in the software development sphere, alternative software libraries with better functionality will appear. In most cases, no one is going to commit to switching to the improved code. Besides, in the name of progress, the shiny new software library inevitably will soon be surpassed by something that is perceived shinier.
And while the world moves on, the IT team continues to apply patches to the software libraries they originally selected for the project and continue bug-fixing production issues.
A recent Forrester report warns that technical debt both increases IT costs and risks while slowing down the delivery of new capabilities. The analyst firm urges IT leaders to outsource support for technical debt to a provider, which then free the IT team to drive forward new innovation.
Jonathan Schneider, co-founder of Moderne and the inventor of OpenRewrite has an alternative approach to software lifecycle management, given the pace of digitisation.
Making any changes to source code is a bit like a search and replace in a Word document, except the search phrase, representing a particular snippet of programming functionality, is almost certainly open to interpretation.
Consider a vulnerability like Log4j. Code for logging – which is essential for debugging – is generously injected into source code. Checking every occurrence of programming code that uses the name “log” to see if it’s affected by Log4j seems an obvious task for an AI, but not necessarily to do the search and replace.
Schneider’s approach is to use the AI in collaboration with a programmer for fine tuning an AI-generated recipe or macro, to automate processing of source code files.
Iteratively fine-tuning AI-generated code, to produce a set of instructions to follow, demonstrates the key role human software developers have in an age when AI is taking on more and more of their job role. It’s essential we get this right to ensure proper software lifecycle management.