Deze week stond volledig in het teken van diepgaande refactoring en infrastructuurverbeteringen. Van het oplossen van mysterieuze NuGet-problemen tot het opzetten van een complete Docker-architectuur - het was een week vol technische uitdagingen en leermomenten.
De Grote NuGet Mystery Ontrafeling
De week begon met het oplossen van een hardnekkig probleem dat me al een tijdje bezighield: bepaalde NuGet packages werden simpelweg niet gegenereerd. Na uitgebreid onderzoek ontdekte ik de oorzaak - een subtiele maar cruciale fout in onze solution-structuur.
Het bleek dat we werkten met twee verschillende .sln files, waarbij de GitHub Action voor het builden en deployen van NuGet packages gebruikmaakte van een solution file die niet alle benodigde projecten bevatte. Dit was het resultaat van een eerdere refactoring.
De oplossing vereiste een grootschalige refactoring waarbij ik alle "NuGet-only" projecten moest toevoegen aan de juiste solution. Dit bracht echter nieuwe uitdagingen met zich mee, vooral rond interne projectreferenties die niet meer klopten door verschillend naamgeving tussen source- en NuGet-projecten.
Centraal Package Management met Directory.Packages.props
Een belangrijk onderdeel van deze week was het implementeren van centrale package versioning via een Directory.Packages.props file. Dit Microsoft-mechanisme zorgt ervoor dat alle NuGet package versies centraal beheerd worden, waardoor inconsistenties tussen projecten voorkomen worden.
Het refactoren van alle projectfiles om gebruik te maken van dit systeem was intensief werk - elke versie-specificatie moest uit de individuele projectfiles gehaald en naar het centrale bestand verplaatst worden. De voordelen zijn echter significant: consistente versioning, eenvoudiger onderhoud en verminderde kans op dependency conflicts.
Eerste Klantgesprek: Een Mijlpaal
Een persoonlijke mijlpaal deze week was mijn eerste echte klantgesprek met Jos over zijn blog website. Ondanks de initiële nervositeit verliep het gesprek uitstekend. Ik kon de volledige functionaliteit demonstreren, van het aanmaken van blogposts tot het beheren van tags en instellingen.
Een interessant verzoek kwam naar voren: seizoensgebonden banners voor de website. Jos wilde dezelfde afbeelding maar dan aangepast naar de kleurpaletten van verschillende seizoenen. Dit type functionele requirement gathering is precies wat je als software engineer regelmatig tegenkomt - apparentelijk eenvoudige verzoeken die eigenlijk veel zeggen over user experience en branding.
De feedback na het gesprek was waardevol: soms kwam ik wat te formeel over, waardoor er afstand ontstond. Een belangrijke les in stakeholder management - het vinden van de juiste balans tussen professionaliteit en toegankelijkheid.
Docker Architectuur: Van Monoliet naar Microservices
Het tweede grote project deze week was het opzetten van een complete Docker-architectuur voor onze StreamDesk applicatie. Wat begon als een enkele Dockerfile evolueerde naar een volledige multi-container setup met proper service discovery en netwerk isolatie.
De architectuur bestaat nu uit:
Gescheiden containers voor server (API) en client
Service dependencies via Docker Compose
Eigen netwerk (streamdesk-net) voor geïsoleerde communicatie
Lokale services voor RabbitMQ, MailHog, Seq en ArangoDB
Het implementeren van Docker networks was particularly interessant. Door een custom bridge network te definiëren, krijg je automatisch service discovery - containers kunnen elkaar vinden via hun servicenaam dankzij Docker's interne DNS. Dit elimineert hardcoded IP-adressen en maakt de setup veel flexibeler.
Technische Diepduik: Cherry Picking en Versioning
Een nieuw concept dat ik deze week leerde was cherry picking commits. Dit Git-mechanisme laat toe om specifieke commits van andere branches over te nemen zonder een volledige merge. Bijzonder handig wanneer je clean, atomic commits maakt - iets waar ik bewust op focus.
Voor NuGet versioning implementeerde ik een branch-gebaseerd systeem waarbij de pre-release identifier automatisch wordt aangepast op basis van de branch:
developbranch →1.0.0-develop.123release-candidatebranch →1.0.0-rc.456
Dit maakt het veel eenvoudiger om verschillende versies parallel te ontwikkelen en te testen.
Uitdagingen en Leermomenten
De grootste uitdaging deze week was het debuggen van de Docker setup. Van DNS-problemen door VPN-configuraties tot missing configuration files - elk probleem leerde me meer over containerization en Linux-omgevingen.
Een cruciale les was het besef dat Docker containers volledig self-contained moeten zijn. Afhankelijkheden van externe services (zoals RabbitMQ op specifieke IP-adressen) maken je setup fragiel. Door alles lokaal op te zetten via Docker Compose werd de architectuur veel robuuster.
Reflectie en Vooruitblik
Deze week toonde duidelijk aan hoe verschillende aspecten van software development met elkaar verbonden zijn. Een simpel NuGet-probleem leidde tot solution refactoring, wat weer package management verbeteringen triggerde, wat uiteindelijk resulteerde in betere versioning practices.
Het klantgesprek was persoonlijk een grote stap - van puur technisch werk naar stakeholder communicatie. De feedback helpt me groeien in deze soft skills die net zo belangrijk zijn als technische vaardigheden.
Voor volgende week staat het finaliseren van de Docker setup op de planning Het gevoel dat je als software engineer constant leert en groeit, dat vind ik het mooiste aan dit vak.