Technical insights and practical observations on software development, digital craft, and the evolving technology landscape.
Expect content that balances technical insight with measured reflection, seasoned with just the right amount of humour. These ideas and observations refused to stay quietly in mind, now shared to spark meaningful discussions and fresh perspectives.
All (22)
The complete archive across all years—from hands-on infrastructure and tooling guides to opinionated takes on architecture, quality, and the forces reshaping the craft.2026 (3)
AI copilot scrutiny and microservices cost reckonings opened 2026—popular engineering choices faced overdue questions about whether fashionable solutions create more problems than they solve.2025 (11)
Reproducible build pipelines, calmer velocity metrics, and unapologetic debt triage defined 2025—ambitious launches stayed trustworthy for teams and clients alike.2024 (5)
Lightweight dnsmasq tweaks, tmux muscle memory, and a renewed obsession with simple tooling made 2024 about clearing friction so experiments actually shipped.2023 (3)
Grounding habits around uptime math, disciplined dotfiles, and dependable SSH pathways kept 2023 focused on humble craft that scales when incidents inevitably strike.Topics (12)
From architecture and security to productivity and industry trends—explore articles organised by subject rather than date, across all topics.
15 February 2026
The microservices tax: when distributed systems cost more than the problems they solve
The industry adopted microservices as the default architecture for modern systems, but the tax is coming due. When the company that helped popularise distributed services publishes a 90% cost reduction by returning to a monolith, the assumption deserves reexamination.
15 January 2026
The copilot paradox: when coding faster makes your codebase worse
AI coding assistants promise dramatic productivity gains, but independent research tells a contradictory story. When controlled studies, delivery metrics, and 211 million lines of analysed code all point in the same uncomfortable direction, the industry narrative deserves scrutiny.
5 January 2026
Null: the billion-dollar mistake that keeps compounding
In 1965, a computer scientist added a feature to a programming language because it was easy to implement. Sixty years and countless production crashes later, every modern language designed for reliability has arrived at the same conclusion: that decision was catastrophically wrong.
30 November 2025
The junior developer extinction: the missing seniors of 2035
Entry-level developer hiring has collapsed by 73% whilst companies celebrate AI as a replacement for junior talent. But senior developers do not materialise from thin air—they are grown from juniors over five to ten years. We are watching an industry cannibalise its own future.
30 October 2025
AWS sub-accounts: isolating resources with Organizations
Most teams dump client resources into their main AWS account, creating an administrative nightmare when projects end or security issues arise. AWS Organizations sub-accounts provide hard security boundaries that separate resources, limit blast radius from incidents, and make cleanup trivial—yet many developers avoid them, assuming the setup complexity outweighs the benefits.
23 October 2025
The architecture autopsy: when 'we'll refactor later' becomes 'we need a complete rewrite'
Early architectural decisions compound over time, creating irreversible constraints that transform minor technical debt into catastrophic system failures. Understanding how seemingly innocent choices cascade into complete rewrites reveals why future-proofing architecture requires balancing immediate needs with long-term reversibility.
28 August 2025
The symptom-fix trap: Why patching consequences breeds chaos
In the relentless pressure to ship features and fix bugs quickly, development teams fall into a destructive pattern of treating symptoms rather than root causes. This reactive approach creates cascading technical debt, multiplies maintenance costs, and transforms codebases into brittle systems that break under the weight of accumulated shortcuts.
15 August 2025
The 2038 problem: when time runs out
At exactly 03:14:07 UTC on January 19, 2038, a significant portion of the world's computing infrastructure will experience temporal catastrophe. Unlike Y2K, this isn't a formatting problem - it's mathematics meets physics, and we can't patch the fundamental laws of binary arithmetic.
7 August 2025
The velocity trap: when speed metrics destroy long-term performance
Velocity metrics were meant to help teams predict and improve, but they have become weapons of productivity theatre that incentivise gaming the system while destroying actual productivity. Understanding how story points, velocity tracking, and sprint metrics create perverse incentives is essential for building truly effective development teams.
24 July 2025
Sprint overcommitment: the quality tax nobody measures
Three features in parallel, each "nearly done". The authentication refactor sits at 85% complete. The payment integration passed initial testing. The dashboard redesign awaits final review. None will ship this sprint—all will introduce bugs next sprint. Research shows teams planning above 70% capacity experience 60% more defects whilst delivering 40% less actual value.
21 July 2025
Technical debt triage: making strategic compromises
Simple CSV export: one day estimated, three weeks actual. User data spread across seven tables with inconsistent types—strings, epochs, ISO 8601 timestamps. Technical debt's real cost isn't messy code; it's velocity degradation. Features take weeks instead of days. Developers spend 17 hours weekly on maintenance from accumulated debt.
1 July 2025
Environment reproducibility: Docker vs. Nix vs. Vagrant
Production threw segmentation faults in unchanged code. Four hours revealed the cause: Node.js 18.16.0 versus 18.17.1—a patch version difference in native addon handling exposing a memory corruption issue. Environment drift creates space for bugs to hide. Docker, Nix, and Vagrant solve reproducibility at different levels with distinct trade-offs.
15 May 2025
Reproducible development environments: the Nix approach
Dozens of Go microservices in Docker, almost a dozen Node.js UI applications, PostgreSQL, Redis. Extensive setup process. Docker Desktop, Go 1.21 specifically, Node.js 18 specifically, PostgreSQL 14, build tools differing between macOS and Linux. When it breaks, debugging requires understanding which layer failed. Developers spend 10% of working time fighting environment issues.
1 May 2025
The hidden cost of free tooling: when open source becomes technical debt
Adding file compression should have taken a day. Three packages needed different versions of the same streaming library. Three days of dependency archaeology, GitHub issue spelunking, and version juggling later, we manually patched node_modules with a post-install script. Open source is free to download but expensive to maintain.
22 November 2024
Avoiding overkill: embracing simplicity
A contact form implemented with React, Redux, Webpack, TypeScript, and elaborate CI/CD pipelines—2.3MB production bundle for three fields and a submit button. Two days to set up the development environment. Thirty-five minutes to change placeholder text. This is overengineering: enterprise solutions applied to problems that need HTML and a server script.
5 November 2024
Terminal multiplexing: beyond the basics
Network drops during critical database migrations. SSH connections terminate mid-deployment. Terminal crashes destroy hours of workspace setup. tmux decouples your terminal interface from persistent sessions that continue running independently—network failures become irrelevant interruptions rather than catastrophic losses, whilst organised workspaces survive crashes and reconnections.
15 July 2024
SSH keys in 1Password: eliminating the file juggling ritual
SSH keys scattered across machines create a familiar nightmare—copying files between systems, remembering which key lives where, and the inevitable moment when you need to connect from a new laptop without access to your carefully managed ~/.ssh directory. 1Password's SSH agent transforms this by keeping encrypted keys available everywhere whilst ensuring private keys never touch disk outside the vault.
9 April 2024
Turbocharge development: the magic of SSH port forwarding
Security policies block database ports. Firewalls prevent external connections. Remote services remain inaccessible except through carefully controlled channels. SSH port forwarding creates encrypted tunnels that make distant services appear local—you connect to localhost whilst traffic routes securely to remote resources, maintaining security boundaries without compromising workflow efficiency.
17 January 2024
Streamlining local development with Dnsmasq
Testing on localhost hides entire categories of bugs—cookie scope issues, CORS policies, authentication flows that behave differently on real domains. These problems surface after deployment, when fixing them costs hours instead of minutes. Dnsmasq eliminates this gap by making local development behave like production, turning any custom domain into localhost whilst preserving domain-based security policies.
7 November 2023
SSH dotfiles: unlocking efficiency
Managing dozens of SSH connections means remembering complex hostnames, multiple keys, and elaborate commands you copy from text files. The .ssh/config file transforms this chaos into memorable aliases that map mental shortcuts to complete configurations, reducing cognitive load so you can focus on actual work rather than SSH incantations.
3 November 2023
Dotfiles: why and how
Working on someone else's machine feels like writing with their hands—common commands fail, shortcuts vanish, and everything feels wrong. Dotfiles transform this by capturing your accumulated workflow optimisation in version-controlled configuration files, turning any terminal into your terminal within minutes rather than days of manual reconfiguration.
1 November 2023
Downtime of uptime percentages, deciphering the impact
Understanding the real-world implications of uptime percentages is paramount for businesses and consumers alike. What might seem like minor decimal differences in uptime guarantees can translate to significant variations in service availability, impacting operations, customer experience, and bottom lines.