K čemu je ve firmě softwarový architekt? K tomu, aby vám zaručil/a, že všechna rozhodnutí vývojářů povedou ke zdárnému naplnění vašeho byznys plánu. Mezi taková rozhodnutí patří rozčlenění systému do podsystémů, jejich vztahy a kontrakty definující jejich interakce, výběr komponent třetích stran, ale někdy i výběr programovacích jazyků nebo struktura týmů. Prvotním návrhem práce architekta ale zdaleka nekončí.
Za prvé, architektura reflektuje byznys plán, který se vyvíjí podle změn na trhu, a stejně tak musí reagovat na překotný vývoj IT technologií. Za druhé, všechna rozhodnutí nakonec implementují vývojáři s různými předchozími zkušenostmi, předsudky a svými vlastními zónami komfortu, a tak je nutné neustále obhajovat principy, na kterých architektura stojí, přesvědčovat je, měřit a kontrolovat výsledek jejich práce.
Zároveň dobrý architekt vývojářům naslouchá a případně kalibruje svá rozhodnutí. Architekt, který nenaslouchá a nevysvětluje, je architekt arogantní, a arogantní architekt staví arogantní architektury. Zatímco však arogantního architekta stačí poučit nebo vyhodit, arogantní architektura vás může stát hodně peněz, nebo dokonce položit firmu.
Kdysi jsem pracoval jako vývojář na projektu, který byl zastaven po několika letech a investici 17 milionů dolarů, protože jeho architekt ve slepé snaze sjednotit několik produktů do jedné (a hlavně jeho!) architektury přehlížel neslučitelnost očekávání do té doby spokojených uživatelů původních produktů.
Ale popořadě. Čím se tedy podobá profese softwarového architekta práci architekta nějaké budovy?
Zaposlouchejte se do rozhovoru architekta a investora a uslyšíte, že když stavějí školu, budou řešit, jak velké mají být vstupní dveře, aby se všechny děti dostaly do budovy ráno včas. U rekonstrukce bytu například řeší vzdálenost mezi kuchyní a jídelnou a šířku průchodu mezi nimi. U stavby rodinného třígeneračního domu se bude architekt nesměle ptát, jak vřelý je vztah k vaší tchýni. Stejně tak při návrhu architektury softwaru analyzujeme datové toky, jejich objemy a frekvence a umísťujeme firewally mezi legitimní obyvatele a nevítané návštěvníky.
KOLIK ŘEČÍ UMÍŠ
Aby byl architekt ve své roli úspěšný, musí umět mluvit jak jazykem zadavatele (odborníka na danou problematiku), tak jazykem vývojářů. U obou musí mít dostatečnou kredibilitu, aby ho přijali za partnera. Experti a lidé v pozicích zodpovědných za stanovení byznys vize (majitelé a manažeři firem) musejí mít důvěru, že architekt zná tržní reálie, ví, jak těžké je uspokojit v daném odvětví zákazníka, a co vlastně přesně firmě vydělává peníze a co ne. Jen tak bude schopen správně interpretovat jejich zadání a sledovat vytyčený směr.
Mnoho dobrých architektů prožilo část své kariéry v roli business development managera nebo jinou prací přímo v první linii.
Vývojáři na straně druhé budou respektovat návrhy architekta, jen pokud budou reálně splnitelné. Za prvé budou vycházet z možností vybrané technologie, za druhé budou popsané praktickým jazykem na úrovni běžných rozhodnutí, jež vývojáři denně dělají. Architekt potřebuje ke své práci zobecňovat a abstrahovat, ale zároveň nesmí zpohodlnět a stát se takzvaným architektem-astronautem, který vysvětluje svá rozhodnutí na absurdně vysoké úrovni, jako by na stavbu mostu přes Labe dozíral až z oběžné dráhy a veškeré praktikálie byly pod jeho úroveň.
To, aby architekt neztratil svou kredibilitu a vývojáři vzali navrženou architekturu za vlastní, lze zaručit jen tak, že se architekt celoživotně vzdělává a sleduje nové trendy. Měl by si jednou za týden udržovat schopnost napsat fungující kód v několika jazycích a dokázat zprovoznit „proof-of-concept“ prototyp.
Nesmí ale sklouznout do své přirozené zóny komfortu a psát kód osm hodin denně. V takovém případě již nezaměstnáváte architekta, ale překvalifikovaného vývojáře. A co hůř: architekturu nikdo nedefinuje, nevysvětluje, neobhajuje a její implementaci celkově nekontroluje. Dříve nebo později zjistíte, že software má sice všechna tlačítka a ukazuje správné grafy, ale nemá atributy, které byznys vyžaduje.
A vězte, že přepracovat systém, aby dosáhl potřebných hodnot architektonických atributů, jako jsou nasaditelnost, opravitelnost, stabilita, spolehlivost, rychlost, přesnost nebo škálovatelnost, je mnohem nákladnější než všechna ta tlačítka a grafy.