Werven zonder op je onderbuikgevoel te leunen: het hulpmiddel dat we voor onze sollicitatiegesprekken bouwden

Bedrijfsfiche, kandidaatfiche, gestructureerd gesprek en gewogen rangschikking, allemaal in één kleine applicatie

Gepubliceerd: 8 min read

Bekijk de broncode ↗

Werven betekent dat je mensen vergelijkt die je met enkele dagen tussentijd ontmoet, op basis van haastig gemaakte notities en een indruk die snel vervaagt. Aan het einde van een reeks gesprekken is de herinnering aan de eerste kandidaat al wazig, liggen de notities verspreid tussen een schrift en een bestand, en neigt de beslissing uiteindelijk naar wie je het laatst zag of wie het sympathiekst was. Dat is precies het probleem dat we wilden vermijden toen we onze junior ontwikkelaar in Tallinn aanwierven.

In plaats van onze notities in een spreadsheet bij te houden, bouwden we een kleine webapplicatie om het proces te voeren. Ze brengt op één plek samen wat eerder verspreid lag: de fiche van de functie, de fiche van de kandidaat, het noteren tijdens het gesprek, de beoordeling met cijfers en, aan het einde, een gewogen rangschikking die de vergelijking expliciet maakt. Dit artikel beschrijft wat ze doet en hoe ze is opgevat. Het is een hulpmiddel dat we voor ons eigen gebruik bouwden, en we stellen de code open op GitHub. Niets belet u om hem bij u thuis te draaien.

De context altijd in beeld

De applicatie volgt de werkelijke hiërarchie van een aanwerving: een bedrijf, functies, en voor elke functie kandidaten. Die cascade blijft zichtbaar in de zijbalk, zodat u altijd weet waar u zich bevindt zonder te moeten onthouden langs waar u gekomen bent.

De bedrijfsfiche stelt u één keer op en dient voor alle functies. U plakt een webadres of een tekst, en de applicatie haalt daaruit een nette voorstelling die u nadien kunt bijwerken. Elke functie werkt op dezelfde manier: een functiebeschrijving, geïmporteerd uit een vacature of met de hand geschreven, en vooral selectiecriteria die eigen zijn aan de functie. Het zijn die criteria die later betekenis zullen geven aan de scores.

De kandidaatfiche bundelt de identiteit (naam, voornaam, geboortedatum waaruit de leeftijd wordt berekend, contactgegevens, status), de cv’s die in PDF worden geüpload, en een profielsamenvatting. Niets daarvan wordt op het moment van het gesprek aan het toeval overgelaten: voordat u ook maar iets scoort, hebt u in beeld wie u ontvangt en voor welke functie.

Het gesprek: vastleggen wat telt, terwijl u het hoort

Het gespreksblad is de kern van het hulpmiddel. Het plaatst de context van de aanwerving (bedrijf, functie, criteria, identiteit van de kandidaat) vlak naast het scoreschema, zodat u nooit van scherm hoeft te wisselen midden in een antwoord.

De scoring berust op vier basiscriteria, gescoord van 0 tot 10: het taalgemak, de professionaliteit, de technische vaardigheden en de vreemde talen. Bij elke score hoort een vrij tekstveld, want een cijfer alleen zegt niet waarom u het hebt gegeven. Daar komen gepersonaliseerde beoordelingen bij, in vrij aantal: een titel, een score op 10, een opmerking. Dat is de plek voor wat eigen is aan een bepaalde functie en niet in de vier standaardvakjes past.

Twee vrije tekstvelden vervolledigen het blad: de verwachtingen van de kandidaat en zijn bijzonderheden. Het is niet de bedoeling om alles tot cijfers te herleiden, maar om een getrouw spoor van het gesprek te bewaren terwijl het plaatsvindt, om het later in alle rust te kunnen herlezen.

De AI assisteert, ze hakt niet de knoop door

De applicatie steunt op verschillende plaatsen op een taalmodel, altijd ter ondersteuning en nooit in de plaats van de recruiter.

Ze leest de cv’s (ook de PDF’s, via een model dat de pagina kan “zien”) en stelt een identiteit voor: naam, voornaam, geboortedatum. Het belangrijke woord is “stelt voor”: die velden worden ter bevestiging voorgelegd, nooit over een bestaande invoer heen geschreven. Ze schrijft ook een profielsamenvatting op basis van de cv’s, die u kunt corrigeren of opnieuw laten genereren. En aan het einde maakt ze een gesprekssamenvatting die de context hervat, de kandidaat aftoetst aan de selectiecriteria en een aanbeveling formuleert.

Twee principes sturen deze assistentie. Ten eerste, alles blijft aanpasbaar: geen enkele gegenereerde tekst ligt vast. Ten tweede, alles is transparant: een venster laat u de exacte prompt lezen die naar het model wordt gestuurd voordat u een generatie opnieuw start. U ziet wat de machine in beeld heeft, en u houdt zelf in de hand wat ze ermee doet.

De interface bestaat in vijf talen: Nederlands, Engels, Frans, Estisch en Duits. De AI volgt die keuze en schrijft haar samenvattingen in de weergavetaal. Een recruiter die het gesprek in het Estisch voert, krijgt een samenvatting in het Estisch; een collega die de interface naar het Nederlands omschakelt, herleest ze in het Nederlands, vanuit dezelfde notities.

Wat de infrastructuur betreft, praat de applicatie met elk OpenAI-compatibel eindpunt. U kiest de URL, de sleutel en het model in de configuratie, of het nu om een gehoste dienst gaat of om een model dat u zelf laat draaien.

De rangschikking en de wegingen

Hier bewijst het hulpmiddel zijn dienst op het moment van beslissen. Het dashboard van een functie rangschikt de kandidaten op dalende totaalscore, met voor elk een scorebolletje en kleine staafjes per criterium om in één oogopslag te zien waar zijn sterktes liggen.

Dashboard van een functie: kandidaten gerangschikt op dalende totaalscore, elk met een scorebolletje en kleine staafjes per criterium

De totaalscore is geen blind gemiddelde. Elk criterium krijgt een weging van 0 tot 3, eigen aan de functie, instelbaar met een schuifregelaar. De score wordt live herberekend wanneer u een schuifregelaar verschuift, wat toelaat concrete vragen te beantwoorden: en als de technische vaardigheden dubbel zouden tellen? En als het taalgemak minder zou wegen voor deze functie? Criteria zonder score worden gewoon genegeerd, zonder de kandidaat te benadelen.

Vrijdag, einde van de reeks gesprekken. Drie kandidaten zitten een halve punt uit elkaar. We verhogen de weging van de technische vaardigheden, en de rangschikking herschikt zich: wie het best praatte, zakt achter wie het best codeerde. De beslissing is niet van humeur veranderd, ze is van criterium veranderd, en we kunnen ze uitleggen.

Het hulpmiddel laat ook toe om twee kandidaten naast elkaar te vergelijken: een radargrafiek legt hun profielen over elkaar, een staafdiagram brengt het verschil criterium per criterium in detail, en hun gesprekssamenvattingen verschijnen naast elkaar. De vergelijking houdt op een geheugeninspanning te zijn en wordt een leesoefening.

Twee kandidaten naast elkaar vergeleken: een radargrafiek die hun profielen over elkaar legt en een staafdiagram dat het verschil criterium per criterium in detail brengt

Licht en lokaal, daar waar de klassieke hulpmiddelen zwaar zijn

De meeste recruteringssoftware bestaat uit onlineplatforms die per maand worden gefactureerd, waar uw kandidaatgegevens op de servers van een derde gaan wonen. Voor een functie die af en toe ingevuld moet worden, is dat veel abonnement, veel functies waar u geen gebruik van maakt, en cv’s van echte mensen toevertrouwd aan een externe dienst.

Wij hebben de omgekeerde weg gekozen. Het hulpmiddel past in één enkele container die u bij u thuis draait; de gegevens blijven lokaal, in een bestandsbank die uw machine niet verlaat. Geen abonnement, geen account om aan te maken, geen cv dat naar een platform vertrekt. De enige oproepen naar buiten zijn die welke u beslist, naar de AI-dienst van uw keuze, en zelfs die kan een model zijn dat u zelf host. Het is dezelfde overtuiging die onze aanpak van automatisering stuurt: de gegevens zo dicht mogelijk verwerken, en alleen uitbesteden wat uitbesteed moet worden.

Ontworpen om zich aan te passen

Omdat we in Estland wierven, kan het hulpmiddel overweg met de isikukood, de Estse identificatiecode, met zijn eigen validatie. Dat is geen anekdotisch detail: het is het bewijs dat het hulpmiddel zich naar een context plooit in plaats van de zijne op te leggen. Waar een algemene software u dwingt uw bijzondere gevallen in haar vakjes te wringen, plooit een hulpmiddel dat u zelf beheerst zich naar de uwe. Uw criteria, uw wegingen, uw velden: alles is kneedbaar omdat de code van u is.

Onder de motorkap

De applicatie past in één enkele container. De server is geschreven in Python met FastAPI, de gegevens leven in een SQLite-bank (in WAL-modus om betrouwbaar te blijven met één enkel proces), en de interface is een React-applicatie die door diezelfde server wordt bediend. Het geheel start met Docker en een volume voor de persistentie.

Dit zijn de bouwstenen die we in onze productieprojecten gebruiken, en het is precies het soort stack dat we aan een junior profiel wilden laten ontdekken. Het hulpmiddel dat we bouwden om hem aan te werven is in zekere zin al een staaltje van datgene waaraan hij zal werken.

Waarom we het delen

Het is een hulpmiddel dat we eerst voor onszelf bouwden, en we stellen de code open op GitHub: u kunt hem lezen, lokaal draaien voor uw eigen gesprekken, en aanpassen aan uw proces. Het is een mooi voorbeeld van onze manier van werken, dezelfde die we toepassen op de automatisering van bedrijfsprocessen of op het register van intravitreale injecties: een gericht, sober hulpmiddel dat een beslissing helderder maakt zonder ze af te nemen.

Wilt u een hulpmiddel van dit soort, vormgegeven rond uw eigen proces, boek dan hieronder een gesprek met transtorm.ai .

Gesprek boeken

Veelgestelde vragen

Is de code beschikbaar?

Ja. Dit is een intern hulpmiddel dat we voor onze eigen werving bouwden, en de code staat open op GitHub. U kunt hem lezen, lokaal draaien en aanpassen.

Beslist de AI in uw plaats wie u aanwerft?

Nee. De AI leest de cv’s, stelt identiteiten voor die u moet bevestigen en schrijft samenvattingen. Niets wordt ooit opgeslagen zonder nalezing, en elke gegenereerde tekst blijft aanpasbaar. De uiteindelijke rangschikking berust op uw scores en uw wegingen, niet op een oordeel van de machine.

In welke talen werkt de tool?

De interface is beschikbaar in vijf talen: Nederlands, Engels, Frans, Estisch en Duits. De door de AI gegenereerde samenvattingen volgen de gekozen weergavetaal, zodat iedereen de beoordeling in zijn eigen taal leest, vanuit dezelfde notities.

Heeft u een betalende AI-dienst nodig om het te laten draaien?

De applicatie praat met elk OpenAI-compatibel eindpunt: een gehoste dienst zoals OpenRouter, of een model dat u zelf host. U kiest de URL, de sleutel en het model in een configuratiebestand.

Hoe werkt de rangschikking?

Elk criterium krijgt een score van 0 tot 10. U kent per criterium en per functie een weging van 0 tot 3 toe, en de totaalscore wordt live herberekend. Criteria zonder score benadelen niemand.