Bevezető
Az idén ősszel megrendezésre került az első business analyst meetup Gintl-Reszegi Mária (https://insprl.hu) szervezésében. A rendezvény fő célja az ismerkedés, kapcsolat és közösség építés, illetve a szakmai tapasztalatcsere volt. A beszélgetések során az egyik résztvevő feltette azt a remek kérdést, hogy mit is értünk a domain kifejezés alatt?
Akik követték a korábbi blog bejegyzéseimet, azoknak remélem rögtön felcsillant a szemük: itt bizony egy fogalomról van szó. De mit is értünk ezen fogalom alatt? Ha hirtelen felindulásból elkövetve gyors választ kellene adni, akkor valami olyasmit mondanánk, hogy amivel a cég foglalkozik, esetleg amiből a cég pénzt termel? De vajon ez a helyes válasz, illetve ez a teljes válasz?
A DDD (Domain Driven Design) témában írt legtöbb könyv első fejezete a domainről, subdomain-ről, core domain-ről ír, és ez az a rész, amit a legtöbb fejlesztő valószínűleg soha nem olvasott el. Ha valaki üzleti elemzéssel szeretne foglalkozni, akkor ezen fejezet nagyon hasznos eszköztárat biztosít számunkra ahhoz, hogy jobban megértsük, hogy mi is az az üzleti, amit meg kellene értenünk, illetve hogy ez hogyan is épül fel. Mint minden modell, ez is a valóságnak egyfajta reprezentációja, de véleményem szerint egy nagyon ügyes és használható reprezentáció, amely támogatja az üzletről való közös gondolkodást illetve akár a távoli, stratégiai célok kitűzésében is segítséget nyújthat.
A cikk megírásához Vlad Khononov: Learning Domain-Driven Design (ISBN: 978-1098100131) könyvét használtam.
Fogalmi modell
A következő diagram bemutatja azt a fogalmi modell-t, amellyel a következőkben dolgozni fogunk.
Mi a business domain?
A business domain a cég üzleti tevékenységi területe. Egy cégnek lehet egy vagy több tevékenységi területe (a Siemens például orvosi berendezéseket, okos város megoldásokat, illetve erőmű technikai berendezéseket is szállít), és ezek a területek időben változhatnak is (a Toyota az 1920-as években még szövőszékeket árult, jelenleg pedig az egyik legnagyobb autógyártó cég).
Mi a subdomain?
Ahhoz, hogy egy cég egy üzleti területen sikeresen működjön, azt részekre, úgynevezett alterületekre (subdomain) fogja bontani az üzleti funkciók alapján. Ezen alterületek együttműködnek, egymással interakciókat folytatnak, és közösen dolgozva érik el a cég által kitűzött célt egy adott üzleti domain-ben.
Az adott alterületeket különböző kategóriákba lehet sorolni, a szerző a következő három kategóriát határozza meg:
- Core domain: Kulcsfontosságú alterület
- Generic domain: Általános alterület
- Supporting domain: Támogató alterület
Mi a core domain?
A kulcsfontosságú alterület (core domain) egy olyan alterület, amely kulcsfontosságú a cég működése tekintetében. Ez az az alterület, mely az értéket hozza létre, amiben a cég mást, jobban, többet tud nyújtani, mint a versenytársai. A kulcsfontosságú alterület alapvetően komplex, az ebben lévő tudásbázis, tapasztalat, folyamatok, fejlesztések, tervek, stb. adják a cég fő üzleti értékét. Ezen alterület folyamatosan változik, fejlődik, reagál az üzleti igényekre és helyzetekre.
Nézzünk erre egy példát: képzeljünk el egy céget, amely egyedi, kézi készítésű plüss állatokat gyárt és forgalmaz. A plüss állat gyártásához szükséges tudás, képesség, folyamatok különböztetik meg a versenytársaitól, és ez jelenti a versenyelőnyt az adott cég számára.
Összefoglalva: a kulcsfontosságú üzleti terület az, amely a cég számára biztosítja, hogy a piaci viszonyok között nem csak hogy életképes, hanem versenyképes is legyen.
Mi a generic domain?
A általános alterület (generic domain) egy olyan alterület, amely valamilyen általános, generikus megoldás segítségével biztosít támogató funkcionalitást a kulcsfontosságú terület számára.
Ilyen lehet a számlázás, raktározás, kiszállítás, internetes árusítás, stb. Az általános alterület általában komplex, és bár szükségesek a cég működéséhez, de nem része az kulcsfontosságú alterületnek, mert önmagában nem biztosít üzleti előnyt, “csak” támogató szerepe van.
Nézzünk erre egy példát. Ahhoz, hogy eladjunk valamit, ki kell bocsátanunk egy számlát. Ezt szinte mindenki számlázó program használatával végzi. Vajon mennyire bonyolult egy számlázó program? Nyilvánvalóan nem egyszerű, hiszen a folyamatosan változó törvényeknek és jogszabályoknak meg kell felelnie, miközben egy felhasználóbarát interfészt kell biztosítania az ügyfeleknek, továbbá rendszerintegrációt (pl. webshop) is biztosítania kell. Képzeljük el a fent említett plüssállatokat gyártó céget. Számára a számlázás egy általános alterület, hiszen nem akar milliókat költeni arra, hogy kifejlesszen egy számlázó programot ahhoz, hogy a plüssmacikat és unikornisokat el tudja adni. Inkább megvesz egy naprakész terméket egy gyártótól vagy forgalmazótól. Ugyanez igaz valószínűleg a kiszállításra (futárszolgálat), illetve az interneten történő árusításra (webshop) is. Más cég is használja ugyanazt a számlázó programot (futárszolgálat, webshopot, stb.)? Természetesen igen. Jelent bármiféle üzleti előnyt az, hogy milyen számlázó programmal került a számla kiállításra? Ügyfélként valószínűleg teljesen mindegy. Működhet a cég számlaadás nélkül? Nem igazán.
Összefoglalva: az általános alterület egy olyan üzletileg komplex támogató alterület, mely valamilyen általános, generikus, a “polcról levett” megoldás segítségével kerül megvalósításra.
Mi a supporting domain?
A támogató alterület (supporting domain) egy olyan támogató alterület, amely se nem kulcsfontosságú, se pedig generikus alterület. Ez tehát egy olyan alterület, amely valamilyen saját “fejlesztéssel” (értsünk bármit is alatta) támogatja a kulcsfontosságú alterület működését.
Ennek általában az az oka, hogy az adott funkciót nem tudták vagy akarták a piacról megvásárolni, ezért “házon belül” került megvalósításra. Ezek a megoldások testreszabottak és nem túl bonyolultak, éppen ezért nem is változnak gyakran.
Nézzünk erre is példákat.
A fent említett cég kitalálja, hogy plüss rénszarvasokat fognak gyártani, melyeknek piros műanyag orruk van. Hiába kérnek be több cégtől is árajánlatot, azok csak nagy tételben hajlandóan szállítani. Egyelőre kézzel formázzák ki az orrokat hőre keményedő műanyagból, de ez nagyon munkaigényes, ezért a cég úgy dönt, hogy vesznek egy 3D-s nyomtatót, és saját maguknak fogják gyártani a műanyag alkatrészeket. Alapvetően csak egy kis szériához kell, e nélkül is megvannak, ezért ez (még) nem core business, hanem csak támogató.
Képzeljük el, hogy egy cég virágcsokrokat árul webshop-ból, amit 4 órán belül ki is szállítanak, viszont azt tapasztalják, hogy a futárcégek nem tudnak megfelelően szállítani: a csokrok sosem úgy érkeznek meg az ügyfelekhez, ahogy anno elkészültek. Már nagyon sok panasz érkezett, ezért kitalálják, hogy a szállítást házon belül oldják meg: felvesznek egy embert, akinek az a feladata, hogy az elkészült virágcsokrokat megfelelő körültekintéssel házhoz vigye.
Nézzünk egy informatikai példát is. A cég egy olyan terméket fejleszt, melyet auditálni kell. Az auditáláshoz szükség van arra, hogy a rendszer működéséhez kapcsolódó események rögzítése digitálisan hitelesítve történjen, úgy, hogy a rendszer észrevegye, ha a bejegyzésekhez akár hozzáadtak, akár belőlük töröltek. Hiába kérnek be árajánlatokat, sajnos egyik cég se felel meg az audit támasztotta összes követelményeknek, ezért úgy döntenek, hogy saját megoldást fejlesztenek. Üzembe helyezik és utána megy, többet nem is akarnak vele foglalkozni.
Összefoglalva: a támogató alterület egy olyan alterület, mely az elvárt funkcionalitást “házon belül”, egyedi megoldásokkal valósítja meg. Ezen megoldás támogatja a kulcsfontosságú alterület működését.
Alterületek változása
A kulcsfontosságú alterület leköveti a piaci igényeket és változásokat, ezért ő maga is gyakran változik azért, hogy hatékonyabban, több értéket és bevételt teremtve tudjon működni. Ezen alterületből szinte soha nem alakul át másik alterületté, leggyakrabban jelentőségét veszti, és idővel megszűnik.
Az általános alterület a kulcsfontosságú alterülethez képest stabil. Bár előfordulhatnak javítások, frissítések (akár rendszerfrissítés formájában) de funkcióját tekintve nem nagyon fog változni. Megtörténhet az, hogy a beszállító lecserélésre kerül, de ezt mindig alapos felmérés, kiválasztás, és tesztelés kell hogy megelőzze. Elképzelhető hogy hatékonysági vagy üzleti okból egy általános domain-ből támogató domain lesz, ez akkor történik, amikor a cég felméri az adott, piacról megvehető termék funkcióját, és úgy dönt, hogy neki annyira egyedi igényei vannak, hogy ezt a piacról megvett termék nem tudja (vagy nem akarja) kielégíteni, ezért házon belül oldják meg.
A támogató alterület egyedi, házon belüli “fejlesztéseket” tartalmaz. Előfordulhat, hogy a támogató alterületből kulcsfontosságú alterület lesz, például akkor, amikor egy belső terméket vagy szolgáltatást tovább fejlesztenek és piacra visznek. Ha a fenti cég például a szabad 3D nyomtatási kapacitását eladja a piacon, akkor a támogató alterületből hirtelen kulcsfontosságú alterületet hozhat létre, és elképzelhető, hogy hosszú távon majd ez fogja hozni a cég bevételének nagy részét. Előfordulhat az is, hogy egy házon belüli fejlesztést egy ipari standard-ra, pl. SAP-ra cserélnek le azért, hogy ennek fejlesztésével, karbantartásával, üzemeltetésével ne házon belül kelljen foglalkozni, így a felszabaduló kapacitásokat más célra, például a kulcsfontosságú alterület fejlesztésére tudják fordítani.
Összefoglaló
A cikk során megtudtuk hogy egy cég üzleti területeken dolgozik, melyek időben és térben változhatnak. Ahhoz, hogy ezen üzleti területen versenyképesen tudjon tevékenykedni, az üzleti területéhez szükséges funkciókat alterületekre bontja, melyek közösen dolgoznak azon, hogy a cég sikeresen tudjon helytállni a versenyben. Az egyes területek között van legalább egy kulcsfontosságú alterület, mely az értéket teremti, és vannak támogató területek, melyek ezen értékteremtést, illetve a cég működését támogatják. Ezen támogató alterületek lehetnek akár technikailag, akár üzletileg kiszervezettek illetve lehetnek házon belül megoldottak is. Ahogy az idő telik, előfordulhat, hogy a cég fejlődésének, üzleti igényeinek megfelelően az egyes alterületek egymásba alakulnak.