DRY, KISS a YAGNI se často prezentují jako tři samostatné principy. Podle mě tím ale uniká to nejdůležitější.
Jejich skutečná síla vzniká až ve chvíli, kdy je začneme používat společně.
Nejde totiž jen o způsob psaní kódu. Mění způsob, jakým o kódu přemýšlíme, jak navrhujeme aplikace a jakou složitost jsme ochotni do systému přidat.
Jednoduchost jako základ
KISS nás vede k jednoduchým, malým a jasně pojmenovaným funkčním blokům. Funkce by měla dělat to, co říká její název. Pokud ji nedokážu jednoznačně pojmenovat, možná má příliš mnoho rolí.
Kent Beck ve svých pravidlech jednoduchého designu zdůrazňuje mimo jiné vyjádření záměru, odstranění duplicit a minimum zbytečných prvků [1]. Jednoduchost tedy není jen o počtu řádků, ale především o srozumitelnosti.
KISS přirozeně pomáhá DRY. V malých, pochopitelných blocích je opakování vidět. Andy Hunt a Dave Thomas formulují DRY v The Pragmatic Programmer jako požadavek, aby každý kus znalosti měl v systému jedinou, jednoznačnou a autoritativní reprezentaci [2]. To je podle mě důležitější než prosté „nekopíruj kód“.
Cílem ale není co nejmenší metoda nebo maximální znovupoužití. To jsou nástroje.
Cílem je kód, kterému rozumí i někdo, kdo ho nenapsal.
Složitost platíme opakovaně
Když píšu kód já, kontext znám. Produkt ale žije roky a většinu času ho čtou, ladí a mění jiní lidé. To má přímý ekonomický dopad.
Složitost není jednorázová investice. Je to opakující se náklad.
Platíme ji při code review, onboardingu, incidentech, refaktoringu i vývoji nových funkcí. A čím déle produkt žije, tím vícekrát ten účet zaplatíme.
YAGNI jako ochrana před předčasnou složitostí
Martin Fowler popisuje YAGNI jako zásadu, že schopnost, o které pouze předpokládáme, že ji software bude potřebovat v budoucnu, nemáme vytvářet už dnes [3]. Ve svém textu o jednoduchém designu tuto myšlenku vztahuje i na frameworky, reusable komponenty a flexibilitu budovanou předem: za takovou flexibilitu platíme vyšší počáteční cenu s očekáváním, že se nám později vrátí [4].
Nepoužívaný kód proto není zdarma. Musíme mu rozumět, testovat ho a udržovat. Někdy může být levnější ho odstranit a napsat znovu až ve chvíli, kdy je skutečně potřeba.
Patterny nejsou dekorace
Každá abstrakce má svou cenu. Pokud nedokážeme říct, jakou konkrétní složitost nám odstraní nebo jakou hodnotu nám přinese, pravděpodobně ji zatím nepotřebujeme.
Viděl jsem systém, kde se jeden design pattern začal používat téměř všude. Postupně vznikaly strategie ve strategiích a jejich chování bylo navíc řízené konfigurací v databázi. Při incidentu bylo těžké pochopit, co se vlastně provedlo. Dodávka se zpomalila a odhady, které dříve fungovaly, přestaly odpovídat realitě.
Každá další abstrakce navíc není nákladem jen pro jejího autora. Musí se ji naučit každý další člověk, který do produktu vstoupí. Architektonické rozhodnutí tak může ovlivňovat cenu vývoje ještě roky poté, co člověk, který jej udělal, z týmu odešel.
Jednoduchost jako investice
Místo otázky:
Jaký pattern tu můžeme použít?
se raději ptám:
Jaké nejjednodušší řešení pokryje to, co potřebujeme dnes, a přitom nám nechá prostor růst?
Cílem není kód, který ukazuje, jak dobří jsme. Cílem je kód, kterému rozumí další vývojář a může ho bezpečně změnit.
DRY, KISS a YAGNI pro mě proto nejsou tři izolovaná pravidla. Společně vytvářejí způsob přemýšlení, který pomáhá držet složitost pod kontrolou — technicky, organizačně i ekonomicky.
Literatura a zdroje
Zdroje ověřeny 4. října 2026.
[1] Beck, Kent. Extreme Programming Explained: Embrace Change. Addison-Wesley, 1999, zejména pravidla Simple Design. Přehled a diskuse pravidel: Martin Fowler, Beck Design Rules, 2015.
[2] Hunt, Andrew; Thomas, David. The Pragmatic Programmer: Your Journey to Mastery, 20th Anniversary Edition. Addison-Wesley, 2019. Tip 15: DRY — Don't Repeat Yourself. Oficiální přehled tipů vydavatele Pragmatic Bookshelf: pragprog.com/tips.
[3] Fowler, Martin. Yagni. 26. května 2015. MartinFowler.com.
[4] Fowler, Martin. Is Design Dead? — The Value of Simplicity. MartinFowler.com. Text rozebírá YAGNI, jednoduchý design a cenu flexibility vytvářené předem.

