Back to home

Writing

Notes on React, Node.js and AI-assisted delivery — first published on LinkedIn.

Follow on LinkedIn

How I decide what actually needs a test

Most test-coverage debates are about the wrong number. The question isn't "what percentage is tested" — it's "what breaks silently if this changes."

Testing

How I debug a bug I can't reproduce

Most bugs labeled "can't reproduce" aren't random. Something is different — the environment, the data, or the timing — and the bug is actually 100% reproducible once that difference is found.

Practices

What I do in my first week on an unfamiliar codebase

Joining an existing codebase is a skill nobody teaches. You're expected to be productive in a system thousands of decisions deep, and none of those decisions are written down.

Practices

The order I review a pull request in

Most code review comments are about the wrong things. Naming, formatting, a missing semicolon — the parts a linter could have caught.

Practices

React state: when I use what

Most React state bugs I review aren't state bugs. They're one mistake wearing four different costumes: treating server data like local data.

React

I standardised Claude Code in my team: the part nobody talks about

I standardised Claude Code in my team a year ago. We ship about 30% faster. Here's the part nobody talks about.

AIPractices

Running an MCP server in production: three things I got wrong first

Everyone's writing about MCP. Far fewer have run one in production.

AINode.js

Stripe payments: three webhook pitfalls I didn't see coming

Payments aren't "integrating Stripe." They're everything that happens afterwards.

Node.js

Next.js 16: middleware.ts is now proxy.ts

If you upgrade to Next.js 16 and your middleware.ts stops doing what you expect — it wasn't deleted. It was renamed.

React

My AI-assisted workflow, step by step

Everyone says AI makes you faster. Far fewer show the actual workflow. Here's mine, step by step.

AI

Where TypeScript actually earns its keep

TypeScript gets sold as "fewer bugs." Honestly? That's not where it earned its keep for me.

TypeScript

Three mistakes behind most Node API bugs

Most of the Node API bugs I've reviewed come down to the same 3 mistakes. None of them are exotic — that's exactly why they keep shipping.

Node.js

A year of Claude Code and Cursor: the honest scorecard

I've used Claude Code and Cursor every day for about a year. Here's the honest scorecard, not the hype.

AI

Three conventions that cut onboarding from weeks to days

Onboarding a new dev to our codebase used to take weeks. We got it down to days.

Practices

The three signals I check first in a React codebase

I've joined teams where the React app "worked" — and still spent the first month afraid to touch anything.

ReactPractices

Why I keep coming back to React, Next.js and Node.js

After 6+ years building products, I keep coming back to the same stack: React, Next.js, and Node.js. Not because it's trendy.

ReactNode.js

What running tests on every push actually changed

"We don't have time to write tests" is how teams end up with no time at all.

Testing

How AI cut our delivery time by ~30% — and why it wasn't the code

I cut my team's delivery time by ~30% using AI — but not the way most people think. The real win wasn't the code. It was everything around it.

AI