Link Copied!

The Great Software Stagnation: Why Apps Feel Broken in 2025

Software feels glitchier because it is. New data reveals how AI coding assistants, rapid release cycles, and the death of QA are creating a hidden technical debt crisis.

A digital abstract representation of fracturing code blocks and glitching interfaces.

You unlock your phone to check a flight, but the app hangs on a white screen. You click “Buy Now” on a website, and the button turns gray, but nothing happens. You try to pair your smart lightbulb, and it demands a firmware update that fails three times.

If you feel like technology is becoming more fragile, you aren’t imagining things.

For the last decade, the tech industry has operated on a mantra of “move fast and break things.” In 2025, independent analysts are finally tallying the cost of the broken things. While hardware has become exponentially faster and more reliable, the iPhone 17 is a miracle of physics, the software running on it feels increasingly held together by duct tape and prayers.

This isn’t just nostalgia for a “golden age” that never existed. It is a measurable statistical trend. New data from major code analysis firms reveals a disturbing pattern: as the coding process becomes more automated, the structural integrity of systems is degrading. The market is building digital skyscrapers on foundations of sand, and the cracks are starting to show.

The Entropy of Speed

The fundamental problem is a shift in the economics of software delivery. Twenty years ago, shipping software was a physical act. You pressed a “Gold Master” to a CD-ROM or DVD, put it in a box, and trucked it to a store. If that disc had a critical bug, the recall costs were astronomical. Quality Assurance (QA) wasn’t a luxury; it was an existential necessity for the business.

Today, the friction of delivery is zero. With Over-The-Air (OTA) updates and Continuous Integration/Continuous Deployment (CI/CD) pipelines, a developer can push code to millions of users in minutes. This effectively transferred the risk from the vendor to the user.

Why pay for a dedicated QA team when you can treat your first 1 million users as beta testers?

This philosophy, often called “Shift Left” in DevOps circles (implying testing should happen earlier by developers), has paradoxically led to situations where no one is really testing at the “user level” at all. Developers test their specific functions (unit tests), but the complex interactions between thousands of microservices, the “integration” layer, is left to chance.

But in 2025, a new accelerant has been poured on this fire: Artificial Intelligence.

The AI Code Quality Paradox

The promise of AI coding assistants like GitHub Copilot, Cursor, and Google’s own tools was a productivity revolution. And they delivered on that promise. Developers are writing code 50% faster than they were just three years ago.

But writing code was never the bottleneck. Reading and maintaining it was.

Recent data from GitClear, which analyzed over 150 million lines of code changed between 2023 and 2025, paints a worrying picture. They found that while “Code Churn” (the percentage of code that is written and then deleted or rewritten shortly after) has skyrocketed, “Code Reuse” has plummeted.

The “Shotgun Coding” Effect

AI models are probabilistic engines. They predict the next most likely token. When a developer asks an AI to “write a function to parse this date,” the AI generates a brand new, bespoke function. It doesn’t know that a perfectly good date parser already exists in the company’s shared library three folders up.

The result is a codebase filled with thousands of duplicate, slightly different implementations of the same logic. This breaks the “DRY” (Don’t Repeat Yourself) principle, one of the holy laws of software engineering. When a bug is found in date parsing, you fix it in one place, but the 50 other AI-generated versions remain broken.

The industry is witnessing a massive inflation in codebase size without a corresponding increase in functionality. A simple app that used to be 10,000 lines of code is now 50,000 lines, not because it does more, but because it is bloated with AI-generated boilerplate.

The Illusion of Correctness

The second issue is the “brittleness” of synthetic code. Generative systems are excellent at syntax (the grammar of code) but struggle with semantics (the meaning of code). They produce code that looks perfect; it compiles and runs, but it often fails to handle edge cases or rare error states.

A human developer writing a payment processing system considers, “What if the network drops right after the card is charged but before the order is recorded?” They write code to handle that transactional state. An AI, unless explicitly prompted, often defaults to the “Happy Path.” It assumes everything works.

This leads to “Heisenbugs,” bugs that disappear or alter when you try to study them, often caused by race conditions and unhandled states that only appear under load.

The Microservices Death Spiral

Parallel to the AI boom is the architectural shift to microservices. Instead of one large application (a “monolith”), modern apps are composed of hundreds of tiny, independent services talking to each other over a network.

On paper, this is great. It allows teams to work independently. In practice, it turns every function call into a network request that can fail.

In a monolithic app, function A calls function B. It works 100% of the time because they are in the same memory space. In a microservices app, Service A sends a JSON packet to Service B.

  • The network might be slow.
  • Service B might be restarting.
  • The JSON format might have changed slightly.

The complexity of these interactions grows exponentially, not linearly. If you have 10 services, you have 45 possible connection pairs. If you have 100 services, you have 4,950. Many modern enterprise apps have thousands.

Engineers have built systems that are beyond the cognitive grasp of any single human being. No one person knows how the whole thing works anymore. When something breaks, debugging is not a logical deduction process; it is an archeological dig through distributed logs.

The Regression of User Experience

How does this manifest for you, the user?

  1. The Spinning Wheel: As apps rely more on real-time data fetching for every interaction, the UI becomes dependent on network stability.
  2. The “Something Went Wrong” Generic Error: Because error handling is complex in distributed systems, apps often default to a generic “catch-all” error message that tells you nothing.
  3. Feature Rot: Features that used to work suddenly stop, or work erratically, because a dependency three layers deep was updated and no one checked the compatibility.

The ecosystem is entering an era of “Probabilistic Software”. It probably works. Most of the time.

The Way Out: Reliability as a Feature

The pendulum is starting to swing back. In the B2B world, companies are realizing that “5 nines” (99.999% uptime) is a competitive advantage worth paying for.

The market is seeing the emergence of “Platform Engineering” teams, specialized groups whose sole job is to tame this complexity. They are building internal developer platforms that enforce standardization, essentially forcing the AI assistants to use the approved libraries rather than hallucinating new ones.

Furthermore, a new generation of “Agentic QA” tools is rising. If AI is the problem, it might also be the solution. New autonomous testing agents can navigate apps like a human user, clicking buttons, filling forms, and reporting bugs 24/7. Unlike the brittle automated tests of the past, these agents “see” the screen and can identify when a button is broken, even if the code says it should work.

The Verdict

Software feels buggier because the industry prioritized speed over stability for fifteen years. Tech companies gave every developer a Ferrari engine (AI) but removed the brakes (QA). Development teams are currently crashing into the guardrails.

The next great tech companies won’t be the ones that ship the most features. They will be the ones whose software simply, quietly, works. In a world of digital chaos, reliability is the ultimate luxury.

Until then, you might want to keep refreshing that page. It might work the second time. Probably.

Sources

🦋 Discussion on Bluesky

Discuss on Bluesky

Searching for posts...