Každá sdílená vrstva má cenu, kterou platíš, a cenu, které se vyhýbáš
Shopify sáhl v roce 2020 po React Native ze tří důvodů: nestavět tutéž funkci dvakrát, nechat vývojáře pracovat napříč stackem a netrávit čas doháněním parity mezi platformami. Firma sama píše, že ta sázka vyšla. Teď se přesto vrací k oddělenému Swiftu a Kotlinu.
To není příběh o špatné technologii. Je to příběh o tom, že sdílená abstrakce nemá absolutní hodnotu, má jen hodnotu vzhledem k ceně toho, čemu se vyhýbá.
Cena abstrakce se platí průběžně a je vidět
Ta druhá strana rozvahy byla vždycky viditelná. Shopify přiznává, že investoval podstatné množství času a lidí do optimalizace výkonu, do zlepšování základních částí React Native a do držení kroku s aktualizacemi frameworku a externích závislostí.
Tenhle typ nákladu má nepříjemnou vlastnost. Je pravidelný, těžko se odloží a neroste s tím, co stavíš, ale s tím, jak rychle se pohybuje framework a platformy pod ním. Přesto se vyplácel, protože na druhé misce ležela cena psaní každé funkce dvakrát a ta byla vyšší.
Rozhodnutí tedy nikdy neznělo „je abstrakce dobrá“. Znělo „je průběžná daň za abstrakci nižší než duplikace, které se vyhýbá“. Obě veličiny se v čase mění nezávisle na sobě.
Změnila se jedna proměnná, ne celá rovnice
Co se posunulo, je cena duplikace. Prototypy ukázaly, že agent dokáže implementovat funkci na Androidu s iOS verzí jako referencí a naopak. Shopify to shrnuje střízlivě: agenty dnes zvládnou dost implementace, překladu, testování a review na to, aby duplikace přestala být rozhodujícím faktorem, jakým byla v roce 2020.
Klíčové slovo je „rozhodujícím“. Firma explicitně neříká, že náklad zmizel. Říká, že nativ pořád znamená stavět a udržovat software na dvou platformách a že tenhle náklad nezmizel. Klesl jen natolik, aby ho převážily výhody psaní přímo pro každou platformu.
Přepis běží jako greenfield, ne jako postupná migrace, a to ze stejného důvodu. Modely staví dobře ve Swiftu a Kotlinu, když mají React Native verzi jako referenci, takže existující kód není břemeno, ale zadání. Aplikace Shop se takhle dostala od prototypu k publikované nativní verzi za dvanáct týdnů.
Kvalitu hlídá systém jménem Helix, který přepis rozděluje na malé kontrolní body. Každý vyžaduje testy, vizuální kontrolu a adverzariální review, než se pokračuje dál.
Co si z toho odnést
Když příště budeš obhajovat nebo bourat sdílenou vrstvu, nezačínej u její kvality. Napiš si obě čísla: co tě stojí ročně její údržba a co by tě stálo to, co dělá místo tebe. Rozhodnutí pak vyplyne a hlavně bude jasné, která proměnná ho může otočit.
Druhá věc je, že sázky mají dobu platnosti. Shopify nepřehodnotil React Native proto, že by se zhoršil, ale proto, že se výrazně zlepšily modely píšící kód. Architektonické volby je proto rozumné mít zapsané i s předpokladem, na kterém stojí, aby šlo poznat, kdy ten předpoklad přestal platit. Bez toho se ze sázky stane identita.
A do třetice: totéž číslo se hýbe i u tebe. Všude, kde ses rozhodl pro abstrakci kvůli DRY, pro generátor kódu, pro sdílený balík mezi backendem a frontendem, stojí na misce vah cena opakování. Ta právě klesla. Neznamená to, že máš všechno duplikovat, znamená to, že staré výpočty přestaly platit a je potřeba je udělat znovu.