Leren over resilient software development... met Minecraft!
Hoe bouw je software die niet kapot gaat?
Als developer werk ik vaak met Kubernetes en andere complexe systemen. De grootste uitdaging in moderne software? Zorgen dat je systeem blijft draaien, zelfs als er iets misgaat. Dit heet resilient software: applicaties die zichzelf herstellen, slim omgaan met crashes en betrouwbaar blijven draaien ondanks technische problemen.
Wanneer teams vragen hoe ze hun applicaties robuuster kunnen maken, is het standaard antwoord vaak:
“Maak gewoon resilient software.”
Maar hoe moeilijk is dat nou echt? Ik wilde het zelf ervaren – en dan niet in een saaie webserver-setup, maar in een omgeving waar ik direct feedback kreeg.
Waarom Minecraft?
Tijdens een presentatie over Learning Through Tinkering door oud Info Support-collega Tom Cools, werd één ding me duidelijk: je leert het snelst als je de cognitieve belasting laag houdt. Oftewel: focus op één nieuw concept tegelijk en gebruik tools die je al kent.
Voor mij was dat Minecraft met de ComputerCraft (CCTweaked) mod. Ik kende Lua al goed, dus kon ik me volledig focussen op resilient software, zonder afgeleid te worden door een nieuwe programmeertaal.
Een leger robots laten minen
Mijn doel was ambitieus: bouw een team van samenwerkende robots die automatisch een mijngebied uitgraven op zoek naar diamonds.
Vergelijk het met microservices in de cloud: verschillende robots (services) die samenwerken om een taak uit te voeren. Maar er waren drie belangrijke eisen:
- Als één robot crasht, moeten de anderen door kunnen werken (zoals servers in een cloudomgeving).
- Er moet een leider zijn: één robot moet de beslissingen nemen (leader election).
- Als de robots elkaar even niet kunnen bereiken, moet het systeem zichzelf herstellen.
Zo laat je robots minen!
Lua zonder luxe
De robots werden geprogrammeerd in Lua via de CCTweaked-mod. En hier begon de echte uitdaging: geen fancy libraries of handige functies zoals in Java of Node.js. Zelfs iets simpels als string.split() moest ik zelf bouwen. Dit voelde alsof je probeert te koken zonder messen – behoorlijk wennen!

Leader election (wie is de baas?)
Voor leader election dacht ik eerst aan Raft, het algoritme dat Kubernetes gebruikt. Maar dat bleek véél te complex. Toen ontdekte ik het Bully Algorithm – simpel, maar effectief:
- Elke robot krijgt een uniek ID.
- Wil een robot de leider zijn? Dan broadcast hij zijn ID.
- Robots met een hoger ID reageren met “Nope, ik ben de baas!”.
- De robot met het hoogste ID wint en wordt leider.
Wat begon als een grootse ambitie (een volledig automatisch mijngebied van 32×32 blocks) eindigde als… een bescheiden 3×3 blocks. En zelfs toen werkten mijn robots niet perfect – ze lieten hier en daar wat blocks liggen.
Maar juist dát leerde me het meest! Ik zag waarom resilient software zo moeilijk is. Robots liepen elkaar in de weg, maakten verkeerde aannames en crashten compleet.
En Tom Cools had gelijk: door de cognitieve belasting te beperken en één uitdaging tegelijk aan te pakken, begreep ik distributed systems op een veel dieper niveau.

Wat heb ik geleerd?
- Begin klein – mijn eerste werkende versie was gewoon één robot die een rechte tunnel groef. Maar hey, hij vond diamonds!
- Robuuste software bouwen is véél moeilijker dan je denkt – zelfs in een ‘simpele’ omgeving als Minecraft.
- Beperk je focus – leer één nieuw concept per keer.
- Zelf doen werkt beter dan boeken lezen – fouten zien gebeuren is de beste manier om te leren.
Zelf aan de slag?
Wil jij ook leren over resilient software? Begin met iets wat je kent en voeg één nieuwe uitdaging toe. Denk na over:
- Hoe ga je om met fouten?
- Wat gebeurt er als een deel van je systeem crasht?
- Hoe zorg je dat je applicatie zichzelf herstelt?
Voor mij was Minecraft dé perfecte playground. Maar misschien is dat voor jou iets anders – zoek iets wat je leuk vindt en experimenteer!
Oh, en voor wie het zich afvraagt: ja, ik heb uiteindelijk diamonds gevonden. Soms zijn de simpelste oplossingen gewoon het best. 😉
