Sisua kehitetty jo 7 vuotta – vinkit ohjelmistoprojektin onnistumiseen

Alkuvuodesta 2022 Hankenin Sisu-käyttöönoton myötä olemme päässeet yhteen maaliimme: kuusi suurta yliopistokäyttöönottoa ja master-järjestelmän vaihtoa on saatu tehtyä onnistuneesti tiiviissä puolentoista vuoden aikaikkunassa. Se on kulminaatiopiste pitkälle kehityskaarelle, jossa Sisu on pistetty alulle. Hankkeesta syntyi Funidata Oy, Sisun Software as a Service -palvelumalli on sovitettu ympäristöömme ja viidestä asiantuntijasta ollaan tultu isommaksi softayritykseksi. Vuosien varrella […]

Takaisin

Alkuvuodesta 2022 Hankenin Sisu-käyttöönoton myötä olemme päässeet yhteen maaliimme: kuusi suurta yliopistokäyttöönottoa ja master-järjestelmän vaihtoa on saatu tehtyä onnistuneesti tiiviissä puolentoista vuoden aikaikkunassa. Se on kulminaatiopiste pitkälle kehityskaarelle, jossa Sisu on pistetty alulle. Hankkeesta syntyi Funidata Oy, Sisun Software as a Service -palvelumalli on sovitettu ympäristöömme ja viidestä asiantuntijasta ollaan tultu isommaksi softayritykseksi. Vuosien varrella olemme keränneet paljon oppia korkeakoulusektorin ohjelmistokehityksestä ja -prosesseista, joista jaamme ajatuksia tässä kirjoituksessa. Kerromme kolme vinkkiä, jotka ovat olleet avainasemassa ison ohjelmistoprojektin onnistumisessa.

Tiivis asiakasyhteistyö

Sisua tehdään asiakkaille ja korkeakouluissa oleville käyttäjille. Mikään ei ole tärkeämpää kuin hyvä yhteistyö perheenomaisessa ilmapiirissä, jotta pääsemme yhteiseen tavoitetilaan Sisu-palvelun kehittymisessä. Kun asiakkaat painivat arkipäiväisten asioiden parissa ja huolehtivat korkeakoulun toimintaa koskevien muutoksien toteutumisesta, me Funidatalla huolehdimme siitä, että Sisu kehittyy ja sen tavoitetila ja visio tulevat toteutumaan. Tekemistämme ovat ohjanneet asiakkaiden kanssa tehdyt rohkeat, ketterät ja ratkaisukeskeiset päätökset, jotta opintotietojen ydinjärjestelmien master-vaihdot on saatu tehtyä.

Kehityskäytäntöjen tärkeys

Tulevalle opintotietojärjestelmälle oli jo sisällöllinen ja tekninen visio, kehityskäytännöt ja tavoitearkkitehtuuri ennen kuin yhtään koodiriviä oli sujahtanut Sisun git-repositorioon.

Kehityskäytäntöjemme taustalla on peruspilareita: ketterä kehittäminen, käytettävyys, tietoturva ja automaatio. Nämä ovat kulkeneet mukana alusta asti ja ovat nyt jo osa funidatalaisten DNA:ta. Vahvat peruspilarit tukevat sellaisten ratkaisujen tekemistä, jotka johtavat pidemmällä tähtäimellä hyviin ja toimiviin lopputuloksiin. Saavutettavuus on viimeisimpänä tullut tärkeäksi osaksi perustustamme ja näkyy jatkossa aikaisempaa enemmän kaikessa kehitystyössämme.

Pelkästään teknologiavalinnoilla voi olla kauaskantoisia seurauksia ja niihin on syytä panostaa. Mikään ei ole raskaampaa kuin isot teknologiamuutokset kesken palvelun elinkaaren. Sisun osalta on panostettu pitkän elinkaaren teknologioihin, jolloin myös rakennettavan sovelluksen elinkaarta on helpompi hallita. Siltikään emme ole onnistuneet täydellisesti: käyttöliittymään valitun AngularJS -käyttöliittymäkirjaston korvaaminen uudemmalla Angularilla on ollut iso työ, joka jatkuu edelleen.

Ketterät kehitysprosessit ovat myös olleet seuranamme alusta lähtien. Kehityskehykseksi valikoitui Scrum, josta vuosien saatossa on kehittynyt Funidatan oma variantti. Emme ole päätyneet hirvittävän kauas lähtökohdista, mutta haluamme ymmärtää syvällisesti, miksi teemme eri asioita ja mitä niillä saavutamme. Kaikki sitoutuvat yhteisiin prosesseihin ja tästä syystä haluamme, että niiden kehittäminen on koko henkilöstön asia.

Kehityskäytäntöjen hyödyt eivät ole jääneet pelkästään Sisun käyttöön, vaan pyrimme hyödyntämään kaikkea oppimaamme kaikessa kehitystyössämme palvelusta riippumatta. Loppujen lopuksi hyvän palvelun tekeminen on raakaa työtä, jota voi helpottaa hyvillä menetelmillä.

Developer Experience

Vuosien saatossa olemme havahtuneet hyvän kehittäjäkokemuksen tärkeyteen. Pyrimme huomioimaan DX-näkökulmia ja luomaan kannustavaa kulttuuria, jossa kaikki puhaltavat yhteen hiileen. Epäonnistumiset kuuluvat jokaiseen kehityshankkeeseen, jossa otetaan riskejä eikä tyydytä tavanomaiseen. Emme hae syyllisiä, vaan opimme jokaisesta vastoinkäymisestä.

Pyrimme luomaan palveluillemme arkkitehtuurin, joka tekee niiden kehittämisestä helppoa ja josta on hyvä ottaa mallia. Samoin olemme hakeneet työkaluja, jotka tukevat kehitystyötä mahdollisimman hyvin ja jotka mahdollistavat maksimimäärän automaatiota, jolla puuduttavia toisteisia tehtäviä saadaan vähennettyä.

Haluamme myös miettiä kehittäjiä, jotka tekevät töitä palveluidemme kanssa. Matalan kynnyksen kanavat yhteydenpitoon ja helpot tavat saada apua ovat meille tärkeitä. Pääasiassa käytämme Slackia fasilitoimaan laajempaa kehittäjäyhteisöämme, jotta myös esimerkiksi Sisun parissa työskentelevät henkilöt pystyvät oppimaan toisiltaan.

Kohti tulevia käyttöönottoja ja palveluiden jatkokehittämistä

Edellä mainitut kolme tekijää antavat hyvän pohjan tuleville käyttöönotoille ja mahdollistavat Sisun ja muiden palveluidemme jatkokehittämisen pitkälle tulevaisuuteen. Sisu on kasvanut jo 70 000 käyttäjän päivittäiseksi työkaluksi ja infrastruktuurimme kestää vielä paljon lisää. Olemme aina valmiita uusiin käyttöönottoihin!

Näin me kehitämme! Esittelyssä Funidatan kehityskäytännöt

Meillä Funidatalla suhtaudutaan kaikenlaiseen kehitykseen myönteisellä ja innokkaalla asenteella. Haluamme aina viedä osaamistamme, toimintatapojamme, prosessejamme, teknologiavalintojamme ja kehitysvälineitämme eteenpäin. Tässä blogipostauksessa käymme läpi nykytilannettamme ja kuvaamme, millaisiin suuntiin olemme eri asioiden suhteen menossa. Yhdessä postauksessa voimme toki vain raapaista pintaa ja antaa yleiskuvan laajasta toiminnastamme, mutta ei huolta – kehittäjämme ovat ahkerasti jakaneet tarkempia yksityiskohtia työmme eri osa-alueista aiemmissa blogikirjoituksissamme. Joko […]

Takaisin

Meillä Funidatalla suhtaudutaan kaikenlaiseen kehitykseen myönteisellä ja innokkaalla asenteella. Haluamme aina viedä osaamistamme, toimintatapojamme, prosessejamme, teknologiavalintojamme ja kehitysvälineitämme eteenpäin.

Tässä blogipostauksessa käymme läpi nykytilannettamme ja kuvaamme, millaisiin suuntiin olemme eri asioiden suhteen menossa. Yhdessä postauksessa voimme toki vain raapaista pintaa ja antaa yleiskuvan laajasta toiminnastamme, mutta ei huolta – kehittäjämme ovat ahkerasti jakaneet tarkempia yksityiskohtia työmme eri osa-alueista aiemmissa blogikirjoituksissamme.

Joko muuten huomasit, että meillä on haussa Full Stack Developer, DevOps-asiantuntija ja koodaava Scrum Master? Tämän tekstin lukemisen jälkeen kannattaakin ottaa suunta Rekry-sivullemme, jos kiinnostuit työskentelystä ohjelmistotalossa, joka tekee uraauurtavaa työtä suurella sydämellä. ♥

Kehityksemme prosessit

Kehityksemme pyörii pitkälti Scrumin varassa. Olemme vuosien varrella kehittäneet sitä toiminnallemme sopivaksi. Samaten olemme poimineet piirteitä skaalautuvista ketterän kehityksen ohjelmistokehyksistä, kuten SAFesta. Prosessien jatkuva kehitystyö on toimintamme ytimessä, joten etsimme aina tapoja parantaa tuotekehitystämme niin nyt kuin tulevaisuudessakin.

Tärkeimmät teknologiat

Tuotamme SaaS-palveluita, joten teknologiavalintamme heijastelevat palvelumalliamme. Taustajärjestelmissä suosimme pääsääntöisesti Javaa Spring Bootia hyödyntäen, mutta pyrimme aina valitsemaan tehtävään sopivimman ratkaisun.

Käytämme paljon skriptikieliä, kuten Pythonia sekä Javascriptia. Frontendimme ovat Javascript-vetoisia ja pääsääntöinen SPA-teknologia on Angular, mutta tuotepalettimme syövereistä löytyy myös Reactia. Tietokantanamme käytämme PostgreSQL:ää, ja erityisesti hyödynnämme  sen JSON-kenttätyyppejä.

Palvelutuotantomme rooli on myös tärkeä. DevOps-mallimme kulmakiviä ovat Terraform, Ansible ja Docker. Näillä luomme uudet ympäristöt automaattisesti Amazon Web Services -pohjaiseen julkipilvipalveluumme. Lisäksi Elastic Stack eli ElasticSearch, Logstash, Beats ja Kibana ovat meillä aktiivisessa käytössä monitoroinnissa ja logien hallinnassa.

Devauksen työkalut

Devauksen työkalut ovat vapaasti valittavissa, ja hyödynnämme staattista analyysiä koodauskäytäntöjemme valvonnassa. Editoreista suosituimpia ovat IntelliJ IDEA, Visual Studio Code ja Eclipse.

Versionhallintamme pyörii Gitillä Githubissa, johon pohjautuu myös pull request- ja peer review -prosessimme. Avoimen lähdekoodin projektimme löytyvät Funidatan organisaatiosta. Jenkinsin varaan rakentuva Continuous Integration -putkemme on vahvasti liitoksissa versionhallintaan. Pyöritämme CI-putkessamme staattista analyysiä, yksikkötestejä, integraatiotestejä, kuormitustestejä ja E2E-testejä (Cypress) sekä rakennamme valmiit Docker-kontit sovelluksista. Ajamme suurimman osan testipatteristostamme myös jokaiselle pull requestille, mutta jatkossa haluaisimme niillekin E2E-testit automaattiseen ajoon. Testitapausten hallintaan käytämme TestRailia.

Käyttöliittymäsuunnittelun työvälineemme ovat Sketch ja sen pilvipalvelu Sketch Cloud. Niitä hyödyntäen suunnittelemme ja teemme prototyypit sekä jaamme ne muille kehittäjille. Tulosteita ja muuta materiaalisuunnittelua olemme pääsääntöisesti pyörittäneet Adoben tuotteilla.

Kommunikoidaan!

Pääasiallisena kommunikaatiokanavana käytämme Slackia, jossa meillä on sisäisten kommunikaatiokanavien lisäksi yhteistyökanavia asiakkaidemme kanssa. Olemme yhdistäneet sekä ympäristöjemme monitoroinnin että versionhallinnan osaksi kanavakokoelmaamme, jotta saamme viestit yhteen paikkaan kaikkien nähtäville. Isompiin etäneuvotteluihin, joihin Slackin videotoiminnallisuus ei taivu, käytämme Microsoft Teamsia. Harmillisesti Teamsistä puuttuvat piirto-ominaisuudet, mikä on merkittävä heikennys verrattuna Slackissa järjestettäviin etäkahvitaukoihimme.

Korona-aikana digitaaliset fasilitointityökalut ovat nousseet aivan uuteen arvoon. Olemme hyödyntäneet runsaasti Muralia erilaisissa tilaisuuksissa niin omien tiimiemme, loppukäyttäjiemme kuin asiakkaidemme kanssa. Muralin tueksi olemme ottaneet Teamsin breakout roomit,  joilla isommatkin suunnittelutapaamiset on saatu sulavasti jaettua pienempiin kokonaisuuksiin. Retrojen pyörittämiseen olemme käyttäneet Retrotoolia.

Pilvipalvelut

Viimeisen vuoden aikana on tehty paljon kehitystyötä, jotta kaikki palvelumme saadaan tarjottua Amazon Web Services -julkipilvestä. Infrastruktuurimme on aiemminkin ollut muuten automatisoitu, mutta AWS-käyttöönotto on mahdollistanut myös palvelimien ja PaaS / IaaS -palveluiden provisioinnin automaattisesti työkaluilla.  Samalla olemme pystyneet hyödyntämään pilvialustojen tarjoamia palveluita laajemmin. Käytämme paljon S3 Object Storagea, RDS-tietokantoja, ECR-konttirekisteriä sekä lukuisia muita pienempiä palveluja.

Monitoroimme ympäristöjemme tilannetta jatkuvasti hyödyntäen metriikkaa sekä palveluistamme että alustajärjestelmistä, jotta voimme taata parhaan mahdollisen käyttäjäkokemuksen ja palvelun luotettavuuden. Analyysivälineitämme ovat Kibana ja Grafana, ja automaattisiin hälytyksiin hyödynnämme Kapacitoria. Näiden lisäksi myös AWS:n omat monitorointivälineet ovat aktiivisessa käytössä.

Julkaisurytmi

Julkaisemme Sisun eli päätuotteemme ympäristöjä automaattisesti jokaisesta muutoksesta, jotta tuorein mahdollinen versio olisi aina sisäisesti nähtävissä. Pidämme yllä myös lukuisia muita ympäristöjä mahdollistaaksemme sekä oman että asiakkaidemme hyväksyntätestauksen.

Sisua julkaistaan toistaiseksi versioissa, mutta tavoitteemme on muokata koko kehitysprosessi hyödyntämään jatkuvan julkaisun periaatteita ja saada uudet toiminnallisuudet tuotantoon entistä nopeammin ja ketterämmin. Muiden palveluidemme osalta pyrimme julkaisemaan muutoksia mahdollisimman nopeasti aina tuotantoympäristöihin asti.

Lopuksi

Kahlasitko koko tekstin läpi? Huh, sisukasta meininkiä – sinussa taitaa olla ainesta tulevaksi funidatalaiseksi! Kiinnostaisiko sinua seuraavaksi tutustua enemmän vaikkapa päätuotteeseemme Sisuun tai sen kehityksestä kertovaan blogiin? Sisu-blogista ei materiaali helpolla lopu!

Muista myös ihmeessä kysyä meiltä lisää, jos kiinnostuit avoimista työpaikoistamme ja sinulla heräsi kysymyksiä tämän kehityspläjäyksen pohjalta. Jokaisen avoimen paikan yhteydessä on ilmoitettu yhteyshenkilömme. Odotamme viestiäsi!