PHP · Laravel · Symfony · WordPress · API's

PHP developer

25 jaar PHP · Backend, API's en legacy modernisering

PHP is niet hip — maar het draait wel onder een groot deel van de Nederlandse webshops, portalen en bedrijfsapplicaties. Ik help je het stabiel houden, moderniseren of van nul opbouwen. Laravel, Symfony, WordPress of plain PHP — wat past, zonder dogmatisme over frameworks.

Bekijk voorbeelden
25 jr
PHP ervaring
PHP 8.3
Modern stack
Legacy
Stap-voor-stap
API's
REST + GraphQL

De waarde van een goede developer

PHP is volwassen — een goede PHP-developer ziet je écht vooruit helpen

Het verschil tussen 'het werkt' en 'het werkt over 5 jaar nog steeds en is in een uur uit te breiden' zit in fundamenten: testdekking, types, dependency injection, schone migraties, monitoring en een ontwerp dat groei aankan. Daar zit waar een ervaren PHP-developer écht waarde toevoegt.

Backends die je over 5 jaar nog snapt

Strict types, dependency injection, clean architecture, schone naming. Geen 600-regel-controllers, geen God-objecten, geen gokwerk over wat een methode doet.

Datamodellen die mee-schalen

Schema-ontwerp dat groei aankan, indexen op de juiste plekken, migraties die teruggedraaid kunnen worden. Database is niet 'iets wat erbij komt' — het is het fundament.

Performance op productie-schaal

Query-optimalisatie, caching-strategie (Redis, OPcache, query-cache), N+1 wegwerken, profilering met XHProf of Tideways. Server-load omlaag, response-tijden onder controle.

Security die je dossier dekt

Input-validatie, prepared statements, CSRF, XSS, secret-management, dependency-audits, AVG-proof logging. Geen lekken, geen verrassingen bij een pentest.

Legacy moderniseren zonder big-bang

Strangler-pattern: stukje voor stukje vervangen, eerst tests om de oude code, dan refactor, dan vervangen. De business blijft draaien terwijl de code beter wordt.

CI/CD die teams sneller maakt

Pipelines met PHPStan, Psalm, Rector, PHPUnit, Pest, end-to-end tests, staging-deploys en rollback. Releases worden routine, niet een evenement.

Twijfel je waar het in jouw situatie misgaat? Ik denk graag mee — gewoon Maarten zelf.

Hoe het eruit ziet

Hoe een PHP-traject er praktisch uitziet

Van schone code en API-design tot performance-winst en CI/CD — hieronder een paar visualisaties van wat een PHP-traject concreet oplevert.

Strict, getest, voorspelbaar

PHPStan lvl 9

Laravel 11 · PHP 8.3 · Pest tests

final readonly class CreateOrder
{
    public function __construct(
        private OrderRepository $orders,
        private StockService $stock,
        private EventDispatcher $events,
    ) {}

    public function handle(OrderInput $input): Order
    {
        $this->stock->reserve($input->items);
        $order = $this->orders->create($input);
        $this->events->dispatch(new OrderPlaced($order));
        return $order;
    }
}

Legacy refactor · voor / na

−68% load

Symfony 4 → Symfony 7, 6 maanden traject

Metric
Voor
Na
Gem. response-tijd
1.420 ms
180 ms
DB queries / request
147
12
Server-load (peak)
84%
27%
Testdekking
8%
76%
Deploys / week
0.5
9
PHPStan errors
3.840
0

API-flow · REST + queue

Schaalbaar

Laravel + Horizon · idempotent

  1. 01

    Request validation

    Form Request + DTO + strict types.

  2. 02

    Business logic

    Service-class met dependency injection.

  3. 03

    Database tx

    Transactie met repository-pattern.

  4. 04

    Domain events

    Event dispatch na commit, niet ervoor.

  5. 05

    Queued jobs

    Notificaties, sync, externe API's via queue.

  6. 06

    Observability

    Sentry + structured logs + metrics.

API-dashboard

Sentry + APM

Realtime monitoring · per endpoint

9:415G · 100%

Sentry + APM

POST /api/v1/orders

P95: 142 ms · Error rate: 0,02%

Throughput: 320 req/min
Queue depth: 4 · workers: 8
DB pool: 12/40 in use

Hoe zou dit er in jouw shop uitzien? Ik denk graag mee — gewoon Maarten zelf.

Herkenbaar?

PHP-problemen die ik vaak voorbij zie komen

Bijna elk traject begint met een variant op deze klachten — en bijna altijd is de oplossing geen rewrite, maar gerichte modernisering.

Legacy codebase die niemand durft aan te raken

Pijn: PHP 5.6, geen tests, 12-jarige spaghetti, ex-developer onbereikbaar. Elke wijziging kan de hele boel breken — en niemand weet wat er gebeurt als je 'm aanraakt.

Aanpak: Strangler-pattern: eerst characterization-tests om de bestaande code, dan stuk voor stuk vervangen door schone module. PHP-versie naar 8.3, dependency-update, geen big-bang.

Trage backend, niemand weet waarom

Pijn: Response-tijden van seconden, occasional 500-errors, server-load piekt op de gekste momenten. 'Misschien moeten we naar een grotere server?'

Aanpak: Profilering met XHProf/Tideways, query-analyse, N+1 fixen, caching waar zinvol. Vaak −70%+ response-tijd zonder grotere server.

Security-audit afgekeurd

Pijn: Pentest meldt SQL-injectie, XSS, verouderde dependencies, secrets in repo. Compliance-team blokkeert release.

Aanpak: Stapsgewijs oplossen: input-validatie, prepared statements, escaping, dependency-update via Composer audit, secrets via env/vault, GitHub security alerts.

Database trekt het niet meer

Pijn: Tabel met 12M rijen, queries van seconden, indexen ontbreken of fout, JOIN's op 6 tabellen voor elke pagina-load.

Aanpak: Index-analyse, query-rewrite, denormalisatie waar zinvol, caching met Redis, eventueel partition of read-replica. Sneller én voorbereid op groei.

Deploys zijn een evenement

Pijn: Elke release is FTP-uploaden op zondagavond, vingers kruisen en hopen. Roll-back betekent backup terugzetten.

Aanpak: CI/CD via GitHub Actions / GitLab CI, automatische tests, staging-deploy, blue-green of atomic deploy met rollback. Releases worden saai — en dat is goed.

Geen testdekking

Pijn: 0% tests, elke wijziging is een gok, bugs lekken door naar productie. 'We hebben geen tijd voor tests' — terwijl bugfixen het dubbele kost.

Aanpak: Eerst tests om kritieke flows, daarna PHPUnit/Pest in CI met coverage-rapport. Geen dogma 100%, maar 70%+ op het bedrijf-kritieke pad.

Externe API's zijn een blackbox

Pijn: Externe koppelingen werken meestal, behalve als de partner traag is — dan timeout, ander deel van de app vastloopt en niemand weet waarom.

Aanpak: Resilience: timeouts, retries met backoff, circuit breaker, async via queue. API-calls vallen om zonder de hele app mee te slepen.

Geen monitoring of logging

Pijn: Bug op productie? 'Kun je het opnieuw doen, dan zoek ik het op?' Logs staan op de server, niemand kijkt er ooit naar.

Aanpak: Sentry voor exceptions, structured logging naar Loki/CloudWatch, APM (New Relic/Datadog/eigen Prometheus). Bug komt binnen vóór de eerste klant belt.

PHP · Laravel · Symfony · WordPress · API's

PHP-project dat structureel beter moet?

Sparring over je codebase, je technische debt en de snelste route naar iets dat onderhoudbaar én snel is — concreet en zonder sales-trechter.

Bekijk klantcases

Wat het oplevert

Voorbeelden van PHP-trajecten

Een goede PHP-developer levert iets meetbaars op: snellere response-tijden, minder bugs, snellere release-cyclus, een codebase die je team graag aanraakt. Een paar voorbeelden ter inspiratie.

−68%

Response-tijd na refactor

Symfony 4 → 7 traject, query-optimalisatie en Redis-cache. P95 van 1.420 ms naar 180 ms zonder grotere server.

0,5 → 9

Deploys per week

CI/CD met tests, staging en blue-green deploy. Van 'release-zondag' naar 'meerdere keren per dag', zonder downtime.

8% → 76%

Testdekking opgebouwd

Strangler-pattern: characterization-tests rond legacy, daarna nieuwe code met Pest. Bugs op productie −82%.

147 → 12

Queries per request

N+1 wegwerken en eager loading. Bij 320 req/min: minder load, hogere throughput, lagere DB-kosten.

PHP 8.3

Upgrade van PHP 5.6

Gefaseerd: dependencies, syntax, deprecations, type-decoratie. Geen big-bang, geen downtime, modernere stack.

Pentest groen

Security-audit gehaald

SQL-injectie, XSS, dependency-issues opgelost. Pentest na 3 maanden: geen kritieke findings, compliance ontgrendeld.

Resilient

Externe API's gehard

Timeouts, retries, circuit breaker, async queue. Externe storingen brengen de hele app niet meer plat.

−€ 1.400/mnd

Server-kosten omlaag

Door query-optimalisatie en OPcache-tuning kon de cloud-server een tier kleiner. Direct effect op de maandfactuur.

Sentry live

Observability ingericht

Sentry + structured logs + dashboards. Eerste maand: 240 onbekende exceptions ontdekt en opgelost.

Auto

Migraties zonder downtime

Online schema-migraties met gh-ost / pt-online-schema-change, zero-downtime deploys, geen onderhouds-uren meer.

Static 9

PHPStan level 9

Codebase opgeschoond van 3.840 errors naar 0. Bugs door type-mismatches praktisch verdwenen.

Queued

Mail- en notify-flows stabiel

Externe SMTP / SendGrid timeouts brachten ooit checkout plat. Nu queued, retries, geen blockerende calls meer.

Horizon

Job-systeem schaalbaar

Laravel Horizon / Symfony Messenger ingericht, workers per queue, monitoring per job. Backend kan piek-volume hebben.

Onboard 2dgn

Nieuwe dev in 2 dagen live

README, lokale Docker-setup, seed-data, contributing.md, tests. Onboarding van 2 weken naar 2 dagen.

Peak-klaar

Black Friday gehaald

Stress-test, queue-tuning, cache-warm-up. 5x normaal verkeer zonder één 5xx-error.

Welk voorbeeld lijkt het meest op jouw situatie? Ik denk graag mee — gewoon Maarten zelf.

Wat ik bouw

PHP-werk dat regelmatig terugkomt

Laravel 10/11 backends

Schoon, getest, met DI en clean architecture — niet 'enkel een controller'.

Symfony 6/7 applicaties

Voor projecten waar fijnmazige controle en strict types boven productiviteit gaan.

WordPress & WooCommerce custom

Plug-ins, custom post types, REST endpoints en performance-tuning op WP-stacks.

REST + GraphQL API's

Versioned, gedocumenteerd (OpenAPI), met rate-limiting, auth en idempotency.

Database-werk

MySQL, MariaDB, Postgres — schema-design, indexen, migraties, performance.

Legacy modernisering

PHP 5.x/7.x → 8.3, framework-upgrades, strangler-pattern, zero-downtime.

Testdekking opbouwen

PHPUnit, Pest, Mockery, end-to-end met Playwright/Cypress.

CI/CD pipelines

GitHub Actions, GitLab CI — tests, static analysis, deploys met rollback.

Security & compliance

Pentest-remediation, AVG-proof logging, secrets-management, dependency-audits.

Queues & workers

Laravel Horizon, Symfony Messenger, Redis-queues, retries en monitoring.

Performance-tuning

XHProf/Tideways, query-optimalisatie, caching, OPcache, Redis.

Observability

Sentry, structured logging, APM, dashboards — bugs vóór de eerste klant.

Multi-tenant & SaaS

Database-per-tenant of shared-schema, billing-integraties, feature-flags.

Integraties op maat

ERP (Exact, AFAS), CRM (HubSpot, Pipedrive), PSP (Mollie, Adyen, Stripe), marktplaatsen.

Data-imports en migraties

ETL-flows, één-malige migraties, recurring syncs met dedupe en retry.

Specifiek onderdeel in je hoofd? Ik denk graag mee — gewoon Maarten zelf.

Koppelingen

Stacks en systemen waarmee ik regelmatig werk

Laravel 10/11 + Livewire / Inertia

Voor moderne PHP-webapps en SaaS.

Symfony 6/7 + Doctrine

Voor projecten met strict types en domain-driven design.

WordPress + WooCommerce + ACF

Custom plug-ins, headless, performance-tuning.

MySQL / MariaDB / Postgres / Redis

Schema, indexen, migraties en caching.

GitHub Actions / GitLab CI / Bitbucket

CI/CD met tests, static analysis en deploys.

Docker / Kubernetes / Forge / Ploi

Containerized of managed hosting.

Sentry / Datadog / New Relic / Prometheus

Observability en APM.

Stripe / Mollie / Adyen / PayPal

Betaal-integraties met webhooks en reconciliation.

Exact / AFAS / SnelStart / HubSpot

ERP- en CRM-koppelingen via API.

Ander systeem? Vraag het even. Ik denk graag mee — gewoon Maarten zelf.

Hoe het werkt

Een PHP-traject in 4 stappen

  1. 01

    Audit & plan

    Codebase en infra in kaart, technische debt benoemen, prioriteiten en fases vaststellen.

  2. 02

    Tests & vangnet

    Tests rond kritieke flows, monitoring en CI opzetten — zodat refactor veilig is.

  3. 03

    Refactor & build

    Stap voor stuk vervangen of nieuw bouwen, met PR-reviews en staging-deploys.

  4. 04

    Live & beheer

    Go-live met monitoring, daarna doorlopend onderhoud of overdracht aan jouw team.

Klaar om de eerste stap te zetten? Ik denk graag mee — gewoon Maarten zelf.

Veelgestelde vragen

Werk je met Laravel, Symfony of WordPress?

Met alle drie, en ook met plain PHP wanneer geen framework nodig is. Keuze hangt af van wat er al draait, je team en de aard van het project. Geen dogma — ik denk mee in wat past.

Kun je een legacy PHP 5.x of 7.x project oppakken?

Ja, vaak juist daar. Met characterization-tests, dependency-update via Rector en gefaseerde upgrade naar PHP 8.3 zonder big-bang.

Bouw je ook nieuwe API's?

Ja. REST (met OpenAPI-docs) of GraphQL, met auth (Sanctum, Passport, JWT, OAuth2), rate-limiting, versioning en idempotency. Inclusief gegenereerde client-SDK's wanneer relevant.

Werk je met testdekking?

Standaard, ja. PHPUnit of Pest in CI met coverage-rapport. Geen dogma 100%, maar 70%+ op het bedrijfskritieke pad — en altijd characterization-tests vóór een refactor.

Wat met performance-issues?

Profilering met XHProf, Tideways of Blackfire, query-analyse, N+1 wegwerken, caching (Redis, OPcache, query-cache). Vaak −50%+ response-tijd zonder grotere server.

Kun je helpen met security?

Ja, ook met pentest-remediation. Input-validatie, prepared statements, escaping, CSRF, secrets-management, dependency-audits via Composer audit en GitHub security alerts.

Wat voor CI/CD doe je?

GitHub Actions of GitLab CI: tests, PHPStan/Psalm (level 8-9), Rector, Pest/PHPUnit, end-to-end. Daarna staging-deploy, smoke-tests en productie-deploy met rollback-pad. Releases worden saai.

Werk je met queues?

Ja. Laravel Horizon, Symfony Messenger of generieke Redis-queues. Voor mails, externe API-calls, exports, imports en zware berekeningen — met retries, monitoring en dead-letter handling.

Doe je ook DevOps?

Op het niveau dat een full-stack PHP-developer hoort te doen: Docker, deployment-pipelines, Forge/Ploi of containers, Sentry, structured logging. Voor zware infra werk ik samen met een DevOps-specialist.

Kun je in een bestaand team werken?

Ja, dat doe ik vaak — als freelance backend-developer in een team, of als sparring-partner voor jullie junior/medior devs. Code-reviews, mob-programming en kennisoverdracht horen daarbij.

Werk je white-label voor bureaus?

Regelmatig. Repo bij jullie of bij mij, communicatie via jullie project-lead, sprint-demo's. Klant ziet jullie merk.

Hoe zit het met onderhoud na livegang?

Verschillende modellen: vast aantal uren per maand, fixed bandbreedte voor bugs en kleine features, of pure overdracht aan jouw team met een goede README en onboarding.

PHP · Laravel · Symfony · WordPress · API's

PHP-project dat structureel beter moet?

Sparring over je codebase, je technische debt en de snelste route naar iets dat onderhoudbaar én snel is — concreet en zonder sales-trechter.

Bekijk klantcases
Maarten Soetens

Even sparren over jouw project?

Korte lijntjes, eerlijk advies, geen sales-praat. Ik denk vrijblijvend met je mee — gewoon Maarten zelf.

Geen automatisch antwoord — ik mail of bel je persoonlijk terug.