Programový kód rozsáhlejších soudobých systémů je složitý, nepřehledný, nesnadno udržovatelný.
U systémů jsou často implementovány mimofunkční požadavky: protokolování, zabezpečení, optimalizace.
Pokrytí těchto požadavků jde napříč s požadavky funkčními - současné splnění vede nezřídka ke kombinatorické explozi a (téměř) exponenciálnímu nárůstu velikosti kódu.
Kód je nečitelný a ještě obtížněji udržovatelný.
I rozšiřování nelze většinou provést lokálně, nezřídka je jím zasaženo více částí kódu.