
Stale Closures in React: Why Handlers, Effects, and Timers Read Old State
Stale closures in React explained through renders, handlers, effects, timers, refs, dependency arrays, why callbacks read old state, and how to fix them.
Articles
Development is the broadest category in my writing, so it works as the main archive rather than a narrow subject label. It brings together implementation notes and technical decisions, with delivery lessons from across the rest of the site.

Stale closures in React explained through renders, handlers, effects, timers, refs, dependency arrays, why callbacks read old state, and how to fix them.

Debugging hydration mismatches in React and Next.js, including common causes, repeatable fixes, and how to stop server and client renders drifting apart.

Lessons from running Next.js Pages Router at scale in 2026, including governance, performance discipline, and why older patterns sometimes still make sense.

How to de‑risk a CMS migration before the real move starts, by testing workflows, content assumptions, integrations, ownership, and technical contracts early.

A practical framework for choosing rewrite, refactor, or strangler paths, based on risk, delivery pressure, change cost, and organisational appetite.

Retention theatre explained through surveys, recognition schemes, pay, autonomy, trust, workload, management quality, and why strong engineers still leave.

Why transformation programmes fail after the slide deck, covering ownership, governance, operating‑model change, vendor fragmentation, and delivery reality.

Build an LRU cache in TypeScript with a hash map and doubly linked list, then compare it with a simpler JavaScript Map implementation and O(1) operations.

My view on product engineers and software engineers: how the remit differs, why organisational support matters, and what we need to learn after release.

Consultancies can unblock stalled programmes, but without ownership transfer and internal capability growth, rescue work becomes recurring dependency.

Deadline debt explained as hidden rework, incidents, technical debt, quality loss, and recovery cost when teams compress quality without recording trade‑offs.

Diagnose Sass colours that survive compilation but break in Next.js production CSS when minification creates invalid mixed‑unit legacy rgb() values.

Mastering Server Components in Next.js, including client boundaries, data fetching, caching, streaming, and the mistakes that make App Router code messy.

Outsourcing can accelerate delivery, but if it replaces internal ownership, companies lose platform knowledge, leverage, and the ability to change safely.

402 finally Found a PurposeHTTP 402 was reserved for future payment systems. AI crawlers, paid access, and agentic payments may finally give this status code a practical web role.

Maximum Subarray and Kadane's Algorithm explained with TypeScript, showing how a linear pass tracks current and best sums across positive and negative values.

The seniority trap happens when organisations hire experienced engineers for judgement, then deny authority, access, decision rights, and influence.

Companies talk about a high hiring bar, but weak offers, slow interviews, and vague criteria drive strong engineering candidates out long before a decision.