Fact: Code Is the End Product, Not the Beginning

Software rarely comes into existence just because someone felt like coding would be a funny idea. Every line, every class, every module, and every piece of software is the result of a long chain of decisions. It starts with people—those who have goals, expectations, and problems to solve. From these goals emerge specific needs that a company translates into a vision. That vision defines how technology can help meet those needs and provide real value to people. From this vision, practices and methods evolve into routines and processes that determine how the vision is lived and implemented in everyday work.

Flow diagram showing the transition from the external world with people and needs to the company with vision, practices, features, and code.
What happens before the code?

Only then do the desired features emerge, eventually expressed in software code. Code therefore preserves not only functionality but also the underlying ways of thinking and working that emerged from many decisions. Ignoring these higher layers means, in the worst case, merely polishing structures that no longer create value. Modernization that targets code alone treats symptoms while obscuring the real problem areas that keep a company tied to its past.

Problem: Accelerating the Wrong Things

Peter Drucker put it best: “There is nothing so useless as doing efficiently that which should not be done at all.” The new AI tools are powerful, no doubt. I’m a strong advocate for AI-supported software modernization because it provides options that were previously neither technically feasible nor economically viable. Today’s development tools can quickly make code more understandable, translate it into other programming languages, or assist in migrations to modern architectures. This sounds like progress and efficiency. Yet if we define the scope too narrowly too soon, these tools only answer one limited question: How can we make existing code better? The truly decisive questions come before that: Do we even still need this code? Does it still meet a current need? Only partially? Where not anymore? Or does it merely consume resources without delivering real value? If these questions go unasked, what emerges is not innovation but a massively accelerated evolution of irrelevant systems.

AI can achieve far more if used differently. Instead of serving merely as a coding assistant, AI can support software archaeology at multiple levels. Already today, targeted analyses can reveal technical patterns and business concepts. But why not also uncover implemented practices and reconstruct old visions? Reverse engineering up to the product-strategy level creates a comprehensive knowledge base of the implicit ideas that once aimed to meet former needs. Even if some assumptions prove inaccurate at first, it is still possible with little effort to shed light on the otherwise opaque black hole called a legacy system before organizational paralysis sets in.

In parallel, new ideas developed through modernization workshops—using methods such as strategic domain-driven design or Wardley mapping—can define a new target vision that aligns with current needs. This combination of human intelligence (still indispensable!) and the smart use of large language models provides a solid foundation for comparison between old and new. It enables the truly decisive question: Is the software system still relevant today?

Example: Price Adjustment in E-Commerce

In the early days of e-commerce, sellers manually adjusted prices based on experience, inventory, and simple calculations. Later, software was built to digitize this process. Prices could be changed on-screen, but the process remained essentially manual and labor-intensive.

If the desire now arises to build a modern dashboard to make this manual price adjustment more efficient, the first question should be one of purpose. Of course, a dashboard makes inputs more convenient, the interface looks nicer, and data can be visualized better. With AI, a click-prototype can be created quickly using vibe coding and even implemented with agentic software engineering. All that is feasible today, but it merely optimizes an outdated way of working.

The real need today is no longer to adjust prices more efficiently by hand. The current need is to determine the optimal price that balances demand, revenue, and competitiveness. A pricing engine using rules, data, and algorithms directly addresses that need. A modernized dashboard, in contrast, perfects the past and creates modern legacy: a technically modern dashboard that supports a business process already obsolete.

What’s Needed: Critical Thinking at Every Level

Modernization in the age of AI is no longer a purely technical task but a strategic leadership responsibility. It must traverse all levels—from code and features to practices, vision, needs, and the people behind them. Those responsible for modernization must assess whether the original needs still apply, whether the vision still holds, whether the implemented functions create relevant value, and whether they align with current business strategy. Technical leaders in particular must not get lost in code and AI buzzwords but keep their focus on organizational goals.

If this critical reflection is missing, systems emerge that are technically impressive but offer little business value. Leadership must therefore ensure that tools from the new era of artificial intelligence are applied at the right level. Starting too early at the code level without questioning the higher layers is like overhauling a small car’s engine when the business now requires a delivery van.

Conclusion: More AI Doesn’t Automatically Mean Less Legacy

Large language models, combined with agentic software engineering, are fundamentally changing how software is created and modernized. However, using these tools doesn’t make modernization easy or complete. Technological excellence alone is not enough to safeguard the long-term value of IT systems or maintain competitiveness.

The guiding questions are therefore not: How do we improve our code with AI? But rather: Should we even still have this code? Would we still build it this way today? Does the code support effective practices in our domain? Does it meet the right, current needs? Does it deliver real value to the people using it?

Only once these questions are answered does the use of modern AI-based tools make sense at the right level. Otherwise, AI doesn’t reduce legacy—it creates technically impressive but strategically irrelevant legacy.

Many thanks to my colleagues Benjamin Wolf, Torsten Mandry, and Joachim Praetorius for their feedback on an earlier German version of this post.

Header image by Paul Brennan on Pixabay.