perjantai 24. elokuuta 2012

Onko buginen järjestelmä IT-toimittajalle tosiaan rahasampo?

Pääsin eilen juttelemaan puhelimessa Tietoviikon toimittajan kanssa, joka varsin ilahduttavasti poimikin kommenttejani artikkeliinsa:
http://www.tietoviikko.fi/cio/buginen+jarjestelma+on+ittoimittajalle+rahasampo/a831331

Suoranaisista asiavirheistä en suinkaan valita, mutta muutama asia keskustelussamme oli jäänyt vähän erilaiseen lopputulemaan:
1. En suosittelisi "kolmatta osapuolta" tarkoittaen testaukseen erikoistunut firma
2. Suosittelisin sopimusvaiheessa nk. relational contract -mallia, jossa muodostetaan yhteinen rahasumma toimittajan bonuksesta, muutospyyntö ja virherahasta, ei vain virheistä

Halusin kuitenkin hieman pidemmin kirjoittaa kokemuksistani IT-projektien ihmeellisessä maailmassa.

Nykyinen työni on nk. tuotekehitystä. Se tarkoittaa, että testaajana olen sen organisaation palveluksessa, josta löytyy suora asiakas sekä toimittaja samoilta palkkalistoilta. Toiselle testaamistani järjestelmistä on ulkoisia loppukäyttäjiä, joiden näkökulmaa ja sielunelämää sovelluksen käytössä koitan ymmärtää. Suurien käyttäjämäärien myötä lokeistakin näkee, että massa tosiaan tekee kaiken mitä suinkin vain sovelluksella voi tehdä, ei kulje sitä meidän suunnittelemaa polkua eikä meidän suunnittelemaan tahtiin. Toinen testaamistani järjestelmistä on sisäiseen käyttöön, jolloin samalta palkkalistalta löytyvät vielä kaikki käyttäjätkin. Palaute käytävillä on raakaa ja välitöntä, ja kolleegaa halutaan auttaa erityisen vahvasti kun jokaisella käyttäjällä on kasvot.

Aloitin nykyisessä työssäni vasta huhtikuun alusta. Ensin mainitsemani järjestelmä on ollut tuotannossa jo ennen kuin minä työni tiimieni ensimmäisenä ja ainoana testaajana aloitin. Olisi minun silmilläni loukkaavaa väittää, ettei sovellusta ole ennen testattu. Kuitenkin tulokset tekemästäni testauksesta puhuvat täydennyksistä, näkökulmista joita ei testaukseen ole ajallisesti mahtunut ennen lisäpanostusta, tai jota ei ole osattu niillä voimavaroilla tehdä joita tiimin käytössä ennen minun mukaantuloani oli.

Arkipäiviini kuuluu ongelmien löytämistä - bugeja, niinkuin ammattikielellä sanotaan. Bugi on mitä tahansa mikä käyttäjää ärsyttää, haittaa, estää tai hidastaa. Bugit voivat olla puuttuvia keskeisiä toiminnallisuuksia. Ne voivat olla koodivirheitä. Ne voivat olla virheitä siinä miten meidän koodi ja muilta hankkimamme koodi yrittävät ratkoa yhdessä käyttötilannetta. Ne voivat olla virheitä siinä miten käyttäjä ohjelmaa tulkitsee käyttävänsä, missä järjestyksessä tai kuinka nopeasti. Olemme ihastuttavan yksimielisiä tiimini toteuttajien ja projektipäällikön kanssa siitä että olisi ajan tuhlausta jäädä pohtimaan koska bugi on syntynyt (onko se jo nyt asiakkaiden riesana tuotannossa), onko bugi virhe vai muutospyyntö jos samalla rajallisella ajalla sen korjaamme, tai onko kukaan osannut juuri oikeaan aikaan oppia ja tajuta että tämäkin asia oikeasti haittaa käyttäjiä merkittävästi. Tosiasia kuitenkin on, että jos emme saa ongelmasta käsitystä  jonka pohjalta myös toteuttaja ihan käytännön tasolla ymmärtää mikä ei toimi ja millä tapaa, korjaus vähintään menee jollain tapaa metsään. Ja testaajana tuotan lisäarvoa tiimissäni auttaen kehittäjäkolleegoitani löytämään virheitä ajoissa, ennen kuin sekin asiakassekmentti ilmaantuu jolle tämä asia on maailman pysäyttävä, ennen kuin meidän uutta asiaa tarvitsee ensi kertaa käyttäjille näyttää tai ennen kuin löytyy se asiakas, jolla tämä ongelma ylittää ärsyyntymiskynnyksen tuotteen laadun kanssa.

Elämä tuotekehityksessä ei ole helppoa, kun meillä kaikilla on yhtälailla haasteena ajan rajallisuus ja toiveiden monimuotoisuus, ja yritys ymmärtää sitä käyttäjien massaa ja monipuolisuutta sekä usein arvattuja tarpeita. Mutta verraten siihen mitä tein aiemmin, elämä on suorastaan ruusuilla tanssimista.

Olin välissä nelisen vuoden jakson koittamassa ymmärtää asiakas-toimittaja -projekteja ja niihin liittyvää testausta. Tein keikkaa toimittajaorganisaatioiden projekteissa, kunnes siirryin päivätöihin asiakasorganisaatioon tukemaan hyväksymistestausta sekä toimittajilta tilattavan testauksen määrittelyä. Näissä projekteissa on kummallisia ilmiöitä, joista todella monia tunnistan varsin kärjistetysti kirjoitetussa artikkelissa http://ohjelmistotestaus.fi/2012/08/tarinoita-it-hankkeiden-ihmemaasta/.
  • Paljon aikaa ja energiaa menee 'hukkaan' kun  asiakas- ja toimittajaorganisaatio kilpaa todistelevat että ehdottomasti korjattava ongelma on virhe eikä muutospyyntö. Virheet sopimusteknisesti kuuluvat usein toimittajan vastuulle, kun taas muutospyynnöt asiakas maksaa erillisestä rahapussista. Tuntuu varsin uskomattomalta, että voidaan rakentaa tilauksesta eläkkeen laskentajärjestelmä, joka ei osaa laskea eläkettä, mutta toimii "määrittelyjensä mukaan". Toimivuudesta tarkoitukseensa maksetaan erikseen, koska vastuu asiantuntijuudesta on sovittu asiakasorganisaatiolle eikä siitä ole siis toimittajalle maksettukaan. Myös riskin otto nostaa projektin hintalappua. 
  • Asiakkaan testausvaihe, "hyväksymistestaus", on usein ensimmäinen tuloksellinen testaus ja tapahtuu hyväksymisnäkökulman vuoksi jo alkuperäisessä viivästymisten vuoksi tiukennetusta aikataulusta irrallaankin liian lyhyessä aikavälissä liian pitkän heikkolaatuisen palautteen jälkeen. Hyväksymistestauksen pitäisi olla testaus-, ei korjausvaihe. Jotta tämä olisi mahdollista, on oltava samanlaatuista ja sisältöistä testausta, tai laajempaakin, aikataulussa ennen tätä. Jos aiempien testausvaiheiden sisältöä vielä rytmittää edellisessä pointissani mainitsemani määrittelyjen ylipalvonta, huomaamme lopuksi ennen lakimuutoksen pakottamaa tuotantoonsiirtopäivämäärää, ettei koko järjestelmä tee mitä sen tarvitsee, vaikka tekeekin mitä on määritelty. Ohjelmistokehityksessä monet asiat konkretisoituvat vasta kun järjestelmää pääsee käyttämään - testaamaan. 
  • Vaikka virheet kuuluvat ehkä sopimuksen mukaan perushintaan, sopimukset harvoin huomioivat että testaaminen tavalla jolla virheet raportoidaan selkeästi ja korjaukset mahdollistavasti, ei välttämättä kuulukaan. Testauksen vaatiminen / tilaaminen on taitolaji. On täysi myytti, että testaamaton tarkoittaisi toimimatonta. On todistettavasti järjestelmiä, joilla ei ole erillisiä testaajia, joiden laatu on näitä "ammattitestaajien" testaamia parempi - yleensä taustalta löytyy ammattiylpeyttä ja yrittäjähenkeä. Testaus - kenen tahansa aikaa ja osaamista käyttävän toimesta - kuitenkin opettaa yllättävistä reunaehdoista, joista kaikkia ei parhaimpiinkaan suunnitelmiin saada mukaan. Ei siis riitä, että vaaditaan toimittajaa testaamaan. Pitää pystyä kertomaan ja sopimaan mitä ja miten, ja missä laajuudessa ja laadussa. Testausta se on huonolaatuinenkin testaus, ja jotkut kutsuvat sitäkin testaukseksi että painelee samoja nappeja käsin samassa järjestyksessä kymmeniä kertoja ilmaan mitään perustetta epäillä että juuri tätä asiaa nyt tarvitsisi tarkkailla. Samalla ajankäytöllä voisi tehdä edes pieniä muutoksia tekemiseensä, ja sitä kautta merkittävästi lisätä tehdyn testauksen laatua. Lisäksi todella monet asiakkaat tietoisesti ja tarkoituksella tilaavat projektinsa ilman testausta laskien hintalappua tyypillisesti 20-30 %. Tällöin sovitaan että asiakas hoitaa testauksen ja "hyväksymistestaukseen" kuuluukin yllättäen mahdollisesti täysin toimimattomalla ja aiemmin tarkastelemattomalla ohjelmistokokonaisuudella testaaminen. 
  • Hintakilpailu toimittajien välillä tuo erikoisia sivuilmiöitä. Tarjouksista on todella vaikeaa saada vertailukelpoiset sisältyvältä laajuudeltaan, ja toimittajat omien malliensa nimissä tarjoavat selkeästi alihintaan projekteja, joissa varsinainen lypsylehmä on virheiden ja muutosten toteutus ensitoimituksen jälkeen. Ensitoimituksen kokoa projektin kuluessa aktiivisesti minimoidaan tiedostaen, että seuraavan täydentävän toimituksen kanssa on haastavaa siirtää kehitystä seuraavalle, ja vaikka tuntihintaa ei ehkä voi ylös hilatakaan (moni asiakas pyytää tarjouksessaan alkuun jo sitovat ylläpitohinnatkin), mikään ei aseta rajoja sille kuinka monta tuntia asian tekemiseen toimittajaorganisaatiossa menee. Ja tuntimäärää saadaan helposti nostettua, kun on erikseen henkilö joka juttelee asiakkaan kanssa (vaatimukset), joka keksii miten asiakkaan tarve ratkaistaan (määrittelyt), joka miettii tekniset rakenteet ratkaisuille (arkkitehtuuri), joka mietii mitä osia koodista viime kädessä muutetaan (tekninen suunnittelu), joka toteuttaa muutokset (koodaaja), joka testaa teknisesti (integraatiotestaaja), joka testaa osana järjestelmää (järjestelmätestaaja) ja joka juttelee aikatauluista asiakkaan kanssa (projektipäällikkö). Ja jos tehdään isompia asioita, joka ryhmällähän pitää tietysti olla vielä erillinen vetäjä. Välillä tulee mielikuva että ei voi ajatellakaan, että yksi kaveri tekisi näitä kaikkia, sehän laskisi laskutettujen tuntien määrää.
  • Pelon ja epäluottamuksen ilmapiiri maksaa asiakkaalle moninkertaisesti. Ei suinkaan kelpaa, että toimittajaorganisaatio valvoisi itse omaa tekemistään ja esimerkiksi vastaisi siitä, että toimitukseen sisältyy tulevaa tukeva testiautomaatio (sen ohittamisella ensiprojektissa saadaan muuten upea määrä ylläpitotunteja laskutettavaksi!) vaan kyllä tilaajan pitää ehdottomasti laittaa omat edustajansa asialle vahtimaan. Ja testausfirmat vielä propagandamaisesti mielellään nostavat ammattimaisen edunvalvojan näkökulman esiin. Tehdessäni töitä testausfirmalle testauskonsulttina silloinen myyntiorganisaatio myi edelliselle työnantajalleni useita kavereita täysipäiväisesti tekemään testiautomaatiota hyväksymistestauksen tueksi. Testiautomaatio ei koskaan tuottanut muuta kuin lämpimän tunteen, sen ylläpitäminen maksoi maltaita sillä se hajosi jatkuvasti. Se ei myöskään elänyt kovin kauaa. Ja tässä asiakasorganisaatiossa työtä tehneenä tiedän melkoisen varmasti, että suurin tekijä epäonnistumiselle on etäisyys. Samasta asiasta samalla rahalla samalle toimittajalle kuin joka teki hyväksyttävää järjestelmää olisi saanut merkittävästi enemmän onnistumisen eväitä. En todellakaan ymmärrä että miksi pitäisi maksaa kahdesta "samansisältöisestä" testauskerroksesta vain epäluottamuksen nimissä. Luottamusta voi rakentaa ja sitä tukevia rakenteita tuoda sopimuksiin. Viime kädessä kahdenkin organisaation välisissä projekteissa ihmiset ja yhteistyö ovat ne avainsanat. Organisaatioiden etäisyys vain vaatii sopimusta tueksi tiukkoihin tilanteisiin, joissa liiketoimintojen reunaehdot eivät ehkä olekaan synkassa.
  • Ulkoiset testausorganisaatiot usein pahentavat tilannetta. Jos kahdella organisaatiolla on jo erilaisia tavoitteita, kolmas testaukseen keskittyvä organisaatio ei välttämättä mitenkään helpota tilannetta. Kun testaajalle maksetaan testaustuloksista ja järjestelmätoimittaja menettää rahaa korjatessaan ilman lisämaksua ja molemmat toimittajat koittavat optimoida itselleen mahdollisimman suuren ja merkittävän osuuden kokonaisuudesta, saadaan aikaan lähinnä kaaosta ja taistelua.

Pitkän vuodatuksen jälkeen haluan vielä kertoa, että olen kokenut myös jotain hyvää. Edellisen työnantajani palveluksessa yhdessä projektissa (ehdin tehdä 2,5 vuoteen viittä projektia tuotantoon saakka) teimme erittäin ammattimaisen 30 päivän hyväksymistestauksen ja teimme kaikkemme löytääksemme virheitä ja muutospyyntöjä. Emme onnistuneet. Järjestelmä meni tuotantoon edellä aikataulustaan ja alle sovitun budjettinsa. Avain onnistumiseen, väittäisin, oli erinomainen yhteistyö asiakkaan eri roolien sekä toimittajan eri roolien välillä. Testauksen yhteisissä viikkopalavereissa käytettiin 30 minuuttia viikossa erittäin avoimeen vuorovaikutukseen ja pieleen menevien asioiden veikkailuun, joilla asiakkaan tukemana toimittajan toteuttajat tekivät erinomaisen järjestelmämuutoksen, toimittajan testaajat testasivat ja korjauttivat rajoitteet suhteessa tarpeeseen ja viestivät erinomaisesti toteuttajien kanssa teknisellä tasolla. Taustalla onnistumisessa oli mielestäni puitteet: projekti myytiin meille hinnalla, joka ei ollut toimittajalle kuristuspanta. Rinnakkaisprojekti, joka oli laajuudeltaan karkeasti kaksinkertainen myytiin 2/3 tämän onnistuneen projektin hinnasta. Tarinasta lienee selvää, että tämä alihinnoiteltu projekti oli molemmin puolin paljon työllistävämpi ja työilmapiiri ei koskaan saavuttanut samaa hyvää tasoa. Testaustaidoissa ja neuvottelutaidoissa oli toimittajaorganisaation nimetyissä henkilöissä myös suuri ero.

Buginen järjestelmä voi olla toimittajalle rahasampo, ja minun silmiini monet suurien toimittajien menetelmistöistä optimoivat tätä. Mutta vikaa on myös asiakkaissa. Mitä jos asiakkaat tyytyisivät time-and-material -sopimukseen, siihen että riskiä ei lopulta voikaan siirtää ilman merkittävää omaa lisäkustannusta toimittajalle ja laittaisivat tarkistuspisteitä kalenteriin useammin. Ja se ei silti estä sopimasta tavoitehintaa ja palkkio/riskisummaa, jolla projektin joustot hoidetaan. Niin, kuulostaa uhkaavasti suositukselta ketterien menetelmien suuntaan - etenkin yhdistettynä tuohon roolipohjaisen siiloutumisen naurettavuuteen jossa kahden töihin tarvitaan kymmenen spesialistia välttelemään vastuita.

8 kommenttia:

  1. Erinomainen kirjoitus, ja osuu tosi paljon yksiin monien omienkin kokemusten kanssa.

    "En todellakaan ymmärrä että miksi pitäisi maksaa kahdesta "samansisältöisestä" testauskerroksesta vain epäluottamuksen nimissä".
    Spot on. Tuli mieleen vähän aikaa sitten käymäni keskustelu, jossa puhuin asiakkaan edustajille siitä, ettei meidän (hyväksymistestaajien) kannattaisi testata kaikkia samoja asioita, samalla tavalla, ja samassa ympäristössä, kun mitä toimittaja oli jo tehnyt. Vastaus oli epäuskoinen Voiko heidän tuloksiin luottaa, joka taas korosti sitä miten syvällä ongelmat hommassa oikeasti olivat.

    VastaaPoista
  2. Anssi: itse onnistuin samaisessa keskustelussa saamaan porukan testaamaan samoja asioita osana liiketoimintaprosessia. Jännä miten usein on niin että tarkastelemalla ne yksityiskohdat ketjussa näkeekin ihan eri asioita.

    VastaaPoista
  3. Minä puolestani törmäsin tilanteeseen, jossa toimittaja piti onnistuneen järjestelmätoimituksen edellytyksenä asiakkaan hyväksymistestauksen testisuunnitelman ja testitapausten toimittamista toimittajalle. Mietityttää, olisivatko he testanneet vain näillä asiakkaan testitapauksilla ja jättäneet omat testitapauksensa ajamatta. Olisiko sekä toimittajalla että asiakkaalla testattu samoja asioita ja ainoa ero olisi ollut testiympäristöissä? Toisaalta kokemuksesta tiesin, että monet virheet selittyivät testiympäristöjen erilaisuudella. Lopputulos kuitenkin oli, että asiakkaana emme toimittaneet omia testitapauksiamme - ainoastaan testisuunnitelman ja kuten niin usein aiemminkin, jotain korjattavaa aina löytyy. Oliko hyvä päätös - en tiedä. Vaikea jälkikäteen arvioida, olisiko mikään muuttunut. Ehkä olisi pitänyt kokeilla - nyt se on myöhäistä.

    VastaaPoista
  4. Soile: tuttu tilanne tuokin. Sain lukiessani kommenttiasi esiin oman muistikuvani siitä, kun vakuuttelin ohjausryhmälle että on erittäin huono idea toteuttaa toimittajan vaatimus siitä että kirjoitamme testitapaukset ja suoritamme _vain_ ne mitkä olemme kirjanneet. Perustelu oli että muuten löydämme enemmän ongelmia eikä projekti lopu aikataulussaan.

    Olen itse yleensä toimittanut testitapauksemme hyväksymistestauksesta, mutta korostanut että me teemme tutkivaa testausta - ne ovat runko, eivät suoraan se mitä teemme. Aina parempi jos toimittaja saisi edes ne jutut toimimaan...

    VastaaPoista
  5. Itse olen aina pitänyt kaikkien löytyneiden bugien kirjausta (johonkin yhteiseen, puolijulkiseen, paikkaan) tärkeimpänä asiana niiden priorisoinnin lisäksi. Miksi kukaan vaatiikaan kaikkien löydösten korjausta..

    VastaaPoista
  6. Toni: Itse suosin nykyisin mallia, jossa bugeja ei kirjata vaan ne korjataan (fix and forget). Tähän tosin kahden organisaation välisissä projekteissa lienee enemmän matkaa kuin minun nykyisessä arjessani. En kai sanonut että kaikki löydökset tulisi korjata, vaan että ne tulisi käsitellä. Ja aivan kuin tuotekehityksessä, esimerkkien kautta kyllä varmasti löytyy se taso jolle on päästävä ja millaisen kanssa voidaan elää.

    VastaaPoista
  7. Wow. Tässä olisi aihetta ihan kirjaksi asti! ;) Olen iloinen, että sait nämä asiat tekstiksi, niin monesti kun olet asiasta puhunut. Monta kertaa käy "poliitikot", eli oma lehmä ojassa keskustellaan ja poimitaan sieltä sitten ne parhaiten omaan agendaan sopivat yksityiskohdat.

    Näkökulmallisesti kirjoitus on aivan omaa luokkaansa, sillä harvalla testausalan ammattilaisella on niin laaja kirjo työkokemusta kun sulla. Omista kokemuksista ja projekteista ei löydy vastaavaa oivaltavaa näkökulmaa kovin helposti. Hienoa kuitenkin, että jaat nämä meidän muiden kanssa.

    T: Peksi, joka aikoo parantaa tapansa bloggaamisen suhteen (jos ei kuitenkaan oikeinkirjoituksen suhteen)

    VastaaPoista
  8. Pekka: on minulla tästä asiasta paljon enemmänkin tekstinä, tosin suuri osa tukitekstinä kalvoissa, joiden ympärillä asiasta on helpompi puhua.

    Jäin vielä miettimään että tän ongelmakentän summaa kivasti jonkun heittämä lausahdus: jos maksat ladasta, älä odota ferraria. Jos laadusta tinkii, mikä tahansa vaatimus on täytettävissä. Kysymys onkin viime kädessä, että kukapa näistä asiakkaista olisi tiedostanut maksavansa Ladasta niin suuria summia...

    VastaaPoista

Lukijat