Jak navrhovat aplikace takovým způsobem, aby první verze nebyla úplně na vyhození, ale abyste zároveň nespálili budget dřív než budete mít prvního zákazníka
monkey hitting keys at random on a typewriter keyboard will almost surely write the complete works of William Shakespeare” ▪ Spoiler alert: You don’t have infinite time and infinite monkeys ◦ “Weeks Of Coding Can Save Hours Of Planning” • Overengineering ◦ Nestihnutí deadline ▪ Zatímco jsi si maloval(a) entity diagramy, firma zbakrotovala ◦ Operations cost ▪ Licence za Oracle nás zbankrotovaly ◦ ….
slyšet (ne to, co se vám snaží sdělit zákazník) ◦ Zamyslete se, co vám zákazník sdělil a co jste si domysleli ◦ Konzultujte, jestli vaše domněnky platí ▪ Zopakujte svými slovy jak jste pochopili zadání ▪ Můžete dojít k jinému/jednoduššímu řešení
s řešením problémů, místo s problémy ◦ Ne vždy je to špatně - pokud vám nevnucují i implementaci ◦ Product owner rozumí businessu, ne technologii ◦ Ptejte se ▪ Co je to za problém ▪ Jak k řešení došli ▪ Proč si myslí, že takto je to správě ▪ …. ◦ Nerozumím problému => velice špatné podmínky pro implementaci správného řešení
s řešením problémů místo s problémy ◦ Některé požadavky můžou být úplně zcestné ▪ “Použijeme tenhle hosting” • Problém: staré verze platformy • Advanced verze: to, že to na tomhle hostingu rozhodně musí jet, vám řekne až potom, co celou aplikaci napíšete ◦ Většinou to myslí dobře ▪ Málokdo chce ublížit svému businessu ▪ Přístup může mít příčinu ve špatné zkušenosti • “Chtěl jsem vám ušetřit čas na vymýšlení” • “Nechtěl jsem abyste se zdržovali přemýšlením o budoucnosti”
businessu/sales, i jak se to marketuje ◦ Všechno tohle může ovlivnit nějaké zásadní rozhodnutí ◦ Braňte se slibování deadlinů zákazníkům ▪ Sales rádi slibují, že něco bude, aniž by konzultovali s DEVem náročnost a priority ◦ Příklad: Šťastná hodinka v DJ ▪ Nikdo nevaroval dev, že/kdy bude a zákazníci zahltili web • Přehození sessions na Redis jsme provedli během downtime
Potřebujete začít něco programovat ◦ Zároveň potřebujete znalosti, které budete mít až za rok od teď. • Programujte tak, aby bylo co nejsnadnější měnit věci, které jste si museli domyslet.
anketu” ◦ Jak se bude plnit? ◦ Jaká bude mít omezení? (Max počet odpovědí?) ◦ Jaké bude mít ochrany? (Zneužití uživateli?) ◦ Bude možné jí nastavit platnost do kdy je možné vyplňovat? ◦ Půjde anketa předčasně vypnout? ◦ Půjdou ankety nejenom vytvářet, ale i mazat? ◦ Budeme rozlišovat publikované/nastartované ankety? ◦ Půjdou ankety po zveřejnění editovat?
2FA vs HW Key vs VPN-Only vs … ? • Výkon? Objem dat? ◦ Jak data porostou? Počítáme s tím v SQL dotazech? Umíme takovou DB spravovat? • Spolehlivost? • Škálovatelnost? ◦ Více instancí (externí sessions, filesystem)? Cloud native? • Monitoring? Logování? • Compliance? GDPR, ...
v daleké budoucnosti ◦ Třeba za půl roku, za rok? • Potřebujete vědět maximum informací, co ví business ◦ Je těžší plánovat/implementovat aktuální features, když netušíte, kam se produkt ubírá ▪ Můžu pak zvolit řešení, které mi “zavře vrátka” k nějaké feature
některé úkony prioritně ◦ Identifikujte ty, které mají pro zákazníka největší benefit. ◦ Když priority zná business i DEV, snadněji se domluvíte • Když je všechno priorita, nic není priorita
procesů je možné odkládat i delší dobu za cenu trochy manuální práce ◦ Získám tím možnost nabrat zkušenosti s procesem a později ho implementuji lépe ◦ Příklad: registrace zákazníků ◦ Opportunity cost
si MVP a krátký backlog. • Implementační závislosti ◦ Co se může dělat paralelně? ▪ Čím větší systém tim snazší paralelizace práce ◦ Co určitě nechcete dělat paralelně? ▪ Komplikace upfront designu • Malé tasky ◦ Rychlejší začlenění nové knowledge zpatky do systému ◦ Rychlejší feedback na features
• Používejte známé technologie ◦ Fulltext? Elastic vs PostgreSQL ▪ Operations cost druhé databáze ▪ Learning curve ◦ Nepotřebujete Kubernetes, naklikejte systém v AWS ECS ◦ Neučte se úplně nový technologický stack na úplně nové doméně ▪ Změnit framework, jazyk i projekt zároveň je velké sousto
Fakturoid • Píšete systém na správu vedlejších účinků léků? ◦ Najděte hotové specifikace ◦ Inspirace pro datový model • Nelíbí se vám knihovna na 3rd party API? ◦ Stejně si nepište vlastní
VO a DTO, validujte hodnoty • Předcházejte nedefinovaným/nevyžádaným stavům ◦ Neignorujte chyby ◦ Házejte výjimky ▪ Error 500 je lepší než zaseklá objednávka
knihovnu obalit do vlastních objektů než mít pak její třídy prorostlé celým projektem ◦ Problém je leakování knihovny přes více úrovní abstrakce • VO z knihovny na datetime - Ano • VO z Twitter API knihovny - Ne
• Kompozice • Minimum dědění • Minimum interfaces ◦ Když vím, že bude více implementací ◦ Když potřebuju vytvořit abstrakci a implementaci si nechat dodat • Méně kódu “je více” • Jasný záměr je důležitější než výkon nebo estetika
40% • Naimplementujte (co nejlépe umíte) • Při příští iteraci vyberte dalších 30% feature • Naimplementujte a u toho zrefaktorujte předchozích 40% • … • Repeat