Van puzzel naar proces: hoe we matching deels automatiseren (en waarom niet alles)
Elk jaar organiseren we binnen ons traineeship een selectie- en matchingsproces waarin we kandidaten koppelen aan partnerscholen. Dat proces is inhoudelijk rijk, maar operationeel intensief: veel voorkeuren, veel gesprekken en weinig tijd om alles te verwerken.
Waar we dit proces in de beginjaren volledig handmatig uitvoerden (met Excel, puzzelwerk en lange dagen) zijn we sinds 2023 stappen gaan zetten richting de automatisering hiervan. Inmiddels hebben we een werkwijze ontwikkeld waarin technologie en menselijk oordeel elkaar versterken.
In dit artikel nemen we je mee in hoe die aanpak is ontstaan, welke keuzes we hebben gemaakt en wat we onderweg hebben geleerd.
De broncode waar we in dit artikel aan refereren kun je terugvinden in onze publieke Github reposity.
Het matchingsproces in vogelvlucht
Na de werving en selectie van kandidaten start het matchingsproces. Kandidaten en partnerscholen kunnen elkaars profielen bekijken in het daarvoor bestemde portaal op traineesinonderwijs.nl, en geven op basis daarvan hun voorkeuren door: met wie willen zij in gesprek?
Voor meer inhoudelijke informatie over het wervings-, selectie- en matchingsproces van het traineeship kun je op de website terecht.
We organiseren dit proces in twee rondes:
In elke ronde vinden speeddates plaats tussen kandidaten en scholen
Na elke ronde geven beide partijen opnieuw hun voorkeuren door waarmee de selectie scherper wordt
Na afloop van de tweede ronde geven de kandidaten en scholen nog één keer hun voorkeuren door. Op basis hiervan maken we de definitieve matches: welke trainees starten op welke school?
Hoewel data hierin een belangrijke rol speelt, komt de uiteindelijke matching tot stand door een combinatie van voorkeuren, afwegingen en professioneel oordeel - van zowel de deelnemers als het programmateam van Trainees in onderwijs.
Van handmatig puzzelen naar slimme ondersteuning
In de eerste jaren deden we dit proces volledig handmatig. We verzamelden voorkeuren, zetten die in een leeg Excel-bestand en gingen vervolgens één voor één matches maken en speeddates plannen.
Dat was:
Tijdsintensief (denk aan 3 tot 5 dagen werk)
Slecht schaalbaar (méér deelnemers betekent méér werk)
Foutgevoelig
Mentaal belastend, juist in een toch al drukke periode
In 2023 hebben we daarom de eerste stap gezet naar automatisering. Niet om het proces volledig over te nemen, maar om het programmateam te ondersteunen in het meest repetitieve en tijdrovende werk.
De eerste uitdaging: een schone dataset
De eerste grote hobbel waar we tegenaan liepen, zat verrassend genoeg niet in de logica van het proces, maar in de data die we ervoor gebruikte.
In de eerste opzet gaven kandidaten en scholen hun voorkeuren door via vrije invoer in het voorkeursformulier dat ze invulden. Dat leidde tot een vervuilde dataset. Een school als “Cals College” kwam bijvoorbeeld terug als:
cals college
Kals college
Cals Lyceum
Cals
College Cals
We hebben eerst geprobeerd dit op te lossen met fuzzy matching-algoritmes. Maar hoe slim die ook waren, het bleef onbetrouwbaar. De variatie was simpelweg te groot.
De echte oplossing zat niet in betere code, maar in een ander procesontwerp. We zijn gestopt met vrije invoer en overgestapt op selectie uit een voorgedefinieerde lijst van deelnemers waaruit men kan kiezen. Deze informatie haalt het voorkeursformulier nu op uit het CMS, waardoor we werken met unieke ID’s in plaats van namen.
Dat had twee grote voordelen:
We konden voorkeuren altijd eenduidig koppelen
De dataset was vanaf het begin schoon
De belangrijkste les: slechte input kun je niet achteraf “weg-rekenen”. Datakwaliteit moet je aan de voorkant organiseren.
Hoe het matchingsscript werkt
Met een schone dataset konden we het proces verder structureren. Het script haalt alle voorkeuren op uit het CMS en maakt onderscheid tussen:
Eenzijdige matches: alleen kandidaat of school heeft voorkeur
Tweezijdige matches: beide partijen hebben elkaar gekozen
Daarnaast wordt rekening gehouden met de volgorde van voorkeuren: een eerste voorkeur weegt zwaarder dan een vijftiende.
De output van deze stap is een matchingsmatrix (in Excel), waarin zichtbaar is:
Wie elkaar gekozen heeft
Hoe sterk die voorkeur is
Deze output is nadrukkelijk geen eindbeslissing, maar een startpunt voor het programmateam.
Mens en algoritme werken samen
Hoewel we een groot deel van het proces hebben geautomatiseerd, ligt de regie nog altijd bij het programmateam. Zij gebruiken de output van het script om:
Matches te beoordelen
Context mee te nemen uit de inzendingen (de opmerkingen en kanttekeningen van de deelnemers)
Bewust af te wijken waar dat nodig is
Soms worden er ook gesprekken ingepland tussen kandidaten en scholen die elkaar niet expliciet als voorkeur hebben opgegeven, maar waarvan we denken dat het een interessante match kan zijn.
Het belangrijkste inzicht dat hieruit voortkomt: automatisering ondersteunt én versnelt, maar vervangt het professionele oordeel niet.
Wel of niet automatiseren?
Een belangrijke vraag in dit proces was steeds: wat automatiseer je wel, en wat niet? We hebben ervoor gekozen om wél te automatiseren:
Het ophalen en structureren van data
Het genereren van eerste matchvoorstellen
Het maken van (eerste versies van) speeddateschema’s
En bewust níet:
De definitieve matching
Complexe uitzonderingen
Afwegingen op basis van ‘zachte’ factoren
Daarbij spelen steeds dezelfde afwegingen: hoe complex wil je je code maken, en hoeveel flexibiliteit heeft het team nodig bij de inzet ervan?
De tweede uitdaging: spreiding zonder gatenkaas
Een tweede complexe puzzel waar we tegenaan liepen, zat in het plannen van de speeddates. We willen namelijk dat:
Iedereen (ongeveer) evenveel gesprekken heeft
Gesprekken goed verdeeld zijn over de dag
Er geen ‘gaten’ in het schema zitten
Dat laatste blijkt belangrijker dan je denkt. In eerdere edities, waarin er wel gaten vielen, zagen we dat deelnemers later kwamen, eerder weggingen of tussendoor andere dingen gingen doen.
En dat is zonde. Juist de informele momenten — tussen gesprekken door — zijn vaak waardevol voor netwerkvorming.
Het algoritme dat we nu gebruiken zorgt voor:
Een gelijkmatige spreiding
Volledig gevulde schema’s
Een logische dagindeling
De output is opnieuw een concreet en werkbaar Excel-overzicht van de dag.
Itereren in de praktijk
De ontwikkeling van deze aanpak is sterk iteratief geweest. Bij elke jaarlijkse matchingscyclus hebben we het process en de code die we daarvoor schreven, verder aangescherpt.
Onze verbeteringen zaten vooral in:
Het optimaliseren van de output (bruikbare Excel-bestanden)
Het verbeteren van de kwaliteit van het speeddateschema
Het opschonen en structureren van de codebase
Elk jaar leerden we van het gebruik in de praktijk. Niet door alles vooraf perfect te maken, maar door gericht te verbeteren op basis van ervaringen van het programmateam.
Van dagen naar uren
Waar het indelen van het matchingsproces eerder een werkweek kostte, is dat nu teruggebracht naar een halve tot één dag.
Dat levert niet alleen tijdswinst op, maar vooral:
Minder operationele druk in een toch al drukke periode
Meer aandacht voor de details and nuances binnen de doorgegeven voorkeuren
Die verschuiving is misschien wel de grootste winst. Automatisering is voor ons geen doel op zich, maar een middel om beter werk te kunnen doen.
Door het proces slim te ondersteunen, hebben we ruimte gecreëerd voor wat er echt toe doet: het maken van goede matches.
Ben je benieuwd naar de broncode achter dit artikel? We hebben de codebase van onze matching pipeline openbaar gemaakt. Je vindt deze in onze GitHub-repository.