Conwayův zákon

Pokud máte čtyři skupiny pracující na kompilátoru, dostanete čtyřprůchodový kompilátor.
Eric S. Raymond

V poslední době jsem několikrát narazil na Conwayův zákon. Řekl jsem si, že se o něj s vámi musím podělit.

Každá organizace navrhující systém nevyhnutelně vyprodukuje návrh, jehož struktura bude kopií komunikační struktury této organizace.

Na první pohled je to evidentní. Pokud mám dva moduly, které spolu komunikují, musí spolu zákonitě komunikovat i týmy, které je mají na starost. A naopak, pokud mám týmy, které si spolu nepovídají, nemohou si spolu povídat ani jejich komponenty.

Proč je to zajímavé? Protože to má dopad na architekturu systémů. Zjednodušeně řečeno, o architektuře je rozhodnuto dávno před tím, než se s ní vůbec začne. Řekněme, že chcete co nejlépe navrhnout nový systém. Je to velké, takže práci rozdělíte. Arnoštovi zadáte, aby vymyslel jak budou uložena data a Bedřišce zadáte, ať vymyslí jak je zobrazit. Aniž jste si to uvědomili, už jste rozhodli, že aplikace bude mít dvě oddělené komponenty, frontend a backend. Aneb jak píše sám pan Conway:

... samotný akt organizace navrhujících týmů znamená, že určitá rozhodnutí ohledně návrhu již byla učiněna, ať už explicitně nebo jinak. Ať už jsou týmy organizovány jakkoliv, vždy existuje třída alternativ, které nemohu být touto organizací efektivně následovány, protože neexistují nutné komunikační kanály.

Co z toho plyne? Pokud navrhujete něco nového, odsuňte rozhodnutí o organizaci týmů na co nejpozději. Předčasným rozdělením se připravíte o možná dobrá řešení.

Zajímavé je, že ta věta platí i naopak. Pokud už máte existující systém, musíte kolem něj stavět organizační strukturu. Představme si například, že máte úspěšnou aplikaci, ale tým už se rozrostl nad únosnou mez. Je potřeba ho rozdělit. Kvůli Conwayovu zákonu jsou dvě možnosti jak to může dopadnout. Buď se zároveň rozdělí i aplikace a každý tým dostane na starost jednu část. Nebo týmy zůstanou rozdělené jen na papíře. Lidé pracující na jedné komponentě spolu prostě musí komunikovat natolik intenzivně, že nemohou být rozděleni do víc týmů.

Pokud vás to zaujalo, přečtěte si původní článek. Na to, že byl napsán v roce 1968 je pořád zajímavý.

One Response to “Conwayův zákon”

  1. Evžen Says:

    Hezkej a zajímavej článek Lukáši, navíc jsem se v roce 1968 narodil a taky doufám ještě nejsu "out" 🙂 Nicméně zrovna si patlám nějakou aplikaci (dokonce už v Jave 🙂 a plánuju DAO, aplikační a prezentační vrstvu. Jestli já nakonec nebudu schizofrenik 😉