Dit getal veranderde alles. Een bug fixen op commit-moment kost 2 minuten. Dezelfde bug in productie? 40+ uur. Verschil: 1.200x.
De vraag is niet of je kwaliteitschecks automatiseert. De vraag is waar. En hoe snel.
Drie lagen, strikte snelheidsbudgetten
Snelheidsbudgetten zijn niet optioneel. Ze zijn het verschil tussen een systeem dat werkt en een dat binnen een week omzeild wordt.
Laag 1: pre-commit (budget: onder 5 seconden)
Draait bij elke save. Te langzaam? Dan wordt --no-verify spiervermogen.
# .pre-commit-config.yaml
hooks:
- ruff --fix # Auto-fix formatting + imports
- ruff-format # Consistente codestijl
- check-yaml # Geldige YAML
- detect-private-key # Gecommitte secrets opvangen Let op: auto-fix. Niet alleen controleren. Developers hoeven niet na te denken over formatting. De tool regelt het.
Laag 2: pre-push (budget: onder 60 seconden)
Draait voordat code je machine verlaat. Vangt alles op wat langer duurt om te checken.
# .git/hooks/pre-push
mypy app/ # Volledige type check
pytest tests/unit/ -x # Unit tests (fail-fast)
ruff check --select S # Security-gerichte regels Laag 3: CI/CD (budget: onder 5 minuten)
Laatste poort voor merge. Grondig. Geen shortcuts.
# .github/workflows/quality-gates.yml
- ruff format --check . # Formatting
- ruff check . # Volledige lint suite
- mypy app/ --strict # Strikte type checking
- pytest --cov-fail-under=80 -v # Tests + coverage-bodem
- pip-audit --strict # Dependency-kwetsbaarheden De resultaten
| Laag | Issues gevangen | Gem. fix-tijd | Kostenvermenigvuldiger |
|---|---|---|---|
| Pre-commit | 1.200+ | 2 min | 1x |
| Pre-push | 895 | 15 min | 8x |
| CI/CD | 377 | 45 min | 23x |
| Menselijke review | 378 | 3 uur | 90x |
87% van alle issues gevangen voordat een mens de code zag. Dat is geen teststatistiek. Dat is een velocity multiplier. Je reviewers besteden hun tijd aan architectuur en logica. Niet aan formatting en type-fouten.
Rol het geleidelijk uit
Niet alles tegelijk invoeren. Developers komen in opstand als je ze ineens overspoelt met tooling.
| Wanneer | Voeg toe |
|---|---|
| Week 1 | Alleen formatting (nul frictie, directe consistentie) |
| Week 2 | Basis linting-regels |
| Maand 1 | Type checking (permissief), coverage-bodem op 60% |
| Maand 2 | Security scanning, coverage omhoog naar 70% |
| Maand 3 | Volledige strikte suite, coverage op 80% |
Waarom snelheidsbudgetten niet onderhandelbaar zijn
De snelste manier om je kwaliteitssysteem kapot te maken? Het langzaam maken. Dit gebeurt er:
- Pre-commit hook duurt 30 seconden
- Developers beginnen
--no-verifyte gebruiken - Issues stapelen zich op in CI. Lokaal wordt niks meer gevangen.
- CI duurt 15 minuten. Moet alles opvangen.
- Developers pushen en halen koffie. Issues fixen? Straks.
- Context switch. Issues zijn nu 10x moeilijker te fixen.
Houd pre-commit onder 5 seconden. Hier doe je geen concessies.