Practical notes from delivery work: engineering, clients, and running software.
Docs should answer: what it does, how to run it, how to deploy it, and where it breaks.…
Automate tests, keep builds fast, ship small, and make rollback easy. CI/CD isn’t a luxury, it’s a seatbelt.
Pick a retainer that matches your risk tolerance: response times, patch cadence, and a visible backlog of ongoing…
Automate dependency checks, patch regularly, use least-privilege access, and treat secrets like loaded weapons.
Estimate in ranges, separate unknowns from known work, and review weekly. Precision theatre is how timelines die.
Logs, metrics, and alerts should point to action. If your alert doesn’t tell you what to do next,…
When to refactor vs when to rewrite
Refactor when the core value is sound and complexity is localised. Rewrite only when the architecture blocks you and the…
A simple checklist before launching new features
Define success, confirm rollback plan, verify monitoring, and test the happy path plus the top failure modes. Launching should feel…
Reducing risk in legacy Rails codebases
Legacy Rails can be reliable if you treat it like infrastructure: small changes, tests where it matters, safe deploys, and…
