Key Concepts
Software never dies — it evolves. Understanding legacy systems and evolution processes is a critical real-world skill.
Software Evolution Process
Change requests → Impact analysis → Release planning → Change implementation → System release.
Legacy Systems
Old systems still in use. Often critical to business. COBOL banking, airline reservation systems, government systems.
3 Types of Maintenance
Corrective (fix bugs), Adaptive (new environment), Perfective (new features/improvements).
Refactoring
Improving code structure without changing external behavior. Fights technical debt.
Concept Deep Dives
Click each concept to expand — real examples, diagrams, pros & cons.
Software Evolution Process
When to Use
Every change to a production system should go through this process.
Real-World Example
A bug report in production → impact analysis → hotfix release → regression test → deploy. This IS the evolution process.
✓ Advantages
- Controlled change reduces risk
- Impact analysis prevents surprises
- Audit trail
⚠ Watch Out
- Overhead for small changes
- Slows down emergency fixes if too rigid
Legacy Systems
When to Use
When the system still provides business value despite being technically outdated.
Real-World Example
US banks still run COBOL for core transactions. FAA air traffic control. NYSE core systems. Replacing them is too risky.
✓ Advantages
- Battle-tested reliability
- Deep business logic encoded over decades
- Known behavior
⚠ Watch Out
- Hard to find developers
- Expensive to maintain
- Integration with modern systems is painful
3 Types of Maintenance
When to Use
Understanding what type of change you're making helps estimate effort and risk.
Real-World Example
Corrective: fix login bug. Adaptive: update for iOS 18. Perfective: add dark mode or improve search algorithm.
✓ Advantages
- Classifying maintenance helps prioritize
- Perfective = most value
- Corrective = urgent
⚠ Watch Out
- Boundaries blur in practice
- Perfective maintenance can destabilize systems
Refactoring
When to Use
Continuously — 'Boy Scout Rule': leave code cleaner than you found it.
Real-World Example
Extracting a 200-line function into 5 well-named functions. Replacing a magic number with a named constant.
✓ Advantages
- Reduces tech debt
- Improves maintainability
- Makes future changes cheaper
⚠ Watch Out
- Risk of introducing bugs
- Time investment upfront
- Hard to justify to non-technical managers
processOrder()
200 lines, 8 responsibilities
validateOrder()calculatePricing()applyDiscounts()chargePayment()sendConfirmation()
Quick Reference
- 1Software evolution: software must change or it becomes less useful over time.
- 2Evolution process: change requests → impact analysis → release planning → implementation → release.
- 3Legacy systems: old systems that remain critical to business. Often expensive to replace.
- 4Legacy system assessment: evaluate business value vs. system quality to decide strategy.
- 53 types of maintenance: corrective (~21%), adaptive (~25%), perfective (~50%).
- 6Refactoring: restructuring code without changing behavior. Essential for long-term health.
- 7Technical debt: accumulated shortcuts that make future changes harder.
From the Book & Beyond
Case Study — The £10 Million ERP Replacement That Failed
Sommerville shares a war story from his own consulting work: a large enterprise running more than 150 legacy systems decided to replace them all with one centrally maintained ERP system. The project failed. After spending more than £10 million, only part of the new system was operational — and it worked less effectively than the systems it replaced. Users kept the old systems running and added manual workarounds to bridge the gap. It's the chapter's core lesson in one anecdote: replacing legacy systems is expensive and risky, which is why an estimated 200+ billion lines of COBOL still run today's businesses.
2026 Perspective — Strangler Figs & LLM-Assisted Migration
Big-bang replacement failed in Sommerville's story — so modern teams don't do it. The strangler-fig pattern (named by Martin Fowler after a vine that slowly envelops its host tree) routes traffic through a facade and replaces the legacy system one slice at a time, keeping the business running throughout. The newest twist: LLMs are attacking the COBOL problem directly. IBM's watsonx Code Assistant for Z and similar tools translate COBOL to Java and explain undocumented legacy code — easing the exact skill shortage Sommerville describes as COBOL veterans retire. AI doesn't make migration push-button, but it makes program understanding — the hardest maintenance cost — dramatically cheaper.
Quiz — Test Yourself
Think through your answer first, then reveal.