
Feb 14, 2025 How to build testable software?
Well-built software is easily testable. Considering testability is important right from the start, even before a single line of code is written. It is difficult, if not impossible, to add testability afterward to large systems.
Let’s start by examining how software functions.
Business logic observes inputs and controls outputs.
In tests, the situation is reversed. Tests control the input and observe the output.
In testable applications, it is essential that tests can control inputs as well as the entire state of the application. Tests must be able to set the system to the desired state.
The biggest challenge in testability is precisely controlling the inputs.
In unit tests, it is possible to fully control the application. For example, the clock, stdin, stdout, env, databases, etc., can be managed by creating abstractions for them and using dependency injection.
At higher levels of testing, it is also necessary to control the most essential inputs, even if not everything can be controlled, such as the system clock. It is important to ask: Can the application be easily set to the desired state? Can tests be run in parallel? These are crucial questions that should be considered from the beginning.
Tests should also avoid hardcoded fixtures of the application’s internal state (e.g., database state). A better approach is for tests to always construct the desired state from scratch using the application’s own interfaces.
But how is it possible to build testable large systems that may consist of dozens or even hundreds of applications? Event-driven architecture is one possible solution. This enables tests to orchestrate the system and observe the event stream.
In summary, building testable applications is possible by ensuring that inputs can be controlled and outputs can be observed at all levels of the system.

Feb 7, 2025 What process tools should a developer know?
Five perspectives on processes that crafter should remember.
Understanding software development processes, combined with technical expertise, is a tremendous asset for a software developer. One must be able to see beyond an individual feature and grasp the bigger picture of how things evolve from an idea into a working solution. Writing code is surprisingly a small part of this process.
Speeding Up Lead Times. Reducing lead times from weeks or months to hours or minutes forces (almost 😉) all process issues to be solved. Long lead times only cause chaos (heroics) on multiple levels. Speed itself is not the goal, but a learning organization inevitably iterates quickly. An organization that iterates or reacts slowly focuses on its own chaos rather than learning.
There’s Always Only One Bottleneck. At any given time, there is only one bottleneck in the system, which dictates how the whole process functions. Identifying and solving it requires understanding where the work enters the system. Work should be fed into the system according to the bottleneck’s capacity. Think about how you received your last tickets—was there a carefully selected analysis behind it, considering the workload already in progress?
Estimates Are Useless, but Estimating Is Essential. Using estimates outside the team only leads to misunderstandings, but the act of estimating itself is a valuable tool for identifying the next most important task.
Continuous Improvement Is Constant and Unrestricted. Improving things is part of every moment of every day. It doesn’t require permission or a budget. The more independently a team can operate, the better its ability to improve processes as well. Bureaucracy eventually kills even the strongest process enthusiast’s motivation.
“Just let me code,” said the consultant at the SAFe planning session for the next increment.
“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

Nov 15, 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.

Nov 8, 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.

Oct 18, 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!

Oct 11, 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.

Oct 4, 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.

Sep 27, 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!

Sep 27, 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.

Aug 30, 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!

Aug 16, 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.

Aug 9, 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!

Jun 14, 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!

May 24, 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”.

May 17, 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!

May 3, 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ä.

Apr 26, 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!

Apr 19, 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ä.

Apr 12, 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.

Mar 15, 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!