Inženýrská praxe

Git workflow, code review, design dok / RFC, malé PR.

Stát se seniorem není jen o tom, kolik toho víš — je to taky o tom, jak pracuješ s kódem a s lidmi. Dvě stejně technicky schopné juniory odliší to, jestli umí čistě posílat změny, dávat a přijímat code review a sepsat, co a proč chtějí postavit. Tahle kapitola je o řemesle kolem samotného programování.


Pár pojmů na úvod

  • Git = nástroj na verzování kódu (uchovává historii změn, umožňuje práci víc lidí najednou).
  • Branch (větev) = oddělená linie práce, kde si vyvíjíš změnu, aniž bys rozbil hlavní kód.
  • PR / MR (Pull/Merge Request) = návrh změny k zařazení, který si ostatní projdou (review).
  • Code review = kontrola změny jiným člověkem před zařazením.

Git a jak posílat změny

Základní pracovní postup, který uvidíš skoro všude:

  • Malé, logické commity s jasnou zprávou (co a proč), ne „fix" a „asdf". Historie má vyprávět příběh.
  • Krátké větve, časté slučování. Čím déle větev žije stranou, tím bolestivější je pak ji zařadit (konflikty). Většina týmů jede GitHub flow (krátkožijící feature větev + PR), část jde až k trunk-based (slučovat rovnou do hlavní). Společné je: drž větve krátké, ať se daleko nerozejdou.
  • Malé PR. Změnu o 50 řádcích ti někdo zreviduje pořádně; změnu o 2000 řádcích nikdo pořádně neprojde a jen „schválí".

Code review — proč a jak

Code review není buzerace — chytá chyby dřív, šíří znalosti v týmu a drží konzistentní kvalitu.

Když reviduješ:

  • Soustřeď se na správnost, čitelnost a hraniční případy, ne na osobní vkus („já bych to napsal jinak" není důvod).
  • Buď konkrétní a laskavý — komentuj kód, ne člověka. Ptej se („nešel by tu race condition?"), nementoruj.

Když dostáváš review:

  • Ber to jako pomoc, ne útok. Cizí oči vidí, co ty ne.
  • Malý PR = rychlejší a lepší review. Pomáháš tím i sobě.

Design dok / RFC — přemýšlej dřív, než stavíš

Než se pustíš do něčeho většího, sepiš krátký design dokument (často se mu říká RFC). Je to větší bratr ADR z Tech Choices: jaký problém řeším → jaké mám možnosti → co volím a proč → jaké to má důsledky a rizika.

Smysl: dostat zpětnou vazbu, dokud je změna ještě levná (na papíře), ne až po týdnu kódování. Navíc tě psaní donutí myšlenku promyslet — když ji neumíš vysvětlit, často ji ještě nemáš domyšlenou. A je to schopnost, kterou se senior pozná: umět návrh sepsat a obhájit.


Pár dalších návyků seniora

  • Rozsekni velkou práci na malé kroky, které jdou nasadit samostatně (souvisí s feature flags — nasaď nehotové schované).
  • Nech po sobě stopu — commit zprávy, PR popisy, ADR. Za rok (a kolegům) to ušetří hodiny.
  • Automatizuj, co se opakuje — testy, lint, formátování běží v CI, ne v hlavě.

Failure modes — jak se to dělá špatně

  • Obří PR → nikdo ho pořádně nezreviduje, jen „schválí" → bugy projdou.
  • Dlouho žijící větev → bolestivé slučování a konflikty.
  • Review zaměřené na vkus → hádky o styl místo o správnost (styl ať řeší automatický formátovač).
  • Stavět velkou věc bez design doku → po týdnu zjistíš, že to mělo být úplně jinak.
  • Nečitelná historie (fix, asdf) → za půl roku nikdo nepozná, proč se co změnilo.

🛠️ Cvičení

  1. Rozsekni PR. Máš jednu velkou změnu (nová funkce + refaktor + oprava). Navrhni, jak ji rozdělit do menších PR a v jakém pořadí.
  2. Napiš commit zprávy. Pro tři smyšlené změny napiš dobrou commit zprávu (co a proč) a porovnej s „fix".
  3. Code review. Dostaneš PR, kde je SELECT bez tenant_id a money ve floatu. Napiš dva laskavé, konkrétní review komentáře.
  4. Design dok. Pro „přidáme do appky vyhledávání" napiš kostru design doku (problém → možnosti → rozhodnutí → rizika).
  5. Trunk-based vs dlouhé větve. Vysvětli na příkladu, proč týdny žijící větev bolí víc než časté slučování.
Náčrt řešení — rozbal, až si cvičení zkusíš sám
  1. Rozsekni PR — rozděl na tři menší PR v pořadí refaktor → nová funkce → oprava (každý samostatně nasaditelný a zrevidovatelný); nehotové části schovej za feature flag. Pozor: malou změnu někdo zreviduje pořádně, obří PR jen „schválí" a bugy projdou.
  2. Napiš commit zprávy — každá zpráva řekne co a proč (např. „fix: zaokrouhli cenu na haléře nahoru, jinak faktury neseděly"), ne jen „fix" nebo „asdf". Pozor: historie má vyprávět příběh — za půl roku nikdo nepozná, proč se co změnilo, když tam je „fix".
  3. Code review — komentuj kód, ne člověka, konkrétně a laskavě, radši se ptej: u SELECT bez tenant_id „nešlo by sem doplnit tenant_id, ať nevidíme cizí data?", u money ve floatu „nepřešli bychom radši na celá čísla/decimal kvůli haléřům?". Pozor: drž se správnosti a hraničních případů, ne osobního vkusu (styl řeší formátovač).
  4. Design dok — kostra: problém (chceme vyhledávání) → možnosti (SQL LIKE vs full-text vs externí engine) → rozhodnutí a proč → rizika a důsledky. Pozor: piš ho předem, dokud je změna levná (na papíře), ne až po týdnu kódování.
  5. Trunk-based vs dlouhé větve — týdny žijící větev se rozejde od hlavní a slučování bolí (kupí se konflikty); časté slučování malých kroků drží rozdíly malé a problémy odhalí hned. Pozor: nehotové části schovej za feature flag, ať můžeš slučovat brzy.

🧠 Otázky & odpovědi

Proč jsou malé PR lepší než velké?

Protože malou změnu (desítky řádků) ti někdo zreviduje pořádně — projde logiku, hraniční případy, chyby. Velkou změnu (tisíce řádků) nikdo poctivě neprojde a jen ji „schválí", takže bugy projdou. Malé PR se navíc rychleji slučují (míň konfliktů) a snáz se vrací zpět, když je problém. Rozsekat práci na malé kroky je dovednost sama o sobě.

K čemu je code review a na co se při něm soustředit?

Code review chytá chyby dřív, šíří znalosti v týmu a drží kvalitu konzistentní. Soustřeď se na správnost, čitelnost a hraniční případy, ne na osobní vkus (styl ať řeší automatický formátovač). Komentuj kód, ne člověka, buď konkrétní a laskavý a radši se ptej, než mentoruj. Když review dostáváš, ber ho jako pomoc — cizí oči vidí, co ty ne.

K čemu je design dok / RFC a kdy ho psát?

Píšeš ho před stavbou něčeho většího: jaký problém řeším → jaké mám možnosti → co volím a proč → rizika. Smysl je dostat zpětnou vazbu, dokud je změna levná (na papíře), ne až po týdnu kódování. Navíc tě psaní donutí myšlenku promyslet. Je to větší bratr ADR a schopnost „návrh sepsat a obhájit" patří k tomu, čím se pozná senior.

Proč krátké větve a časté slučování (trunk-based)?

Protože čím déle žije větev stranou od hlavní, tím víc se obě rozejdou a tím bolestivější (a rizikovější) je pak změnu zařadit — kupí se konflikty. Časté slučování malých kroků do hlavní větve udržuje rozdíly malé a problémy se objeví hned, ne až po týdnech. Nehotové části se schovají za feature flag.

Proč záleží na dobrých commit zprávách a historii?

Protože kód se čte mnohem víc, než píše — a za půl roku (nebo kolegovi) historie odpovídá na otázku „proč se tohle změnilo". Zpráva „fix" nebo „asdf" neřekne nic; dobrá zpráva (co a proč) ušetří hodiny pátrání a pomůže pochopit rozhodnutí, aniž by se musela překopávat naslepo. Je to levná investice s velkou návratností.