By Dan Podsedly, VP Product
You’ve seen the demo videos that start with a prompt describing an application, followed by a stream of LLM generated code. Are we at the holy grail of no code development? And how will that impact our jobs as software builders?
Henrik Kniberg envisions AI becoming the development team as the end state of a phased evolution of AI transforming the software industry. We may be close to that for relatively simple use cases, and more powerful, autonomous AI agents that can design and build entire applications are on the horizon.
How will that work for complex enterprise systems?
Imagine you're the accountable leader, and you've managed to describe the complexity of a business system that AI could produce for you. Does it work? Is it secure? Is there unintended behavior? How do you know, and can you trust it?
Software is never done. How do you maintain and evolve a generated codebase that no development team is familiar with? What happens when something goes wrong and you have to resolve the problem for the business against a tight SLA?
In our view, people are at the center of software, and AI is an enabler of superpowers for human teams. Not a replacement.
AI Enabled Programming
AI isn’t new to programming - Github Copilot brought generative AI to the masses in 2021 with inline code autocomplete that seemed like magic but quickly became routine. There was even a programmer’s AI assistant in the 70’s, in the form of Interlisp-D.
Conversational LLMs take it to a whole other level. We’re all using these to come up with ideas, explain error messages, find bugs, suggest refactorings, and generally find answers faster than wading through endless Stack Overview comments.
But it’s not all roses - almost by design, LLMs can be very convincing at almost giving the right answer, while missing in critical ways. This often results in developers having to spend more time than before to get a piece of code just right.
So what’s the most effective way to pair AI with humans?
Weaving AI into XP
Extreme Programming is at the heart of how we work. It’s all about short delivery cycles and continuous, rapid feedback loops to reduce risk and build trust.
In XP, we spend much of our time pair programming and “test driving”, typically with one person writing a test, the other writing the code to make it pass. As a pair sidekick, generative AI speeds up this rhythm by generating tests or the application code, and suggesting refactorings. It can also act as a reasonable substitute when one of the human developers ends the day early or gets pulled into a long meeting.
Can AI pair with itself? We tried it as an experiment, and it actually reinforced the importance of human developers curating AI and its outputs. Generative LLMs can’t really match the unique human perspective and creativity, but they are an effective complement, helping developers move faster and focus on higher level concerns.
AI-Human Paired Legacy Modernization
Our core focus at Mechanical Orchard is legacy modernization - we help customers get off the mainframe. These systems are complex, written in (now) vintage languages like COBOL or Assembler, and rebuilding these systems in a modern language in the cloud is a difficult journey.
From a distance, generative AI ushers in visions of wholesale automated conversion. Technically, it may be within reach, but the biggest problem with legacy systems is that knowledge about them is held by a shrinking number of people. Replacing these applications with a machine-generated equivalent would just make the problem worse - you’d just end up with a codebase that no one understands.
In contrast, our human-AI approach results in clean, well-tested software that humans understand, maintain, and evolve easily. And taking from our XP playbook, we replicate and replace one small portion of these legacy systems at a time, which reduces overall risk, incrementally lowers the costly mainframe footprint, and unlocks innovation sooner.
Reverse Engineering with AI
Reverse engineering is a big part of our legacy modernization process, and generative AI plays a big role here.
At a foundational level, AI is helping us better understand and convert specific components of mainframe systems. LLMs with specialized prompt engineering explain source code, decrypt obscure binary formats, and translate various artifacts. We're continuously evolving these tools, moving towards more powerful autonomous AI agents.
The next level is about broader understanding of legacy systems, applying LLMs along with other code analysis tools to build things like dependency graphs, data flow models, and generated vector space representations. These allow us to be more strategic with replication, for example through semantic search or identifying patterns of similar components that can be converted together - and essentially make it possible to have a conversation with the legacy system.
That paves the way for the third level: using generative AI for incremental production of functional tests or modernized replica code. The goal here isn't to completely automate legacy conversion — our developers are in full control — but to move much faster at replicating specific components, building context and awareness as we go.
Our vision is for AI to act as a Sherpa, guiding our teams up the mountain through a complex legacy modernization process, automating rote tasks and accelerating them along the way. It’s the better path to a new system that’s well understood, trusted, and malleable, so it can evolve at the pace needed in this rapidly changing world.
With a human centric, problem oriented approach, AI will have a very meaningful impact on our productivity. Gains will be cumulative, with a compounding effect. Changing how we work in one area will have unexpected benefits in others.
We will go faster in the end, but more importantly, do better work and create better software.
The AI robots are here. But they’re here to help, after all.