Onnistuneen ohjelmistoprojektin elementit

20.8.2018 12:00

Faktat tiskiin: maailmanlaajuisesti lähes joka kolmas ohjelmistoprojekti epäonnistuu. The Standish Groupin vuosittain tekemän tutkimuksen mukaan noin 16 % ohjelmistoprojekteista onnistuu siten, että lopputulos on suunnitellun kaltainen, ja projekti pysyy sekä aikataulussa että budjetissa. Hieman reilu 52 % projekteista myöhästyy aikataulusta, ylittää budjetin tai lopputulos, joka kuitenkin toimii, ei vastaa alkuperäistä suunnitelmaa. Loput, eli noin 32 % ohjelmistoprojekteista epäonnistuu siten, että ne keskeytetään jossakin kohtaa projektin elinkaarta.


Tutkimuksessa on mukana laaja otanta suuria ohjelmistoalan toimijoita, mutta projektien onnistumiseen vaikuttaa samat lainalaisuudet myös pienemmissä ohjelmistoyrityksissä. Yleisimpiä syitä ohjelmistoprojektin epäonnistumiselle ovat seuraavat:

  • Projektin visio ei ole selkeä
  • Muuttuvat tai heikosti määritellyt vaatimukset
  • Riittämätön budjetti ja resursointi
  • Ongelmat viestinnässä ja projektin läpinäkyvyydessä
  • Puutteellinen testaamiseen käytetty aika
  • Kehittäjien vaihtuminen tai avaintekijöiden poistuminen
  • Epärealistiset toimitusaikaodotukset
  • Aikarajoitukset ja liian aikaiset julkaisut
  • Ei riittävän ammattimaiset kehitystyökalut ja kehitysalustat

Edellä mainitut asiat ovat usein haasteina läsnä myös meidän toteuttamissa ohjelmistoprojekteissa, vaikka en yhtään täysin epäonnistunutta projektia muistakaan. Miten haasteiden vaikutuksia voidaan minimoida? Tässä blogissa pohdin neljää ensimmäistä, yleisimmin projektin epäonnistumisen aiheuttavaa aihetta.

Mikä on toteutettavan ohjelmiston visio?

Alussa oli suo kuokka ja Jussi – ohjelmistoprojekteissa olisi syytä olla selkeä visio, eli selvyys siitä mitä ollaan tekemässä, kenelle ja miksi? Mitä asioita toteutettava ohjelmisto tehostaa, tai mitä ongelmia se ratkaisee? Mikä on ohjelmiston arvo kilpailijoihin nähden? Miten ohjelmiston toimivuutta ja tuottavuutta mitataan? Visio tulee olla selvillä tottakai asiakkaalla itsellään, mutta myös koko toteutustiimillä. Ilman selkeää visiota toteutuksessa keskitytään helposti vain ohjelmiston yksittäisten toimintojen toteuttamiseen, ilman linkitystä loppukäyttäjään ja erilaisiin käyttötapauksiin. Selkeä visio, kokonaisuuden ja tulevaisuuden hahmottaminen tehostaa myös käytännön työtä pidemmässä mittakaavassa – ohjelmistokomponenteista voidaan tehdä esimerkiksi suoraan yhteensopivia tulevaisuuden kehitystoimien kanssa. Näin jatkossa säästyy sekä aikaa että rahaa.

Vaatimusmäärittely – projektin kivijalka

Ohjelmistojen toteuttamisessa on tavallista, että alkuperäisiä määrittelyjä muokataan projektin aikana. Ketterässä ohjelmistokehitysmallissa se on jopa aivan normaali toimintatapa. Riski siihen, että projekti lähtee niin sanotusti lapasesta, on olemassa, jos vaatimusmäärittely on alunperin riittämätön tai se on tehty liian yleisellä tasolla. Täydellisen vaatimusmäärittelyn tekeminen ennen projektia on kuitenkin työlästä, eikä välttämättä edes järkevää. Silti vähintään päälinjat toiminnallisista vaatimuksista (kuvaus ohjelmiston ominaisuuksista ja toiminnoista) sekä laadullisista vaatimuksista (kuvaus siitä miten ohjelman tulee toimia) tulisi olla selvät. Määrittelyvaiheessa käyttökelpoisia työkaluja ovat esimerkiksi

  • määrittelytyöpajat yhdessä asiakkaan ja ohjelmiston loppukäyttäjien kanssa
  • loppukäyttäjien haastattelu tai käyttäjätutkimusten tekeminen
  • käyttöliittymäprototyypit, eli ns. mockupit
  • erilaisten käyttötapausten kirjaaminen
  • vaatimusten tarkastelu useamman hengen voimin (kehittäjät, suunnittelijat, käyttäjät)


Budjetti antaa raamit toteutukselle

Ohjelmiston toiminnallisten ja laadullisten määrittelyiden perusteella voidaan laskea arvio projektiin kuluvasta toteutusajasta, joka puolestaan voidaan muuntaa projektin kustannuksiksi. Yksi osa vaatimusmäärittelyä onkin huomioida myös resurssivaatimukset, eli se kuinka paljon projektiin on ylipäätään mahdollista käyttää rahaa ja aikaa. Käytettävissä oleva budjetti olisi hyvä olla tiedossa heti alusta alkaen, sillä usein se vaikuttaa toteutettaviin toiminnallisuuksiin, toteutustapoihin ja aikataulutukseen. On punnittava, mitkä ovat kriittisen tärkeitä vaatimuksia ja mitkä voidaan jättää vaikka kokonaan pois. Kaikkia ohjelmiston toiminnallisuuksia ei välttämättä ole pakko toteuttaa heti, ja kokonaisuuden voi jakaa usein pidemmälle aikajänteelle. Tällöin myös kustannukset jakaantuvat tasaisemmin pidemmälle ajalle.

Viestinnällä vältetään väärinkäsitykset

Avoin viestintä suunnittelussa, kehityksessä ja tuotantoon viennissä on onnistuneessa ohjelmistoprojektissa ensiarvoisen tärkeää. Kommunikaatiokatkokset ja viestinnässä tapahtuvat väärinkäsitykset ovat yksi varmimmista tavoista joilla projektin saa epäonnistumaan. Mitä suuremmasta projektista on kyse, sitä enemmän siinä on mukana eri rooleissa toimivia henkilöitä. On tärkeää, että projektitiimi kootaan oikeanlaisista tekijöistä ja sovitaan kunkin vastuualueet. Olennaista on myös sopia projektin viestintäkeinot ja -tavat; mitä viestitään, missä vaiheessa ja kuka viestii. Viestinnän kulmakivinä voivat toimia vaikkapa riittävän usein kehitystiimin kesken pidettävät kevyet ja nopeat statuspalaverit,  pidempien kehitysjaksojen jälkeen pidettävät sprinttikatselmukset ja laajemman kokonaisuuden välitarkastelut yhdessä asiakkaan kanssa. Sekä asiakkaan että kehittäjätiimin on työskenneltävä läheisesti, jotta kaikki ajatukset, ideat ja tieto vaatimuksista siirtyvät selkeästi kehittäjille. Oletukset ja asiakkaan roolin väheksyminen projektissa johtavat yleensä siihen, että lopputulos eroaa siitä mitä asiakkaalla oli alunperin mielessä.

Onnistunut ohjelmistoprojekti on paljon muutakin kuin vain läjä toimivaa koodia. Selkeä näkemys lopputuloksesta, huolelliset alkutyöt, riittävät määritykset ja projektin aikainen viestintä auttavat pitämään kokonaisuuden oikeilla raiteilla. Projektin onnistumiseen  vaikuttaa edellä mainittujen lisäksi todella moni muukin asia, kuten

  • puutteellinen testaamiseen käytetty aika
  • kehittäjien vaihtuminen tai avaintekijöiden poistuminen kesken projektin
  • epärealistiset toimitusaikaodotukset
  • ohjelmiston julkaisut liian aikaisessa vaiheessa
  • riittämättömät kehitystyökalut ja osaamisen puute

Onnistuneet ohjelmistoprojektit asettavatkin usein kovat vaatimukset ammattimaiselle projektinhallinnalle.

Jätä yhteydenottopyyntö