Free — no signup required

Software Rot in Practice — How Systems Actually Decay

2 min read

The Four Modes of Decay

Understanding entropy conceptually is useful. Recognizing its specific manifestations is what lets you fight it. Software rot presents in four distinct patterns, each with different causes and different countermeasures.

1. Dependency Rot (Environment Drift)

Your code hasn't changed, but the world around it has. Python 2.7 reached end-of-life in January 2020. OpenSSL patches a critical vulnerability. A cloud provider deprecates an API version. Your unchanged code is now broken, insecure, or both.

A dependency audit on almost any real project turns up the same pattern: one package a couple of patch versions behind (low risk, easy fix), another sitting on a version with a known security vulnerability (urgent, still an easy fix), and a third several major versions behind (correct today, but the migration gets more painful the longer it's deferred). Each of those gaps is entropy — the distance between "what your code was built against" and "what the ecosystem has moved on to."

2. Knowledge Rot (Team Turnover)

The engineer who designed the billing reconciliation system left the company two years ago. No one else understands why the reconcile() function has a 47-line conditional block. The code works, but no one dares modify it. Features that should take a day take a week because engineers work around the module instead of through it. This is sometimes called the "bus factor" problem: how many people would need to leave before a critical system becomes unmaintainable?

3. Requirement Rot (Business Drift)

The system was designed for 100 users. Now it serves 50,000. The original architecture assumed synchronous processing. Now response times are unacceptable. The code isn't "wrong" — it's solving yesterday's problem. Requirement rot is insidious because the code passes all its tests; the tests themselves are just testing the wrong thing.

4. Structural Rot (Accumulated Shortcuts)

This is the classic "Big Ball of Mud" — a system with no discernible architecture, where everything depends on everything else. Each individual shortcut was small and rational in isolation. In aggregate, they've destroyed the system's modularity. Circular dependencies form. A change in the payment module breaks the user profile page. No one can explain why. The system has become too fragile to change and too complex to understand.

Key Point: Effective entropy management requires diagnosing which type of rot you're facing before choosing a remedy. Dependency rot is solved with automation (Renovate, Dependabot). Knowledge rot is solved with documentation, pairing, and architectural decision records (ADRs). Requirement rot requires architectural evolution. Structural rot requires disciplined refactoring with test coverage as a safety net. Applying the wrong remedy wastes energy and lets the real decay continue.

This is one of 18 chapters

Every chapter is free — Kubernetes, Terraform, SRE, distributed systems, and more — with fast daily review built in.

Sign up free