Practical notes from delivery work: engineering, clients, and running software.
Refactor when the core value is sound and complexity is localised. Rewrite only when the architecture blocks you…
Define success, confirm rollback plan, verify monitoring, and test the happy path plus the top failure modes. Launching…
Legacy Rails can be reliable if you treat it like infrastructure: small changes, tests where it matters, safe…
Keep integration points explicit. Use contracts (schemas), retries, idempotency, and monitoring. ‘It works on my machine’ is not…
Retainers are for continuity and speed. Projects are for defined outcomes. Mixing them without clarity creates scope creep…
Define severity, assign an incident lead, communicate clearly, and write a short postmortem. The goal is learning, not…
When performance work is actually worth it
If users complain or costs climb, performance is revenue. Measure first, fix the bottleneck, then keep an eye on regressions.
How to brief an engineering partner
Give context, constraints, access, and success criteria. The best brief is a clear problem statement plus examples of what ‘good’…
Rails upgrades: how to keep them predictable
Upgrade Rails in steps: audit dependencies, add test coverage where it matters, run dual pipelines, then ship. Big-bang upgrades are…
