Benny Emmers

Softwarearchitect en lead developer · .NET, Azure, integratiearchitectuur

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

Profiel

Softwarearchitect en lead developer, .NET sinds 2002. Eenendertig jaar in het vak, 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.

In de meeste teams waar ik gewerkt heb, heb ik de technische leiding opgenomen. Drie oud-collega's hebben mij hun mentor genoemd, en één van hen schreef dat publiek op, met de stap van medior naar senior developer erbij. Dat is het deel van het werk dat ik zou houden.

Sinds april 2026 bouw ik daarnaast WinkelDuel, een eigen prijsvergelijker voor Nederlandse en Belgische supermarkten. Alles tot dat product heb ik met de hand geschreven. Bij WinkelDuel werk ik met coding agents en zit een LLM als component in het product zelf, waardoor ik software nu op beide manieren gebouwd heb en kan zeggen wat elk van beide kost.

Huidige focus · najaar 2026

Embeddings op pgvector draaien sinds deze maand mee in de productmatching over twaalf winkels. De extensie staat op de Postgres die er al was, met een vectorkolom en een HNSW-index op cosine. Het model is meertalig op 384 dimensies en genereert lokaal via ONNX in het proces, waardoor een opzoeking niets per keer kost. Embeddings kiezen de kandidaten, de regels die er al waren doen de harde filtering. Maat en hoeveelheid zijn regelgebaseerd gebleven, want embeddings kunnen 1 L en 1,5 L niet betrouwbaar onderscheiden en een verkeerde maat maakt de hele vergelijking onjuist. Een GTIN-match gaat nog altijd voor allebei. De oude regels heb ik eerst gemeten tegen een evaluatieset van een paar honderd bevestigde matches, dus wat het oplevert is een cijfer en geen indruk. Sinds juni een Aspire AppHost over de WinkelDuel API en Postgres, met de bestaande telemetrie in het dashboard. Het MAUI-project hangt er ook in, dus één trace loopt van een tik in de app via de API tot de query op Postgres. Daarnaast Docker, en de Bicep die Aspire voor Container Apps genereert.

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.

Bluebird · van wekelijkse prijsmail naar B2B-webshop

Het begon als de wekelijkse prijswijzigingsmail. Sales ziet op dinsdag welke prijzen gaan veranderen en kan nog ingrijpen, klanten krijgen de nieuwe prijzen op donderdag. Op dat fundament is Bluebird gegroeid, de B2B-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.

Overseas Integration Platform

Toen Bluebird stond, ben ik begonnen met het vervangen van de vele losse applicaties die rechtstreeks met Navision communiceerden. Sommige waren in Python geschreven, andere zaten in SQL zelf, en er was geen gedeelde code. Het platform hergebruikt wat Bluebird al had, in de eerste plaats de synchronisatie met het ERP-systeem. Het is een message-based SOA op NServiceBus met drie endpoints: één voor Business Central, één voor uitgaande berichten en één voor inkomende. Die twee message-endpoints ondersteunen de protocollen van de andere kant, waaronder REST, FTP en XML. De endpoints draaien als Windows services op onze eigen servers, en daar blijft dit ook staan. Eén plugin per integratie, elk in een eigen map met eigen assemblies, zodat een nieuwe flow uitgerold kan worden zonder dat er iets verandert aan wat al draait, en de deployment pipeline volgt diezelfde structuur. Het platform verving Boomi. Betrouwbaarheid was het uitgangspunt, en de message-based opzet is wat dat oplevert. Berichten die op een tijdelijke fout stranden blijven staan en kunnen opnieuw verwerkt worden, of die fout nu een weggevallen databaseconnectie was of een bug die pas de dag erna gefixt werd. Er gaat niets verloren doordat een systeem op het verkeerde moment onbereikbaar is. Loopt er toch iets vast, dan krijgen de developers automatisch een melding met de diagnose, meestal voordat een gebruiker het gezien heeft.

Projecten die aan het platform hangen

Meer dan een dozijn integraties draaien er als plugin op: EDI, WMS, OrderEye, Slim, Multiscan, Rio, Entra ID-synchronisatie voor externe BI-gebruikers, het automatisch 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. Elk daarvan is een plugin en niet opnieuw een aparte applicatie met eigen conventies.

Navision naar Business Central Online · live 2025

De migratie van begin tot eind gedreven, inclusief het AL-extensiewerk in Business Central zelf en niet alleen de .NET-kant. Zes bedrijven draaien er vandaag op. 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. Deze migratie is het duidelijkste rendement dat ik gezien heb op architectuur die jaren eerder is neergezet.

Document recognition · waar het begon

Eerst magazijndocumenten. De barcodes op een gescande batch zoeken en de scan daarlangs in afzonderlijke documenten splitsen. Daarna kwamen bankafschriften, en die vroegen meer: genoeg uit elke pagina halen om ze aan de juiste bankrekening toe te wijzen. Een paar duizend van die twee in totaal. Samen zijn ze de plek waar we geleerd hebben hoe extractie zich in de praktijk gedraagt, en dat is wat de volgende stap haalbaar maakte.

OrderEye · verkoop- en aankoopdocumenten

Gebouwd op wat het werk rond magazijndocumenten en bankafschriften opleverde, met Azure AI Document Intelligence als lezer. Aan de verkoopkant maakt OrderEye de verkooporder in Business Central aan en meldt het aan de klant elke regel waar de prijs in zijn eigen document afwijkt van de werkelijke prijs in BC. Aan de aankoopkant controleert het wat de leverancier gestuurd heeft tegen 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. Een paar honderd facturen per maand gaan erdoor. OrderEye voert de andere twee extracties niet uit, het bouwt op dezelfde principes.

  • Bluebird en het integratieplatform delen een groot deel van hun code via interne NuGet packages. Eén uniforme manier van werken dekt 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.

  • Twaalf winkeladapters over 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.
  • 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.
  • Dit is ook waar ik met coding agents ontwikkel. Alles van de store-submissions tot de privacyverklaringen is van mij, en dat is ander werk dan architectuur en waard om één keer gedaan te hebben.

.NET 10, .NET MAUI, Blazor Hybrid, ASP.NET Core, PostgreSQL, EF Core, Azure App Service, 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 in het hart en Entra ID voor OAuth en policies. HIP is de infrastructuur en governance waarmee de Atlas Copco-gemeenschap 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 verzamelt en herverwerkt uit tests die klanten op het Idylla-toestel draaien, en nieuwe recipes tegen bestaande data controleert. 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 naar SOLID en naar 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 naar 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 opgenomen.

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

Zes developers geleid op 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 op 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

Niveau op een schaal van 1 tot 9, mijn eigen inschatting. 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#
9
24 jaar
Nu
ASP.NET Core
8
7,5 jaar
Nu
ASP.NET
8
19 jaar
Nu
Blazor en Blazor Hybrid
8
10 maanden
Nu
.NET MAUI
7
4 maanden
Nu
WCF en SOAP
7
7 jaar
Nu
WPF
7
5 jaar
juni 2015
Windows Workflow Foundation
7
3 jaar
maart 2015
C en C++
4
4 jaar
augustus 1999

Architectuur en methode

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

Azure en cloud

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

AI in productie

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

Messaging en integratie

NServiceBus
8
15 jaar
Nu
SignalR
7
2 jaar
maart 2015

Data

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

ERP en bedrijfsplatformen

Business Central en Navision, inclusief AL
7
4 jaar
Nu
DotNetNuke
7
19 jaar
januari 2024
Aspose Words
7
2 jaar
maart 2022

Front end

Angular, React, Vue.js, advanced CSS
6
9 jaar
Nu
ASP.MVC
5
4 maanden
maart 2015
Infragistics en Telerik
6
1 jaar
maart 2016

Tooling en overige

Git
8
10 jaar
Nu
Jira, Confluence, Stash
7
8,5 jaar
Nu
Octopus Deploy
5
3 maanden
februari 2018
Playwright en browserautomatisering
7
4 maanden
Nu
AOP en PostSharp
6
6 maanden
november 2015
SEO
7
2 jaar
januari 2012

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.