
14.2.2025 Kuinka rakentaa testattavaa softaa?
Hyvin rakennetut ohjelmistot ovat helposti testattavia. Testattavuuden huomioiminen on tärkeää jo heti alussa ennen kuin riviäkään koodia on kirjoitettu. Testattavuutta on hankalaa, ellei jopa mahdotonta lisätä jälkikäteen suuriin järjestelmiin.
Aloitetaan tarkastelemalla miten ohjelmistot toimivat.
Liiketoimintalogiikka tarkastelee (observes) syötteitä (input) ja hallitsee (control) palautetta (output).
Testeissä tilanne on toisinpäin. Testit hallitsevat syötettä ja tarkastelevat palautetta.
Testattavissa sovelluksissa on siis olennaista että testit kykenevät hallitsemaan syötteitä ja myös koko sovelluksen tilaa. Testien tulee siis kyetä saattamaan järjestelmä haluttuun tilaan.
Suurin haaste testattavuudessa onkin juuri syötteiden hallitseminen.
Yksikkötesteissä on mahdollista hallita sovellusta täydellisesti. Esimerkiksi kello, stdin, stdout, env, tietokannat, jne. voidaan ottaa hallintaan luomalle niille abstraktiot ja käyttämällä dependency injektiota.
Ylemmillä tasoilla testattaessa on myös kyettävä hallitsemaan olennaisimpia syötteitä vaikka aivan kaikkea ei enää pysty hallitsemaan kuten esimerkiksi järjestelmän kelloa. On hyvä kysyä, onko sovellus saatettavissa haluttuun tilaan helposti? Voidaanko testejä ajaa rinnakkain? Nämä ovat hyvin tärkeitä kysymyksiä joita on syytä miettiä heti alussa.
Testeissä on syytä välttää myös kovakoodattuja “fixtuureja” sovelluksen sisäisestä tilasta (esim tietokannan tila). Parempi vaihtoehto on että testi rakentavat haluamansa tilan aina alusta käyttäen sovelluksen omia rajapintoja.
Entä kuinka on mahdollista rakentaa testattavia suuria järjestelmiä, jotka saattavat koostua kymmenistä ellei sadoista sovelluksista? Tapahtumapohjainen arkkitehtuuri on yksi mahdollisuus. Tämä tarjoaa mahdollisuuden testeille orkestroida järjestelmää sekä tarkastella tapahtumavirtaa.
Yhteenvetona voidaan todeta että testattavia sovelluksia on mahdollista rakentaa varmistamalla että syötteitä voidaan hallita ja palautteita voidaan tarkastella järjestelmän kaikilla tasoilla.

7.2.2025 Mitä prosessityökaluja devaajan tulisi tietää??
Viisi näkökulmaa prosesseista jotka Crafterin tulisi muistaa.
Ymmärrys ohjelmistokehityksen prosesseista yhdistettynä tekniseen osaamiseen on valtava voimavara ohjelmistokehittäjälle. Täytyy osata nähdä yksittäisen featuren yli isompi kuva miten asiat saadaan kätilöityä ideasta toimivaksi ratkaisuksi. Koodin kirjoittaminen on yllättävän pieni osa tätä prosessia.
Läpimenoaikojen nopeuttaminen viikoista/kuukausista tunteihin tai minuutteihin pakottaa ratkaisemaan (lähes :wink:) kaikki prosessiongelmat. Pitkät läpimenoajat vain aiheuttavat sähläystä (heroics) monella tasolla. Nopeus itsessään ei ole tärkeää, mutta oppiva organisaatio on väkisinkin nopeasti iteroiva. Hitaasti iteroivan tai reagoivan organisaation keskittyy omaan sähläykseensä oppimisen sijaan.
Systeemissä on kerrallaan vain yksi pullonkaula, joka määrää miten kokonaisuus toimii. Sen hahmottamiseen ja ratkaisemiseen on olennaista ymmärtää mistä työ saapuu tehtäväksi. Työn syöttäminen systeemiin on tehtävä pullonkaulan ehdoilla. Mieti miten sait tehtäväksi viimeiset tikettisi? Oliko taustalla tarkkaan valikoitu analyysi jo käynnissä olevan työn määrästä?
Läpimenoaikojen estimaatit ovat turhia, mutta estimointi tärkeää. Estimaattien käyttäminen tiimin ulkopuolella johtaa vain väärinkäsityksiin, mutta estimointi on arvokas työkalu seuraavaksi tärkeimmän asian löytämiseen.
Asioiden parantaminen on osa jokaisen päivän jokaista hetkeä. Siihen ei tarvitse kysyä lupaa tai varata budjettia. Mitä itsenäisemmin tiimi pystyy toimimaan sitä parempi on sen kyky tehdä myös prosessiparannuksia. Byrokratia tappaa vahvimmankin prosessiniilon innostuksen jossain vaiheessa.
“Antakaa mun vaan koodata”- sanoi konsultti SAFen seuraavan inkrementin suunnittelussa.
“You know, I know this steak doesn’t exist. I know that when I put it in my mouth, the Matrix is telling my brain that it is juicy and delicious. After nine years, you know what I realize? Ignorance is bliss.” - Cypher

15.11.2024 Bytecraftin pikkujoulut
Vuoden 2024 pikkujoulut alkoivat asiapitoisesti, kun Ville esitteli hyvin kulkevaa myyntiputkeamme ja katsailimme vuoden 2025 näkymiä yhdessä.
Myyntikatsauksen jälkeen siirryimme rennompaan moodiin eli italialaiseen drinkkikouluun, jossa opimme erinomaisessa opastuksessa niin holillisten kuin holittomien limoncellospritzin, espressomartinin sekä negronin kikat ja salat. Maittavien juomien jälkeen nautimme vieläkin maittavimmista erilaisista pizzoista.
Hauskojen pöytäkeskustelujen jälkeen jutut jatkuivat mahtavilla toimistojatkoilla.

8.11.2024 Tyyppisysteemit
Marraskuun alun pöhinäsetissä käsiteltiin ohjelmointikielten tyyppisysteemejä niin dynaamisesta staattiseen kuin heikosta vahvaan. Lisäksi keskusteltiin kielten tyyppiturvallisuudesta käytännön ja teorian tasolla, sekä erilaisista lähestymiskulmista asiaan.
Craftmanship-hengessä pohdiskelimme koodin laadun parantamista tyyppien oikeaoppisella käytöllä ohjelmointikielistä riippuen. Eksyimme vahingossa aiheesta keskustelemaan myös kryptografiasta.

18.10.2024 Complex systems
Tämän kerran lounaspöhinöissä Antti johdatteli byteläiset kompleksisten systeemien maailmaan.
Käsittelyssä oli mm. mitä tapahtuu kun ongelma vaikuttaa useammalla skaalalla (asiakas-liiketoiminta-tekniikka-logiikka) ja vaikeasti ennustettavasti, ja mitä on deterministinen kaaos.
Lisäksi, miten ratkotaan ongelmia, joista on lähes mahdotonta löytää syy-seuraussuhteita, ja mitä vaaroja on siinä, jos kompleksista systeemiä yritetään hallita simppelillä syy-seuraussuhteella ja miten siinä voidaan mennä metsään.
Kompleksien aiheiden kanssa nautittiin yksinkertaista pitsaa!

11.10.2024 Kekrivisa
Lokakuun puolivälissä pidimme Bytepäivä-lightin ja virittäydyimme sekä Halloweeniin, että jo käynnissä olevaan Kekrin aikaan! Annamari piti tietovisan sekä suomalaiseen kansanperinteeseen kuuluvasta ja kuitenkin ehkä vieraammasta kekrin ajasta, että kaikille vähintäänkin populäärikulttuurista tutusta Halloweenista.
Tietäisitkö googlaamatta esimerkiksi, onko kekriä kutsuttu nimellä käyry vai keyri, tai miten monta Halloween-franchisen elokuvaa on tehty? Kaikki visailijat saivat pisteitä, monet oppivat uutta ja siinä lomassa nautittiin teemaan sopivia herkkuja.

4.10.2024 Varhaisen tuen ohjeet
Lokakuun alussa bytecraftilaiset kävivät yhdessä läpi yrityksen Varhaisen tuen mallia sekä Päihdeohjelmaa Annamarin liidauksessa. Firman ennakoivista ohjeista on tärkeä sopia ja keskustella yhdessä, vain silloin ne voivat todella toimia ennaltaehkäisevästi. Molemmat tukimallit kirvoittivat lisäksi hyvää keskustelua työntekijöiden hyvinvoinnin tärkeydestä, voimavaroista ja riskien arvioinnista.

27.9.2024 Syväsukellus talouteen ja myyntiin
Syyskuun viimeisenä perjantaina toimarimme Ville esitteli alan tilannetta ja Bytecraftin lukuja. Tuloksemme ja liikevaihtomme on kasvanut erinomaisesti siitäkin huolimatta että yleinen tilalle alalla on ollut viime vuosina haastavahko. Sen lisäksi Ville kertoi myynnistämme ja uusista avauksista. Niiden perusteella myös Bytecraftin tulevaisuus näyttää erittäin valoisalta!

27.9.2024 13.9. Kirja- ja koodiesittely: Domain Modeling Made Functional
Konsulttimme Mikko veti Pöhinä-esityksen kirjasta Domain Modeling Made Functional: Tackle Software Complexicity with Domain-Driven Design and F#. Iso osa esittelyä oli omistettu myös Mikon omalle harjoitusprojektille kirjan aiheista, jossa hän oli toteuttanut kirjassa esitellyn tilausprosessin web sovelluksena. Kirja esittelee Domain Driven Designin (DDD) perusteet ja hyppää sitten syvään F#-päätyyn, jossa käydään läpi miten mallinnettu domain voidaan toteuttaa F# kielellä. Kirja löytyy myös verkosta osoitteesta https://fsharpforfunandprofit.com/books/
Mikon mielestä DDD:n hyödyllisin asia on Event Storming, jossa kaikki projektiin osallistuvat: sekä liiketoiminnan asiantuntijat, että kehittäjät, kutsutaan yhteen piirtämään, mallintamaan ja rakentamaan yhteistä mallia ja kehittämään yhteiskäyttöistä sanastoa. Event Stormingista löytyy myös paljon verkkoluentoja, sekä Eric Evansin kirja “The blue book” eli Domain-Driven Design.
Mikko esitteli harjoitusprojektin F# web stackia ja kertoi, miten hän hyödynsi kirjan eri aiheita käytännössä. Harjoitusprojektin F# toteutus oli tuotantovalmis vertikaali kirjan tilausprosessiesimerkistä sisältäen asynkronisen html käyttöliittymän validointeineen, domain mallin ja liiketoimintalogiikan, tietokannan migraatioineen, yksikkö-, integraatio- ja e2e testit.
Käytetty tekkistackki: HTML, Bootstrap, HTMX, F#, Asp.Net, Giraffe, Dapper, SQL Server, FsUnit, Validus, Canopy. Käyttöliittymässä käytetty HTMX herätti kiinnostusta potentiaalisena vaihtoehtoina yleisesti käytössä oleville web frontend frameworkeille. Tästä onkin tulossa lisää pöhinää myöhemmin.

30.8.2024 Kollaboratiivinen työkaluesittely
Elokuun viimeisenä perjantaina pöhisimme käytetyimmistä työkaluistamme. Napakasti aikataulutetun esittelyn lomassa ehti suht lyhyessä ajassa viritä paljon erilaisia keskusteluja!
Vertailimme vaihtoehtoja usean monitorin vs. usean digitaalisen työpöydän välillä sekä erilaisia IDE:jä (esim. VSCode ja IntelliJ IDEA), pohdimme eri ohjelmointikielien vahvuusalueita ja mihin tarkoituksiin ne parhaiten soveltuvat, sekä kävimme läpi Git-praktiikoita. Keskustelimme myös eri käyttöjärjestelmistä ja debuggereista.
Työkalusetit ovat monelle yksilökohtaisia - osa käyttää todella paljon erilaisia työkaluja, kun taas jollain periaate saattaa olla “jos sitä ei löydy IDE:stä niin sitä ei tarvitse”. Erilaisia toimivia tapoja on paljon! Osa on käyttänyt GenAI-työkaluja työn apuna jo vuosia ennen niiden yleistymistä ja osa ei ole kokenut niitä vielä hyödyllisiksi itselleen. Lisäksi keskustelimme erilaisista hyödyllisistä kirjastoista ja frameworkeista, kuten Tailwind CSS.
Digitaaliset työkalut eivät ole ongelmanratkaisussa kokonaan korvanneet paperia ja kynää. Keskustelusta ilmeni, että valkotaulu ja post-it-laput ovat edelleen osalle Software Craftereista olennaisia työkaluja ja tulevat olemaan sitä jatkossakin.
Kokeneet konsulttimme saivat toisiltaan hyviä vinkkejä ja kaikki oppivat jotain uutta - erinomainen esimerkki Perjantaipöhinästämme siis!

16.8.2024 Funktionaalinen ohjelmointi ja oliomaailma
Perjantaina 16.8. konsulttimme Mikko piti Pöhinän pragmaattisesta näkökulmasta siihen, miten funktionaalisen ohjelmoinnin parhaat opit siirtyvät oliomaailmaan. Pöhinöissä käsiteltiin muun muassa sitä, miten funktionaalinen- ja olio-ohjelmointi eroavat toisistaan, vai eroavatko ollenkaan.
Mikko on havainnut että parhaat tavat (best practices) toimivat molemmissa paradigmoissa yli rajojen. Funktionaalisen ohjelmoinnin tilanhallinnan parhaat tavat voi tuoda olio-maailmaan. Funktionaalisen ohjelmoinnin hyödyt voivat myös luoda motivaatiota opiskella sitä, vaikka sen kanssa ei työskentelisikään päivittäin. Lisäksi käsiteltiin monadien tuomista käytännön tasolle. Loppujen lopuksi tärkeää on pitää mukana pragmaattinen näkökulma - ei pakoteta paradigmoja sinne, minne ne eivät sovi.

9.8.2024 Paluu kesälaitumilta
Elokuun toisena perjantaina byteläiset kokoontuivat toimistolle ja etänä ensimmäisiin kesäkauden jälkeisiin Pöhinöihin. Jaoimme kesäkuulumisia, vapaa-ajalla tehtyjä omia devausprojekteja sekä tuoreimpia työkuulumisia. Lisäksi käsittelimme ajankohtaisia Byte-aiheita. Paluu sorvin ääreen tuntuu aina mukavammalta kun työ on mielenkiintoista ja sen voi jakaa tämän porukan kanssa!

14.6.2024 Paulan tervetuliaiskakkua
Kevätkauden viimeisissä pöhinöissä kesäkuun puolivälissä päästiin toivottamaan tervetulleeksi uusi software crafterimme Paula! Tervetuloa Paula joukkoon iloiseen!
Kakun syönnin lomassa vaihdettiin kuulumisia ja keskusteltiin tiiviisti päivän polttavista Byte-aiheista ja kesäsuunnitelmista.
Bytecraft toivottaa hyvää juhannusta ja hyvää kesää 2024!

24.5.2024 Funktionaalinen ohjelmointi vol. 3
Kolmannessa funktionaalisen ohjelmoinnin perjantaipöhinässä mentiin aiheessa edellisiäkin syvemmälle. Pöhinäsetissä käsiteltiin tai sivuttiin mm. algebrallisia datatyyppejä, efektisysteemejä, lazy evaluationia ja häntärekursiota. Antti kertoi että monadien lisäksi on olemassa muitakin tyyppiluokkia, kuten functor, group, monoid ja semigroup.
Esityksessä käytiin läpi myös erilaisia strategioita siihen, että miten “referential transparency”:yn päästään. Efektisysteemeihin liittyen käsiteltiin sitä, että tyypillisesti immutabilityä käytetään referential transparencyn saavuttamiseen, mutta immutability ei ole vaatimus funktionaaliselle ohjelominnille. Mutable referencyt täyttävät tuon “referential transparencyn”.

17.5.2024 Kesäpäivät
Toukokuisena lämpimänä perjantaina Byteläiset kokoontuivat toimistolle ja lähtivät kohti jousiammuntahallia! Saimme hyvää ohjausta mielenkiintoisessa lajissa ja sen myötä paljon hienoja onnistumisen kokemuksia. Illaksi siirryttiin syömään georgialaista ruokaa - ruoka oli hyvää ja sitä riitti.
Käytimme myös hyväksi kaunista keliä puistoilemalla useassa eri vaiheessa.
Olipa jälleen mukavaa kohdata yhdessä toinen toisemme työkuvioiden ulkopuolella!

3.5.2024 Git versionhallinta
Toukokuun alussa Jaakko tutustutti byteläiset gitin maailmaan. Git on hajautettu versionhallintajärjestelmä. Perjantaipöhinässä käytiin läpi erilaisia käytäntöjä gitin ympärillä, kuten erilaisia enemmän tai vähemmän käytettyjä komentoja sekä työtäpoja. Lisäksi keskusteltiin eri ihmisten omista tavoista käyttää gittiä.

26.4.2024 Pre-vappu
Huhtikuun viimeisissä pöhinöissä oltiin jo hieman vapputunnelmissa! Toimisto oli saanut koristeita ja tarjolla oli munkkeja ja simaa. Byteläisillä oli kaapeista kaivettuja vanhoja opiskeluhaalareita ja muuta vappuisaa pukeutumista. Viikoittaisen kuulumiskierroksen lisäksi jaoimme näissä rennommissa pöhinöissä myös muistoja opiskeluajoista!

19.4.2024 Funktionaalinen ohjelmointi, Vol
Funktionaalisen ohjelmoinnin pöhinäsarjan toisessa osassa käytiin läpi aihetta teknisemmästä näkökulmasta. Osa osallistujista seurasi etänä, toimistolla oleville oli tarjolla myös lounaspitsaa.
Aiheina oli: Mitä tarkoittavat summa- ja tulotyypit, ja mitä tekemistä matematiikalla on ohjelmoinnin kanssa? Entä mitä tarkoittaa se että puhtaammissa funktionaalisissa kielissä funktiot ja muuttujat ovat sama asia? Vielä - mitä ovat korkeamman asteen funktiot tai paloittain määritellyt funktiot? Lisäksi käytiin pieni katsaus Either/Maybe monadeihin ja deklaratiiviseen tapaan käsitellä virheitä koodissa.
Aihe herätti niin paljon mielenkiintoa ja paljon jäi vielä käsittelemättä, joten Antti esittelee aihetta vieläkin syvemmälle menevässä kolmannessa sessiossa myöhemmin keväällä.

12.4.2024 Funktionaalinen ohjelmointiparadigma
Huhtikuun puolivälissä pöhinöissä käsiteltiin funktionaalista ohjelmointiparadigmaa. Antin pöhinäesitys keskittyi tällä kertaa siihen, missä tilanteissa ja miksi juuri niissä funktionaalinen ohjelmointi on oikea työkalu - ja missä taas ei. Esityksen kohderyhmänä olivat niin ei-teknistä työtä tekevät kuin koodarit, joille aihepiiri ei ollut kovin tuttu.
Pöhinöissä käytiin läpi referential transparencyä, puhtaita funktioita, immutabilityä, sekä algebrallisia rakenteita. Antti kertoi, miten matemaattista intuitiota voi käytännössä soveltaa ohjelmistokehityksessä niin, että päästään eroon ikävistä bugeista ja ongelmista.
Lopuksi hän esitteli muutamia koodiesimerkkejä sivuvaikutusten (side effect) aiheuttamista ongelmista ja siitä, miten epäpuhtaudet johtavat koodin vaikeampaan reasonointiin.
Nämä pöhinät olivat ensimmäinen osa kaksiosaisen funktionaalisen ohjelmointiparadigmaesityksen sarjassa. Seuraavalla kerralla Antti käsittelee aihetta hieman teknisemmästä näkökulmasta.

15.3.2024 Uusien työntekijöiden juhlistus
Maaliskuun puolivälissä saimme kaksi uutta työntekijää - softakehittäjä Mikon sekä Account manager Tarun! Mikko on ollut alalla pitkään, ja tuo mukanaan mm. erinomaista mentorihenkeä. Myynnin ja markkinoinnin opiskelija Taru pääsi meille aivan uuteen rooliin osa-aikaiseksi myynnin ja asiakastyytyväisyyden tekijäksi. Näille tyypeille kannatti todellakin samalla viikoilla kippistellä ja korkata kakku!