Druhé pravidlo: formuláře jsou nejčastější zdroj frustrace. Každé pole by mělo mít viditelný label, ne jen placeholder. Placeholder zmizí, jakmile uživatel začne psát, a on zapomene, co tam má vyplnit. Validuj až po odeslání nebo po opuštění pole, ne při každém stisku klávesy. U dlouhých formulářů rozděl kroky a ulož rozepsaná data. Vývojářsky to znamená nespoléhat na to, že uživatel vyplní všechno správně napoprvé.
U rozsáhlejších projektů oceníš skok na definici a zpět. Otestuj to na cizí knihovně, ne jen na vlastním kódu. Prostředí, které neumí dohledat definici v nainstalovaném balíčku, ti při ladění moc nepomůže. Stejně tak si ověř, jak zvládá velké soubory. Otevři soubor s několika tisíci řádky a zkus v něm hledat. Zamrzání při každém stisku klávesy je signál, že dané prostředí není pro tvůj styl práce vhodné, i kdyby mělo sebelepší vzhled.
Třetí pravidlo: přístupnost není bonus. Kontrastní poměr, ovladatelnost klávesnicí, sémantické HTML – to nejsou věci, které se dodělávají na konci. Pokud začneš s nesémantickými divy a obrázkovými tlačítky, předělávka tě bude bolet. Používej správné elementy: button pro akce, a pro odkazy, label pro formuláře. Zkontroluj, že se dá všude dostat tabulátorem a že fokus je viditelný. Ušetříš si opravy později.
Podpis, expirace a bezpečné ukládání První zásadní chybou je ignorování algoritmu. Útočník může změnit hlavičku na „none" nebo podstrčit jiný algoritmus. Vždy explicitně povolte pouze jeden očekávaný algoritmus a odmítněte vše ostatní. Druhou chybou je příliš dlouhá platnost tokenu. Access token by měl žít v řádu minut, maximálně hodin. Delší platnost řešte refresh tokenem, který lze revokovat. Refresh token ukládejte bezpečně – v prohlížeči do httpOnly cookie s atributy Secure a SameSite, nikdy do localStorage. localStorage je přístupný z JavaScriptu, takže při XSS útoku útočník token okamžitě získá.
UI/UX design není jenom o tom, aby to hezky vypadalo. Pro vývojáře je to především o tom, aby se v rozhraní dalo rychle a bez chyb pracovat. Každé zbytečné kliknutí nebo nejasný stav znamená delší vývoj, častější chyby a horší spolupráci s designérem. Následujících pět pravidel ti pomůže udělat rozhraní, které bude fungovat pro uživatele i pro tebe.
Výkon se neměří jen na vlajkové lodi. Spusťte aplikaci na starším zařízení s omezenou pamětí a sledujte dobu spuštění, spotřebu baterie a plynulost posouvání. Zaznamenejte hodnoty před a po každé změně, jinak nepoznáte, který zásah situaci zhoršil. Testujte také přechod mezi sítěmi – z Wi-Fi na mobilní data – a chování aplikace při příchozím hovoru nebo oznámení.
Při návrhu zabezpečení API se často rozhodujete mezi dvěma přístupy: klasickými session cookies a JWT tokeny. Rozdíl není jen v technologii, ale především v tom, kde žije stav přihlášení. Session cookie drží stav na serveru, klient dostane pouze identifikátor. JWT je samonosný token – veškerá data i podpis jsou na straně klienta. To přináší jiné nároky na bezpečnost a jiné chyby.
Výběr vývojového prostředí pro Python nezačíná u vzhledu ani u počtu rozšíření. Začíná u otázky, kde a jak bude kód skutečně běžet. Pokud pracuješ na jednom projektu s jedním interpretem, vystačíš s čímkoli, co umí spustit skript a zastavit se na řádku s chybou. Jakmile ale přibude druhý projekt s jinou verzí knihoven, začne být klíčové, jestli prostředí rozumí virtuálním prostředím a umí mezi nimi přepínat bez restartu.
SQL injection vzniká ve chvíli, kdy aplikace vloží vstup od uživatele přímo do databázového dotazu, aniž by jej oddělila od samotné logiky dotazu. Útočník pak může místo očekávané hodnoty předat fragment SQL, který změní význam příkazu, přečte cizí data, zapíše nová nebo je smaže. Nejde přitom o okrajovou chybu. Stačí jedno neošetřené pole ve formuláři nebo parametr v adrese a celá databáze je ohrožená.
Stavy a zpětná vazba nejsou volitelné Každá akce, která něco načítá nebo odesílá, musí mít jasný stav: probíhá, hotovo, chyba. Zapomenutý loading indikátor je klasická chyba – uživatel neví, jestli se něco děje, a začne klikat znovu. Výsledkem jsou duplicitní požadavky. Stejně tak chybové hlášky musí být konkrétní. „Něco se pokazilo" je k ničemu. Napiš, co selhalo a co má uživatel udělat. V kódu to znamená mít připravené komponenty pro všechny stavy ještě předtím, než začneš řešit samotnou logiku.

Rozdělení práce mezi vlastní tým zní lákavě: žádné faktury, žádné čekání na cizí lidi, všechno pod kontrolou. Jenže právě tady vzniká většina zpoždění. Nejde o to, že by interní lidé byli horší než externisté. Jde o to, že projekt s vlastním týmem nemá žádné přirozené hranice. Práce se rozplyne do běžného provozu a najednou není jasné, kdo co dělá a do kdy.