Recore Systems werkt aan nieuwe manycore hardware, een nieuwe programmeeromgeving en een nieuwe runtime voor manycore embedded hardware. Hier kan Michel Rosien doen wat hij het liefste doet: betrokken zijn bij het ontwerp en de implementatie van een nieuwe softwarearchitectuur.
Ik ben afgelopen september bij Recore Systems begonnen in het team dat de runtime, een soort besturingssysteem, implementeert voor de manycore hardware die het bedrijf eveneens ontwikkelt. Ik kreeg de vraag of ik mijn gedachten ook wilde laten gaan over de onderliggende softwarearchitectuur. Ik kijk altijd al naar hoe de architectuur in elkaar zit en hoe deze beter kan, en nu had ik de kans om er vanaf het begin bij betrokken te zijn. Dus deze kans heb ik natuurlijk met beide handen aangegrepen.
Bij Recore volgen we de Scrum-methode om continu onze verwachtingen en voortgang in de gaten te houden. We zijn zelfsturend en plannen ons werk in sprints van twee weken, die eindigen met een demo aan de stakeholders. Iedere morgen komen we bij elkaar voor een stand-up van vijftien minuten. Dan vertelt iedereen wat hij of zij heeft gedaan, van plan is te gaan doen, en wie hulp nodig heeft, vraagt daarom. We delen ideeën, bespreken uiteenlopende standpunten en gaan stap voor stap verder.

Maandag: een nieuwe start
Mijn werk doe ik niet alleen, dus ik begin deze week met een overleg met onze lead architect over een nieuwe feature die we gaan ontwerpen. Hij houdt zicht op de softwarearchitectuur van de runtime én de ontwikkelomgeving. Deze kunnen niet zonder elkaar: in de toekomst zal een programmeur zijn programma gaan schrijven in de ontwikkelomgeving en de runtime moet dat op de een of andere manier laten draaien op de hardware.
Om versimpeld een tipje van de sluier op te lichten: de applicatie wordt vertaald in parallelle of sequentiële taken en datacommunicatiekanalen tussen de taken. Dat zal tijdens runtime verder vertaald moeten worden naar het op de juiste tijd starten van de juiste taak op de juiste van de vele cores in de hardware. Het is dus essentieel om een simpele ‘task create’ en ‘channel create’ inclusief een wat, waar, en wanneer goed door te geven van de softwareontwikkelomgeving naar de runtime. Het klinkt erg simpel zo, maar een betrouwbare afhandeling van dit soort simpele functieaanroepen heeft voor een manycore systeem wel wat afstemming nodig.
Waar de lead architect het totale softwarearchitectuurontwerp in de gaten houdt, focus ik op de runtime. We praten over het ontwerp op een hoog abstractieniveau en bekijken samen hoe onze ideeën over de nieuwe feature passen in de al bestaande delen van de architectuur. Terwijl we dit doen, hou ik de implementatiedetails in mijn achterhoofd om te zorgen dat we goede ontwerpkeuzes maken.
Aan het eind van het gesprek hebben we een duidelijk idee over de volgende stap in de architectuur. We hebben er alle vertrouwen in dat de implementaties van de runtime die we tot nu toe hebben opgeleverd goed zullen blijven functioneren. Ook hebben we de planning van de nieuwe feature in de steigers gezet.
Dinsdag: runtime meets sde
Omdat de afstemming tussen runtime en softwareontwikkelomgeving (sde) zo cruciaal is, overleg ik regelmatig met de verantwoordelijke van het sde-team. Zo ook vandaag. We bespreken hoe we de onderlinge dataflowafhandeling verder vorm kunnen geven, zodat runtime en sde goed op elkaar aansluiten. Dit is ook nodig om de programmeur uiteindelijk in de ontwikkelomgeving te laten zien welke door de runtime gesuggereerde verbeteringen hij nog kan doorvoeren in zijn programma. Na de bespreking werk ik de dataflow uit in een high-level overzichtstekening met alle benodigde interactiedetails. Dit is een snelle manier om te zorgen dat iedereen hetzelfde plaatje in zijn hoofd heeft vóórdat we beginnen aan de implementatie.
Idealiter ontwikkelen we de runtime en de ontwikkelomgeving hand in hand, zodat we dezelfde aannames en functies gebruiken. De realiteit is dat soms óf het ene óf het andere onderdeel een paar stappen voorloopt. Vorige week was dat het geval met de sde. Daardoor is er een kleine mismatch ontstaan met een stuk runtime dat ik vorige week heb opgeleverd. Die haal ik er nog even uit voordat ik naar huis ga.
Woensdag: implementatiedag
Vandaag werk ik aan de implementatie van een statemachine die ervoor zorgt dat de synchronisatie tussen de verschillende componenten in ons systeem goed verloopt.
Donderdag: het handwerk eruit
Elke keer dat wij met het runtime-team een nieuwe release opleveren, maken we een build-package dat de softwareontwikkelomgeving gebruikt tijdens het compileren. Om het buildproces te versnellen, wil ik het verder automatiseren in Bamboo, een tool waarmee je in één workflow automatisch releases kunt bouwen, testen en vrijgeven. Over een paar maanden zitten we dicht tegen de oplevering van het Flexaware-project en dan moet dit goed en supersnel lopen.
Ik neem even de tijd om me te verdiepen in bash-scripting, en voordat ik het doorheb, duik ik er tot op de bodem in en zoek ik uit hoe het nu écht werkt. Het kost wat tijd, maar vanaf nu is het maken en naar de juiste plek kopiëren van de releasepackage een kwestie van één druk op de knop.
Er is vandaag ook nog tijd voor overleg met de rest van het runtime-team over hoe we verder gaan met de implementatie van de features uit de sprint.
Vrijdag: terug- en voortuitblikken
Naast alles wat ik in de vorige dagen heb gedaan, zijn we met het hele team ook hard bezig geweest met implementatie en code schrijven. Zo aan het eind van de week is het even tijd voor een terugblik in de vorm van een codereview. Vandaag neem ik de code van mijn collega’s eens goed onder de loep en zij die van mij om te kijken of het nog beter kan. Ook checken we dat we alles duidelijk hebben gedocumenteerd.
Behalve terug kijken we ook vooruit. Ik begin alvast aan een initieel schetsmatig ontwerp voor de volgende epic, en denk na over concepten, interacties en structuur. Een nieuwe epic betekent weer een nieuw stuk waarbij ik vanaf het begin betrokken ben, een nieuw stukje architectuur dat nog niet vastligt. Dit is het werk dat ik graag doe.