Odhad celého uživatelského příběhu nebo větší funkce je vždy zatížený chybou. Čím delší je odhadovaný čas, tím větší je nejistota. Řešením není odhadovat lépe, ale odhadovat menší celky. Sprint pak stojí na konkrétních krocích, které lze skutečně dokončit a ověřit.
Selektory nejsou jen pohodlí, ale výkonnostní nástroj. Pokud komponenta volá useSelector a vrací celý objekt, React ji překreslí při každé změně v store, i když se změnilo něco jiného. Vracejte proto jen to, co komponenta skutečně potřebuje, a používejte memoizované selektory. Data ukládejte normalizovaně: entity jako slovník podle ID a seznam ID zvlášť. Vyhnete se tak duplicitám, snadno najdete konkrétní položku a aktualizace zůstane konstantně rychlá i při tisíci záznamech.
Posledním krokem je kontrola před začátkem sprintu. Projděte si každý úkol a ověřte, že je opravdu nezávislý a že jeho dokončení lze demonstrovat. Pokud ne, rozložte ho ještě jednou. Menší úkoly se snáze odhadují, rychleji odhalují problémy a umožňují pružně reagovat, když se něco zvrtne. To je celý přínos: místo jednoho nejistého odhadu máte sadu ověřitelných kroků.
Před sloučením vždy spusťte testy na aktuálním stavu hlavní linie, ne na tom, ze kterého jste vycházeli. Zkontrolujte, zda větev neobsahuje zapomenuté zakomentované bloky, dočasné výpisy do logu nebo soubory, které do repozitáře nepatří. Sloučení provádějte co nejdříve po dokončení funkce; odložený merge znamená, že se mezitím změní okolní kód a vyřešený konflikt se může vrátit v jiné podobě.
Rozdělujte podle výstupu, ne podle času Častou chybou je dělit práci podle hodin. „Udělám to za čtyři hodiny" nic neříká o tom, co bude hotové. Místo toho se ptejte, co konkrétního bude na konci úkolu existovat: návrh schématu, opravená chyba, nasazená změna. Výstupní dělení přirozeně odhalí skrytou práci, jako je čekání na review, testování nebo komunikace se závislostmi.
Template literals zjednodušují skládání řetězců, ale nesmí se plést s escapováním. Zpětné apostrofy uvnitř textu je nutné escapovat, jinak řetězec předčasně skončí. Vnořené šablony v šabloně fungují, ale bez rozmyslu vzniká nečitelný kód. Pro delší bloky použij samostatnou proměnnou a skládání po částech. Pozor i na to, že template literal vždy převádí hodnoty na řetězec, takže $cislo už není číslo — při dalším zpracování potřebuješ konverzi zpět.
Začněte pojmenováním. Proměnná data neříká nic, seznamUzivatelu říká všechno. Funkce process() nutí čtenáře otevřít tělo funkce, vypocitejSlevu() ho pustí dál. Platí přitom jedno pravidlo: pokud název potřebuje komentář, je název špatný. Komentáře mají vysvětlovat proč, ne co. Když vidíte // zvyšujeme o jedna nad i++, komentář jen opakuje kód a za měsíc bude lhát.
Začněte tím, že si odpovíte, co je kód a co konfigurace. Kód je to, co se kompiluje nebo interpretuje a co by mělo být stejné ve všech prostředích. Konfigurace je to, co se mezi prostředími liší: připojení k databázi, klíče, limity, zapínání funkcí. Do kódu nepatří žádné hodnoty specifické pro prostředí. Do konfigurace nepatří logika. Tuto hranici si napište a vynuťte ji v CI, ne jen v hlavách.
Do odhadu započítejte i režii: schůzky, code review, čekání na odpověď. U malých úkolů tvoří tato režie větší podíl než u velkých. Typickým selháním je odhadnout pouze „čistý" čas a zapomenout na přerušení. Reálný odhad je proto vždy o něco vyšší než součet ideálních časů.
Začněte tím, že si příběh rozepíšete na činnosti, které zaberou nejvýše jeden den. Každou činnost formulujte jako dokončitelný výstup: ne „pracovat na API", ale „napsat testy pro endpoint X". Pokud činnost nelze dokončit v rámci jednoho dne, rozdělte ji znovu. Cílem je, aby každý úkol měl jasný začátek, konec a ověřitelný výsledek.
U každého malého úkolu odhadněte čas zvlášť a sečtěte. Pokud součet přesahuje kapacitu sprintu, neškrtejte úkoly naslepo. Raději zmenšete rozsah příběhu nebo přesuňte část do dalšího sprintu. Vyhnete se tak tlaku na přesčasy, který vzniká, když se velký odhad rozdělí až během práce.
Výsledkem je čitelná historie, bezpečnější tajemství a možnost vrátit kód i konfiguraci nezávisle. Není to o nástroji, ale o disciplíně: kód a konfigurace mají různé vlastníky, různé tempo změn a různé dopady. Dokud je držíte pohromadě, platíte za to při každém incidentu.
Typické chyby: commitování .env s produkčními hesly, míchání změn kódu a konfigurace v jednom commitu, používání větví místo adresářů a nasazování konfigurace bez verze. Každá z nich vede k tomu, že nevíte, co běželo v produkci. Pokud už máte obojí v jednom repozitáři, rozdělte to postupně: nejprve přesuňte konfiguraci do samostatného adresáře, pak do samostatného repozitáře a nakonec nastavte pipeline tak, aby se kód a konfigurace nasazovaly odděleně.