Parempaa ohjelmistoa 5 kertaa tehokkaammin!

2 huhtikuun, 2009

Ohjelmistoteollisuuden tuottavuus antaa aihetta harmaille hiuksille. Suuri osa kehitysprojekteista valuu santaan. Kuitenkin yhä enenevässä määrin tuotteet ja palvelut sisältävät ohjelmistoa.  Olemme sidottuja ohjelmiston kehitykseen ja sen ongelmiin. Yrittäjää kiinnostaa kuitenkin enemmän asiakkaan palveleminen kuin koodibugien viilaaminen. Miten tuotetaan laadukasta ohjelmistoa tehokkaasti?

Domain spesifinen mallintaminen

Sanahirviön takaa löytyy koodaukseen hurahtamattomalle ihana autuus. Saadaan sitä mitä tarvitaan ja helposti. Periaatteessa domain spesifinen mallinnus perutuu samaan kuin lego-palikat – massaräätälöintiin. Tehdään erivärisiä palikoita, jotka sopivat hyvin toisiinsa. Massaräätälöintiä on käytetty tuotteiden valmistamisessa jo vuosikymmenten ajan. Ohjelmistoteollisuudessa se on myös mahdollista ja huippuorganisaatiot ovat hyödyntäneet sitä jo pitkään. Kuitenkin suuri osa yrityksistä tekee softaa perinteiseen tapaan, aina alusta ja uudestaan, vanhaa koodia hyödyntämättä.

Domain Spesifinen

Suomennettuna terminä on käytetty mm. ”sovellusalue -kohtainen” . Käytännössä domain spesifinen tarkoittaa rajattua toimintaympäristöä. Rajataan ympäristö kattamaan oleelliset asiat. Domain voidaan rajata kattamaan esimerkiksi pienet legopalikat sekä poliisiympäristö. Suunnitellaan lego-palikat, joista voidaan rakentaa poliisiauto, poliisilaitos, poliisivene jne. Kaikissa tuotteissa on jotain yhteistä.  Tehdään sinisiä palikoita, valkoinen palikka jossa lukee poliisi, legomiehelle poliisin kypärä ja puku, sekä tietenkin yksi rosvo.  Näitä palikoita yhdistelemällä syntyy runko eri poliisi -tuotteille.

Samalla tavalla ohjelmiston suunnittelu voidaan rajata kattamaan tietty tuotealusta (esim. matkapuhelin), sovellusympäristö (palveluyritykset), käytettävä ohjelmointikieli (Symbian) jne. Yhditetään eri tekijöistä sopivia palikoita.

Mallintaminen

Mallintamisen avulla ohjelmistosta esitetään vain tietyt piirteet. Ohjelmiston suunnittelua yksinkertaistetaan. Siitää johtuen lopullisen ohjelmitotuotteen suunnittelua voi tehdä jopa henkilöt, jotka eivät ymmärrä ohjelmoinnista mitään. Ohjelmisto voidaan suunnitella konsultin tai myyjän toimesta, tai parhaimmillaan asiakas voi tehdä sen itse. Mallintamisen avulla tuotteen suunnittelussa pysytään riittävän yleisellä tasolla, siinä mitä asiakas haluaa ja tarvitsee, eikä painuta mietiskelemään päivätolkulla yksittäisiä koodinippeleitä, joilla ei välttämättä ole edes lopputuotteen hyödyllisyyden näkökulmasta mitään merkitystä.

Domain Spesifisellä mallintamisella parempaa kustannustehokkaammin

Nopeus

Ohjelmistotuotteen tekemistä nopeuttaa mallintaminen, räätälöinti ja  koodin generointi.

Perinteisesti tuotteen suunnittelu alkaa tuoteominaisuuksien hahmottamisesta. Myyntimies pohtii yhdessä asiakkaan kanssa, mitä asiakas haluaa ja tarvitsee. Tämän jälkeen suunnitelmat kiikutetaan kehitysosastolle, jossa viikkotolkulla tutkitaan onko kaikki halutut ominaisuudet mahdollista tehdä vai ei. Asiakkaan vaatimukset eivät välttämättä ole lainkaan realistisia ja suunnitelmiin pitää tehdä muutoksia. Myyntimies pitää asiakkaan kanssa uuden palaverin, jossa asiakkaalle kerrotaan  totuus tai usein jopa keksitään selityksiä – ”kaikkia näitä ei voida tehdä” tai ”Hinta nousee pilviin”. Tämähän on asiakaspalvelua parhaimmillaan. Käytetään sekä omaa, että asiakkaan aikaa eikä saada mitään aikaan.

Domain Spesifisen Mallintamisen avulla myyntimiehellä on jo valmiiksi käytössään kaikki ne toiminnot, mitkä ovat toteutettavissa. Palikoista räätälöidään juuri sellainen kokonaisuus kuin asiakas haluaa. Ominaisuudet ladotaan pöytään ja sillä sipuli. Kehitetyt palikat voidaan hinnoitella valmiiksi, jolloin myyntikin on helpompaa. Asiakas tietää mitä tulee saamaan ja millä hinnalla. Vain mahdolliset poikkeukset vaativat tutkimusta, kehittämistä ja lisää rahaa.

Räätälöinti antaa mahdollisuuden tehdä erilaisia tuotteita nopeasti. Jos asiakas haluaa hieman erilaisilla palikoilla valitun tuotteen, niin mallista poistetaan tai siihen lisätään haluttuja palikoita. Kun domain spesifisiä palikoita kehitetään luodaan perusta, ei pelkästään yhdelle ohjelmistotuotteelle vaan kokonaiselle tuoteperheelle.

Domain spesifisitä malleista voidaan generoida suoraan laitteessa ajettavaa koodia. Tuote on valmis, kun koodi on valmis. Eli käytännössä tuotetta voidaan testata ja käyttää, kun sen suunnittelu on valmis. Generaattorilla voidaan tarvittaessa tehdä myös koodia eri kielille. Generaattorit tukevat myös koodin dokumentointia, jolloin tehdyt ohjelmat ovat myös automaattisesti dokumentoitu jatkokäyttöä varten.

Laatu

Ohjelmiston laatu riippuu koodareiden taidoista, sekä siitä kuinka hyvin tiedämme asiakkaan tarpeet.

Ohjelmistopalikoita voidaan kehittää parhaiden koodareiden voimin. Organisaation suorituskyky voidaan monistaa, kun heikommin ohjelmointia osaavat henkilöt monistavat huippukoodareiden tuotoksista uusia tuotteita.

Domain spesifinen mallinnus tukee erinomaisesti inkrementaalista ja iteratiivista kehittämistä. Lopullista ohjelmistotuoteperhettä rakennetaan pienin askelin ja pienissä palasissa. Kehitettävä palaset voidaan testata huolellisesti ja lisätä sen jälkeen ”palikkavalikoimaan”. Palikoihin voidaan tehdä valmiiksi myös sääntöjä, joiden mukaan ne mm. liittyvät toisiin palikoihin. Tällä tavoin tehtynä ohjelmistosta poistuu paljon mahdollisia virhekombinaatioita, suunnittelija ei voi tehdä ohjelmistoa rikkovaa yhdistelmää.

Jos laatua mitataan tuotteen kyvyllä täyttää asiakkaan tarpeet, on domain spesifisen mallintamisen avulla helpompi tehdä laadukkaita tuotteita. Tuotteen suunnittelu voidaan tehdä lähellä asiakasta. koodarit voidaan korvata asiakkaan toimialan experteillä.

Sisältääkö tuotteesi ohjelmistoa? Jos haluat tehdä sitä tehokkaasti, käytä monistuskonetta. Asiakkaasi ei ole kiiinnostunut sisällä olevista nippeleistä, vaan tuotteesi käyttökelpoisuudesta ja hyödyllisyydestä.


Onko tekninen erinomaisuus kilpailuedun tae?

25 maaliskuun, 2009

Menen 26.3 pitämään esityksen MallinnusOSY:n seminaariin. Kerron omasta ja muiden aiheista myöhemmin lisää.


Polku Everestille

23 helmikuun, 2009

Liian ympäripyöreät tavoitteet eivät innosta huippusuorituksiin. Sen sijaan järkevästi asetetut tavoitteet saavat organisaation liitoon.

Muutama vuosi sitten ennen jääkiekkokauden alkua saimme toimeksiannon Oulun Kärppien valmennusjohdolta. Tarkoituksena oli tehdä joukkueen pukutiloihin taulu, josta ilmenee selkeästi kauden tavoite.

Normaalisti jääkiekkokauden alussa valmentajat ja joukkueen johto antavat mediaan tavoitteitaan kauden sijoitutustavoitteista. Kauden loppuun ulottuvan tavoitteen voima ehtyy kuitenkin syksyn ankeina iltoina.

Minkälainen oli mestarijoukkueen seinätaulu?

Taulun taustana toimi Mount Everestin kuva.  Kuvaan oli piirretty polku vuoren juurelta tavoitteeseen, eli huipulle.

Koko kausi oli jaettu maaottelutaukojen mukaan viiteen osaan.  Nämä välitavoitteet olivat reitin perusleirit. Jokaiselle perusleirille oli asetettu omat tavoitteet. Koko kautta ei yritetty niellä kokonaisena.

Matkalla perusleiriin oli ylitettävänä rotkoja ja jyrkänteitä, erilaisia haasteita. Joukkueen sarjapelit olivat näitä voitettavia koitoksia. Kun kaikkien pelien tulokset merkattiin tauluun, oli palaute onnistumisesta aina näkyvillä. Jokainen tiesi miten oli suoriuduttu.

Kun taulussa näkyivät tulokset, voitot vihreällä ja häviöt punaisella, tuli paine pitää vihreät putket mahdollisimman pitkinä.  Onnistumiset lyhyellä aikavälillä aiheuttivat positiivisen ilmapiirin, josta seuraksena oli ylivoimainen runkosarjan voitto SM-liigan parhailla pisteillä.

Yrityksissäkin tavoitteet asetetaan myös usein vuodeksi kerrallaan. Kuitenkin ne jäävät sanahelinäksi ilman konkreettisia toimenpiteitä ja lyhemmän aikavälin tavoitteita.  Kuvaa tavoite selkeäksi ”huoneen tauluksi” Kärppien tapaan. Jaa vuosi pienempiin osiin ja välitavoitteisiin. Korjaa suuntaa tarvittaessa kauden aikana.

Miksi kausi ei kuitenkaan päättynyt mestaruuteen? Lisää jääkiekkojoukkueen opeista tulee myöhemmin.

Aseta kaikille näkyvät tavoitteet ja tulokset. Jaa tavoitteet helpommin purettaviin osatavoitteisiin.


Ota turpaan mahdollisimman nopeasti ja halvalla!

9 tammikuun, 2009

On todettu, että vain yksi liikeidea sadasta menestyy. Tästä voi vetää johtopäätöksen, että keskimääräisen pätevän liikemiehen, joita keskimäärin olemme, tulee kehittää sata liikeideaa löytääkseen menestyvän. Myös uusien palveluiden ja tuotteiden kehittämisessä on kyse samasta asiasta. Miten voit kehittää menestyviä liikeideoita,tuotteita,palveluita ilman sadan vuoden uurastusta?

Kokeile nopeasti

Sen sijaan, että yritettäisiin ymmärtää tilannetta ja oivaltaa, miten toimia, voi olla parempi, että tehdään eri suuntiin eteneviä, melkeimpä satunnaisesti määriteltyjä tiedusteluretkiä, tilanteen kartoituksia, kokeiluja.

– Doz & Kosonen : Nopea Strategia – miten strateginen ketteryys auttaa pysymään kilpailun kärjessä

Olennaisinta on, että kehität paljon ideoita, mutta hylkäät huonot mahdollisimman  nopeasti. Hyväkään suunnittelu ei ole avuksi, jos idea on lähdössä jo mennyt pieleen. Mihinkään ideaan ei saa kiintyä liikaa, vaan on kokeiltava sen teho markkinoilla. Tuotekehitys lähtee hyvin usein tekemään idean pohjalta valtavia ponnisteluita teknisten yksityiskohtien ratkaisemiseksi. Kehitykseen investoidaan hirvittävä määrä rahaa ja aikaa, vaikka sen menestymisestä markkinoilla ei ole kuin epämääräisiä veikkauksia. Tämä on aivan turhaa. Maksaja on harvoin kiinnostunut teknisten yksityiskohtien ratkaisuista ja pienimmistä yksityiskohdista. Myy ennen kehitystä.

Ota turpaan halvalla

Jari Parantainen antaa kirjassaan Tuotteistaminen – Rakenna palvelusta tuote 10 päivässä mm. seuraavan vinkin:

  1. Valitse asiakas ja hänen ongelmansa
  2. Anna lupaus, että ratkaiset hänen ongelmansa
  3. Lunasta lupauksesi, eli toimita palvelu

Kehityksen kustannukset nousevat, kun polkua kuljetaan eteenpäin. Asiakkaiden ja ongelmien kartoittaminen on vielä kohtuullisen edullista eikä lupauksenkaan antaminen vaadi liiemmin investointeja. Kuitenkin nämä kaksi ensimmäistä vaihetta ovat myynnin kannalta olennaisia. Jos myyt tuotetta tai palvelua, josta ei ole mitään hyötyä tai et osaa kertoa sitä,  tulosten veikkaaminen ei ole vaikeaa.  Tuote ei tule pärjäämään markkinoilla. Kun otat turpaan halvalla teet työn vaiheittain.  Kehität lupauksen ongelman ratkaisusta ja kävelet asiakkaan luokse, jos nimi irtoaa sopimukseen niin sitten olet onnistunut. (Tai laskenut väärin, mutta se on toinen juttu se) Jos kauppa on syntynyt, niin on aika lunastaa lupaukset. Se voi olla joko kallista tai kannattavaa, on jo lupauksen kehitysvaiheessa hahmoteltava syntyviä kuluja. Tärkeintä on ottaa turpaan mahdollisimman aikaisin, jolloin kuluja palaa vähiten.

Let’s do it!



Onko kirjoitustaito nykyään tärkeämpää?

9 joulukuun, 2008

Onko kirjoitustaidon merkitys lisääntynyt?

Kirjoittamisen merkitys on mielestäni nykypäivänä suurempi kuin entisinä aikoina. Aikana, jolloin maailmankuva rajoittui oman torpan ympäristöön ei ollut tarvetta jakaa ajatuksia kirjallisesti, pelkkä puhe riitti. Nykyään ihmisten väliset verkostot ovat kasvaneet. Jotta kykenet kommunikoimaan laajan verkoston kanssa, on käytettävä puheen lisäksi muitakin viestinnän keinoja. Kirjoittaminen on huomattavasti tärkeämpää kuin kouluaikana tuli ajatelleeksi. Kaikenmaailman aplatiivit eivät juuri kiinnostaneet. Siitä kiinnostuksen puutteesta saan nyt  kärsiä.

Tämän blogin tarkoituksena on tuoda esille omia ajatuksiani, ja samalla oppia sinulta jotain uutta, liiketoiminnasta ja ihmisistä sen osana. Samalla voin kehittyä kirjoittajana.  Hyvät suunnitelmat kirjoittamisessa, kuin muissakaan tehtävissä, eivät riitä, on laitettava itsensä likoon. Tervetuloa mukaan.