Přístup

Vyhraněný názor máme přesně na jednu věc: jak smí růst složitost.

Skoro každý jiný inženýrský spor je věc vkusu a rádi ho prohrajeme. Tenhle rozhoduje, jestli váš systém bude za tři roky ještě stát za změnu.

Problém

Jak zeď vypadá zevnitř.

Nikdo se nerozhodne postavit systém, který se brání změnám. Stane se to postupně a příznaky se v byznysu objeví dřív, než někdo pojmenuje příčinu.

Příznaky

  • Odhady přestávají dávat smysl. Dvoudenní změna se vrátí jako tři týdny — a ten rozdíl je skutečný, ne rezerva.
  • Všechno je release. Malá oprava nemůže ven sama, opravy se hromadí a jedou spolu — a každý release je tím riskantnější.
  • Smí na to sáhnout jen jeden člověk. Klíčové části mají přesně jednoho možného vlastníka a všichni tiše plánují kolem jeho dovolené.
  • Noví lidé potřebují měsíce. Ne na doménu — na to, co se rozbije, když něco změní.
  • Odebrat funkci je těžší než přidat. Takže systém jen těžkne.

Příčina

Složitost není počet částí, ale počet vztahů mezi nimi. Deset věcí, které o sobě vzájemně vědí, je složitějších než padesát věcí, z nichž každá zná dvě.

V těsně provázaném systému přidá nová část vztah ke všemu, co už existuje. Množství, které musíte držet v hlavě, testovat a udržovat, roste multiplikativně — jedenáctá část stojí mnohem víc než třetí, bez viditelného důvodu.

Od určitého bodu je racionální systém přestat měnit. Týmy k tomu závěru obvykle dojdou, aniž ho vysloví; prostě začne být zřejmé, že nejbezpečnější release je žádný release.

Odpověď

Armáda malých pracantů, z nichž každý jde vyměnit bez okolků.

Rozdělte systém na mnoho malých služeb, dejte každé jednu úlohu a kontrakt — a aritmetika se změní. Přidaná část přidá jen svou vlastní složitost: celek roste o +n, ne ^n.

01

Dost malá, aby se vešla celá

Každá služba dělá jednu věc a vejde se do jedné hlavy. V systému není část, která vyžaduje dvoutýdenní zaškolení, než na ni jde bezpečně sáhnout.

02

Ohraničený dosah chyby

Rozbitá služba je rozbitá služba. Systém degraduje, nezastaví se — a hledání příčiny začíná uvnitř jedné hranice.

03

Symetrie přidání a odebrání

Smazání části odečte přesně to, co její přidání stálo. Tahle symetrie brání systému tiše hromadit funkce, které už nikdo nepoužívá.

04

Kontrakty místo domněnek

Služby komunikují přes verzovaná rozhraní ověřovaná v CI na obou stranách — rozbíjející změna selže v pipeline, ne v produkci. Kontrakty navíc skrývají implementaci: službu jde přepsat v jiném jazyce a zbytek systému si toho nevšimne.

05

Architektura zůstává upravitelná

Nemusíte mít pravdu předem. Tvar se může měnit během stavby i dlouho po ní — restrukturalizace je tu běžná operace.

06

Růst je kvantitativní

Větší systém je víc malých částí, ne těžší systém. Škálování je otázka počtu a kapacity — dá se plánovat, nacenit i obsadit lidmi.

Poctivá výhrada

Mikroslužby nejsou zadarmo. Za nezávislé nasazování a ohraničené chyby platíte provozní režií — víc pohyblivých částí k nasazení, sledování a ladění. Pod určitou velikost je to špatný obchod a řekneme vám, když je váš systém pod ní.

Nad ní ten obchod funguje díky platformě: většina režie je v Kubernetes vyřešená, takže ji platíte jednou za cluster, ne opakovaně za každou službu.

Jediné tvrdé rozhodnutí

Když je architektura upravitelná — co upravitelné není?

Technologický stack pro váš typ produktu. Služby jde přepsat za odpoledne; špatná volba úložiště se nese roky, protože než je zjevně špatná, jsou v ní data.

Co rozhodneme, než napíšeme kód

  • Co jsou data doopravdy — tvar, objem, jak přicházejí a jak dlouho musí platit.
  • Která databáze — relační, time-series, sloupcová, dokumentová, nebo víc najednou. Nejdražší čára k překreslení.
  • Jak spolu části mluví — synchronní volání, fronty, event stream; podle vztahu, ne podle firemního stylu.
  • Kde žije stav — protože „všude“ je výchozí výsledek, když nikdo nerozhodne.
  • Co se nesmí ztratit — rozdíl mezi daty, která jdou dopočítat, a daty, která ne.

Co záměrně necháváme otevřené

  • Úplný seznam služeb. Hlavním uzlům toku je potřeba rozumět; zbytek přijde, až bude potřeba skutečná.
  • Hranice funkcí. Posouvají se, jak se byznys učí. To se čeká — není to selhání plánování.
  • Kam přijde AI. Umístí se líp, až datový tok existuje a je vidět, co by skutečně viděla.
  • Detaily rozhraní. UI následuje systém; navrhovat ho jako první znamená vymýšlet si požadavky.
Metoda

Osm kroků — a k čemu který doopravdy je

KROK 01

Pochopit byznys

Klademe jednoduché otázky o tom, jak práce probíhá dnes a co by znamenalo „lépe“. Žádné zadání po vás nechceme — jeho napsání je naše práce, ne vaše.

→ poznámky k doméně, omezení, co se nesmí rozbít

KROK 02

Zvolit stack

Technologie vybraná pro tento typ produktu — především databáze a datový model. Tady záměrně zpomalujeme.

→ rozhodnutí o stacku s napsaným zdůvodněním

KROK 03

Načrtnout architekturu

Základní mikroslužby a hlavně tok dat mezi nimi — které deploymenty běží průběžně, které joby podle plánu, jak se řetězí pipeline a jak služby komunikují.

→ náčrt architektury, hlavní uzly toku, kontrakty

KROK 04

Naplnit kontejnery

Každá služba v jazyce, který sedí její úloze — Go pro propustnost a provoz, Python pro data a modely, TypeScript pro rozhraní, nebo co jiného úloha vyžaduje. Kontrakty skrývají implementaci, volba je tedy volná pro každou službu zvlášť. Malý rozsah, vlastní testy, vlastní metriky.

→ běžící služby, image, CI

KROK 05

Zapojit datový tok

Proud stálý od začátku do konce: propustnost pod zátěží, backpressure kde je potřeba, bezpečné retry a pipeline úloh, které selhávají nahlas.

→ pipeline, plány, fronty, zátěžové testy

KROK 06

Integrovat ven

Napojit systém na to, co vaši lidé už používají, a na vaše stávající produkty. Kde AI skutečně pomáhá, patří sem — často jako chatbot nebo asistent nad službami, které odpovědi už mají.

→ integrace, boti, služby s AI

KROK 07

Nasadit cluster

Na tolik strojů, kolik zátěž potřebuje, spojených do jednoho clusteru — s monitoringem a alertingem živým dřív, než na systému cokoli závisí.

→ cluster, dashboardy, alerty, runbooky

KROK 08

Předat

Systém je váš: repozitáře, infrastruktura, dokumentace i zdůvodnění rozhodnutí. Další podpora je k dispozici — a nikdy není něčím, do čeho bychom vás vprojektovali.

→ předání, dokumentace, volitelná podpora

Rozhovor

Dovnitř jednoduché otázky, ven rozsáhlé systémy.

Obvyklé uspořádání chce po klientovi technické zadání — tedy žádá člověka, který zná software nejméně, o nejtěžší překlad v celém projektu. My to vedeme obráceně.

Na co se ptáme

  • Jak práce probíhá dnes — včetně tabulky, ke které se oficiálně nikdo nehlásí.
  • Co musí platit — co by bylo trapné, drahé nebo nezákonné pokazit.
  • Jak rychle je dost rychle — skutečná tolerance, ne ambice.
  • Kdo s výstupem pracuje — a kde ti lidé skutečně jsou, když ho potřebují.
  • Co už existuje — systémy, na které se máme napojit, ne je nahrazovat.

Co po vás nikdy nechceme

  • Psát technické zadání. Kdybyste ho uměli napsat přesně, nepotřebovali byste nás.
  • Vybírat technologie. Vy popíšete omezení; stack je závěr, ne preference.
  • Navrhovat architekturu. Stačí odpovědět na „jak to dnes funguje“.
  • Vědět, co je pipeline úloh. Tenhle slovník je naše starost.
Ptáme se

Co se dnes děje mezi příchodem dat a rozhodnutím, které na nich stojí?

Vy

Dva lidé je vyexportují, spojí v tabulce a před obědem rozešlou mailem.

Ptáme se

Co se na tom za poslední rok pokazilo?

Vy

Dvakrát zdroj změnil formát a pár dní si toho nikdo nevšiml.

Ptáme se

Kdybyste se těch dat mohli kdykoli zeptat na jednu věc, jaká by to byla?

Vy

Kde jsme právě teď vystavení — bez čekání na ranní soubor.

Výsledek

Ingest s validací schématu, která se ozve při změně formátu; služba spojování, která nahradí tabulku a nechá po sobě auditní stopu; průběžně udržovaný pohled na expozici; a bot, který na tu otázku odpoví na požádání. Čtyři malé služby — a žádnou z nich klient nemusel specifikovat.

Provozní standardy

Platí pro každý systém, který dodáme

Nevyjednává se to po zakázkách. Tohle je základ, díky kterému má všechno nad ním smysl.

Inženýrství

  • Všechno ve verzovací správě — služby, infrastruktura, konfigurace, dashboardy, pravidla alertů.
  • Reprodukovatelná prostředí — nové prostředí je běh pipeline, ne týden archeologie.
  • Metriky a logy s funkcí — ve stejné změně jako logika, ne po prvním incidentu.
  • Kontrakty ověřované v CI — na straně producenta i konzumenta.
  • Revidované změny — žádné přímé pushe do produkční větve, od nikoho, včetně nás.

Spolupráce

  • Vlastníte všechno — repozitáře, infrastrukturní účty i přístupy jsou od prvního dne vaše.
  • Psaná rozhodnutí — zdůvodnění přežije lidi, kteří ho udělali.
  • Týdenní demo, týdenní upřímnost — co se dodalo, co se posunulo a co jsme se dozvěděli.
  • Řekneme, když nevíme — „tohle chce nejdřív spike“ je přijatelná odpověď a šetří peníze.
  • Odchod bez dramatu — předávání je průběžné, ne fáze přilepená na konec.

Sedí vám tenhle způsob práce?

Pokud ano, dalším krokem je rozhovor o vašem byznysu — ne o technologiích. Pokud ne, je lepší to zjistit teď než za tři měsíce.