The notebook
Blog.
notes from real projects
Practical writing on Laravel, AI engineering, token costs, SaaS architecture, and the technology decisions that make software cheaper to run and easier to grow.
Modernisation
10 posts
25 Jan 2026
Modernisation
Replacing Excel With Custom Software: When It's Actually Worth It
The threshold signals — multi-user editing conflicts, version chaos, formulas nobody understands, GDPR exposure in shared sheets — and an ROI calculation template comparing hours lost to a r...
→
13 Jan 2026
Modernisation
Leaving Shopify for Custom: A Replatforming Decision Framework
A revenue-threshold framework: below ~100k EUR/yr Shopify's speed wins, above ~500k the fee stack and platform limits flip 3-year TCO toward custom/headless — with the migration cost and tim...
→
26 Dec 2025
Modernisation
When Your No-Code MVP Hits the Wall: Migrating to Custom Code
The 2026 wave of Bubble/vibe-coded MVPs hitting performance, integration, and GDPR walls — the specific symptoms that mean it's time, what carries over (validated flows, data) and what doesn...
→
22 Dec 2025
Modernisation
Migrating off CodeIgniter and CakePHP, honestly
I have shipped production systems in CodeIgniter, CakePHP and Laravel. Migrating between them is mostly unglamorous mapping work — here is what it actually involves.
→
15 Dec 2025
Modernisation
The rewrite that should not happen
Clients ask me for rewrites far more often than they need them. Most of the time the honest answer is no — here is the reasoning I walk through before saying it.
→
14 Dec 2025
Modernisation
Rebuild vs Refactor: How I Help Clients Decide on Legacy Systems
A concrete decision framework (change-rate of modules, domain-model fitness, maintenance share of IT budget) with the 2026 hook that legacy upkeep now eats 70-80% of IT budgets while blockin...
→
08 Dec 2025
Modernisation
Writing tests for code you did not write, in the right order
Unit tests are the wrong place to start on inherited PHP. Characterisation tests — pinning down what the code does today — are what make an upgrade survivable.
→
04 Dec 2025
Modernisation
Inheriting a codebase with no tests and no author
The original developer is gone, there are no tests, and production cannot stop. Here is the order I work in when a legacy Laravel codebase lands on my desk.
→
27 Nov 2025
Modernisation
Upgrading Laravel without a big-bang cutover
Every legacy engagement includes someone proposing the rewrite. Here is the incremental upgrade ladder I use instead, and why it keeps winning on risk and cost.
→
20 Nov 2025
Modernisation
Laravel 5 to 8 on a system that could not stop running
Three major Laravel versions, upgraded in place on a system processing real bookings and invoices every day. What I planned, what I measured, and what broke anyway.
→