Zaterdag 17 mei 2025 was het zover: de allerlaatste editie van .NET Saturday. Dennis Vroegop opende de dag met een heldere boodschap: het doel van deze meetup-reeks is bereikt. Na meer dan 25 jaar community-opbouw, kennisdeling en enthousiasme is .NET volwassen geworden. Deze blogpost is geschreven voor een technisch publiek, maar iedereen is welkom om het te lezen.
Tijdens deze sloteditie waren er weer volop inspirerende sessies. In deze blog neem ik je mee langs een aantal van de talks die indruk maakten – en wat we er als ontwikkelaars van kunnen meenemen.
Overzicht houden in je dependencies – Supply Chain Security
Tom van den Berg beet het spits af met een sessie over supply chain security, een onderwerp dat steeds belangrijker wordt in een wereld waarin we nauwelijks nog alles zelf schrijven. Hij schetste hoe slechts een fractie van je code echt door je team is gemaakt. Het overgrote deel – denk aan libraries, packages, transitive dependencies – komt van buiten. En daarmee komen ook risico’s mee, zoals bleek uit eerdere kwetsbaarheden als Log4Shell en de SolarWinds-aanval.
Tom benadrukte het belang van zichtbaarheid: weet wat je binnenhaalt. Tools als Trivy kunnen je helpen om licentieconflicten en kwetsbaarheden te detecteren, nog voordat je een PR merged. Ook wees hij op het belang van een SBOM (Software Bill of Materials), straks zelfs verplicht onder de aankomende Cyber Resilience Act. En ja, zelfs je “NuGet Prefix Reserved”, bleek ineens een veiligheidsmaatregel. Dit voorkomt dat anderen packages onder jouw naam kunnen reserveren.
Wat deze sessie sterk maakte, was de vertaling van beleidsniveau naar praktische ontwikkelkeuzes. Minder afhankelijkheden, zorgvuldiger keuzes, en iets vaker de vraag: “Moeten we deze package écht gebruiken?”
Inzicht in gedrag met Application Insights
Mart de Graaf nam ons daarna mee in de wereld van observability, met een focus op Azure Application Insights. Waar veel developers vooral logs als naslag gebruiken, liet Mart zien hoe je met structured logging, metrics en dashboards waardevolle realtime inzichten kunt krijgen in het gedrag van je applicatie.
Hij toonde hoe je met KQL (Kusto Query Language) gericht kunt zoeken in je logdata, hoe je dashboards maakt die je direct inzicht geven in performance of errors en hoe sampling je kan helpen om log noise te reduceren. Ook custom dimensions kwamen voorbij – kleine toevoegingen aan je logs die net dat beetje extra context geven.
Wat vooral bleef hangen, was hoe je Application Insights niet alleen kunt gebruiken voor troubleshooting, maar juist ook als proactieve tool om je applicatie te begrijpen. En met een beetje extra moeite kun je zelfs workbooks bouwen en ze automatiseren via Bicep. Observability als vast onderdeel van je ontwikkelcyclus, in plaats van een afterthought.
Azure Container Apps als sweet spot
Geert van der Cruijsen nam ons daarna mee naar de wereld van Azure Container Apps (ACA). Voor wie Kubernetes te complex vindt, maar Azure App Services te beperkt, vormen Container Apps een krachtig alternatief. Geert legde uit hoe Azure Container Services (ACA) een hoop DevOps-zorgen wegneemt – geen clusterbeheer, geen pod-scheduling, gewoon je container deployen en schalen op events of load.
Wat de sessie overtuigend maakte, was hoe soepel de developer experience is. Geert demonstreerde onder andere blue/green deployments, schaalbare background jobs, en integratie met Dapr en service mesh. In combinatie met het nieuwe Aspire-dashboard krijg je als developer bijna vanzelf een goed inzicht in de gezondheid van je applicatie.
De boodschap was helder: ACA is geen vervanging van Kubernetes, maar wél een bijzonder aantrekkelijke optie voor veel workloads waar snelheid, eenvoud en schaalbaarheid belangrijk zijn – zonder zelf een platformteam op te tuigen.
Kubernetes
Voor wie dan toch nieuwsgierig bleef naar Kubernetes (k8s), was er de sessie van Joost van Uitert. Geen marketingverhaal, maar een technisch diepgaande sessie over hoe Kubernetes van binnenuit werkt. Joost bouwde een eigen cluster op een mini-pc met een N100-processor en gaf uitleg over het hart van Kubernetes: etcd, de control plane, en de scheduler.
Hij legde op een heldere manier uit hoe Kubernetes het verschil bijhoudt tussen de ‘desired state’ en de ‘current state’ en hoe k8s met behulp van controllers en reconciliation loops probeert die twee op elkaar af te laten stemmen. Ook de Raft-algoritmes achter etcd kwamen aan bod, net als hoe networking via kube-proxy wordt geregeld.
Het gaf een beter begrip van waarom k8s soms zo “complex” voelt – maar ook hoe robuust en doordacht het systeem eigenlijk is. Vooral als je je tooling op orde hebt, zoals K9s, wordt het managen van een cluster ineens veel tastbaarder.
Nullable & Required Properties
Tot slot gaf Shawn Wildermuth een verhelderende sessie over het juiste gebruik van nullable en required properties in C#. Hoewel kort van duur, raakte zijn verhaal precies de kern van een veelvoorkomend pijnpunt: de impliciete aannames in onze modellen.
Met de introductie van required-properties en nullable-reference types in C# kun je als ontwikkelaar veel explicieter zijn over je intenties. Wat móet er aanwezig zijn in een object en wat mag eventueel ontbreken? Shawn liet zien hoe deze features niet alleen bugs voorkomen, maar vooral ook communicatie verbeteren – zowel binnen je team als in de contracten tussen verschillende lagen of systemen.
Zijn uitleg over het semantische verschil tussen “iets wat een object is” en “iets wat een object wil zijn” – de grens tussen optional en required – gaf echt stof tot nadenken. Vooral bij het ontwerpen van DTO’s of API-modellen is het belangrijk om je model duidelijk uit te spreken: dit moet er zijn, dit mag null zijn en dit mag zelfs helemaal ontbreken.
Conclusie
Voor mij was het vooral een dag van verdieping hernieuwde inspiratie. Als je kijkt naar hoe breed het scala aan onderwerpen was – van supply chain security tot observability, van managed containers tot type safety – dan zie je precies waarom .NET vandaag nog net zo relevant is als toen het begon.
Dank aan alle sprekers, organisatoren en bezoekers voor deze prachtige afsluiter. En zoals Dennis mooi verwoordde: “Het doel is bereikt.” Maar dat betekent natuurlijk niet dat we stoppen met leren.