Principy vývoje software

Během své praxe jsem postupně začal dodržovat několik principů vývoje software, kterých se držím, protože se mi dlouhodobě vyplácejí. Byť jsou některé z nich jsou podpořeny výzkumem renomovaných vědců, používám je spíš na základě vlastní zkušenosti, proto je uvádím jako seznam osobní povahy. Pokud s nimi souzníte, je velká šance, že budeme dobře spolupracovat.

Principy se částečně překrývají a tím ilustrují některé základní hodnoty:

  • Jednoduchost – ani jeden řádek kódu navíc, ani jeden člověk navíc, pokud to není opravdu potřeba.
  • Propojenost – i pro software vyvinutý jedním člověkem platí, že je třeba vzít v úvahu, jak je propojen se zbytkem světa. Tím spíše pro software vyvinutý v týmu nebo několika týmy.
  • Zpětná vazba – čím častější a rychlejší zpětná vazba, tím líp. Na všech úrovních.
  • Respekt – kreativní práce funguje jenom v psychologicky bezpečném prostředí .

Principy vývoje software

  1. Každá organizace, včetně svého okolí, tvoří systém. Systém se skládá z částí a vztahů mezi nimi. Není možné vylepšit systém tím, že budu měnit jenom jednotlivé části a ignorovat jejich vztahy.
  2. Změna je nedílnou součástí vývoje software. Každá snaha naplánovat cokoliv na více než několik málo týdnů dopředu je marná. V lepším případě plýtvání časem, v horším případě škodlivá.
  3. I velké produkty je možné vyvíjet s malým týmem. Když mám nedostatek lidí, místo “Kde seženu víc lidí?” je lepší se ptát “Proč je můj produkt tak složitý, že na jeho vývoj potřebuju víc lidí?”. Odpověď na tuto otázku dává dlouhodobě lepší výsledky.
  4. Kreativní práce 21. století je zásadně jiná než manuální práce v továrnách století 20. Znalostní pracovník ví lépe než jeho šéf, jak má dělat svoji práci.
  5. Jednoduchost je zásadní. Jelikož budoucnost se nedá předvídat, je nejlepší strategií do budoucna nepřidávat do produktu nic, co teď zrovna nepotřebuji. Až to budu potřebovat, tak si to tam přidám. Viz také princip 6.
  6. Miniaturní kroky. Software není dům. Po malých krocích je možné měnit všechny jeho části, až vznikne produkt s úplně jinými vlastnostmi. Představuji si spíš zahradu, na které postupně měním vysazené rostliny, až z toho může vzniknout úplně jiná zahrada.
  7. Uděláme to správně nejdřív na třetí pokus. Nemá smysl vymýšlet, jak to uděláme správně napoprvé. Stejně se to nepovede. Něco zkus. Posbírej zpětnou vazbu. Vylepšuj. Opakuj.
  8. Programátoři mají mluvit přímo se zákazníkem. Doslova. Žádný prostředník. Ne analytik. Ne produktový manažer. Ne kdokoliv jiný z firmy. Vývojář a zákazník v jedné místnosti. Čímž neříkám, že tomu rozhovoru nemohou naslouchat další lidé.
  9. Je zásadní, aby cyklus zpětné vazby, byl co nejkratší. Vteřiny (např. mob programming), minuty (např. test-driven development), hodiny (např. automatizované výkonnostní testy). Dny, když to jinak nejde. V dnešní době není důvod zdržovat vydání software více než jeden týden.
  10. Pokud je tým, který vyvíjí produkt, závislý na někom jiném, cyklus zpětné vazby se markantně prodlužuje. Proto se vyplatí, když jeden tým umí všechno, co je potřeba k předání produktu do rukou zákazníka.
  11. O kvalitě se nevyjednává.
  12. Nejlepší software vyvíjejí týmy. Mají společný cíl, jasné členy, hranice působnosti a jsou stabilní. Pokud něco z toho nesplňují, nejsou to týmy.
  13. Neustálé vylepšování. Pokaždé, když se podívám na produkt, vidím, co na něm vylepšit. Málokdy jsem spokojen na víc než 50%. To platí i pro produkty, které jsem celé vyvinul já.

Zdroje inspirace

Odkazy

Heuristics for Effective Organizations

Extreme Programming Explained, kapitola Principles

Principles behind the Agile Manifesto