Teaching an Old App New Tricks
Legacy desktop software isn’t going anywhere. It runs payroll, manages warehouses, and drives business processes that nobody wants to touch. So I thought I’d poke one with an AI agent and see what happened.
Old Skool
A conveyancing company gave me access to their legacy software to see what I could do with it. .NET WinForms—old skool. Business logic everywhere, intertwined with state living inside the visual controls themselves. Thick client in the truest sense. SQL Server underneath, years of assumptions baked in, one user who knows it inside out.
I built an AI agent—powered by Google Gemini via GCP—embedded directly in the application. The idea was simple: she describes what she needs in plain language, the agent figures out what to do, and the application does it.
How It Works
A chat window sits inside the application. She types, Gemini responds, and the conversation runs until the agent has enough information to act. The key thing here is that nothing happens until it’s ready—an action button appears only once the information is sufficient. The agent has to earn the right to act before it can do anything.
Once it does, the Command Pattern drives the form. I wrapped the operations as discrete commands rather than reaching into the UI directly. Each command maps to a field or an action in the application. You can watch it work in real time—it behaves like a controller operating the application.
One decision I’m glad I made: I didn’t touch the database directly. The temptation is there because it’s faster, but the whole point of going through the application layer is that the business logic runs. Validation fires. Errors surface. And every constraint the agent hits tells me something about what would need to change for full automation. The failures are doing useful work.
She Wasn’t Impressed
I demoed it. She watched the agent gather information, fill in fields, and complete the task.
Then she went back to copy-pasting the way she always has.
She’s fast, she knows the system, and her muscle memory is years old. A chat window that does what she can already do isn’t a good enough reason to change. Fair enough. The next demo needs to do something she genuinely can’t do as quickly herself. That’s a clearer bar, not a crisis.
What’s Not Solved
This was a demo, so PII wasn’t a real concern. But if this runs in production with actual customer data, anonymisation needs to be dealt with properly before anything goes near an LLM. That’s not a nice-to-have—it’s a blocker. I haven’t solved it yet.
What I’m Taking Away
Working in this space is genuinely interesting. Legacy software has constraints and assumptions baked in everywhere, and integrating AI into it isn’t just a coding problem—you have to understand the system before you can extend it.
One more thing I keep thinking about: what would it look like if an LLM could do the full migration—WinForms to web app? Not just integrating into the existing application, but replacing it. That’s a different post for when someone builds it.
— Brad
Disclaimer: This project is conducted in my personal time. All thoughts and opinions expressed here are solely my own and do not represent any current or former employers.