Decomposition — splitting the problem
Big problems become tractable when you break them down.
Decomposition is breaking a complex problem (or system) into smaller, more manageable subsystems or tasks. Each piece can be designed, built and tested independently.
Why decompose?
- Tractability. A 10,000-line system is overwhelming; ten 1,000-line modules are not.
- Parallel team work. Different developers / teams can work on different subsystems simultaneously.
- Independent testing. Each subsystem can be tested on its own (unit testing) before integration.
- Reuse. Well-designed subsystems can be lifted into other projects.
- Easier maintenance. Bugs are easier to localise; changes to one subsystem don't ripple unexpectedly.
How to decompose well.
- Each subsystem should have ONE clear responsibility.
- Subsystems should communicate through clear interfaces, not by reading each other's internals.
- Avoid creating dependencies that cycle ('A needs B, B needs A').
Cambridge tip. Mark scheme expects students to identify SUBSYSTEMS by FUNCTION (login, payment, notifications) rather than by data type (one subsystem per database table).
- Split into smaller, focused parts.
- Each subsystem has ONE responsibility.
- Enables parallel work, independent testing, reuse.
See the full worked example for subsystems and decomposition →