Strategy
Lokaal, hosted of Sonnet: een coding-LLM-stack scoren
Een scorekaart om te kiezen tussen een lokale Qwen3-Coder 30B-bak, een hosted DeepSeek V3-endpoint en een Claude Sonnet 4.5-abonnement, voor een Nederlands bureau met 14 engineers.

Het is een dinsdagmiddag eind mei. Een Amsterdams bureau met sub-€15M omzet dat je adviseert kreeg binnen een uur drie dingen op het bureau van de engineering lead. Een CVE op het open-weights model achter hun interne code-review-bot. Een AVG-auditverzoek van een klant met een codebase die zorgdata raakt. En een kwartaalforecast waarop de Claude-abonnementsregel, per seat afgerekend over 14 engineers, zojuist de AWS-rekening voorbij is.
Dit is de methode die wij bij onze studio gebruiken om te kiezen tussen een lokale Qwen3-Coder 30B-bak, een hosted DeepSeek V3-endpoint en een Claude Sonnet 4.5-abonnement per developer. Het is een mening. De vorm wordt bepaald door de grootte van het bureau: klein genoeg dat er geen aparte ML-ops-rol bestaat, groot genoeg dat de kosten per PR ook echt op de P&L verschijnen.
De drie opties op tafel
Sloop de marketing eraf en de meeste bureaus kiezen tussen drie architecturen.
Lokale bak. Qwen3-Coder 30B (of welk open-weights model die week ook de beste HumanEval-score heeft) op een workstation op kantoor, of een rackbak bij een Nederlandse colo. Inference draait op je eigen GPU's. Prompts verlaten je netwerk niet.
Hosted endpoint. Hetzelfde soort open-weights model, maar gehuurd van een derde partij die het host. DeepSeek V3 op Fireworks, Together of Groq. Je betaalt per token. De leverancier regelt de GPU's en de infrastructuurpatches. Je prompts en completions gaan over hun netwerk.
Abonnement. Claude Sonnet 4.5 (of welk frontier-model op dat moment actueel is) op een per-seat-plan of een per-API-key-quotum. Het model heeft closed weights. Dezelfde dataflow-vorm als hosted, maar de provider heeft het model zelf ontworpen en getraind en draait het enige endpoint dat het serveert.
Het juiste antwoord is in de vergaderzaal zelden duidelijk, omdat de getallen en de risico's in drie verschillende mentale modellen leven. Kosten zijn per token of per seat. AVG is ja of nee met voetnoten. CVE-respons is een gevoel. Wij dwingen alle drie in één scorekaart, zodat het gesprek ook daadwerkelijk kan eindigen.
Kosten per PR zijn de enige eerlijke eenheid
Tokens zijn geen budgetregel. Seats zijn geen budgetregel. Het kleinste stuk werk dat waarde oplevert bij een bureau is een gemergede pull request, dus dat is wat wij begroten.
Onze referentie: 14 engineers, ruwweg 3 gemergede PR's per developer per week. Reken op 170 PR's per week, 680 per maand. Elke PR loopt door een review-pass, een 'leg deze diff uit'-pass en af en toe documentatiegeneratie. We meten het werkelijke tokenvolume over een representatief venster van twee weken. Voor een typische front- en backend-mix bij een bureau zien we ergens tussen de 80k en 150k tokens aan context per PR, met 5k tot 20k aan output.
Tegen de lijstprijzen van medio 2026 komt de rekensom er ongeveer zo uit. We ronden af, maar de orde van grootte klopt.
Kosten per PR (≈120k in / 10k out, lijstprijs, medio 2026)
Claude Sonnet 4.5 API $0.36 + $0.15 ≈ $0.51 / PR
Claude Sonnet 4.5 sub $20 seat / 49 PRs ≈ $0.41 / PR
DeepSeek V3 hosted $0.032 + $0.011 ≈ $0.043 / PR
Qwen3-Coder 30B lokaal geamortiseerde bak ≈ $0.02 tot $0.06 / PR
Voor 680 PR's per maand land je op zo'n $345 op Sonnet API, $280 op het seat-plan, $30 op DeepSeek hosted en ergens tussen de $15 en $40 op de lokale bak zodra je de capex over drie jaar afschrijft en stroom meerekent.
Dus: hosted DeepSeek en lokale Qwen zijn 8 tot 15 keer goedkoper dan het abonnementspad. Dat is echt geld. Maar voor een bureau met 14 devs is het absolute verschil ruwweg €3.000 tot €4.000 per jaar. Sonnet is niet de dure regel. De dure regel is het engineer-uur dat het model verbrandt zodra het in een loop schiet.
AVG-verdedigbaarheid voorbij een vendor-vinkje
Elke leverancier zegt dat ze 'AVG-compliant' zijn. Wat een auditor van de Autoriteit Persoonsgegevens daadwerkelijk vraagt is specifieker. Waar landt de prompt fysiek. Wie staat er op de subverwerkerslijst. Wat zegt de verwerkersovereenkomst over training op klantdata. Kun je me de logs laten zien.
Voor coding-agents is de vervelende waarheid dat prompts niet 'gewoon code' zijn. Ze bevatten testfixtures met echte klantnamen, databaseschema's die businesslogica blootleggen, verwijzingen naar environment variables, en in toenemende mate de inhoud van Jira-tickets die door een IDE-plug-in in de context worden gepropt. Dat is verwerking van persoonsgegevens, en het bureau is de verwerker.
De drie opties scoren hier heel verschillend.
- Lokale bak. Triviaal. De data verlaat het netwerk niet. De DPIA is kort en saai. Er is geen subverwerkerslijst om achteraan te zitten. Je AVG-verdediging past op een diagram van één pagina.
- Hosted DeepSeek op een westerse host. Werkbaar. Fireworks, Together, Groq en vergelijkbaar tekenen een verwerkersovereenkomst, noemen hun subverwerkers en laten je de regio vastpinnen. De modelmaker (DeepSeek, gevestigd in Hangzhou) zit één laag dieper. Of die verdediging stand houdt hangt af van de klant. Health-tech en overheid: vaak niet. Marketing-tech: meestal wel.
- Abonnement. Anthropic publiceert een verwerkersovereenkomst en een subverwerkerslijst en laat je een EU-gehoste verwerkingsregio kiezen. Hun trust portal is een van de makkelijkere om naar een procurementteam te sturen. Het auditverhaal is goed. Het 'maar jullie sturen onze code naar een Amerikaans bedrijf'-verhaal verschilt qua vorm niet van je bestaande GitHub-voetafdruk.
Kort door de bocht: zit je klant in zorg, recht of defensie, dan duwt de AVG-druk je richting lokaal. Buiten die verticals komt het abonnementspad meestal door procurement heen met een DPA-addendum en een regiopin.
Patch-eigenaarschap als er op een dinsdag een CVE binnenkomt
Dit is de vraag die niemand stelt totdat de eerste CVE echt binnenkomt. En er komt er een. Open-weights supply chains hebben inmiddels gecompromitteerde checkpoints op Hugging Face opgeleverd, prompt-injection-escalaties via tool calls, en minstens één geval waarin een model card naar een andere SHA wees dan de geserveerde weights.
Patch-eigenaarschap schaalt verschillend over de drie opties.
Abonnement. Anthropic patcht. Je hoort er misschien niet eens van. Het endpoint verandert, de model card krijgt een nieuwe versienoot, en je code-review-bot draait tegen lunchtijd al op het gepatchte model. De afweging: jij mag niet zeggen 'nee, ik upgrade vandaag niet, ik zit midden in een release'.
Hosted endpoint. De hosting-provider patcht de infrastructuur. Patches aan de modelkant hangen af van wie de open-weights checkpoint publiceert. De vertraging kan dagen zijn. Voor een CVE op een serialisatielibrary zit je meestal goed. Voor een issue op het niveau van de modelweights rijd je mee op de open source-klok.
Lokale bak. Jij patcht. Op een dinsdagmiddag. De feitelijke handeling: je ops-engineer leest het CVE-record, beslist of het van toepassing is op jouw inference-stack, trekt de nieuwe weights of libraryversie, draait een regressiesuite tegen de PR's van vorige week en rolt vooruit. Voor een bureau met 14 engineers zonder eigen ML-platformrol is dit een echte kostenpost die niet in de per-PR-rekening verschijnt.
Als jouw headcount-rekening zegt 'de meest senior developer doet de CVE-respons wel', dan zijn je werkelijke kosten voor de lokale optie alles wat die developer anders had geshipt. Dat is zelden minder dan €200 per uur aan opportuniteitskosten, en CVE's komen niet op een schema dat jouw sprint respecteert.
De scorekaart die wij de klant overhandigen
Zes dimensies. Scoor elke optie van 0 tot 3. Vermenigvuldig met de weging waar deze specifieke klant daadwerkelijk om geeft. De weging telt zwaarder dan de score.
Dimensie Weging Lokaal Hosted Abonnement
─────────────────────────────────────────────────────────────────────
Kosten per PR 1 3 3 1
AVG-verdedigbaarheid 3 3 1 2
CVE-patcheigenaarschap 2 0 2 3
p95 latency onder load 1 2 2 3
Plafond contextvenster 1 2 2 3
Vendor lock-in-risico 1 3 2 1
─────────────────────────────────────────────────────────────────────
Gewogen totaal 19 16 19
De voorbeeldwegingen hierboven zijn typisch voor een Nederlands bureau dat gereguleerde klanten bedient. De dimensies waar je in de zaal over moet ruziën zijn AVG-verdedigbaarheid en CVE-eigenaarschap, want dat zijn de assen waarop de goedkope opties eigenlijk duur zijn.
Het patroon dat meestal wint
Na zo'n dertig van dit soort gesprekken in het afgelopen jaar ziet de verdeling van uitkomsten bij een Nederlands bureau met sub-€15M omzet er ongeveer zo uit.
Ongeveer 60% landt op het abonnementsplan, bijna altijd Claude Sonnet 4.5, omdat procurement bereid is te tekenen zodra ze de DPA zien en omdat het dinsdagse CVE-risico niet bij hen ligt. Het kostenverschil per PR is reëel, maar valt in het niet bij de salarisregel van een senior engineer.
Ongeveer 25% kiest voor een lokale Qwen3-Coder 30B-bak, maar alleen wanneer de klant in een AVG-gevoelige vertical zit en bereid is de capex te financieren. De eerlijke versie van deze optie bevat één met naam genoemde engineer in een 'model-oncall'-rotatie en een gedocumenteerde patch-runbook.
De resterende 15% komt hybride uit. Een lokaal model handelt het pad af van 'lees de codebase, geef me embeddings, beantwoord vragen over de diff' waarbij context het netwerk niet verlaat. Een abonnementsmodel doet het pad van 'schrijf me een migratieplan vanaf Drupal 7', waar de zware redenering de seat-kosten waard is. De routering gebeurt in jouw control plane, niet in het model.
De terugkerende 'heeft iemand Claude vervangen door een lokaal model voor dagelijks codewerk'-thread op Hacker News is het lezen waard, maar lees de comments zorgvuldiger dan de meest opgestemde topantwoorden. De mensen die volledig zijn overgestapt op lokaal en daar gebleven zijn, hebben bijna allemaal een vaste ML-engineer, of zijn een solo developer met een Mac Studio thuis. Geen van beide past op het bureau dat voor je zit.
Wat dit niet is
Dit is geen benchmarkpost. Het kan ons niet schelen welk model deze maand een halve procent hoger scoort op SWE-bench. Benchmarknummers schuiven van week tot week, en de code van jouw klant zit toch niet in de benchmark. De bovenstaande methode is duurzaam omdat de assen kosten, compliance en ops niet elke week verschuiven.
Toen we eerder dit jaar een code-review-agent bouwden voor een Nederlands marketingbureau, was het onverwachte hoe groot het aandeel van de beslissing was dat neerkwam op de patch-eigenaarschap-vraag. We hebben uiteindelijk een Claude Sonnet-abonnementspatroon bij hen geshipt met een dunne lokale retrieval-laag voor de AVG-gevoelige klantcodebases, dezelfde vorm die we gebruiken voor onze andere AI-agents, zodat de zware redenering op het abonnement blijft staan en de gereguleerde context hun VPC nooit verlaat.
Heb je de kostensom per PR nog niet voor je eigen team gedraaid, dan is dat de audit van vijf minuten die vandaag de moeite waard is. Trek het aantal gemergede PR's van vorige maand op, deel je huidige modelrekening door dat getal en kijk er eerlijk naar. Meestal maakt het getal dat eruit komt de rest van de beslissing voor de hand liggend.
Kern
Scoor de keuze voor je coding-LLM op kosten per PR, AVG-verdedigbaarheid en wie het model op een dinsdag patcht. Het model in de kolomkop verandert. De kolommen niet.
FAQ
Is Qwen3-Coder 30B net zo goed als Claude Sonnet 4.5 voor code review?
Dichtbij op losse benchmarks. Niet dichtbij op long-context reasoning over een grote codebase. Voor een bureau met 14 engineers valt het gat het meest op bij cross-file refactor-suggesties en bij het opvolgen van niet voor de hand liggende instructies in een system prompt.
Kunnen we rechtstreeks een verwerkersovereenkomst met DeepSeek tekenen voor AVG-verdediging?
Niet met DeepSeek als modelmaker op een praktische manier. Je tekent een verwerkersovereenkomst met wie het open-weights model host, zoals Fireworks of Together, en je erft hun subverwerkerslijst. Of dat voor jouw klant acceptabel is, is een procurement-vraag.
Wat kost de lokale-bak-optie daadwerkelijk vooraf?
Een workstation met een RTX 4090 plus genoeg geheugen om Qwen3-Coder 30B comfortabel te draaien land je rond de €5k tot €7k. Een rackbak bij een Nederlandse colo met twee A6000's of een L40S kost €12k tot €20k. Stroom kost €300 tot €600 per jaar tegen Nederlandse tarieven.
Werkt een hybride opzet met lokaal én abonnement in de praktijk?
Ja, en het is het patroon waar ongeveer 15% van onze klanten op uitkomt. Het lokale model regelt retrieval en embedding over private code. Het abonnement doet de zware redenering. De router leeft in jouw control plane, niet in een van beide modellen.