Benny Emmers

Softwarearchitect en lead developer · .NET, Azure, integratiearchitectuur

Brasschaat, België Nederlands (moedertaal), Engels (vloeiend), Frans (basis), Duits (basis) bennyemmers@benlar.be winkelduel.be English version

Profiel

Softwarearchitect en lead developer. Eenendertig jaar in het vak, .NET sinds 2002, de laatste vier bij Overseas, waar ik een Navision-landschap naar Business Central online gebracht heb en het integratieplatform eromheen in handen heb.

Ik ontwerp software die haar eigen ontwikkelaar overleeft. Isolatie tussen services, en plugins die functionaliteit toevoegen zonder iets te raken aan wat al draait. Verschillende systemen die ik ontworpen heb staan na meer dan vijf jaar nog in productie, en dat is de enige maat voor architectuur die ik vertrouw.

Ik ontwerp en ik bouw nog altijd zelf. In de meeste teams heb ik de technische leiding opgenomen: ontwerpkeuzes reviewen en developers coachen in het toepassen van SOLID. Drie oud-collega's hebben mij hun mentor genoemd, en één van hen schreef dat publiek op. Sinds april 2026 bouw ik daarnaast WinkelDuel alleen, en daar zit het recente handwerk met LLM's en vector search.

Huidige focus · najaar 2026

Vanaf eind september WinkelDuel op AKS krijgen, en daarbij zelf aan Docker, Kubernetes, YAML, Helm en deployment automation werken. Leren door te bouwen.

Loopbaan

sept 2022 tot nu

Overseas

Azure- en integratiearchitect

Distributie voor tax-free shops op luchthavens en cruiseschepen. Een team van drie, twee van ons developer, dus het werk valt hier niet uiteen in strikt afgebakende rollen.

Overseas Integration Platform · 12+ integraties in productie, verving Boomi

Een message-driven integratiearchitectuur op onafhankelijk uitrolbare NServiceBus-endpoints en plugins. In het oudere jargon is het een message-based SOA, en dat is het ook. Drie endpoints: één voor Business Central, één uitgaand, één inkomend. De twee message-endpoints spreken de protocollen van de tegenpartij, waaronder REST, FTP en XML, en draaien als Windows services op onze eigen servers. Eén plugin per integratie, elk in een eigen map met eigen assemblies, zodat een nieuwe flow uitgerold wordt zonder dat er iets verandert aan wat al draait. De deployment pipeline volgt diezelfde structuur. Ik ben ermee begonnen toen Bluebird stond, om de vele losse applicaties te vervangen die rechtstreeks met Navision communiceerden. Sommige waren in Python geschreven, andere zaten in SQL zelf, en er was geen gedeelde code. Meer dan een dozijn integraties draait erop als plugin: EDI, WMS, OrderEye, Slim, Multiscan, Rio, Entra ID-synchronisatie voor externe BI-gebruikers, het aanmaken van Jira-tickets, warehouse scan, bank statement scan, Stream, Zetes, ASN export, en sindsdien meer. Multiscan is een van de fysiekere: een toestel dat artikelen in drie dimensies meet, met een Blazor-scherm ervoor en een Python-oplossing erachter die het verving. Betrouwbaarheid was het uitgangspunt, en dat is precies wat de message-based opzet oplevert. Een bericht dat op een tijdelijke fout strandt blijft staan en kan opnieuw verwerkt worden, of die fout nu een weggevallen databaseconnectie was of een bug die pas de dag erna gefixt werd. Loopt er toch iets vast, dan krijgen de developers automatisch een melding met de diagnose, meestal voordat een gebruiker het gezien heeft.

Navision naar Business Central online · live 2025 · zes bedrijven

De migratie van begin tot eind geleid, inclusief het AL-extensiewerk in Business Central zelf en niet alleen de .NET-kant. Een SaaS-tenant heeft geen achterdeur, dus elke integratie moest naar de officiële API's. Die omzetting is doorgevoerd zonder functionele freeze, omdat de endpoints al geïsoleerd zaten achter hun eigen contracten. Dit is het duidelijkste rendement dat ik gezien heb op architectuur die jaren eerder is neergezet.

Bluebird · de B2B-webshop

Gegroeid uit de wekelijkse prijswijzigingsmail tot de webshop waar de meeste klanten van Overseas vandaag hun orders plaatsen, en die verving een Python-versie met betrouwbaarheidsproblemen. Angular front end, ASP.NET Core API, orders die in het ERP-systeem landen. Het liep eerst op onze eigen servers en verhuisde later naar Azure. Na de migratie naar Business Central is de prijssynchronisatie naar Azure Functions gegaan, verdeeld over twee queues: één bericht per klant om de prijzen op te halen, en het resultaat op een tweede queue die naar de database schrijft. Die splitsing levert throughput en betrouwbaarheid, want een fout herhaalt één stap in plaats van de hele run.

Document recognition en OrderEye · een paar honderd facturen per maand

Eerst magazijndocumenten: de barcodes op een gescande batch zoeken en de scan daarlangs in afzonderlijke documenten splitsen. Daarna bankafschriften, en die vroegen meer, namelijk genoeg uit elke pagina halen om ze aan de juiste bankrekening toe te wijzen. Een paar duizend van die twee in totaal, en daar hebben we geleerd hoe extractie zich in de praktijk gedraagt. OrderEye bouwt daarop, met Azure AI Document Intelligence als lezer. Aan de verkoopkant maakt het de verkooporder in Business Central aan en meldt het aan de klant elke regel waarvan de prijs in zijn eigen document afwijkt van de werkelijke prijs in BC. Aan de aankoopkant vergelijkt het wat de leverancier gestuurd heeft met wat er in BC staat. De gebruiker ziet in één oogopslag welke regels niet overeenkomen en corrigeert die manueel, waarna de correcties terug naar BC gaan. Business Central houdt een trace bij van alles wat OrderEye verwerkt heeft.

  • Bluebird en het integratieplatform delen een groot deel van hun code via interne NuGet packages. Eén uniforme manier van werken geldt voor alles wat hier gebouwd wordt, dus een fix in een gedeelde library komt in beide terecht. Beide staan vandaag op .NET 10, gemigreerd vanaf 8.
  • Azure DevOps opgezet en de release pipelines voor beide applicaties gebouwd. Staging draait voor beide op onze eigen servers. In productie staat alleen Bluebird op Azure, het integratieplatform blijft on premise.
  • Observability volgt diezelfde tweedeling. On premise vangt een middleware de logging en de niet-afgehandelde exceptions op, en het is die middleware die de meldingen naar de developers stuurt. Wat op Azure draait rapporteert in Application Insights. Elke API is beschreven met Swagger.
  • De code volgt OWASP, en de secrets zitten in Key Vault in plaats van in de configuratie. Persoonsgegevens vallen onder de GDPR, dus anonimisatie zit in het ontwerp overal waar de data niet herleidbaar hoeft te blijven.
  • Naast het ontwikkelwerk beheer ik de Azure-omgeving: de resources, de gebruikers op de tenant, de kosten, en de support wanneer iemand niet binnen raakt.
  • In het begin de opleiding gegeven, en ik review de technische ontwerpkeuzes van de andere developer.
  • Per omgeving een andere object graph in de IoC container, zodat staging en productie in configuratie verschillen en niet in code.

.NET 10, ASP.NET Core, Blazor, Business Central (AL), Azure App Service, Azure Functions, Azure Storage queues, Azure Blob storage, Application Insights, Entra ID, Azure AI Document Intelligence, NServiceBus, EF Core, SQL Server, Angular, REST, Swagger, SOAP, FTP, XML, Azure DevOps, OAuth 2

apr 2026 tot nu

WinkelDuel

Oprichter en ontwikkelaar

Prijsvergelijker voor Nederlandse en Belgische supermarkten. Live in de Microsoft Store, in Google Play en in de App Store. Zelf ontworpen, gebouwd, getest, uitgebracht en onderhouden.

  • Twaalf winkeladapters op publieke REST- en GraphQL-API's, met een door Playwright gestuurde Chromium voor de winkels die achter Akamai of Imperva zitten.
  • Één Blazor Hybrid UI die op Windows, Android en iOS draait via .NET MAUI. De API is ASP.NET Core op Azure App Service met PostgreSQL en EF Core.
  • De productmatching is gelaagd: de GTIN van de winkel zelf als die er is, dan regels, dan een gecachte en gevalideerde LLM-fallback voor titels die niet overeenkomen. Sinds augustus 2026 zitten daar embeddings op pgvector bij, hybride met de bestaande regels, op een lokaal ONNX-model van 384 dimensies achter een HNSW-index op cosine.
  • Voordat ik de embeddings aanzette heb ik een evaluatieset van bevestigde matches gebouwd en de bestaande regels daartegen gemeten. Die nulmeting legde dingen bloot waar ik niet op gerekend had. De LLM-fallback bleek een stuk minder vaak nodig dan ik had aangenomen. Maat en hoeveelheid zijn regelgebaseerd gebleven, want een model dat 1 L en 1,5 L door elkaar haalt maakt de hele vergelijking onjuist.
  • Telemetrie is een eigen pipeline in plaats van een SDK van derden, sinds juni via OpenTelemetry in het Aspire-dashboard. Een prijsvergelijker die gebruikersdata naar een adnetwerk stuurt heeft niets meer te verkopen. Wachtwoorden zijn gesalt en gehasht, en de lokale secrets zitten achter DPAPI.
  • Alles van de store-submissions tot de privacyverklaringen is van mij. Dat is ander werk dan architectuur, en het is waard om één keer gedaan te hebben.
  • WinkelDuel is het eerste product waarin coding agents onderdeel werden van mijn ontwikkelwerk, en waarin een LLM als component in het product zelf zit. Ik heb software nu op beide manieren gebouwd en kan zeggen wat elk van beide kost.

.NET 10, .NET MAUI, Blazor Hybrid, ASP.NET Core, PostgreSQL, EF Core, Azure App Service, Aspire, REST, GraphQL, Playwright, OpenTelemetry, pgvector, MSIX, Google Play, App Store

mrt tot sept 2022

Atlas Copco

Azure technical architect

Industrieel gereedschap en machines.

  • Het Hybrid Integration Platform onderhouden en uitgebreid, met Azure API Management als kern en Entra ID voor OAuth en policies. HIP is de infrastructuur en governance waarmee de Atlas Copco-community integratieservices bouwt en terugvindt.
  • HIP 2.0 en een ESB-applicatie opgezet.
  • Het technische werk van een offshore team in India begeleid en nagekeken.

Azure API Management, Entra ID, Azure DevOps, .NET 6, OAuth 2, EF, REST

2015 tot 2017 en 2018 tot 2022

Biocartis

.NET technical architect

Moleculaire diagnostiek voor persoonlijke geneeskunde.

  • De SOA-architectuur opgezet voor Idylla Explore, dat de data uit tests die klanten op het Idylla-toestel draaien verzamelt en opnieuw verwerkt, en dat nieuwe recipes toetst aan bestaande data. Een database per service, IdentityServer voor security, NServiceBus tussen de services, AngularJS op de client.
  • Uitgebreid met een rapportgenerator waarmee QA een batch cartridges vrijgeeft of afkeurt. Eén plugin per soort cartridge, dus een nieuwe cartridge op de markt betekent een nieuwe plugin en niets anders.
  • De gedeelde architectuurlibraries geschreven en verdeeld als NuGet packages, en de backend gebouwd voor de apps die de console van het toestel moesten vervangen.
  • Meegewerkt aan de ALM op TFS en Azure VM's: continuous integration, nightly builds, unit-, integratie- en systeemtests, StyleCop en dependency scanning. De andere developers gecoacht in het toepassen van SOLID en in het werken met NServiceBus.
  • Test- en klantgegevens vallen onder de GDPR. Anonimisatie zat in het ontwerp overal waar de analyse niemand hoefde te identificeren, en de code volgde OWASP.

ASP.NET Core, OAuth 2, IdentityServer, EF, SOA, NServiceBus, REST, AngularJS, React, Electron, DDD, TDD, Git, Scrum, CosmosDB, Aspose Words, xUnit, FakeItEasy, Azure VM's

Eerdere loopbaan

Verkort. Volledige details op aanvraag.

mei 2017 tot feb 2018
Xerius · Lead developer en scrum master

Het team geleid dat verantwoordelijk was voor loopbaanadvies, en de Azure-backend gebouwd achter een bestaande ASP.MVC- en AngularJS-applicatie, op Functions, Service Bus en Azure SQL, met DDD, CQRS en event sourcing. De deployment liep via Octopus Deploy. De developers gecoacht in het toepassen van SOLID.

mei 2010 tot mrt 2015
E'gemin · Lead developer en architect

De architectuur en de ontwikkelomgeving opgezet voor warehouse-automatisering en automatic guided vehicles. Onafhankelijke services over NServiceBus, databases gegenereerd uit de domeinentiteiten, SignalR naar de client, en WPF MVVM-widgets die door een workflow worden samengesteld. Het onderzoek en de proofs of concept achter die keuzes uitgevoerd, en de ALM opgezet op Git, Stash en TeamCity.

nov 2008 tot mei 2010
The Agile Factory · Senior component developer

ASP.NET front end op een IBM FileNet-backend. WebDav-ondersteuning en een pluggable help ontworpen en gebouwd, en de installatie en de support voor de Nederlandse provincie Limburg op mij genomen.

nov 2007 tot nov 2008
Rode Kruis, via Inter Access Belgium · Lead developer en architect

Zes developers geleid op de cursusautomatisering, met drie clients: web, ClickOnce en offline. De technische beslissingen genomen en gerapporteerd aan de projectleider.

mei 2005 tot nov 2007
Habufa · Senior developer

Technisch en analytisch advies over de applicatie die het ERP-systeem van deze meubelgroothandel moest vervangen. Het DotNetNuke-CMS achter de website van Henders and Hazel gebouwd, zodat niet-technische medewerkers de inhoud zelf konden onderhouden.

nov 2006 tot jan 2022
All Remote Systems · Analist en developer, eigen product

Track and trace. Een GPS-toestel in het voertuig stuurt de positie over GPRS, de eigenaar ziet zijn vloot op een website, met rapportering, tijdsregistratie en terugvinden na diefstal.

feb 2000 tot mei 2005
Bluestar-IT · Architect en developer

Tien opdrachten van deze Nederlandse consultancy, waaronder Electrabel, Interpolis en PwC, naast werk aan Reflex, hun eigen reserveringsproduct in .NET.

aug 1999 tot feb 2000
Bayer Antwerpen, via Real Software · Developer

De losse trackers per afdeling voor het opstarten van een nieuwe productie-installatie vervangen door één gezamenlijk overzicht.

aug 1995 tot aug 1999
Tokheim · Software engineer

GUI in C en C++ op OS/2 die het personeel van een tankstation alles op één scherm gaf.

Technische vaardigheden

Ervaringsjaren en laatste gebruik. Rijen met Nu staan in dagelijks gebruik. De Azure-rij dekt App Service en Web Apps, Functions, Storage queues, Blob storage en Application Insights, en daarnaast het beheer van de tenant, de resources en de gebruikers. Observability betekent een logging- en exception-middleware aan de on-premise kant, Application Insights voor wat op Azure draait, en OpenTelemetry sinds Aspire.

Talen en platform

C#
24 jaar
Nu
ASP.NET Core
7,5 jaar
Nu
ASP.NET
19 jaar
Nu
Blazor en Blazor Hybrid
10 maanden
Nu
.NET MAUI
4 maanden
Nu
WCF en SOAP
7 jaar
Nu
WPF
5 jaar
juni 2015
C en C++
4 jaar
augustus 1999

Architectuur en methode

SOA-architectuur
16 jaar
Nu
SOLID en design patterns
16 jaar
Nu
NuGet en librarydevelopment
16 jaar
Nu
REST(ful)
10 jaar
Nu
Swagger en OpenAPI
9 jaar
Nu
Observability
9 jaar
Nu
TDD
11 jaar
Nu
DDD
11 jaar
Nu
C4 model
4 jaar
Nu
Secure coding en OWASP
11 jaar
Nu
GDPR en gegevensbescherming
8 jaar
Nu
Technische leiding en mentoring
21 jaar
Nu
Scrum en agile
10 jaar
september 2022

Azure en cloud

Azure
8 jaar
Nu
Entra ID (Azure AD)
6,5 jaar
Nu
OAuth 2
9 jaar
Nu
Azure DevOps
7 jaar
Nu
Aspire
3 maanden
Nu
Docker en containers
3 maanden
Nu
Bicep en infrastructure as code
3 maanden
Nu
Azure API Management
6 maanden
september 2022

AI in productie

Agentic development met coding agents
4 maanden
Nu
Azure AI Document Intelligence
1 jaar
Nu
LLM-integratie, structured extraction
4 maanden
Nu
Embeddings en vector search (pgvector)
1 maand
Nu

Messaging en integratie

NServiceBus
15 jaar
Nu

Data

MS SQL Server, design en implementatie
24 jaar
Nu
EF en EF Core
13 jaar
Nu
PostgreSQL
4 maanden
Nu

ERP en bedrijfsplatformen

Business Central en Navision, inclusief AL
4 jaar
Nu
DotNetNuke
19 jaar
januari 2024

Front end

Angular, React, Vue.js, advanced CSS
9 jaar
Nu

Tooling en overige

Git
10 jaar
Nu
Jira, Confluence, Stash
8,5 jaar
Nu
Octopus Deploy
3 maanden
februari 2018
Playwright en browserautomatisering
4 maanden
Nu

Opleiding en certificering

Industrieel ingenieur elektronica met specialisatie informatica 1995

Hoger Instituut der Kempen

MCP-id 3067622

Referenties

Een referent bij Biocartis op aanvraag, en meer als je meer dan één wil.