Skip to main content

AI and the Economics of Legacy Software

A few weeks ago, I started thinking about a software project that I had almost completely forgotten.

In 2013, Juanjo Meroño and I built LooWID, an open source video conferencing platform based on WebRTC. Some time later, Edu Rey joined us to help with the UI, giving the project an important qualitative leap in its user experience and making the product feel much more complete. We developed it for several years, adapting it to the rapidly changing browser and WebRTC ecosystem, until around 2018–2019 we eventually stopped maintaining it.The code remained public. The product remained there. But the technology around it moved on.

Years later, I wondered what would happen if we tried to bring it back—not by trying to make the old application run again, but by asking AI to help us rebuild the product.

The original project is still available on GitHub, and the result of the experiment is LooWID Remastered.

From legacy code to a working product

I used OpenCode as the main development agent. I gave it the URL of the old project, asked it to understand the application and to plan its modernisation using current technologies.

The transformation was substantial: the old AngularJS client became React and Vite, the backend moved to a current Express version, MongoDB was updated, and the old WebRTC implementation was reworked around today's browser capabilities.

What surprised me was how quickly the first usable version appeared. With only a couple of high-level prompts, we had most of the core experience working: entering a room, seeing and communicating with other participants, enabling and muting audio and video, screen sharing and chat.

It was far from finished, but it was recognisably LooWID.

That was the first lesson: AI can dramatically reduce the initial cost of recovering an abandoned software product.

Legacy is more than code

But the most interesting part of the experiment was not the technology.

A legacy product contains something that an AI cannot simply recreate from its source code: years of real-world experience.

People have used the software. They have developed workflows around it, discovered shortcuts, complained about things they do not understand, stopped using features that do not provide value and found ways around limitations that the original developers never anticipated.

That knowledge is extremely valuable.

When modernising a legacy system, we should therefore ask more than "How do we migrate this?" We should ask: What do people actually use? How do they use it, and why? Where do they perceive value? What frustrates them? What do they find unnecessarily complicated? What do they miss? Which parts generate incidents, support requests or disproportionate effort whenever somebody wants to change them?

The source code can tell an AI a great deal about how the system works. It cannot tell it everything about why the system matters.

The experience around the legacy product is part of the product.

That is what we should take with us into the new version.

Don't migrate everything

This also creates an opportunity to simplify.

Software accumulates layers. During development, it is often easier to add another workaround than to redesign an existing solution. Over several years, these workarounds become part of the architecture and, eventually, part of the user experience.

A rebuild gives us the opportunity to question them. Can the same capability be provided more simply? Is this feature still valuable? Does the user really need all these steps? Are we preserving something because it provides value, or simply because it was already there?

During the LooWID experiment, I deliberately left out some accessory features that no longer seemed worth carrying forward.

The objective was not to reproduce the old product.

It was to preserve its value while removing its accumulated complexity.

Screen capture from new version of Loowid

The 80/20 effect

Another clear impression from the experiment was that the classic 80/20 effect seems to appear here too. This is not a measured ratio, but the first 80% of the result came surprisingly quickly. The remaining 20%—permissions, specific workflows, edge cases and detailed behaviour—required most of the iteration.

The more specific the desired behaviour, the more important it becomes to think before prompting. Complex requirements need clear definitions and edge cases. Otherwise, each new interaction can modify something that was already working.

This led us to work in iterations: define a capability, explain the desired behaviour at a high level, implement it, test it, refine it and close the iteration before moving to the next one.

And every completed iteration became a proper Git checkpoint.

That last point is important. I would not rely on an AI agent's history as a substitute for version control. When changes happen this quickly, having known-good commits and the ability to return to them becomes even more important.

When building becomes too easy

There is also a new temptation.

At one point, I started exploring direct streaming to YouTube or Twitch. It seemed like an obvious extension: we already had video, and AI could build the feature.

It quickly became clear that it was a much bigger problem. Media conversion, RTP, additional components, browser compatibility and integration with external platforms introduced significant complexity.

So I stopped, put it on the backlog and returned to the previous stable version.

That was another useful lesson: when software becomes cheap to build, prioritisation becomes more important, not less.

We should build a clean, modular foundation that can evolve, but we should not spend our time building every spectacular feature we can imagine. Otherwise, we risk replacing old technical debt with new AI-generated feature debt.

What changes with AI?

The interesting thing about this experiment is that the AI did not make legacy disappear.

It changed the economics of doing something about it.

An old application can now be explored, understood, simplified and partially rebuilt at a cost that would previously have made the exercise difficult to justify.

But the most valuable thing in that legacy may not be the code.

It is the experience.

Years of real users, real workflows, real problems, real workarounds and real value are embedded around the software. AI can help us understand and rebuild the technology, but it cannot replace that accumulated experience.

That is what we should preserve.

This connects with the previous articles in this series: AI can help us make prototypes realistic enough to discover future value, recover time from operational work, and now revisit software whose technology has become obsolete.

The code may be ten years old. 

The experience is not.


Comments

Popular posts from this blog

Connecting Sakai to Wordpress

LMS platforms have fairly long been consolidated at universities as on-line learning support tools. For a long time they were exposed to disappear because of the low level of interoperability to third-party services they offered. Finally, as a result of that need together with the mobility nature of teachers and students between institutions (and consequently on its LMS), interoperability mechanisms were implemented to bring the required tools to their users. Tool interoperability allows to connect remote tools inside LMS environment, keeping them contextualized by the courses or activities from they are called. There were some attempts like IMS-TI (IMS Tool Interoperability) or Campus Project, but it was not until the emergence of IMS LTI   1.0 (IMS Learning Tool Interoperability) that TI technology became more popular.   Nowadays, you can find several examples of LMS that implement IMS LTI  like Angel, Moodle, BlackBoard, D2L, etc. M any of these LMS, i...

LooWID

More than two years ago Juanjo Meroño and I started the project LooWID ( www.loowid.com ). As many of you already know it's an open source videoconference platform based on WebRTC that allow users to join in small rooms and share webcam, screen and audio and share files directly from browser to browser. Eduardo Rey has been also involved designing and implementing the interface and that helped a lot to have a nice platform. It has been an good experience since we moved to make it open source instead of offering just as a service. Before we opened the project we tried to get feedback from friends and family and there were some interesting results. We asked them to fill a survey to guess what business model would be the best for LooWID. We were concerned that we should offer it as free but we needed to find a way to fund the infrastructure, and perhaps if the project grows contract an small team to work on it.  We were asking about the way the project must be funded. There were...

Two Decades of Sakai at UdL: Thoughs, Challenges, and the Road Ahead

It’s been a long time since I last wrote an article, but the recent gathering with fellow members of the Spanish Sakai community inspired me to share a few thoughts on our years of using Sakai at the University of Lleida (UdL) and its future. Two Decades of Sakai at UdL: A Commitment to Innovation Since September 13, 2004, the University of Lleida (UdL) has maintained a strong relationship with the Sakai platform. Over the past 20 years, UdL has focused on advancing ICT support for teaching and learning. From its initial launch with an early version of Sakai (1.0rc2), the platform has been a key tool in meeting the university’s educational needs. UdL chose Sakai to replace WebCT, opting for an open-source solution that aligned with its commitment to free software at the time. In the early years, UdL played an active role in developing Sakai. A notable contribution was the internationalization of the platform, making it easy to translate without modifying the source code. This effort he...