2009. december 10., csütörtök

Adaptív menedzsment

Elkészítettem az adaptív/agilis módszertanok mögött lévő menedzsment modellek hátteréről szóló ismertetőt. A dokumentum a Java User Meetings rendezvényen tartott előadásom tematikáját követi. Minden visszajelzést örömmel fogadok...

A dokumentum letölthető és olvasható itt.

Adaptív menedzsment

2009. december 7., hétfő

Szoftverfejlesztés, termékfejlesztés

A lean menedzsment alapvetően a gyártási folyamatok irányításának a filozófiája. Az egyedi szoftverfejlesztés azonban csak részben termelés, legalább ennyire hangsúlyos a termékfejlesztési irányultság. A legismertebb és mára leginkább elterjedt egyedi szoftverfejlesztésekhez alkalmazott menedzsment keretrendszer a Scrum. Kevésbé nyílt is ismert, de alapelveiben nagyon hasonló megközelítést képvisel a Toyota termékfejlesztési módszertana, a TPDS (Toyota Product Development System).
A két termékfejlesztési módszer háttereinek részletesebb ismertetése ezekben a cikkekben található. A módszer gyakorlati alkalmazásáról István bővebben is ír a blogján.

A Scrum háttere

A Scrum gyökereit két japán kutató, Ikujiro Nonaka és Hirotaka Takeuchi fektette le a „The new new product development game” c. publikációjában. A kutatásuk középpontjában az a kérdés állt, hogy hogyan képes néhány vállalat az iparági átlagot magasan meghaladó színvonalon végrehajtani termékfejlesztési projektjeit. A Scrum tehát nem egy elméleti menedzsment modell, hanem a termékfejlesztésben sikeres vállalatok gyakorlatát összegző kutatás eredménye.
A tanulmány egyik legfontosabb megállapítása, hogy a hatékony termékfejlesztést megvalósító vállalatok nem a vízesés – másnéven fázisolt PPP (Phased Product Planning) – menedzsment módszert követik, hanem egyfajta iteratív megközelítést alkalmaznak, melynek során a termék számos jellemzőjét nyitva hagyják egészen a fejlesztés végéig. Ez nagyban különbözik azoktól a tradicionális megközelítésektől, melyek során a lehető legpontosabb specifikációra törekednek már a tervezés megkezdése előtt. A Scrum modellben fejlesztő vállalatok a kialakítandó termék néhány legfontosabb jellemzőjét fektetik le, a részletekre vonatkozó döntéseket a fejlesztői csapatra bízzák.

Takeuchi és Nonaka felismerése szerint lényegesen hatékonyabb, ha a vízesés modellnél alkalmazott funkcionális csoportszervezés (pl. külön marketing, tervező és megvalósító csoport) helyett keresztfunkcionális, termékorientált csoportokat hoznak létre, melyben minden szakterület képviselteti magát. Egy Scrum csapatnak ugyanolyan szereplője a vevői elvárásokat kutató marketing szakember, mint a termék műszaki tervezéséért felelős mérnök, vagy a majdani gyártási folyamatot megtervező gyártásszervező. Ez a szemlélet teszi lehetővé, hogy a termékjellemzőket úgy alakítsák ki, hogy azok a termék teljes életciklusát figyelembe véve optimálisak legyenek. A termékjellemzők különböző szempontjait a fejlesztési időszakban ütköztetik és hozzák meg a szükséges kompromisszumokat, illetve egy-egy felfedezés vagy ötlet eredményét bármely szempontba képesek visszavezetni. A Toyota Prius fejlesztésénél például a fejlesztés nagyon késői szakaszában hozták meg azt a döntést, hogy az autó hibrid hajtásának akkumulátorait nem a motortérben, hanem hátul a csomagtér alatt helyezik el, mivel a motor melletti nagy hőmérsékletingadozást az akkumulátorok nem viselnék el. Ez a döntés az autó számos jellemzőjét (csomagtér, aerodinamika, hajtáslánc stb.) befolyásolta. A projekt elején nem volt még világos, hogy milyen akkumulátorok bizonyulnak majd optimálisnak, ezért a döntéssel számos kísérletet kellett megvárni. Egy ilyen horderejű döntés halogatása nem lett volna kivitelezhető, ha a csoport nem képes rövid idő alatt, saját hatáskörben elemzni annak következményeit (pl. a rövidebb motortérből adódó jobb városi manőverezési képességek, vagy a nagyobb csomagtér jelent több előnyt?). A Scrum jellemzője tehát a magas fokú döntési önállóságot élvező termékfejlesztési csoport.

Mivel a csoport nem előre meghatározott termékjellemzők és tervek szerint állítja elő a terméket, ezért szükség van olyan mechanizmusokra, melyek világosan megmutatják, hogy a projekt elfogadható mederben halad-e. Ennek megvalósításához a Scrum csapatok egyértelmű, vizuális mérési rendszereket alkalmaznak, melyeken bárki, első ránézésre láthatja a projekt előrehaladását, illetve segíti a csapattagokat abban, hogy könnyen felismerjék a projekt előmozdításához legfontosabb végrehajtandó feladatokat.

Scrum projekt bontás

A Scrum projektben megvalósítandó termék funkcióinak, valamint a projektben elvégzendő legfontosabb feladatoknak a listáját a product backlog tartalmazza. Fontos, hogy a product backlog elemeihez mindenképpen prioritások vannak rendelve, melyek egyben a feladatok elvégzésének sorrendjét is jelentik.

A projekt megvalósítását a team sprintekbe szervezve végzi, melyek azonos időtartamú végrehajtási egységek. A team minden sprint megkezdése előtt elvégzi a sprint-tervezést, melynek során a product backlog legmagasabb prioritású feladatai közül kiválasztja, illetve szükség esetén tovább bontja azokat a feladatokat, amelyeket a következő „nekifutásra” képes megvalósítani. Az adott sprintre vonatkozó feladatok listáját a sprint backlog tartalmazza. Minden sprint végeredménye egy tesztelt és elméletileg átadható funkció.
A sprintek során a team működése szempontjából kiemelkedő fontosságú az intenzív és hatékony kommunikáció. Ezt segíti a minden nap megtartandó stand-up meeting, ahol a team tagjai „szinkronizálják” feladataikat, valamint a korábban már említett vizuális menedzsment eszközök használata.

Vizuális menedzsment eszközök

A vizuális projektirányítási eszközökkel szembeni legfontosabb elvárás a gyors „leolvashatóság” és az egyértelműség. A Scrum napi tevékenységeiben a két legjelentősebb ilyen eszköz a team board és a burn-down chart.

Team board

A team board a csapat által az adott sprintben végrehajtandó feladatokat és azok aktuális státuszát tartalmazza.


A feladatokat egy-egy „cetli”, más néven kanban jelöli. (A kanban a japán „vezérlő-kártya” szóból származik.) A kanban kártyákon szereplő információk csapatról csapatra változhatnak, de minimálisan a feladat nevét és a feladat becsült méretét tartalmazzák. A feladatok méretének becsléséhez többféle módszer használatos, de a méret kifejezésére általában story-pont elnevezést használják. A lényeg, hogy a feladatok méretének meghatározásához használt skála nagyjából állandó legyen, azaz egy adott csapat minden egyes sprintben összesen közel azonos story-pont értékű feladat megvalósítására legyen képes.
A csapat minden nap megtartja a stand-up összejövetelt, ahol a csapattagok a kanban kártyák mozgatásával jelzik, ha egy feladat végrehajtását megkezdték vagy éppen befejezték. Ez a mechanizmus biztosítja, hogy mindenki lássa, hogy melyek azok a feladatok, melyek végrehajtásához erőforrásra van szükség. A team-board tehát a csapat kommunikációs felülete.

Burn-down chart

A team board biztosítja, hogy a csapat tagjai világosan lássák az egyes feladatok státuszát, illetve, hogy a csapat számára teljes listát adjon az összes elvégzendő feladatról.
A sprint sikerességének méréséhet viszont a team board nem rendelkezik az összes szükséges jellemzővel, mivel nem olvasható le róla azonnal, hogy a tervekhez képesti előrehaladás megfelelő-e.


A sprint tervhez viszonyított haldását mutatja a „burn-down chart”. A grafikon függőleges tengelye mutatja a sprintbe tervezett feladatok mennyiségét story-pontban. A vízszintes tengely az időt jelzi. A szaggatott vonal a sprint ideális, terv szerinti lefutását mutatja.
A csapat minden stand-up összejövetel végén behúzza az adott napon megvalósított feladatok összesített story-pont értékét a grafikonon. (Folytonos, piros vonal.) A piros vonal gyakorlatilag a sprint során még megvalósítandó feladatok összes értékét mutatja. A gyakorlatban a vonal fölfelé is mozdulhat, ha például kiderül, hogy egy feladat lényegesen komplexebb annál, mint ahogy a csapat a tervezéskor gondolta.

2009. november 20., péntek

Az agilis félresiklás

Sokat beszélgettem mostanában tapasztalt, és általam tisztelt tanárokkal és vezetőkkel az agilis fejlesztési módszerekről. Ezek hatására egyértelműen az a kép alakult ki bennem, hogy az agilis "mozgalom" valahol félresiklott. A napokban tartottam egy előadást a JUM-on (http://jum.javaforum.hu) amit ezzel a jelenséggel indítottam. Arra gondoltam, hogy az előadás mondanivalóját a következő néhány bejegyzésben felelevenítem.

Az agilis kiáltvány félreértelmezve...


Az agilis kiáltvány indította útjára az agilis fejlesztési mozgalmat. Az üzenetei egyrészről egyértelműek és világosak: koncentráljunk azokra a tevékenységekre a fejlesztés során, amik a majdani rendszer felhasználói számára közvetlenül valódi értéket teremtenek és helyezzük ezeket a másodlagos, közvetett tevékenységek elé.
Ezek szerint fontosabb:
  • az egyén és a személyes kommunikáció, a módszertanoknál és az eszközöknél
  • a működő szoftver, az átfogó dokumentációnál
  • a megrendelővel való együttműködés, a szerződéshez való ragaszkodásnál
  • a változásra való reagálás, a tervek rigorózus követésénél.
Az egyetlen probléma az agilis kiáltvánnyal, hogy a fázisolt termékfejlesztési módszertanokban (vízesés modell) nevelkedett vezetők és mérnökök egy részében azt az érzetet kelti, hogy az agilis fejlesztés egyfajta fejlesztői "munkásforradalom", akik előrébb helyezik a hobby szerű fejlesztést a professzionális, minőségorientált munkával szemben. Értelmezhetjük így is az agilis kiáltványt: nem igazán fontosak a módszertanok, nem akarjuk dokumentálással tölteni az időt, nem vállalunk felelősséget a tevékenységünkért ezért nem kötünk szerződést, sőt még a tervezést sem tartjuk fontosnak! Nyilván nem ez húzódik meg az irányzat mögött.

Tévhit: az agilis fejlesztés csak véget nem érő projektekben, dobozos termékek fejlesztése esetén alkalmazható


Ezt a hiedelmet még agilis fejlesztési módszertanokkal foglalkozó portálon is olvastam és jelentős projektmenedzsment fórumokon is elhangzik, mint következtetés. Ha az agilis kiáltvány félreértelmezéséből indulunk ki, akkor ez logikus következmény. Az is igaz, hogy főként azok a vállalatok alkalmazzák az agilis módszereket, akik dobozos termékeket fejlesztenek (pl. Google, Apple, Microsoft stb.) Másrészt viszont ha megvizsgáljuk ezeknek a módszereknek a gyökereit, akkor észrevehetjük, hogy a Scrum vagy a Toyota Product Development System olyan közegben alakult ki, ahol a szigorú véghatáridőre leszállított eredmény alapvető követelmény! Nehéz elképzelni a Toyotáról, hogy egy autókiállításra beharangozott típussal nem készül el határidőre... Igaz, hogy az agilis fejlesztési projektek más megközelítést igényelnek, mint a vízesés projektek, ugyanakkor a meghatározott időpontra, meghatározott célokat kielégítő, magas minőségű eredmény talán még sokkal nagyobb hangsúlyt is kap!

Tévhit: az agilis fejlesztői teamek felelősségmentes, laza közösségek


A féleértés másik hibás következtetése. Az agilis pl. Scrum teamek felelőssége lényegesen nagyobb, mint az erős projektmenedzser által irányított fejlesztési projekteken, ahol a felelősséget végsősoron egy személyben a projektvezető viseli. (Hasonló szerepet vállal a product owner a Scrum-ban, vagy a chief architekt a Toyotánál.) A különbség abban áll, hogy az agilis módszertanok belátják, hogy a szoftverfejlesztés nem más, mint ezernyi kisebb-nagyobb döntés együttese. Minden fejlesztő, minden órában döntéseket hoz, amiket nem lehet előre megtervezni, sem irányítani. A komplex rendszereknek (mint amilyen a szoftverfejlesztői team is) bizonyos fokú önállóságot kell biztosítani, a folyamatos vezetői kontrollt pedig egyértelmű, transzparens, a valós előrehaladást mindenki számára világosan megjelenítő visszajelző mechanizmusokkal kell helyettesíteni. A tervektől való eltérést pedig azonnal ki kell értékelni és a team tudását felhasználva, közösen kell kitalálni a lehetséges megoldásokat. Az agilis módszereknek ez a mechanizmusa könnyen keltheti azt az érzetet, hogy az irányítást a menedzsment kiadta a kezéből. Az eredeti agilis környezetekben az elkövetett hibákért a team tényleges felelősséget vállal, a folyamatosan rosszul teljesítő csapatokat pedig megszüntetik vagy átszervezik. A csapatoknak ennek tudatában kell teljesíteniük. A valóságban tehát a menedzsment a felelősséget nem megszünteti, hanem kiterjeszti azokra, akik valóban hatással vannak a projekt sikerére: a projekt teamre.

A fénykép forrása: http://mikeely.wordpress.com/2009/01/07/mike-ely-on-triumphs-sorrows-of-the-soviet-revolution/

2009. július 6., hétfő

Kano elemzés

A felhasználói és megrendelői követelmények megértése talán a legkritikusabb pontja egy egyedi rendszerek fejlesztésének. Egy korábbi bejegyzésemben írtam arról, hogy a követelmények gyakorlatilag az emberi elvárások rögzített másai. Annak ellenére, hogy léteznek rögzíthető és megismerhető követelmények, a projekt sikerének szempontjából lényegesen fontosabb a követelmények mögött meghúzódó elvárások és méginkább azok változásának megértése. A témában talán Noriaki Kano munkássága az egyik legérdekesebb tudásanyag. Noriaki Kano egy Deming-díjas kutató, aki elsősorban minőségmenedzsmenttel foglalkozott. A Kano által kidolgozott modell a termékek jellemzőit négy kategóriába sorolta a felhasználók szemszögéből.

Alapvető, szükséges (basic, mandatory)

Ezek azok a jellemzők, amiket a terméknek mindenképpen ki kell elégíteni. Az alapvető termékjellemzők tipikus tulajdonsága, hogy nem képesek a megrendelő kielégítésére, viszont hiányuk bármikor előidézheti a megrendelő teljes kiábrándultságát. Vegyük például a mobiltelefonok tulajdonságait. A mobiltelefonba épített antenna minősége egy tipikus alapvető követelmény. Ha az antenna gyenge, és a hálózati lefedettség gyengülésével azonnal megszakad a beszélgetés, az a használóját rendkívül elégetlenné teszi. Ezzel szemben hiába építenek a gyártók akármilyen érzékenységű antennát a készülékbe, attól nem fogjuk lényegesen jobban szeretni a telefont.

Értékarányos vagy teljesítményarányos (value for money proposition, performance)

Ezek azok a funkciók, amikből minél több van, annál jobb. A megrendelő értékeli ennek a jellemzőnek a javulását és egy bizonyos küszöb felett elégedetté teszi, az alatt viszont elégedetlenné. Ennek a minőségi faktornak van egy semleges zónája, aminél a megrendelő nagyjából semlegesen viszonyul a termékhez, azaz ez a jellemző nem befolyásolja az elégedettségét. A mobiltelefon példánál maradva ilyen az akkumulátor élettartama, vagy a telefon beépített memóriájának mérete.

Örömforrások (delighters)

Ezek a jellemzők azok, amikre a megrendelő nem igazán számít, viszont ha megismeri őket ragaszkodni fog hozzájuk és viszonylag kis mértékű megjelenésük is nagyon pozitív irányba befolyásolja a vevői elégedettséget. A telefon példánál maradva az iPhone multimédiás jellemzői, valamint a különleges touch-screen képességei képviselik a legjobban ezt a kategóriát. Az örömforrásoknak megvan az a tulajdonsága, hogy rendkívüli mértékben képesek felülírni a felhasználók kezdeti elvárásrendszerét. Egy Kano analízisről szóló előadáson hallottam egy példát, ahol az előadó felesége autóvásárlás előtt állt. Rengeteg szempont alapján kiválasztotta azt a három típust, amik közül választani akart. Végül egy negyediket vett meg, mégpedig egy meglepő ok miatt: az autó rendelkezett hűtő és fűtő funkcióval felszerelt pohártartóval. Ez nagyon jól példázza az örömforrás kategóriába eső jellemzők jelentőségét.

Semleges, érdektelen (indifferent)

Ezek a jellemzők nem számítanak. Teljesen mindegy, hogy megjelennek a rendszerben vagy sem. A telefonokál maradva számomra ilyen a beépített rádió. Egyáltalán nem érdekel, hogy van-e benne ilyen funkció, az meg pláne nem, hogy hány csatornát tudok felprogramozni rá. Ezeknek a jellemzőknek az a legnagyobb csapdája, hogy a megrendelők egy direkt kérdésre válaszolva természetes módon igényelni fogják. Ha egyszer egy elemző a felmérés során feltette a kérdést, hogy: "fontos, hogy a rendszer Excel 2007 formátumban is tudja exportálni az ügyféltörzset?" a válasz természetesen igen lesz. Ha ez ráadásul bekerült a követelményspecifikációba, onnantól a megrendelő "alapvető" követelményként fog tekinteni rá...

A termékjellemzők megítéléséhez kapcsolódó jelenségek

A fenti kategorizálás rendkívül sokat segít annak eldöntésében, hogy milyen termékjellemzőkre milyen mértékben koncentráljon a megvalósító csapat. Nem mindegy ugyanakkor, hogy ezeket a jellemzőket a projekt mely szakaszában vizsgáljuk. Az elvárásoknak van egy olyan tulajdonságuk, hogy a megismerés során folyamatosan egyre alacsonyabb kategóriába csúsznak. Az örömforrások idővel értékarányos elvárások lesznek (örülök neki, hogy tudok mpeg4 formátumú videót nézni a telefonomon, de miért nem tudom ezt az avi videót is megnézni? Miért csak ezt a 3 formátumot ismeri, miért nem ismer 10-et?). Később az elvárások alapvető fontosságúak lesznek: "nekem ne hozz ide olyan telefont, amiben nincs videólejátszó funkció".

A jellemzők besorolása

Az egyes jellemzők besorolása a megfelelő kategóriákba csak rendkívül alapos és óvatos munkával lehetséges. A leginkább elterjedt módja az egyes jellemzők két eset alapján történő értékelése: 1) Hogyan érintene az, ha a termék rendelkezne ezzel a jellemzővel? 2) Hogyan érintene az, ha a termék nem rendelkezne ezzel a jellemzővel? Mindkét esethez előre definiált értékeket kell rendelni, melyek például az alábbiak lehetnek:
  • Nagyon örülnék neki!
  • Feltétlenül legyen így!
  • Nem bánom, ha így van...
  • Inkább ne!
  • Eszedbe ne jusson!

2009. július 1., szerda

Toyota Product Development System

A Toyota sikerének nem csak a TPS (Toyota Production System), vagy ismertebb nevén a Lean gyártástechnológia a titka. Kosaku Yamada a Lexus ES 300 vezető mérnöke úgy fogalmazta meg, hogy ha a Toyota sikerének igazi titkát akarjuk megfejteni, akkor azt a Toyota termékfejlesztési modelljében (Toyota Product Development System) kell keresni. A Toyota az elmúlt 20 évben két olyan bravúrt produkált, amit autógyár azóta sem tudott felmutatni. Ezek közül az egyik a Lexus márkanév bevezetése. Amikor a "tömegcikk-gyártóként" ismert Toyota luxusmárka tervezésébe kezdett, mindenki borítékolta a kudarcot. Abban az időben a japán autókat az olcsó, eldobható kategóriába sorolta a közvélemény. A Lexus nemcsak, hogy sikeres lett, de évek óta vezeti a luxus-autók piacán az újravásárlási statisztikákat, 90% feletti eredményével (azaz aki egyszer már vett Lexus-t, várhatóan újra azt fog venni). A másik sikertörénet a Toyota Prius nevéhez fűződik. A Toyota Prius az első hybrid-meghajtású (azaz elektromos és benzinmotorral egyaránt felszerelt) tömegtermelésbe vont autó volt. Az autó elképesztően bonyolultnak hatott abban az időben (és még most is) mégis rendkívül sikeres lett. Engem akkor nagyon érdekelt, hogy hogyan lesz képes egy ennyire új megoldás megbízhatóan működni hosszútávon. Nemrég olvastam egy cikket a Totalcar magazninban, ami választ adott a kérdésre: "Amerikában, Kanadában nem ritka a 300 ezer mérföld (480 ezer kilométer) fölött futott kocsi. A szokásos öregedőautós dolgok, futómű, kipufogó, kerékcsapágy előfordulnak, de a hibrid lánc komponenseivel még egyikben sem fordult elő olyan probléma, ami miatt cserélni kellett volna a főegységet. Pedig az eladások már 1,2 millió példányon túl vannak, van miből mintát venni, bőven."

A Toyota Product Development System alakövei

Az Észak-Amerikában működő National Center for Manufacturing Sciences egy több éven át tartó kutatást indított a Toyota termékfejelsztési módszerének megértésére. Az eredményt négy pontban foglalták össze.

Befektetői szemléletű veztő mérnök (System Design by an Entrepreneurial Leader)

A vezető mérnök (Chief Engineer) felel az új típus piaci sikeréért. A vezető mérnök minden esetben egy több évtizedes tapasztalattal bíró mérnök, aki képes mélyen átlátni az autó tervezésének minden fázisát. Ez az ember felel ugyanakkor azért is, hogy a termék piaci célközönségét megfelelően határolják be, és a piaci igényeket jól mérjék fel. A chief engineer olyan mérnökökből lehet, akik bizonyították mérnöki tehetségüket, majd onnan a kereskedelmi és marketing területeken képezték tovább magukat. A vezető mérnök készíti el az új típus vízióját és kommunikálja azt tervező csapat felé. Ezt a víziót folyamatosan életben tartja, kiértékeli a visszacsatolásokat és ha kell változtat rajta. A chief engineer készíti el az új típus fejlesztési ütemtervét és határozza meg a fejlesztési mérföldkövek időpontját, valamint az ezekhez a mérföldkövekhez tartozó döntési kérdéseket. (Pl. az x. mérföldkőnél az autó meghajtásával kapcsolatos tervekkel végezni kell.)

Kiemelkedő mérnöki csapat

A Toyota híres a munkaerőkiválasztási és munkaerőmegtartási kultúrájáról. A hetekben olvastam egy elemzést, amely arról számolt be, hogy egy-egy új mérnök végleges felvételéig akár 1 év is eltekik a Toyotánál. A Toyota tisztában van vele, hogy egy-egy szakmai területen hosszú éveket kell eltölteniük a mérnököknek, hogy valódi mestereivé váljanak a szakmájuknak. Nem számít, ki mennyire tehetséges vezető, egy meghatározott időt mindenképpen el kell töltenie az adott szakmai pozíciókban a vezetővé válás előtt. A mérnöki karrier csúcsa a chief engineer.

Felelősség alapú tervezés és irányítás

A chief enginner állapítja meg a termékfejlesztés ütemtervét és bízza meg az egyes mérnökcsapatok vezetőit a feladattal. A mérnöki csapatok a 2-3 havonta megtartott szinkronizációs időpontokban mutatják be az eredményeiket. Ezekre az időpontokra a konkrétan meghatározott termékjellemzőknek megfelelő megoldásokkal kell önállóan előállniuk. Ha egy-egy csapatnak információra van szüksége a többi csapattól, akkor azt saját hatáskörében kell beszereznie, nem várhat egy "felsőbb" koordináló személyre. A hiányos információk miatti rossz tervekre nincs kifogás...

Konkurens tervezés (Set-Based Concurrent Engineering)

A set-based (halmaz-alapú) megközelítés fogalma onnan ered, hogy nem egy (ponit-based) problémán dolgoznak egyszerre, hanem egymással összefüggő, komplex problémákra keresnek párhuzamosan megoldásokat és folyamatosan szűkítik a lehetséges alternatívák körét. Az egyes alternatívák közül a lehető legkésőbbi időpontban választják ki az alkalmazandó megoldást. Például egy új modell kifejlesztése során a formatervezők azt a feladatot kapják, hogy bizonyos paraméterek mentén készítsék el a lehető legkisebb légellenállású karosszériát. A motor-tervezők ezzel párhuzamosan dolgoznak egy alacsony-fogyasztású erőforrás előállításán. Mindkét csapat több alternatívával áll elő, majd folyamatos iterációkon kersztül összehangolják az előzetes terveiket. Nagy valószínűséggel az első szinkronizációs ponton kiderül, hogy a megálmodott motor nem fér el a kitalált karosszériában, ezért mindkét csapat a megállapodott irányvonalak mentén átdolgozza kezdeti terveit, míg végül ki nem alakul az egész szempontjából optimális megoldás. A set-based tervezés alapja a gyakori, hatékony és rövid kommunikáció az egyes csoportok között.

2009. június 29., hétfő

Lean menedzsment

A Lean szoftverprojekt-menedzsmentet tartom az egyik legizgalmasabb területnek és azt várom, hogy a jövőben ez fogja a legnagyobb hatást gyakorolni a szoftverfejlesztésekhez kapcsolódó menedzsment módszertanokra. A Lean fordítása "karcsú, hajlékony". A Lean menedzsment legismertebb képviselője és sokak szerint a feltalálója is a Toyota. Valójában a lean menedzsment alapjául szolgáló filozófiát W. Edwards Deming fektette le, akit az amerikai hadsereg küldött Japánba a népszámlálás módszertani támogatására. Deming Japánban maradt, ahol menedzsment módszerei sokkal nagyobb befogadókésszséggel találkoztak, mint az USA-ban. A Japán gazdaság eredményei igazolják zsenialitását.

A lean menedzsment hatása a minőségre

Dr Peter Middleton, 2009. Miami Lean & Kanban konferencián tartott "Lean software development:achieving better requirements" c. előadásában találtam egy rendkívül beszédes grafikont a lean termékfejlesztés minőségre és követelménymenedzsmentre gyakorolt hatásáról. A mellékelt grafikon azt mutatja, hogy mennyi változtatást kell bevezetni a Toyota, illetve az átlagos amerikai autógyárak egyes típusaiban a gyártásba állítást követően. Az eredmény meglehetősen jól mutatja, hogy a tradicionális PPP módszerek során alkalmazott előzetes követelményelemzési technikák mennyire elmaradnak a lean termékfejlesztésben alkalmazott konkurens tervezés eredményeitől. (A konkurens tervezés sok tekintetben hasonlít a "Scrum gyökerei" című bejegyzésemben írt módszerhez.)

A Lean adaptív filozófia

A Lean szoftverprojekt-menedzsmentet gyakran sorolják az agilis módszertanok közé, mások külön irányzatnak tartják, mivel a folyamatokra lényegesen nagyobb hangsúlyt fektet a hagyományosan agilisnak nevezett (XP, Scrum) módszereknél. Mindenesetre az nem megkérdőjelezhető, hogy a Lean filozófia is adaptív módszer, hiszen a tanulásra, a kommunikációra a fejlődésre és az emberekre fekteti a hangsúlyt. A téma egyik jelentős forrása Jim Womack és Daniel Jones "Lean Thinking" c. könyve. Womack és Jones a Lean gondolkodás alapelveiként a következőket fogalmazzák meg:
  • Azonosítsd a termék valódi értékét (hasznát) a végfelhasználó szempontjából
  • Azonosítsd azokat a lépéseket a tevékenységi láncban, melyek ezt az értéket szolgálják. Szabadítsd meg a folyamataidat minden olyan tevékenységtől és szabálytól, melyek nem szolgálják egyértelműen ennek az értéknek az előállítását. Más szóval: szűntesd meg a pazarlást!
  • A megmaradt, értékteremtő folyamatokat szervezd egy integrált tevékenységi láncba, melyen keresztül a termékelőállítás folyamata gördülékenyen végighalad a végfelhasználó felé.
  • A termelési folyamatot a végfelhasználói igények vezéreljék (pull system). A folyamat akkor induljon be, amikor valós vevői igény jelentkezik. Minden folyamatlépést az azt igénylő folyamat indítson.
  • Törekedj a tökéletességre! A világos, igényvezérelt folyamatok legyenek átláthatóak minden résztvevő számára, akik ezáltal gyorsan felismerhetik a potenciális javítási lehetőségeket. Folyamatosan és állandóan javítsd a folyamatot!
Mivel a Lean menedzsment gyökerei a termelési folyamatokhoz kapcsolódnak el kellett telnie egy kis időnek, mire a lean alapelveket használható formában adaptálták egy teljesen más paradigmára, az egyedi szoftverfejlesztésre.

Lean Software Development

A Lean menedzsment nagyon világos, pragmatikus adaptációját tartalmazza a Mary és Tom Poppendieck által írt könyv, a Lean Software Development. A könyv alapját a szerzők azon tapasztalata szolgáltatja, amikor a 3M felvásárolta és Lean menedzsmentre állította át azt a gyárat, ahol Mary Poppendieck fejlesztőként dolgozott. A könyvben a fenti lean alapelveket némileg átstrukturálták és kiegészítették, de az alapfilozófia változatlan maradt. Az alábbiakban sorra veszem az általuk megfogalmazott alapszabályokat.

Szűntesd meg a pazarlást!

A Toyota gyártási rendszerének alapfilozófiája "a veszteség abszolút megszűntetése". Ennek módszere az értéktermelési lánc végletekig történő optimailzálása. A módszer lényege, hogy az értéktermelési láncban a vevői megrendeléstől a termék ellenértékének "begyűjtéséig" minden egyes lépést megvizsgálnak. Azokat a lépéseket, melyek nem adnak értéket ehhez a folyamathoz megszűntetik. A maradék lépések átfutási idejét pedig folyamatosan rövidítik újabb és újabb ötletek bevezetésével. Ennek a filozófiának az alappilére a valódi érték, a tevékenység valós céljának meghatározása. A veszteség két alapvető forrása: 1.) minden olyan tevékenység, ami a vevő számára nem hordoz valódi értéket; 2.) minden olyan lépés, ami a vevő számára az értékhez történő hozzájutást késlelteti.
A szoftverfejlesztés és a gyártás közötti analógiákat keresve a lean szoftverfejlesztés az alábbi tipikus veszteségforrásokat azonosította.

GyártásSzoftver fejlesztés
Gyártási raktárkészletBefejezetlen funkciók, kód : dokumentáció, ami nem kerül megvalósításra, kód ami nem kerül alkalmazásra, dokumentálátlan kód stb.
TúltermelésExtra funkciók: minden olyan lefejlesztett, specifikált vagy megtervezet funkció, amit a felhasználók nem használnak a gyakorlatban)
Redundáns feldolgozási lépések (extra processing)Újratanulás: minden olyan tevékenység, döntés amit már korábban elvégeztünk, de megfeledkeztünk róla.
Szállítás
Mesterséges tudásátadás (handoffs): a gyakorlatban ez a természetes (személyes) kommunikáció helyett készített felesleges dokumentációk gyártása. Az a tevékenység, amikor a fejlesztő csapatot elzárjuk a végfelhasználóktól és közvetítő dokumentációkon keresztül próbáljuk átadni az információkat a számukra.
Mozgatás (azok a tevékenységek, amik megszakítják a folyamatosságot)Feladatváltás (task switching): a fejlesztői team mozgatása egyik projektről a másikra. A team folyamatos munkavégzésének megszakítása.
VárakozásKésés, várakozás: a szoftverfejlesztésben a leggyakoribb várakoztatási tényező az üzleti elvárások pontosítása. Ha egy fejlesztő olyan kérdésbe ütközik, ami a rendszer üzleti funkcionalitását befolyásolja, a lehető leggyorsabban biztosítani kell számára a szükséges információt.
HibákHibák: a kódban hagyott hibák továbbgyűrűznek a rendszerben feleslegesen növelve annak komplexitását. A hibalisták kezelése nagy számú hiba estén külön menedzsment eljárásokat igényel, amit össze kell hangolni a fejlesztés többi tevékenységével. Ez feleslegesen növeli a ráfordításokat.

A pazarlás megszűntetése a lean menedzsment talán legfontosabb alapelve.

Vágj bele gyorsan!

A rendszerrel szemben támasztott követelmények nem mérhetőek fel teljeskörűen a fejlesztés korai szakaszában. Bármilyen alapos is a követelményelemzési szakasz, a felhasználói elvárások folyamatosan változni fogak részben a környezet változásának eredményeként, részben a rendszer lehetőségeinek megismerése során. Igazán jó alkalmazás csak akkor készíthető, ha a rendszer fejlesztői átérzik a felhasználói igényeket. A részletes követelményspecifikáció nem alkalmas arra, hogy a rendszerrel kapcsolatos valós elvárásokkal megismertessék a fejlesztőket, ráadásul a külön követelményelemző csapat elzárja a direkt kommunikációtól a megvalósítást végző szakembereket. A jó rendszer végleges felépítése a megvalósítási lehetőségek vizsgálatával, a lehetséges alternatívák szűkítésével, kompromisszumokkal és folyamatos visszacsatolásokon keresztül alakul ki. Ahogy a szerzők írják: "A jó architektúra nem a ráfordított idő, vagy a követelményelemzés részletességének a függvénye, hanem a képzett embereké és a közöttük lévő információáramlásé. A jó rendszert befolyásoló tényezők a szakemberek felkészültsége és az információáramlás hatékonysága."

Tanulj folyamatosan!

A folyamatos tanulás jelentőségét mindenki elismeri és evidenciának tekinti. Kevésbé elfogadott ennek a szabálynak a következménye: a folyamatos tanulás elve ellentétes az előzetes, részletes követelményspecifikáció eszméjével. Miért? Két ok miatt. Először is, ha veszem magamnak a bátorságot, hogy kimondjam: mindent tudok ahhoz, hogy részletesen megtervezzem a jövőt, azzal azt mondom, hogy nincs szükségem tanulásra. Ha nem tudok mindent arról a rendszerről, amit fejleszteni akarok, akkor az erre vonatkozó terveim csak feltételezéseken alapulnak. Amint ezek a feltételezések megváltoznak, az erre alapozott terveim is feleslegesek lesznek. Másodszor, a környezet és az elvárások változnak. Ha ragaszkodni akarok a terveimhez, akkor a változást - és a tanulást - figyelmen kívül kell hagynom, vagy a terveim feleslegesek lesznek. Könnyű félréerteni ezeket a gondolatokat. A tervezés fontos, maguk a tervek viszont csak átmenetiek és ennek megfelelően kell kezelni őket. A tervezés nem más, mint a tanulási folyamat része. Újra és újra végre kell hajtani de csak olyan mélységben, amilyen mélységű információkkal rendelkezünk. Ez az alapelv általánosan igaz mindenre a projektben: azért mert valamit már elkészítettünk egy korábbi, azóta már megváltozott elképzelés alapján, ne féljünk megváltoztatni az új tudásunk birtokában. A tanulás változást jelent, a változás meg tanulást követel.

Várj az elköteleződéssel!

Az elkötelezettség felvállalásának a késleltetése azt jelenti, hogy nyitva hagyjuk magunk számára a választás lehetőségét a kritikus pillanatig. A kritikus pillanat (a szerzők "last responsible moment" kifejezést használják) az az utolsó időpont, ahol a döntés még a mi kezünkben van. A kritikus pillanat után a döntési alternatíváink száma szűkül, és egy számunkra kedvezőtlen alternatíva felé kényszeríthetnek a folyamatok. Ennél a pillanatnál későbbre a döntést nem szabad halogatni. A lean alapfilozófiája ebben a tekintetben az, hogy várjunk a döntéssel addig, amíg feltételezések helyett tények vagy események alapján hozhatjuk azt meg, de a folyamat irányítása még a kezünkben van. A lean gyártási elvek szerinti just-in-time rendszerben a gyártási folyamat akkor indul meg, amikor a megrendelés megérkezett, nem pedig egy bizonytalan keresleti előrejelzés alapján. A túl korai döntés legalább annyi kockázatot hordoz magában, mint a későn meghozott döntés. A döntéshozás késleltetése a lean filozófia "pull system" szabályának a betartása. Ha egy tevékenységet vagy döntést nem kell most elvégezni, akkor ne is tegyük meg, mert semmi nem garantálja, hogy holnap nem jutunk valami olyan információ birtokába, ami alapján egy másik alternatíva jobbnak bizonyulna. Ez egyben a veszteségtermelés elkerülésének egyik legjobb módja. Az adaptív módszertanok egyik kulcsfontosságú eleme éppen ezért a prioritási listák alkalmazása. Azzal foglalkozunk, ami ott és akkor a legfontosabb. (Ennek az elvnek a figyelmen kívül hagyása vezet a tradicionális módszertanok által produkált, több mint 60%-ot kitevő felesleges funkciók fejlesztéséhez.)

Szállítsd le gyorsan!

"A jó munkához idő kell!" így tartja a közmondás. A szoftverfejlesztésben ezzel szemben a rendszeresen gyors átadási képesség minden esetben a jó minőség legjobb jele is. A megbízható és gyors leszállítási képesség nem lehetséges kiemelkedő minőség nélkül. A just-in-time rendszerek kulcsa a vevői igény megjelenésétől a termék leszállításáig eltelt idő minimalizálása. Ha ezt a feltételt nem tudják teljesíteni, a vevők elpártolnak a vállalattól. A just-in-time rendszerben éppen ezért nem fogadhatóak el a hibák. Ha egy korai fázisban készült komponens hibás, az a teljes ráépülő termelési láncot blokkolja. A just-in-time rendszerben működő vállalatok és fejlesztői teamek hatalmas energiákat fordítanak arra, hogy a termelés hibamentes legyen. (Ezt megtehetik, hiszen a részletes tervezésre és előrejelzésre szánt idő jelentős részének megspórolásával bőven marad idejük a termelési lánc minőségének folyamatos javítására.) A szoftverfejlesztési projektben ezt a célt szolgálja a test driven development megközelítés, és a prioritási listák alapján történő inkrementális fejlesztés. A gyors szállítási képesség másik feltétele a pontos és jól szabályozott viselkedés. A gyors leszállításhoz kapcsolódó agilis elvekkel szemben gyakran hozzák fel ellenérvként a tervezetlenséget és az ad-hoc munkavégzést. A valóságban ugyanakkor a jól szervezett adaptív projekt számtalan szigorú normát tartalmaz, melyek az egyes tevékenységekkel szemben támasztott minőségi kritériumokat definiálják. Éppen ez teszi lehetővé, hogy team vezérlése "laza" legyen és a munkát ne fojtsák meg a szigorú irányításhoz szükséges nem értékteremtő tevékenységek. A gyorsan leszállított résztermékek lehetővé teszik az adott teamre és üzleti környezetre jellemző tényadatok gyűjtését, ami végsősoron megalapozott előrejelzések készítésének feltételeit teremti meg. Ez az előrejelzhetőség paradoxona: azáltal, hogy világos szabályok és minőségi elvek mentén hagyjuk a projektet adaptívan futni a hipotéziseken alapuló tervekhez történő ragaszkodás helyett, a gyakorlati tapasztalatok és az iteratív fejlesztés során gyűjtött tényadatok segítségével végülis az előrejelezhetőséget érjük el.

Építsd be a minőséget!

A just-in-time rendszerek jellegükből fakadóan rendkívül érzékenyek a hibákra. Hasonló a helyzet a lean szoftverfejlesztéssel is. Ha a csapat gyorsan akar eredményeket szállítáni, nincs idő hosszú hibajavító tesztelési eljárásokra. Az építsd be a minőséget alapelv lényege a hibák korai felismerése, kivizsgálása és megelőzése. A Toyota sikerét a századforduló környékén az "önleállító" szövőgépek alapozták meg. Ezek a gépek észlelni tudták, ha szövés folyamatába valamilyen hiba csúszott és automatikusan leálltak. Ez lehetővé tette, hogy az akkori japán munkaügyi szabályok mellett, - amely tiltotta a munkások éjszakai foglalkoztatást - a gépeket felügyelet nélkül éjjel is üzemeltethessék. Ezt a tulajdonságot "stop the line" névvel illették és később a Toyota teljes gyártási folyamatában alkalmazták. Bármilyen hiba a gyártósor bármely részén a teljes termelés leállítását eredményezi addig, amíg a hiba okát alaposan ki nem vizsgáltak és meg nem győződtek arról, hogy a későbbiekben nem fog előfordulni. Ez az elv elsőre nagyon kockázatosnak és megdöbbentőnek tűnik, de a konzekvens alkalmazása mellett a hibák száma minimálisra szorítható, a hibajavító eljárások gyakori alkalmazása pedig rutint biztosít, ami végsősoron a gyors hibaelhárításhoz vezet. Ennek az elvnek az alkalmazása szükségtelenné teszi az egyébként jelentős erőforrásokat lekötő "selejt-menedzsmentet". A szoftverfejlesztésben erre analógia a test driven devlopment. A lean szoftverfejlesztés szószólói ennek az elvnek a szélsőséges alkalmazását javasolják, melynek eredményeként akár a teljes issue-tracking rendszer is megszűntethető.

Értékeld az embereket!

A lean filozófia alapja, hogy a terelési folyamatot legjobban ismerő emberektől várhatóak a legjobb ötletek és a leginkább hasznos újítások. A lean menedzsment alapja a motivált és gondolkodó emberi viselkedés elősegítése. A Toyota alapelve, hogy jó terméket csak elkötelezett, felelősségteljes és a szakmájában kiváló szakemberek hozhatnak létre. A szervezet minden szintjén dolgozók megfelelő tiszteletet, autonómiát kapnak és lehetőségük van (mitöbb elvárják tőlük) a tevékenységi folyamataik folyamatos javítására, kísérletezésre. A lean szervezetben a hierarchia nem ugorható át, senki nem kerülhet egyszerűen a szervezet legmagasabb hierarchia szintjeire.

Optimalizáld az egészet!

A lean menedzsment alatt működő szervezetek felismerték, hogy a komplex rendszer nem írható le annak dekomponált részeinek együttesével, más szóval az egész nem ugyanaz, mint a részek összege, hanem valami annál több. Az egyes résztevékenységek önálló mérőszámok szerint történő mérése és ezek szerinti optimalizálása a teljes rendszer szuboptimális működéséhez vezetnek. A lean szervezetben minden tevékenységet a teljes "megrendeléstől a pénz begyűjtéséig" értéklánc egészére gyakorolt hatása szerint vizsgálnak. Mary Poppendieck egy érdekes ellenpéldát hozott fel könyvében: a gyártási láncban volt egy rendkívül drága berendezés, melynek az élettartama rövid volt. A dekompozíción alapuló optimalizáció alapján az tűnt logikusnak, hogy ezt a gépet a lehető legnagyobb kihasználtsággal kell üzemeltetni, hiszen a rövid élettartam alatt az egy termékre jutó költség akkor lesz alacsony, ha adott időszakban a legtöbb alkatrészt gyártja le. Ennek eredményeként hatalmas alapanyagkészleteket halmoztak fel (hogy véletlenül se hátráltassa a gyártást az alapanyaghiány), illetve a nagy kibocsátás miatt nagy kimeneti raktárra is szükség volt. Ennek eredményeként a lokális optimalizálás "ellenére" a teljes termelési láncban a gyártási költség magasra szökött.
Az egész folyamat optimalizációjára való törekvés a lean szervezetek partnerkapcsolataiban is megmutatkozik. Amikor a Fujitsu 2001-ben átvette a British Midland Airways (BMI) helpdesk rendszerének üzemeltetését, rövid időn belül felismerte, hogy a bejelentések 26%-át a check-in pultoknál lévő nyomtatók hibája okozta. A Fujitsu javaslatot tett új nyomtatók üzembe állítására, valamint további fejlesztési ötletekkel rukkolt elő. A fejlesztések eredményeként a hibabejelentések száma rövid időn belül 40%-kal csökkent. Ebben a történetben az az érdekes, hogy az eredeti help-desk szerződés alapján az üzemeltetőt a bejelentett és elhárított incidensek alapján fizették, tehát elvileg nem állt volna érdekében ez az optimalizálás. Az eredmények hatására a BMI és a Fujitsu módosította az üzemeltetési szerződést, aminek eredményeként mindkét cég a vártnál jobb feltételekhez jutott és ami a legfontosabb, sikerült fenntartaniuk a közös érdekeken alapuló optimalizációs folyamatot. Ennek az alapelvnek az ösztönzési rendszerre vonatkoztatva is messzemenő hatásai vannak. Az érdekeltségi rendszerek lehető legegyszerűbb elveken történő meghatározása szintés egy jellemző lean módszer.

2009. június 22., hétfő

Követelmények helyett elvárások!

A szoftverfejlesztési projektek egyik kulcsfontosságú területe a követelmények helyes meghatározása. Azt is tudjuk, hogy az egyedi fejlesztési projektek bukását leggyakrabban a hibás követelményelemzésre vezetik vissza. De vajon miért olyan nehéz feladat a követelmények helyes feltárása, dokumentálása és az ezeket kielégítő rendszer lefejelsztése? Szerintem a válasz az, hogy a követelmények nem a természetes gondolkodás kellékei. A követelmények részben a környezeti kényszerek, részben a megrendelők adott pillanatban, adott információk alapján kialakított elvárásainak rögzített leképezése. A gond az, hogy ezek mind változnak. A környezeti feltételek változásával nem nagyon tudunk mit kezdeni, azok a projekttől teljesen függetlenek, néha előre láthatók, néha nem. Ilyenek tipikusan az adott projekt környezetét befolyásoló jogszabályok, és az üzleti környezet változása.

A követelmények merevek, az elvárások élők

Sokkal izgalmasabb a megrendelői elvárásokat elemezni. Azok ugyanis a projekt hatókörén belül helyezkednek el. A megrendelő végsősoron dönthet arról, hogy ragaszkodik az adott elvárásához, vagy sem. Itt szándékosan az elvárás szót használom. A követelmények ugyanis az elvárásokból származnak. A követelmény kifejezés azt sugalja, hogy valami statikus dologról van szó, amit csak rögzíteni kell és onnantól ismerjük. Éppen ez a probléma vele! A megrendelőt ugyanis nem érdeklik a követelmények. A megrendelőnek elvárásai vannak, amiknek megfelelő rendszert akar látni. Az üzleti megrendelő szemében a követelmény csak egy szükséges rossz, amibe az előzetes követelményspecifikáción alapuló fejlesztési kultúra belekényszeríti a tervezhetőség látszatának fenntartása érdekében. A valós igények az elvárásokban bújnak meg. Az elvárások pedig a megismerés során folyamatosan változnak. Az elkészítendő rendszerrel kapcsolatos ismeretek bővülése pedig folyamatos. Az elemzési, tervezési szakaszban nemcsak a fejlesztők, de az üzleti megrendelők is folyamatosan formálják a fejlesztendő rendszerről kialakított képüket. A vízesés modellben alkalmazott követelménykezelési módszerek problémája tehát nem abban rejlik, hogy hibásan alkalmazzuk őket, hanem abban, hogy eredendően téves elképzelésből indulnak ki. Az elvárások ugyanis természetüknél fogva többnyire nem statikusak, tehát nem is rögzíthetők. A megoldás tehát nem az, hogy egyre komplexebb követelményelemzési és dokumentációs technikákat dolgozunk ki hanem az, hogy megtanuljuk követni a az elvárások változását. A hatékony elváráskezeléshez vezető legjobb út az, ha pontosan megértjük a fejlesztendő rendszer célját és üzleti környezetét. Ekkor az energiánkat nem a követelmények rögzítésére, hanem a problémák megoldására fókuszálhatjuk. A követelmények komplex rögzítésére és dokumentálására fordított energia nagy részét hasznosabb lenne olyan tevékenységekre fordítani, melyek során a fejlesztő csapat megértheti a megrendelői elvárásokat és az azok megött meghúzódó okokat. A jó rendszer elkészítéséhez a fejlesztő teamnek mindenképpen meg kell ismernie a megrendelő üzleti környezetét, ha rögzítjük a követelményeket, ha nem.

Az információmegosztás módszerei

Ambler W. Scott készített egy felmérést arról, hogy az egyes kommunikációs formák milyen mértékben járulnak hozzá ahhoz, hogy a fejlesztők megértsék a rendszerrel szemben támasztott elvárásokat. Az egyes kommunikációs formák hatékonyságát -5 és +5 közötti skálán lehetett osztályozni. A negatív értékek nagyjából azt jelentik, hogy az adott kommunikációs módszer inkább hátráltatja a megértést, mintsem javítja azt. A felmérésben az egyes információátadási módszerek hatékonyságát a csapaton belüli, valamint a csapat és a megrendelő közötti kommunikációban is vizsgálták. Érdemes megfigyelni, hogy az egyetlen negatív eredményt a részletes specifikáció kapta.

Egy figyelemreméltó példa

Szintén érdekes tanulsággal szolgál a Toyotánál alkalmazott követelménykezelési módszer. A Toyotánál alapszabály, hogy minden elvárásrendszernek el kell férnie egy A3-as oldalon. A Toyota Prius fejlesztésébe a Toyota hatalmas összegeket fektetett be úgy, hogy az autóval szembeni elvárásokat mindössze 5 pontban foglalták össze (relatív tágas belső tér; magas üléspozíció; jó aerodinamika; 20km/liter fogyasztás; kicsi, horizontálisan elhelyezett motor fokozatmentes automata váltóval). A követelmények gyűjtése helyett a prototípusok előállítására és tesztelésére helyezték a hangsúlyt. A gyakorlati megvalósítással szemben semmilyen megkötést nem alkalmaztak. A hybrid hajtás például a projekt során kialakított megvalósítási döntés volt, sehol nem szerepelt az eredeti elvárásokban. Érdemes elgondolkodni azon, hogy a világ legnagyobb és legnyereségesebb autógyára miért ezeket a módszereket alkalamzza? Ha jobban belegondolunk, egy új típus fejlesztése egy ugyanolyan kockázatos befektetés, mint egy új szoftver kifejlesztése. Ha a Toyota felismerte, hogy fölösleges előzetesen "agyonspecifikálni" a terméket, akkor miért ne tehetnénk mi is ugyanezt?

2009. június 12., péntek

A SCRUM gyökerei

A Scrum menedzsment modell alapjául szolgáló elmélet leírása Takeuchi és Nonaka nevéhez kötődik. Ők publikálták 1986-ban a Harvard Business Review január-februári számában a "The new new product development game" című cikküket. A tanulmány témáját az a felismerés vezette, hogy a vállalatok profitjának egyre nagyobb része származik az új termékek értékesítéséből. (A 70-es években az 5 évesnél fiatalabb termékek részesedése a profitból 1/5 volt, a 80-as évekre ez 1/3-ra emelkedett.) Világos volt tehát, hogy azok a vállalatok számíthatnak hosszútávú sikerekre, akik a legjobbakká válnak az új termékek fejlesztésében és piacra vezetésében. A jó termékfejlesztés kritériumai a következők: rövid fejlesztési idő, magas minőség, alacsony fejlesztési és gyártási költségek. A nyolcvanas években az általánosan elfogadott termékfejlesztési módszertan a NASA által kifejlesztett vízesés modell alapú PPP (phased program planning) volt. A tradicionális PPP modellben a termékfejlesztés a meghatározott specialistákból álló csoportokon haladt végig (pl. a marketing meghatározta a célcsoportot, részletesen definiálta a termék paramétereit, a fejlesztő mérnökök elkészítették az ezekhez az igényekhez illeszkedő termék terveit, majd a gyártástechnológusok kialakították azt a gyártási modellt, amelyben a termék nagy számban előállítható).
A scrum neve a rugby játékból jön. A rugbyben a különböző posztokon játszó játékosok egy csapatban szorosan együttműködve juttatják el a labdát a célig. Ennek a módszernek két jellemzője van: 1.) különböző szerepek dolgoznak szorosan együttműködve egyidőben 2.) a labda nem egyenesen a cél felé halad, hanem néha visszajátszák egymásnak a játékosok, új pozíciót keresnek, és innen indulnak meg újra a cél felé.
A cikk írói azt vizsgálták, hogy a termékfejlesztésben sikeres vállalatok milyen módszereket alkalmaznak a termékfejlesztési projektjeik során. A vizsgálat többek között a Fuji-Xerox, Canon, Honda, NEC, EPSON és a HP több sikeres termékének kifejlesztésénél alkalmazott módszereket vizsgálta. A termékfejlesztésben résztvevőkkel készített interjúk alapján az alkalmazott fejlesztési folyamatokban a következő közös jellemzőket azonosították:

Szándékos instabilitás a folyamatban

A felsővezetés egy röviden megfogalmazott célmeghatározással indítja el a projektet, melyhez meglehetősen rövid határidőt rendel. A stratégiai célok meghatározásán túlmenően nem definiálja részletesen a termék jellemzőit. A Canon AE-1 modell fejlesztését kezdetekor például a menedzsment a következő célokat tűzte ki a fejlesztő team elé: állítsatok elő egy kompakt méretű, automata expozícióval rendelkező, magas minőségi szintet képviselő fényképezőgépet, melyet amatőrök is képesek használni és a jelenlegi uralkodó kompakt gépekhez képest 30%-al olcsóbban előállítható.

Önszerveződő projekt teamek

A projekt leginkább egy induló vállalkozáshoz hasonlít, aki maga alkítja ki a szabályait és mechanizmusait. A projekt elején nagy a fluktuáció, majd kialakul a team saját működési rendje. A felsővezetés egy kockázati tőke-befektetőhöz hasonlóan viselkedik, biztosítja a forrásokat és világosan kommunikálja a projekt stratégiai céljait. Ezen túlmenően alig avatkozik be a projekt menetébe. A projekt team a termék életciklusában érintett minél több szervezeti egység képviselőiből áll össze (pl. marketing, gyártás szervezés, karbantartás, tervezés).

Átlapoló fejlesztési szakaszok

Az átlapoló fejlesztési szakaszok során a projekt team újra-és-újra visszanyúl a korábbi fázisok eredményeihez és változtat rajtuk, ha kell. A tradicionális PPP modellekben ezt nehéz megtenni, mivel a korábbi szakaszokon dolgozó pl. tervezést végző mérnökök már a következő terméken dolgoznak akkor, amikor az általuk készített termék gyártástechnológiáját próbálják a gyártástechnológusok kidolgozni. A multifunkcionális csoportokban az egyes termékszempontok egyszerre képviseltetik magukat, ezért jelentősen hamarabb előjönnek a későbbi fázisokban várható problémák akkor, amikor még az elképzelések csak kezdeti szakaszban vannak. Ez lehetővé teszi annak elkerülését, hogy egy korai fázisban elkövetett hiba (vagy még akkor nem ismert szempont felmerülése) végigyűrűzzön az egész tervezési folyamaton.

"Multilearning" többszintű és többfunkciós tanulás

A scrum projektek alapja a tanulás. A projekt folyamatára jellemző az ismétlődő próbálkozás-tévedés ciklus, melynek során folyamatosan szűkítik a megvalósítható alternatívák körét. A szerzők kétirányú tanulási folyamatot azonosítottak: a többszintű (multi level) és a multifunkcionális (multifunctional) irányokat. A többszintű (multilevel) tanulási irány lényege, hogy egyéni és szervezeti szinten is elvárják a projektben résztvevőktól a fejlődést. A 3M-nél például a tervező mérnökök idejének 15%-át saját maguk által választott témákban történő tanulásra tartják fenn. A Honda City projektjének teljes termékfejlesztő csapatát Európába küldték 3 hétre, hogy gyűjtsenek ötleteket az Európai piacról. A multifunkcionális tanulási irány arra koncentrál, hogy a projektben résztvevő, különböző szakterületekről érkező szakemberek fejlesszék saját tudásukat a többi szakterületi irányba, hogy egy közös nyelvet és problémamegértést alakítsanak ki. Az Epson első minatűr nyomtatójának projekttagjai döntően mechanikai mérnökök voltak, és hiányzott az elektronikai tudás. A projekt vezető mérnöke 2 évig tanulta a villamosmérnöki területet, miközben a projekt futott. A projekt zárásakor az összes résztvevő mechanikai mérnök releváns villamosmérnöki ismeretekkel rendelkezett.

"Finom" irányítás

A scrum projektekre jellemző önszerveződés nem jelenti az irányítás és a felügyelet hiányát. A projekt felsőveztői rendszeres ellenőrzési pontokat iktatnak be, ahol kiértékelik a projekt haladását és ha szükséges beavatkoznak. A felsőezetés ugyanakkor távoltartja magát a direkt irányítástól. A projekt jellemző irányízási eszköze a "csoport nyomás", ahol a motivált projekttagok egymástól várják el a nagy teljesítményt. A finom irányítás két legfontosabb feltétele a projekt team tagjainak rendkívül alapos válogatása és a csoport szintű (nem egyéni!) jutalmazási rendszer. Ezeket egészítik ki olyan alapelvek, mint a hibák tolerálása és azonnali kiértékelése. A hibák tolerárálása teszi lehetővé a korai felismerést (mivel nem kell szégyelni és rejtegetni) és a következmények minimalizálását.

Szervezeteken átívelő tanulási folyamat

A scrum projektkultúrát követő szervezetek kivételes figyelmet fordítanak a szervezeten átívelő tanulási folyamatra. Ezt alapvetően két módon valósítják meg. Egyrészt a sikeres fejlesztési projektekben résztvevőket más projektcspatokba osztják be annak érdekében, hogy a személyes hatásokon keresztül terjedjenek a sikeres ötletek és működési modellek. Másrészt a több projektben bizonyított módszereket standardizálják és a vállalati kultúra részévé teszik.

A szerzők figyelmeztetnek, hogy a fent leírt alapelvek alkalmazása együttesen fejtik ki hatásukat. Bármelyik elhagyása a rendszer instabitásához vezethet, együttes alkalmazásuk viszont kiemelkedő dinamikát és innovációt hoz a termékfejlesztésbe. Fontosnak tartom kihangsúlyozni, hogy a tanulmányban leírtak nem hipotézisek, hanem egy igen kiterjedt kutatás tapaszatalatainak az összegzése.
A módszer számos projekt eredményein keresztül bizonyított, ezek közül néhány:
  • Xerox 9900 fejlesztési időtartama kevesebb, mint 3 év volt holott a korábbi, hasonló termékek fejlesztésének átlagos időtartama meghaladta az 5 évet
  • Az Epson EP-20 termék fejlesztésének időtartama 2 év volt, szemben a korábbi termékek átlagosan 4 éves fejlesztési idejével
  • 1982-ben a Honda fél év alatt közel 30 új modellt dobott piacra, amivel jelentősen megrengette az addig piacvezető Yamaha pozícióját
A Scrum azóta az uralkodó agilis fejlesztési menedzsment modellé vált, számos vállalat, köztük az IBM, Microsoft és az Apple alkalmazza. Az elmúlt időszakban kritikus területeken is megkezdte a térhódítást, például a Lockheed Martin vadászgépeinek szofteverfejlesztésében is alkalmazzák. A SCRUM menedzsment modell szoftverfejlesztésre történő adaptálása Ken Schwaber nevéhez fűződik.


2009. június 3., szerda

Fontos vagy sürgős?

A személyes időmenedzsment módszerek közül talán a legsikeresebb a feladatok fontosság-sürgősség szerinti osztályozásán alapuló. A rendszer kialakításához az a felismerés vezetett, hogy bármilyen hatékonyan is végezzük el feladatainkat, előbb vagy utóbb bekövetkezik az a pont, ahol a feladatok száma meghaladja a rendelkezésünkre álló időkeretet. Ha hatékonyabban dolgozunk, akkor ez az állapot kicsit később következik be, ha kevésbé hatékonyan, akkor hamarabb. A feladatok elvégzésének gyorsasága másodlagos, a lényeg az, hogy megfelelően válasszuk ki, hogy mire fordítjuk az időnket. A feladatainkat egy fontosság és egy sürgősség tengely mentén kialakított mátrixban helyezzük el. A fontos dolgaink a mátrix felső sávjában kapnak helyet. A módszer központi eleme a világos célmeghatározás, és értékrend kialakítás. Azok a feladatok tekintendők fontosnak, amelyek közvetlenül hozzájárulnak ahhoz, hogy céljainkat elérjük. Miután egy ideje alkalmaztam ezt az időszervezési rendszert rájöttem, hogy a megközelítés ugyanúgy alkalmas egy projekt team erőforrásgazdálkodásának menedzselésére, mint a személyes időgazdálkodásra. Mi a célja egy fejlesztési projektnek? A valós igényeket kielégítő, működő szoftver! Nézzük meg ebből a szempontból, hogy mik jellemzik a mátrix egyes negyedeit:

I. negyed: a sürgős és fontos tevékenységek - a tűzoltás
Ebbe a kategóriába tartoznak azok a feladataink, amiket mindenképpen el kell végeznünk, viszont a rendelkezésünkre álló idő szűkös. Az ebben a negyedben eltöltött idő okozza a legtöbb stresszt, és vezet a legtöbb hibához. A fejlesztési projektben tipikusan ilyen a rendszer átadását megelőző időszak, ahol számos ismert hibát kell kijavítani, véglegesíteni kell a rendszerhez kapcsolódó üzemeltetési és felhasználói dokumentációkat stb. Világos, hogy a feladatok fontosak, viszont reménytelenül kevésnek látszik a rendelkezésre álló idő.

II. negyed: fontos, de nem sürgős tevékenységek - a fejlődés, teremtés
Ez a leghasznosabb időtöltés. Ebben a negyedben végezzük el azokat a feladatokat, melyek a projektet ténylegesen előremozdítják, javítanak a termék minőségén. Itt termelünk a leghatékonyabban valódi értéket. A fejlesztési projektben ez az az időszak, amikor hagyjuk a csapatot dolgozni, kreatívan gondolkodni, amikor lehetőséget adunk a fejlődésre és a kísérletezésre. Ide tartozik az az idő, amikor a fejlesztő csapat lehetőséget kap arra, hogy megértse a rendszer valós üzleti környezetét. Ebben a negyedben végezzük a tervezést és a feladatok priorizálását is.

III. negyed: sürgős, de nem fontos tevékenységek - a zaklatás
Ez a legalattomosabb negyed. A személyes hatékonyságot vizsgáló felmérések azt mutatták ki, hogy a vezetők az idejük 30-50%-át ilyen tevékenységekkel töltik. Az alattomosságát az okozza, hogy a sürgető határidők a fontosság érzetét keltik. Az ebbe a negyedbe tartozó tevékenységek veszik el az időt a tényleges értékteremtésről, mivel állandóan nyomás alatt tartják az embereket. Tipikus képviselői a megszakításokból adódó feladatok. A fejlesztési projektekre vetítve ilyen az emberek projektek közötti mozgatása, a gyenge menedzsment által azonnali határidőre igényelt státusz jelentések és demók.
Kicsit elvonatkoztatva ugyanide sorolható a legtöbb dokumentáció leadás is. A követelményspecifikáció, vagy a funkcionális specifikáció projekttervben meghatározott időpontra történő leadási kényszere ahhoz vezet, hogy a team nem tud kellő időt szakítani a fejlődésre, vagy a végfelhasználókkal történő kommunikációra, mert bezárkózik az irodába a dokumentum megírása miatt. Ezek a tevékenységek elterelik a figyelmet a valódi kérdésekről és a követelményeket kipipálandó feladatokká degradálják nem hagyva időt a valódi okok megértésére.

IV. negyed: nem sürgős és nem fontos tevékenységek - a pazarlás
Ezek azok a tevékenységek, melyek alig járulnak hozzá a projekt sikeréhez. Legtipikusabb képviselőjük a túlhízlalt dokumentációk és a soha le nem fejlesztett, de részletesen specifikált követelmények és rendszerfunkciók. Az operatív menedzsment területén ilyenek a túl nagy körben megrartott, nem előkészített megbeszélések, elhúzódó státusz egyeztetések, vagy a gyenge menedzsment bizonytalanságát enyhítendő időelszámoltatások. Szintén jellemző pazarlási forrás a nem kellően átgondolt módosítási igények átvezettetése a rendszerben. Amik később újra megváltoznak... végül soha senki nem használja...

A fentieket jobban átgondolva gyorsan rádöbbenhetünk, hogy az agilis fejlesztési irányzatok végsősoron arra törekszenek, hogy a team erőforrásait az első két negyedre összpontosítsák. A projekt megszabadítása az alsó sávban lévő felesleges ráfordításoktól a lean menedzsment (lean = karcsú) egyik legfontosabb irányelve.

A cikkben felhasznált képeket a következő oldalakról vettem kölcsön: collegecandy.com, www.vuidesign.net, www.cmse.ie, bitsandpieces.us

2009. május 28., csütörtök

Vízió - a projekt céljának meghatározása

Egy fejlesztési projekt elindítása előtt a legfontosabb feladat a valós üzleti cél meghatározása. Ez meglehetősen triviálisnak hangzik, ugyanakkor igen ritkán lehet találkozni világos célmeghatározásokkal. A tapasztalatom az, hogy az üzleti megrendelők sokkal több időt fordítanak a követelmények definiálására, mint a projekt céljainak meghatározására. Ez a projekt elején nem tűnik túl nagy problémának, viszont a megvalósítás során, amikor az összegyűjtött követelmények kielégítéséhez szükséges ráfordítások láthatóan messze meghaladják a rendelkezésre álló kereteket, valami alapján priorizálni kell. Ekkor jönne jól világosan látni a célokat. A projekt indítását minden esetben egy világos víziónak kellene megelőznie. A vízió kialakításához nyújtanak segítséget a következő kérdések.

Mit fogunk csinálni?
Próbáljuk meg megfogalmazni néhány mondatban, hogy mi lesz a projekt eredménye! Például: interneten elérhető biztosítási alkusz szolgáltatást fogunk megvalósítani, mely lehetővé teszi az ügyfelek számára, hogy egyetlen információs forrásból tájékozódhassanak az összes biztosító, összes biztosítási termékéről. A szolgáltatáson keresztül az ügyfelek összehasonlíthatják az azonos célú biztosítási termékek kondícióit, kiválaszthatják a számukra legkedvezőbbet és azonnal szerződést is köthetnek.

Miért indítjuk el a projektet?
Fontos, hogy meg tudjuk határozni, hogy nekünk, akik beruházunk ebbe a fejlesztésbe mi a célunk. Fontos, hogy ne keverjük a különböző érintettek érdekeit! Mi, akik áldozunk arra, hogy időt és pénzt fordítunk erre a projektre mi a célunk? Például: a piaci verseny növekedésével a biztosítási szolgáltatások értékesítésén realizálható árrés folyamatosan csökken. Annak érdekében, hogy a cég nyereséget növelni tudjuk, jelentős ügyfélszám növekedést kell elérnünk, ami a jelenlegi személyes értékesítői bázissal nem lehetséges...

Kik számára készítjük?
Fontos, hogy be tudjuk azonosítani azt a kört, akik számára a szolgáltatás értéket fog teremteni. Például: azoknak, az átlagosnál magasabb jövedelmű, elfoglalt magánszemélyeknek nyújtunk szolgáltatást, akik számára fontos, hogy biztosítási ügyleteiket a nap 24 órájában intézni tudják. Itt nem magunkra kell gondolnunk, azt, hogy nekünk miért érdemes belevágni a projektbe, már meghatároztuk az előző kérdésben. A termék szolgáltatásainak célcsoportjának jó meghatározása számtalan termékjellemző kialakításában segít.

Mi fog megváltozni, ha végzünk?
Általában minden beruházás érdekében valamiről le kell mondanunk (például pénzről). Ezt azért vagyunk hajlandóak megtenni, mert a jelenlegi állapottal elégedetlenek vagyunk. Fontos, hogy meg tudjuk határozni, hogy mi a problémánk a jelenlegi helyzettel. Min akarunk változtatni? Például: a jelenlegi szolgáltatás szerkezete olyan, hogy a biztosítási ajánlatok a biztosítók szerint vannak rendezve, ezért az ügyfeleknek minden biztosító ajánlatait végig kell nézniük ahhoz, hogy megtalálják a számukra legkedvezőbbet. Sokszor olyan biztosítók ajánlatait is végig kell nézniük, akik az általuk keresett terméket nem is kínálják. Mivel a keresés időigényes és kényelmetlen, a látogatottsági statisztikák alapján a látogatók 90%-a 2 perc böngészés után elhagyja az oldalt. Az új szolgáltatás bevezetése után másfél percen belül releváns ajánlatokat fogunk tudni nyújtani az ügyfeleknek.

Mi szolgáltatja az értéket?
Meg kell tudnunk határozni azt, hogy a projekt milyen érzékelhető előnyöket fog biztosítani az érintettek számára. Ilyen érték lehet például az, hogy a felhasználók számára garantáltan másfél percen belül releváns ajánlatot tudunk biztosítani. Ha jól meghatároztuk a célcsoportot (pl. elfoglalt emberek), akkor könnyebb a legfontosabb termékjellemzőket beazonosítani.

Honnan tudjuk, hogy végeztünk?
A fejlesztési projektek egyik jellemzője, hogy mindíg lehetne jobb az elkészült termék. Valamikor azonban mégis élesbe kell állítani. Mikor legyen ez a pont? Meg lehet határozni akár több mérföldkövet is, a lényeg, hogy definiáljuk azokat a kritériumokat amiknek meg kell felelnie a terméknek amikor a felhasználók számára elérhetővé tesszük. Például: a termék első verzióját akkor állítjuk élesbe, amikor az életbiztosításokhoz kötődő összes terméket képes kezelni és sikeresen végrehajtottuk rajta az 1000 felhasználót szimuláló teljesítménytesztet, valamint az 50 fő bevonásával végrehajtott használhatósági tesztet.

A fentiek természetesen csak kitalált példák, de reményeim szerint segítenek megérteni, hogy miért tartom annyira fontosak a valós célok pontos meghatározását. Azon túlmenően, hogy segít a valóban fontos követelmények meghatározásában, ez a legjobb módja annak, hogy a projektet megvalósító team kreativitását kiaknázzuk. Ha mindenki számára világos, hogy miért kezdtük el a fejlesztést, a legváratlanabb forrásokból kaphatunk remek ötleteket. A vízió meghatározása és jó kommunikálása a legjobb módja annak is, hogy a ki nem mondott (tacit) elvárásokat "kitalálják" a rendszer megvalósítói.

2009. május 27., szerda

Valós projekt sikerkritériumok

A leggyakoribb kérdésem a projektmenedzserek és az ügyfeleink felé egy projekt elindításakor, hogy "mitől fogod úgy érezni, hogy sikeres volt a projekt?". Ez nyilván nagyon általános kérdés és csak arra jó, hogy elindítson egy párbeszédet a projekt valós céljainak pontosabb meghatározásához. /Ez a projekt vizionálás kezdete, ami egyébként önmagában megér egy bejegyzést./ Ez mindíg a szépreményű kezdeti időszak témája. Ahogy a projekt halad előre, és a realitás könyörtelenül megmutatja magát egyre inkább ez a kérdés kerül előtérbe: "mi a fontosabb?". Ambler W. Scott "véletlenül" erről a kérdésről is rendelkezik adatokkal, ami igencsak elgondolkodtató a módszertani kérdések szempontjából. A felmérés során közel 600 válaszadó véleményét vette figyelembe, olyanokét, akik különböző IT projektek kulcsszereplői. A kérdés központi témája ez volt: hogyan definiáljuk a sikert?
Ebben a bejegyzésben erősen a saját szemüvegemen keresztül foglalom össze az eredményt, ezért akit mélyebben érdekel a téma, annak érdemes az eredeti cikket elolvasnia.
Én kifejezetten az üzleti megrendelők által megfogalmazott prefernciákra fókuszáltam, elvégre az ő igényeik kielégítése miatt dolgozunk. A grafikonból látszik, hogy a válaszadók döntő többsége fontosabbnak tartja az aktuális üzleti célok elérését, mint a projektterv betartását. Számomra a következtetés elég egyértelmű: mindaz, amire a kezdeti követelményspecifikáció, és testvérei (funkcionális specifikáció, részletes projektterv stb.) koncentrálnak, valójában nem a legfontosabb kérdések. Ezzel persze nem azt állítom, hogy teljesen értelmetlenek ezek a prediktív projekttermékek, mindössze arra szeretném felhívni a figyelmet, hogy a helyükön kell őket kezelni. Ezek ugyanis végsősoron csak eszközök, amiket nagyon okos emberek arra találtak ki, hogy rendszerezett módon megjelenítsék a projekthez kapcsolódó fontos információkat. De nem szabad hagyni, hogy eltereljék a figyelmet a lényegről, ami a működő, valós célokat támogató, használható rendszer.

2009. május 26., kedd

Előzetes követelményelemzés

Az előzetes követelményelemzést gyakorlatilag az előrejelezhetőség iránti jogos igényünk miatt alkalmazzuk. Végsősoron logikus feltételezés, hogy ha tudom azt, hogy mire van szükségem, akkor el tudom képzelni, hogy azt hogyan valósítom majd meg. Ezt az elképzelést aztán konkrét tervekké tudom formálni, amikből előrejelezhetem a projekt várható pénzügyi és egyéb kereteit. Annak érdekében, hogy az előrejelzésem a lehető legpontosabb legyen, annyi információt próbálok begyűjteni a megvalósítandó rendszerről, amennyit csak lehet. Ez a gondolat motiválja az új szoftver kifejlesztése és bevezetése előtt álló szervezeteket arra, hogy a projektet megelőzően hónapokat, akár éveket töltsenek a követelmények részletes meghatározásával. Nem egy olyan projekttel találkoztam, ahol az előkészítési fázis elvitte a projektre rendelkezésre álló idő felét, vagy akár kétharmadát is. A probléma ott van, hogy ezzel alig jutottak közelebb az összehasonlítható ajánlatokhoz, vagy a pontosabb becsléshez. Az előrejelzhetőségről szóló előző bejegyzésemben ennek a hátteréről írtam.

Ha az előzetes követelményelemzés hasznát vizsgáljuk, az eredmény sajnos még ennél is kiábrándítóbb. Nemcsak, hogy nem jutunk sokkal közelebb a projekt kereteinek megbecsléséhez, de még abban sem lehetünk biztosak, hogy az elvárásainkat kellő alapossággal megismertük. A Standish Group által közölt "Chaos report" ebben a kérdésben is elgondolkodtató eredményre jutott. Azt vizsgálták, hogy az előzetes követelményelemzés alapján fejlesztett rendszerek funkcióit milyen arányban használják a valóságban. (Részletesebben Ambler W. Scott ír a témáról) A jelentés konklúziója elég nyilvánvaló:

  • Az elkészült funkciók közel 2/3-át soha, vagy nagyon ritkán használják
  • A gyakran, vagy állandóan használt funkciók az összes szolgáltatás 20%-át teszik ki

Ez az eredmény pénzügyi szemléletre fordítva azt jelenti, hogy az előzetes követelményspecifikáció alapján fejlesztett rendszerekre fordított költségek legalább fele teljesen kidobott pénz, azaz tiszta veszteség. Megítélésem szerint a veszteség még ennél is nagyobb, ugyanis a követelményspecifikációban rögzített, de nem megvalósított funkciók különböző tervekben történő részletes kidolgozásának költségei itt nem látszódnak.
Ez a pazarlás egyébként kódolva van a bemerevített (prediktív) szoftverfejlesztési módszertanok alkalmazása során. Mivel a szállító kötve van a szerződésben vállalt költség és időkeretekhez, ezért erős változáskezelési eljárásokat alkalmaz annak érdekében, hogy a követelményspecifikációban megfogalmazott funkciókon kívül semmi új ne kerülhessen a projekt szkópjába. Ezt a megrendelő nyilvánvalóan csak úgy tudja kezelni, ha a követelményspecifikációban minden elképzelhető igényt rögzít. Olyanokat is, amikre egyébként nincsi is szüksége. Ki tudja, még jól jöhet... A változáskezelési eljárások alkalmazásának van még egy kellemetlen hatása: a megrendelőt távol tartja attól, hogy a később felismert (esetleg fontos) igényeit beépíthesse a rendszerbe.

2009. május 25., hétfő

A tervezhetőség csapdája

A fix árú, részletes követelmény-specifikációval lefedett szoftverfejlesztési projektek többnyire kudarccal végződnek. Régóta foglalkoztat az a kérdés, hogy ez a kudarc eleve kódolva van abban a megközelítésben, amikkel a fejlesztéi projeketeket kezeljük, vagy egyszerűen csak ilyen gyakran követünk el hibákat a projektek megvalósítása során. Én azt gondolom, hogy az első állítás van közelebb a valósághoz. Ambler W. Scott írt egy kiváló cikket erről a témáról "Is Fixed-Price Software Development Unethical?" címmel. A bejegyzésben alapvetően az említett cikkben leírt gondolatmenetet követem, némileg átfogalmazva és részben átstrukturálva.

Fontos leszögezni, hogy semmi probléma nincsen a fix költségvetésű projektekkel. A költségvetési keret rögzítése üzletileg indokolt, racionális és minden szempontból elfogadható. A probléma ott kezdődik, amikor a termék jellemzőit, a fejlesztés árát és a határidőt egyszerre rögzítjük, azaz a projektet bemerevítjük. Ez ugyanis a projektet minden rugalmasságától és adaptivitásától megfosztja, a feleket bizalmatlan légkörbe taszítja és végső soron drasztikusan növeli a projekt kockázatát.

Miért kell a rögzíteni a projekt jellemzőit?

A megrendelő szempontjából a projekt-parmétereinek bemerevítésének több, önmagában elfogadható és magyarázható oka van. Ezek közül a legfontosabbak az alábbiak:
  • A projekt pénzügyi kockázatának csökkentése. A megrendelők gyakran gondolják, hogy ha a fejlesztő céget egy fix árú, fix követelményrendszerű szerződésbe kényszerítik, akkor a projekt pénzügyi kockázatát a fejlesztőre háríthatják.
  • Összehasonlíthatóság, és a legjobb ajánlat kiválasztása. A követelményspecifikációról azt gondolják, hogy megteremti az ajánlatok összehasonlíthatóságát, ezáltal lehetővé teszi, hogy a legelőnyösebb ajánlatot választhassák ki.
  • A beszállító kényszerítése a maximális teljesítményre. Azáltal, hogy az ajánlattevő fejlesztő cégektől megvalósítási terveket kér be, a megrendelőnek elvileg lehetősége van arra, hogy ezeknek a terveknek a betartására kényszerítse a vállalkozót. Ettől azt lehet várni, hogy a fejlesztő cég minden tőle telhetőt megtesz annak érdekében, hogy projektet a legjobb tudása szerint leszállítsa.
  • Az árak csökkentése. Azáltal, hogy "ugyanarra" a termékre több ajánlattevőt versenyeztet meg, árversenyt generálhat, melyben a lehető legalacsonyabb szállítási árat érheti el.
  • Költségvetés tervezés. A részletes, követelmény-specifikáció alapján készített árajánlatok lehetővé teszik, hogy a megrendelő éves költségtervet készítsen az IT projektekre vonatkozóan, mivel a projekttervekben jól láthatóak a fizetési mérföldkövek, illetve az azokhoz kapcsolódó fix kiadások.
Összességében tehát a rendszerfejlesztési projekteket megelőző követelmény rögzítési és tervezési szakasz célja a pénzügyi és funkcionális tervezhetőség megteremtése, a versenyhelyzet megteremtése a legjobb ajánlat kiválaszthatóságának érdekében, valamint a beszállító kényszerítése a maximális teljesítményre. A tradicionális projekt megközelítés alapján ennek a legjobb módja logikusan a követelmények rögzítése és a részletes tervek elkészíttetése és betartatása. Ezek mögött végsősoron minden esetben a bizonytalanságtól való félelem áll.

Néhány szomorú tény a tervezhetőségről...

A Standish Group rendszeresen közzéteszi "Chaos report" nevű jelentését, amiben a szoftverfejlesztési projektek eredményeit vizsgálja. Ezek alapján az derül ki, hogy a szoftverfejlesztési projektek mindössze 31%-a fejeződik be határidőre és költségkereten belül. További rossz hír, hogy a fejlesztési projektek átlagos költsége az eredetileg becsült 189%-a. (Még rosszabb hír, hogy a projektkeretek túllépésének szórása igen nagy, tehát azt sem mondhatjuk, hogy valamilyen együtthatóval fel lehet szorozni az eredeti becslést annak érdekében, hogy a valós értékhez közelebb jussunk.) Ez jó példája annak, hogy a prediktív megközelítés elfogadhatatlanul nagy hibaszázalékkal dolgozik. Mi lehet ennek az oka?
  • A formális becslési modellek (COCOMO I/II, Function Points stb.) alapja, hogy egy formális követelményspecifikáció alapján meghatározzuk a rendszer komplexitását, szkópját. Ezekből az információkból méretezési alapadatokat képzünk, melyekhez a korábbi tapasztalataink valamilyen ráfordítási mérőszámot rendelünk. Ezekeket a méretezési értékeket valamilyen mágikus képletbe helyezzük, ami megadja a projekt várható ráfordítási adatait. Mivel a különböző fejlesztő cégek eltérő tapasztalati alapokkal rendelkeznek, kicsi az esélye annak, hogy hasonló eredményre jutnak. (Nem beszélve arról, hogy a követelményspecifikációk értelmezése is meglehetősen különböző lesz.) A lényeg tehát az, hogy bármilyen mágikus formulát is alkalmazunk, a kiinduló értékek feltételezéseken és eltérő tapasztalatokon alapulnak. A képletek alkalmazása annyiban rontja a helyzetet, hogy abban az illúzióban ringat, hogy "tudományos" alapokon nyugszik a becslésünk.
  • Egy megdöbbentő tanulmány (Chris Kemerer: "An Empirical Validation of Software Cost Estimation Models" ) mutatott rá arra, hogy a fejlesztő csapat számára új üzleti domain esetén a "tudományos" becslési módszerek hibaszázaléka 85% és 772% (!!) között mozog, amelyek közül sok a 600% körüli tartományban van. (Az, hogy a projektek nagy része nem szenved ekkora költség-túllépést, sokszor a kezdeti követelmények projekt közbeni elhagyásával, vagy megváltoztatásával magyarázható.)
  • Ambler W. Scott számos további tanulmányra hivatkozik, melyek mind alátámasztják, hogy a "tudományos" becslési módszerek alapja továbbra is az egyszerű szakértői becslés, melynek pontosságát az alkalmazott képletek és módszerek nem befolyásolják.
  • Nem mindenki egyenlő. Barry Boehm /Software Cost Estimation with Cocomo II (Addison-Wesley 2000)/ szerint a legjobb és a leggyengébb fejlesztő közötti különbség a produktivitás terén 1-10 arányú. Ebből az következik, hogy ha nem tudjuk pontosan, hogy milyen fejlesztőkből áll a megvalósító csapat, akkor a megalapozott, tapasztalati becslési modellek sem vezethetnek közel megbízható eredményre sem.
A tervezhetetlenség következményeiről a következő bejegyzésben írok majd...

2009. február 5., csütörtök

Szkóp menedzsment

Mivel ma már meggyőződésem, hogy szoftverfejlesztési projektet vízesés modellel csak véletlenül lehet sikeresen megvalósítani, sokat gondolkodom azon, hogy az adaptív módszertanok alkalmazásának előnyei hogyan világíthatók meg a legjobban az üzleti döntéshozók előtt. Mitől sikeres a fejlesztési projekt az én fogalmaim szerint? Nagyjából ezeknek a feltételeknek a teljesülése esetén:
  • A rendszer az előre meghatározott időben használatba vehető (azaz valós üzleti célokat szolgál és használható)
  • A rendszer megrendelője úgy érzi, hogy nagyjából a kapott értéknek megfelelő árat fizette meg
  • A projekt megvalósítása a fejlesztő cég számára is tisztességes, (fair) haszonnal jár
  • A megrendelő és a beszállító a későbbiekben is szívesen dolgozik együtt
Elsősorban olyan projektekben gondolkodom, ahol a rendszer fejlesztője egy versenyeztetés során kiválasztott külső cég és nem belső erőforrás. Ilyen környezetben a projekt sikerének talán legizgalmasabb fokmérője az utolsó pont. Ha a partnerek legközelebb is egymást választják egy új fejlesztési projektben, akkor legalábbis azt elismerik, hogy mindketten mindent megtettek a siker érdekében és ennek elmaradása valami máson múlott. De mi ez a más? Sok projektvezető szkópnak szereti ezt nevezni. Hányszor hallottuk már ezeket a mondatokat: "a szkóp kézben tartása a projekt sikerének kulcsa" vagy "ezzel a problémával most nem foglalkozunk, mert nem tartalmazza a szkóp"? Gyakorlatilag nincs olyan projektstátusz-megbeszélés, ahol ne hallanám a szkóp kifejezést legalább 3-szor. És sokszor teljesen más jelentéssel. Néha a cél helyett alkalmazzák, néha a ráfordítás jelentését fedezem fel benne és sokszor valamilyen módon a funkcionalitáshoz van köze. Pedig ezek a fogalmak nem egy rendszerbe tartoznak. Ez a legnagyobb bajom a szkóppal.

Eredetileg az angol "scope" szó leginkább behatárolást, kiterjedést jelent. A szkóp kézben tartása tehát azt jelenti, hogy a projektnek szigorúan a megfogalmazott keretek között kell maradnia. De milyen keretek között? Az eredetileg megfogalmazott célokat kell tartani? Akkor miért nem hívjuk célnak? Az eredetileg megcélzott felhasználói kör igényeit kell kielégíteni? A projekt indításakor elképzelt szolgáltatásoktól nem szabad eltérni? És még sorolhatnám... Ezek közül egyedül a cél az, ami nagyjából jól ismert lehet a projekt elején, az összes többi bármikor változhat. Itt visszautalnék a döntéselméleti fejtegetésemre. Hiszem, hogy a szoftverfejlesztés a rosszul struktúrált helyzetek kategóriájába tartozik, tehát a projekt elején nem világosak az elvárásaink, azokat a megoldás keresése során folyamatosan alakítjuk ki. A megoldást valamilyen olyan helyzetre keressük, amivel elégedetlenek vagyunk. (Lassú ügyintézési folyamat, túl nagy a raktárkészlet stb.) A cél tehát ennek az elégedetlen állapotnak megszűntetése. Az elején van egy elképzelésünk arról, hogy az adott problémát milyen okozó tényezőkre vezethetjük vissza, és ezeket hogyan fogjuk megoldani. Ezek az elképzelések aztán erősen meghatározzák, hogy hol határoljuk be a projektet, azaz mi tartozik szkópba. Ehhez aztán foggal körömmel ragaszkodnak a projektvezetők.

Az eredmény az, hogy sokszor az eredeteli problméma megoldásához olyan kérdésekkel kellene foglalkozni, amik az előzőleg a nagy gondossággal (és jó sok munkával) meghatározott projekthatárokba nem férnek bele. Ez persze senkinek nem jó. Nem jó a megrendelőnek, mert nem arra költi a pénzét, amire kellene. Nem jó a fejlesztőnek sem, mert azon kívül, hogy sikertelen projekten dolgozik semmi nem garantálja számára, hogy a meghatározott projekt szkóp keretein belül nem lehet határtalan erőforrásigényű feladatatot generálni. A két partner viszonya csak a résztvevők empátiáján, szakértelmén és üzleti erkölcsén múlik azzal a feltétellel, hogy mindketten belátják: igen, sajnos az elején rosszul határoztuk meg a szkópot, a sikertelenségért egyikünk sem okolható...

A megoldás erre a problémára az lehet, ha ragaszkodunk a projekt eredeti keletkeztetési forrásához: a helyzethez, amellyel elégedetlenek vagyunk. Eldöntjük, hogy mennyi pénzt ér meg nekünk ennek a problémának a megoldása, megvizsgáljuk, hogy mi az az időtáv amin belül ezt meg kell oldani és ezeket rögzítjük. A többit már egy olyan csapatra kell bízni akiről elhisszük, hogy képest a problémára megoldást találni és azt meg is valósítani. A szkóp meghatározására meg nem érdemes időt szánni, annyival is később kezdünk el az érdemi kérdésekkel foglalkozni. Kérdezzük inkább ezt: ha a felvetett észrevétel mennyiben szolgálja a problémát okozó helyzet megoldását? Mert csak ez számít...