Kanarian julkaisut ovat olleet keskeinen työkalu ohjelmistokehityksessä, erityisesti silloin, kun pyritään vähentämään tuotantoon tehtävän päivityksen riskejä. Tämän menetelmän perusajatus on alun perin peräisin kaivosteollisuudesta, jossa kanarialintujen käyttö oli arkipäivää kaivoksissa. Pienikokoisina ja herkkinä eläiminä kanarit pystyivät havaitsemaan myrkyllisten kaasujen kuten hiilimonoksidin nousun ennen ihmisten. Jos kanarialintu kuoli, se oli merkki siitä, että kaivoksen ilmaa piti nopeasti tarkastella ja ottaa varotoimenpiteitä, kuten evakuoida kaivos. Sama periaate pätee kanarian julkaisuissa: pieni osa käyttäjistä saa uuden version ohjelmasta ennen laajempaa julkaisemista, ja jos tämä "kanarialintu" epäonnistuu, se toimii varoituksena siitä, että laajempaa julkaisua ei kannata tehdä.

Kanarian julkaisu toimii ohjelmistokehityksessä siten, että uusi ohjelmistoversio otetaan käyttöön vain pienen osan käyttäjistä käyttöön. Tämä pienempi ryhmä voi olla esimerkiksi rajattu osa palvelimia tai käyttäjäkunnan murto-osa. Tällä tavoin saadaan havaittua mahdolliset ongelmat ja virheet ennen kuin ohjelmaversio leviää laajalle yleisölle. Esimerkiksi Facebook käyttää tätä lähestymistapaa ennen kuin he tekevät täysimittaisen päivityksen palvelimilleen. He ensin kokeilevat uutta koodia pienellä osalla julkisia palvelimia, ja tarkkailevat miten se toimii todellisessa ympäristössä, mutta vain osalle käyttäjistä. Jos kaikki menee hyvin, laajempi päivitys otetaan käyttöön.

Tässä menetelmässä tärkeä elementti on niin sanottu "automaattinen peruutus", joka perustuu kanarian julkaisemisen aikana kerättyihin tietoihin. Jos koodin ensimmäisillä käyttäjillä ilmenee merkittäviä ongelmia, järjestelmä voi automaattisesti peruuttaa päivityksen ja palauttaa edellisen version käyttöön. Tämä käytäntö on tärkeä erityisesti jatkuvassa käyttöönotossa, jossa uudet versiot julkaistaan säännöllisesti, ja niihin liittyy aina riskejä.

Kanarian julkaisun etu on, että se rajoittaa mahdollisen virheen vaikutuksen vain pieneen osaan infrastruktuuria. Jos "kanarialintu" epäonnistuu, sen vaikutukset ovat rajattuja, eikä se vaikuta koko käyttäjäkunnan kokemukseen. Esimerkiksi BOSH, Cloud Foundryn avoimen lähdekoodin työkalu, käyttää kanarian julkaisua oletuksena, jossa päivitys otetaan käyttöön ensin yhdelle palvelimelle ja tarkastellaan sen jälkeen päivityksen vaikutuksia ennen kuin se leviää muihin palvelimiin. Tämä auttaa varmistamaan, että mahdolliset virheet havaitaan nopeasti ja ne voidaan korjata ennen laajempaa julkaisemista.

Vaikka kanarian julkaisu vähentää tuotantoon tehtävän päivityksen riskejä, se tuo myös mukanaan uusia haasteita. Yksi suurimmista haasteista on se, että kahden eri ohjelmistoversion käyttäminen samanaikaisesti voi aiheuttaa hallinnollisia vaikeuksia. Kehittäjät ja operaattorit joutuvat hallitsemaan kahta ympäristöä, joissa osa käyttäjistä käyttää vanhaa versiota ja osa uutta. Tämä tuo lisähaasteita erityisesti datanhallintaan, koska saattaa olla tarpeen synkronoida tietokantoja ja siirtää tietoja useiden eri järjestelmien välillä.

Staged rollout, eli vaiheittainen julkaisu, on toinen vastaava lähestymistapa, jossa ohjelmaversio rajoitetaan aluksi vain osalle käyttäjistä, mutta toisin kuin kanarian julkaisussa, tässä ei rajoiteta itse infrastruktuuria, vaan vain käyttäjien määrää. Google käyttää tätä menetelmää Android-sovelluksissaan, joissa päivitykset otetaan käyttöön ensin vain pienelle osalle käyttäjistä. Jos päivitys ei aiheuta ongelmia, se laajennetaan asteittain suuremmalle käyttäjäkunnalle.

Staged rolloutilla on kuitenkin omat haasteensa. Jos sovelluksen päivitykset asennetaan käyttäjän omalle laitteelle, kuten Android-sovelluksissa, ei kehittäjällä ole täydellistä kontrollia siitä, milloin käyttäjät päivittävät sovelluksen. Jos käyttäjät päättävät jättää päivityksen väliin, voi uusi versio levitä hitaasti. Tämä voi myös vaikuttaa siihen, kuinka hyvin A/B-testaukset onnistuvat, sillä vain pienelle osalle käyttäjistä tarjoillaan eri versioita ohjelmistosta, mikä voi vääristää kokeen tuloksia.

Lisäksi on olemassa toinenkin menetelmä nimeltä "dogfooding", jossa kehittäjät itse käyttävät ohjelmistoa ennen sen julkaisua yleisölle. Tämä voi olla hyödyllinen tapa löytää ohjelmiston virheitä ennen sen julkaisua, mutta siinäkin on omat rajoituksensa, sillä kehittäjien näkökulma ei aina vastaa tavallisten käyttäjien kokemusta. Esimerkiksi sosiaalisen median alustan kehittäjät saattavat ymmärtää ohjelmiston edistyneitä ominaisuuksia paremmin kuin tavalliset käyttäjät.

Kanarian julkaisumenetelmä on siis tärkeä osa nykyaikaista ohjelmistokehitystä. Se tarjoaa tavan vähentää riskejä, mutta tuo samalla uusia haasteita, jotka kehittäjien ja operaatioiden täytyy huomioida. Yksi tärkeimmistä asioista on huomioida, että tämä lähestymistapa ei takaa täydellistä virheettömyyttä, ja huolellinen seuranta sekä oikea-aikainen reagointi ovat keskeisessä roolissa onnistuneessa päivityksessä.

DevOps ja jatkuva toimitus: Kuinka testaus soveltuu tähän kulttuuriin?

DevOpsin ja jatkuvan toimituksen (Continuous Delivery, CD) käsitteet ovat nousseet keskeisiksi tekijöiksi ohjelmistokehityksen ja -toimituksen kulttuurimuutoksessa. Vuonna 2009, samaan aikaan kun DevOps syntyi, Timothy Fitz lanseerasi käsitteen jatkuvasta toimituksesta: "Jatkuva toimitus on yksinkertaista: lähetä koodisi asiakkaille mahdollisimman usein." Tämä lähestymistapa oli tärkeä askel kohti nopeampaa ja joustavampaa ohjelmistokehitystä, mutta se ei ollut täydellinen ratkaisu. Vain hieman yli vuoden kuluttua julkaistiin Jez Humble ja David Farleyn kirjoittama kirja "Continuous Delivery", joka laajensi ja tarkensi tätä käsitettä: "Jatkuva toimitus tarkoittaa varmistamista, että ohjelmistosi on aina tuotantokelpoinen koko elinkaarensa ajan, jotta mikä tahansa rakennus voidaan tarvittaessa julkaista käyttäjille sekunneissa tai minuutissa täysin automatisoidulla prosessilla."

Jatkuva toimitus eroaa DevOpsista siinä, että se keskittyy tarkemmin teknisiin käytäntöihin, jotka mahdollistavat kehitystiimille nopean liikkumisen. Tämä sisältää koodauskäytännöt, versionhallinnan ja ominaisuusliput, joiden avulla koodi voidaan siirtää tuotantoon, mutta ei välttämättä ole heti käyttäjien saatavilla. Jez Humble kiteyttää jatkuvan toimituksen toteuttamisen perusvaatimukset näin: "Varmistamme, että koodimme on aina julkaistavassa tilassa, vaikka tiimejä olisi tuhansia kehittämässä muutoksia päivittäin." Tämä tarkoittaa perinteisten integrointitestauksen ja koodifreesauksen vaiheiden poistamista ja niiden korvaamista nopealla ja jatkuvalla julkaisu- ja testaustoiminnalla.

Kehitystiimit voivat omaksua jatkuvan toimituksen ilman suuria muutoksia operaatioiden osalta. Tämä kapea lähestymistapa voi olla järkevä ensimmäinen askel, mutta ajan myötä se luo jännitteitä erilaisten tiimien välillä, jotka toimivat eri rytmillä. DevOps on laajempi kulttuurimuutos, joka ratkaisee tämän jännitteen kannustamalla kehitystiimejä ja operaatioiden tukihenkilöstöä tekemään tiivistä yhteistyötä.

DevOps ja Agile

Agilen alkuperäinen manifesti haastoi ohjelmistokehittäjien ajattelutavan. Se ei määritellyt tarkasti, kuinka uutta ajattelutapaa tulisi toteuttaa, mutta sen vaikutus oli merkittävä: se johti organisaatioissa toteutettuihin muutoksiin. DevOps puolestaan on määrätietoisempi. Sen tavoite on parantaa ohjelmistojen luotettavuutta ja julkaisufrekvenssiä, ja se keskittyy erityisesti kehitystiimien ja operaatioiden välisiin suhteisiin.

DevOps ilman agilen periaatteiden soveltamista voi olla mahdollista, mutta se on huomattavasti haastavampaa. Kun kehitystiimi omaksuu agilen ajattelutavan, he pystyvät luomaan pienempiä, mutta hyödyllisempiä ohjelmistokappaleita säännöllisesti. Tämä voi kuitenkin luoda jännitteitä organisaation muilla alueilla, jotka ovat tottuneet hitaampaan prosessiin. DevOps ratkaisee tämän jännitteen edistämällä yhteistyötä ohjelmistokehittäjien ja tukihenkilöstön välillä. Vaikka DevOpsin ei tarvitse merkitä julkaisua joka minuutti tai tunti, sen tarkoitus on kuitenkin mahdollistaa tiheämpiä ja luotettavampia julkaisuaikoja.

Testauksen rooli DevOpsissa

Testaus jää usein huomiotta useimmissa DevOpsia käsittelevissä kirjoituksissa, koska keskustelu keskittyy yleensä kehittäjiin ja operaatioiden henkilökuntaan. Tämä ei kuitenkaan tarkoita, etteikö testaukselle olisi paikkaa DevOpsin kulttuurissa. Testaus on perusaktiiviteetti, joka kulkee koko kehitysprosessin läpi, ja sen tehtävä on tehdä jatkuvaa työtä jokaisessa vaiheessa. Dan Ashby kuvailee testauksen roolia DevOps-työkaluketjussa näin: "Testaus kuuluu jokaiseen vaiheeseen ja se on jatkuvaa koko projektin alusta lähtien."

Testauksen paikka DevOpsissa ei ole vain erillinen vaihe prosessissa, vaan se on osa koko kehitystiimin toimintaa. Tämä tarkoittaa, että testaus ei ole yksinomaan testausasiantuntijan vastuulla, vaan koko tiimin tehtävä. Humble ja Farley tiivistävät tämän: "Testaus on poikkifunktionaalinen toiminta, joka koskee koko tiimiä, ja sen tulee olla jatkuvaa koko projektin ajan."

Testauksen rooli DevOps-kulttuurissa

DevOps-kulttuurissa testauksen kokemus riippuu suurelta osin nykyisestä lähestymistavastasi testaukseen, organisaatiosi DevOps-näkemyksestä ja siitä, kuinka tiiviisti yhteistyö ulottuu kehitystiimistä muiden organisaation osien kanssa. Ennen DevOps-lähestymistavan omaksumista on tärkeää tarkastella nykyistä testausstrategiaasi ja varmistaa, että kaikilla on yhteinen visio tulevaisuudesta. Testausstrategian retrospektiivi voi auttaa tiimiä varmistamaan, että kaikki ovat samalla sivulla ja tietävät, mitä testausstrategialle kuuluu. On myös hyödyllistä vertailla käytäntöjä muiden teollisuuden toimijoiden kanssa ja käydä keskustelua siitä, mitä muutoksia voitaisiin mahdollisesti tuoda organisaatioosi.

On tärkeää ymmärtää, kuinka organisaation johto esittää DevOps-vision ja kuinka kaikki osat liittyvät toisiinsa yhteisen tavoitteen saavuttamiseksi. Tämä auttaa tiimiä ymmärtämään, miten heidän omat panoksensa liittyvät suurempaan kuvaan. Tavoitteena on luoda yhteistyöverkosto, joka ulottuu kehitystiimistä muihin osastoihin ja poikkitieteellisiin tiimeihin.

Testauksen asema DevOpsissa on merkittävä, mutta sen toteuttaminen vaatii jatkuvaa kehittämistä, keskustelua ja yhteistyötä. Testauksen rooli ei ole enää erillinen osa prosessia, vaan se on keskeinen osa koko ohjelmiston elinkaaren hallintaa.

Kuinka luoda ja laajentaa yhteistyöpolkuja tiimien välillä?

Alkuvaiheessa luomamme polut ovat haavoittuvia, sillä ne rakentuvat kahden yksilön välille. Jos toinen osapuoli poistuu, polku katkeaa kokonaan. Seuraavat askeleet polun raivaamisessa kypsyttävät yhteyttä tuomalla mukaan muita, luoden yhteistyötä eri alojen välillä. On tärkeää kutsua lisää ihmisiä polulle ja laajentaa tietojen jakamista. Kun olet luonut suhteen yhden henkilön kanssa ja jakanut heille hyödyllistä tietoa, järjestä tilaisuus, jossa jaat tämän tiedon heidän kollegoilleen. Kun he jakavat jotain hyödyllistä sinulle, pyydä heitä järjestämään samanlainen tilaisuus omille kollegoillesi. Merkitse polullesi tärkeitä pisteitä, jotta muut voivat löytää oman reittinsä. Tämä auttaa nykyisiä tiimin jäseniä, niitä jotka liittyvät tiimiin myöhemmin, ja myös muita tiimejä, jotka saattavat olla kiinnostuneita. Tallenna jaettu tieto, jotta se on saatavilla myöhemmin. Tämä voi olla yksinkertaista kuten PowerPoint-esitysten tallentaminen yhteiseen kansioon tai videoiden tallentaminen, joissa tiedon jakaminen on kuvattu visuaalisesti ja sanallisesti. Ne, joilla on enemmän aikaa, voivat luoda oppimisresursseja, jotka on suunniteltu erityisesti myöhempää kulutusta varten, kuten oppimispolkuja, verkkokursseja tai kirjoja.

Polun laajentaminen tarkoittaa eri näkökulmien kutsumista mukaan. Organisaatiossasi tämä voi tarkoittaa esimerkiksi: toisen henkilön kutsumista esittämään heidän tietämystään, muiden alojen asiantuntijoiden osallistumista vertaisarviointiin ja palautetilaisuuksiin, ristiinalojen parittaamista tai tiimien välistä yhteistyötä tehtävissä, kuten mobbing-työskentelyssä. Polkua voi laajentaa edelleen kutsumalla ihmisiä osallistumaan teollisuuden esityksiin tai konferensseihin, jotka liittyvät muihin kuin heidän tavallisiin erikoisaloihinsa. Raivattujen polkujen tärkeimmät vaiheet ovat: tunnista, yhdistä, kutsu, merkitse ja laajenna.

Tiedon jakaminen ja yhteistyö tiimien välillä voivat auttaa luomaan toimivia yhteyksiä eri osastoilla. On tärkeää muistaa, että viestintä polkujen luomisessa ei ole vain tiedon jakamista, vaan myös erilaisten näkökulmien ymmärtämistä ja hyödyntämistä. Tärkeää on se, että kaikilla osapuolilla on mahdollisuus jakaa omia kokemuksiaan ja tietämystään, mikä lisää yhteistä ymmärrystä ja luo pohjan tehokkaammalle yhteistyölle. Tällaisessa ympäristössä jokaisella tiimillä on rooli yhteisten tavoitteiden saavuttamisessa, ja yhteistyö eri alojen välillä luo dynaamisemman ja innovatiivisemman työskentelytavan.

Kun ajattelet, kuinka luoda ja laajentaa polkuja tiimien välillä, on tärkeää kiinnittää huomiota siihen, miten saadaan kaikkien tiimien jäsenet sitoutumaan prosessiin. Tiedon jakaminen ei ole vain monologin luonteenomaista, vaan keskustelua, jossa kaikki osapuolet voivat osallistua ja tuoda omia näkökulmiaan. Se auttaa kaikkia osapuolia ymmärtämään paremmin toistensa työskentelytapoja ja tarpeita, mikä puolestaan tukee enemmän yhteistyötä.

Yhteistyöpolkujen luominen on prosessi, joka ei rajoitu vain yhden tiimin tai osa-alueen välisiin suhteisiin. Se ulottuu organisaation sisällä eri tiimeihin ja jopa organisaation ulkopuolelle, kuten asiantuntijaverkostojen ja muiden toimialojen asiantuntijoiden kanssa tapahtuvaan vuorovaikutukseen. Erilaiset tietämystasot ja kokemukset voivat rikastuttaa yhteistyötä ja laajentaa näkemystä työskentelyn eri osa-alueista. Lisäksi on tärkeää huomioida, että vaikka yhteistyö saattaa aluksi tuntua hidastavalta, se tuo pitkällä tähtäimellä suuria etuja, kuten paremman ongelmanratkaisukyvyn, vähemmän virheitä ja tehokkaamman työskentelyn.

Tiedon jakaminen ei aina ole automaattista. Se vaatii aktiivista vuorovaikutusta ja halua ymmärtää toisten työskentelyä ja tarpeita. Erityisesti silloin, kun luodaan yhteistyöpolkuja eri alojen välillä, on tärkeää olla proaktiivinen, kysyä kysymyksiä ja olla avoin uusille ideoille. Ei riitä, että olet hyvä omassa roolissasi – on myös tärkeää oppia ymmärtämään muiden roolien merkitys ja miten heidän työnsä liittyy omiin tavoitteisiisi. Jatkuva keskustelu, kysymysten esittäminen ja vuorovaikutus ovat avainasemassa tehokkaan yhteistyön rakentamisessa.