Räägime DevOpsist (Development Operations) kui äriprotsesside optimiseerimise kunstist
Igasuguste protsesside optimeerimiste ideoloogiline eesmärk on jõuda maksimaalse efektiivsuse, kasumlikkuse ja kvaliteedi ristteeni. Eesmärkide mõõtmise mõõdikud erinevad nii valdkonniti kui organisatsiooniti, kuid tihtipeale on valukohad, millega ideoloogia eesmärgi saavutamise teekonnal kokku puututakse, sarnased.
Digimuutuse valdkonna tiimijuhina on ka mulle optimiseerimine südamelähedane teema. Käesolevas artiklis jagan soovitusi, kuidas DevOpsi abil protsesse optimeerida. Isiklikult meeldib mulle maailma vaadata läbi filtri: "Erandlikult kõik siin maailmas on tootmine ja tootmises esinevad takistused on igalpool sarnased."
Selle all ei pea ma silmas niivõrd seda, et detailsed tootmisprotsessid või sisendist väljundini jõudmine on erinevate valdkondade vahel identne, kuivõrd seda, et üldised tootmise poolt läbitavad protsessid on sarnased. Tarkvaraarendust võib käega katsutavalt vaadelda kui protsessi, mille eesmärk on erinevate äriliste ja funktsionaalsete tegevuste digitaliseerimine.
Digitaliseerimise vajalikkust saab alati uurida mitmest erinevast vaatepunktist, kuid üldiselt on tegemist protsessiga, mille lõpptulemusena vabastatakse spetsialistide aega korduvatelt ja üksluistelt tegevustelt suuremat väärtust kandvatele ülesannetele. Digitaliseerimise protsessi suurim võit on aeg, mida saab ressursina suunata kõige enam väärtust loovatesse tegevustesse.
Kliente teenindava tarkvaraarenduse valdkond asub piltlikult öeldes paeluvas punktis - meil on võimalus näha ning kaasa aidata paljude teiste organisatsioonide ja ettevõtete tootmisprotsesside optimiseerimisele.
See annab tarkvaraarenduse valdkonna spetsialistidele laiapinnalise ülevaate erinevate ettevõtete probleemidest ja lahendustest ning ühtlasi ka mõttemustri enda tööprotsesside optimiseerimiseks. Mida kogenum spetsialist, seda rohkem soovib ta oma aega läbi automatiseerimise suunata mitte rohket väärtust loovatelt tegevustelt rohkelt väärtust loovatele tegevustele.
Mis on DevOps?
DevOps ehk täisnimega Development Operations koosneb juba nime poolest kahest elemendist Development - (tarkvara)arendus ning Operations - administratiiv- ja operatiivtegevused.
Lihtsustatuna vaatlen selles artiklis neid kahte traditsiooniliselt täiesti eraldiseisvat ja toimivat tükki kui loovat ja teostavat (development) vs võimaldavat ja kontrollivat (operations) üksust.
DevOpsi puhul ei ole tegemist niivõrd reeglistikuga, kuivõrd kultuursete filosoofiate ja praktikate kogumiga, mis võimaldab organisatsioonil luua väärtust kiiremini ja efektiivsemalt kui seda oleks võimalik teha traditsioonilisemaid "ülevalt alla" lähenemisviise kasutades.
Peamised suunitlused, mida DevOpsi lähenemine täidab:
- Kiirus - võimalikult suur osa regulaarselt teostatavatest tegevustest on automatiseeritud, võimaldades suunata ressurssi võimalikult efektiivselt.
- Järjepidevus - sisuliste muudatuste teostamine on regulaarne ja järjepidev. Süsteemide planeerimine toimib viisil, kus funktsionaalsuseid on võimalik toimetada väikeste tükkidena.
- Usaldusväärsus - süsteemne toimiv sisu on kaetud süsteemsete testidega. Automaattestide rakendamine võimaldab kokku hoida aega regulaarse manuaaltestimise arvelt.
- Skaleeritavus - loodavad lahendused on suunatud järgima mugava skaleeritavuse tavasid. Valida tuleb metoodikad ja arhitektuur, mis toetavad n-ö puu taga olevat metsa.
- Koostöö on eesmärgi ja tulemi vundament - probleemide lahendamisel lähtutakse omanditundest ja jagatud vastutusest. Lahendusega tegeleb tiim, mitte ainult üks inimene ning sellest tulenevalt lahendab väljakutseid tiim tervikuna ja proaktiivselt.
- Turvalisus ja jälgitavus - loodud süsteemid on ehitatud turvakaalutlusi arvestades ning lahenduse siseelu on jälgitav läbi raportlogide ja mõõdikute.
Praktikas võib DevOpsi tiimi tegevusi vaadelda kui protsessi, mille eesmärgiks on arendusprotsessi enda siseste protsesside optimiseerimine. Teiste sõnadega on tegemist arendajate endi poolt loodud lahendustega, mis on suunatud arendajate või administratiivsete organite regulaarsete tegevuste optimiseerimisele.
Kujutleme, et alustame projektiga, mille väljundiks on veebirakenduse loomine. Selleks, et arendusprotsessiga pihta hakata, on administratiivselt vaja...
- arenduskeskkonda ja serverit: peamine töökeskkond tarkvaraarenduseks ja testimiseks;
- versioonihaldustarkvara (GIT);
- arenduskeele baaspaketti;
- Continuous Integration (CI) / Continuous Deployment (CD) torustikku. Loe ka meie varasemat blogiartiklit Docker – mis asi see on ja miks kõik seda kasutavad?
- suhtluskanalit (näiteks Slack);
- ülesannete lauda (näiteks Jira);
- dokumentatsioonihoidlat (näiteks Confluence).
Tegemist ei ole kõikehõlmava nimistuga, vaid ainult ühe osaga ettevalmistatava töö protsessist. Sellegipoolest on töö hulk, mida projekti käivitamisel regulaarselt tegema peab, isegi standardiseerituna mahukas. Standardsete tegevuste regulaarselt uuesti tegemine on vastuolus praktikaga, mille eesmärk on toimetusi võimalikult suurel määral optimiseerida.
Selle baasil on ülesanne DevOpsi vaatepunktist konkreetne: tuleb arendada keskne lahendus, mis võimaldab piiratud sisendväärtuste baasil automaatselt genereerida kõik standardsed projektiga alustamiseks vajalikud keskkonnad ja võrgustikud. 1-3 inimese töövoogudele kontrastiks on tulemuseks vorm, mille esmane täitmine nõuab ühelt inimeselt minimaalselt aega. Kõik sisulised tegevused on ühe nupuvajutuse kaugusel.
Milline on DevOpsi arendustsükkel?
Nagu igal toredal filosoofial, on ka DevOpsi lähenemisele välja kujunenud elu/arendustsükkel, mille järgimisel saavutad soovitud tulemuse. DevOps on oma olemuselt agiilne, mis tähendab, et väljakutsete lahendamisel on fookus suunatud jätkupidevusele- seda läbi regulaarsete iteratsioonide. DevOpsi arendus on tsükliline.
Ühe iteratsiooni protsess algab analüüsist ja plaanist. Detailse plaani põhjal teostatakse arendus, mille sisulist protsessi ja versioone saab hallata versioonihalduriga (GIT).
Arendus kaetakse automatiseeritud testidega ja valmistatakse ette tarneks. Tarnitav funktsionaalsus pakitakse kokku iteratsiooniks, testitakse manuaalselt, parandatakse ja lanseeritakse läbi automatiseeritud protsessi Live keskkonda.
Lõppkasutajale kättesaadav rakendus on kaetud automatiseeritud monitooringu tarkvaraga. Monitooringu informatsiooni on võimalik analüüsida ja see annab omakorda aluse uute plaanide sätestamiseks.
Kokkuvõtteks
DevOps (Development Operations) on kombinatsioon sisulistest väärtustest ja ideoloogilistest eesmärkidest, mis aitavad arendustiimidel oma sisulisi protsesse automatiseerida. Kõike seda eesmärgiga tagada spetsialistidele aega ja ressurssi enim väärtust loovate väljakutsetega tegelemiseks.
DevOpsi filosoofia põhineb agiilsel vundamendil ja seda saab rakendada paljude äriliste protsesside optimiseerimiseks. Artiklis käsitlesin ainult DevOps võimekuse jäämäe tippu.
Süvendatud huvi korral soovitan lugeda meie varasemaid artikleid: Ära karda testide automatiseerimist ja Vesiagiilsus ehk kuidas suured tarkvara arendusprojektid tegelikult käivad.