Mám už dlouho rozepsaný monstrčlánek na téma notoricky chybných očekávání a mylné intuice lidí, kteří se bez zkušenosti nad rámec běžných uživatelů dostanou do nějaké role v softwarovém vývoji. Pak šlo ale kolem fantastické Twitterové vlákno Davida Majdy a já jsem si uvědomil, že v těch pár řádcích je ve skutečnosti obsaženo jádro všeho, co jsem lopotně psal a mnohem víc. Se svolením autora proto thread překládám do češtiny a doplňuji pouze pár vlastních poznámek ve vztahu k původnímu tématu.
Myslím, že nejvíce charakteristická vlastnost softwarového světa je nelinearita. Tedy že i malé akce mohou mít rozsáhlé následky. To se týká jak úspěchů, tak selhání. Například z garážového startupu se může stát megakorporace během pouhých několika let. Tempo inovace celého oboru je prostě exponenciální.
Na druhou stranu triviální chyba v konfiguraci jednoho routeru může složit celé datacentrum, které pak s sebou může vzít “půlku internetu”. A to nemluvím o dopadech chyb v zabezpečení. To je přesný opak “reálného” světa, který je většinou lineární, jak vám jistě potvrdí každý, kdo se v něm někdy snažil prosadit nějakou změnu. Nelinearita je v reálném světě vzácná a dostupná jen někomu (např. masová média) a překvapivá (např. ekologie).
V softwarovém světě je nelinearita normou. A čím víc je svět požírán softwarem, tím víc do něj tato nelinearita uniká a snižuje jeho predikovatelnost a zvyšuje jeho nejistotu. Možná je to přehnané tvrzení, ale tento efekt je myslím hmatatelný už teď. Ať je to jakkoli, měli bychom se do budoucna připravit na více nestability, ne méně. D. Majda, 4. 2. 2019
Ano, nelinearita je ten klíčový prvek software, který staví na hlavu veškerou intuici, kterou si v reálném světě budují lidé celý život, aniž by o tom věděli. I když se intelektuálové, jako třeba Nassim Taleb, snaží vnést do obecného povědomí větší ostražitost vůči vrozené lidské preferenci lineární intuice i v reálném světě, evoluční tlak na to prostě není. Proto nováčky v software většinou sejme nelinearita hůř než rozjetá parní mašina.
Jestli něco vzbudí můj vývojářský šestý smysl včasného varování před nelinearitou, je to věta “Neřešme teď detaily”, nebo ještě hůř “Neřešme teď technické detaily”, ukončující debatu, ve které se někdo z přítomných moc nevyzná. Jakkoli může být oprávněná (sám už jsem se mnohokrát udiskutoval k smrti s hnidopichy a fachidioty), tak samotný koncept detailů je v nelineárním světě velmi zrádný.
Vychází totiž z předpokladu, že co je a co není detail je intuitivně zjevné bez potřeby detail lépe zkoumat. Toto platí právě pouze v intuici z lineárního světa, kde je možné se spolehnout na rozdělení, že malá akce má malý význam a velká akce velký. V nelineárním světě přibude ale ještě jedna kategorie, kterou je potřeba mít na paměti - malá akce s řetězem exponenciálních následků. I všechny takzvané detaily je proto potřeba detailně řešit minimálně do doby, než existuje jistota, že to detaily skutečně jsou. Ti, kdo tuto nuanci dokážou rozeznat, však často skončí ve stejném pytli jako ostatní chorobní perfekcionisté.
Proto jsem velmi podezíravý k hierarchické organizaci práce pro vývoj software. Rozdělení úkolů na ty důležité (které mají být vyřešeny na dané úrovni) a na detaily (které se předají k vyřešení do úrovně nižší) je fatálně závislé na linearitě. Proto to funguje adekvátně dobře v reálném světě, ale často selhává v tom softwarovém.