Software Development

Jul 26
Should We Scale?

Should We Scale?

Nobody buys your Kubernetes story. They buy relief. Scale only when real demand hurts. Start simple, fix hot paths, and climb one rung at a time. Complexity is a cost, not a badge. Build for today. Earn microservices later.
8 min read
Jul 08
The Illusion of 100% Test Coverage

The Illusion of 100% Test Coverage

I've watched teams chase 100% and still ship bugs. Coverage proves code ran, not that it worked. Real safety comes from assertions that bite, weird inputs, mutation tests, and tough reviews. Treat coverage as a flashlight, not a finish line.
8 min read
Jul 05
Why Software Development Gets Harder in Teams

Why Software Development Gets Harder in Teams

Teams don’t stall from code alone. They stall when dominance grows, speed turns to sugar, and harmony goes quiet. The fix is candor, shared ownership, and steady refactors before the floor gives way.
7 min read
Jun 29
The Tyranny of Tiny Modules

The Tyranny of Tiny Modules

Modularity is not a numbers game. A 300-line component with a clean flow beats ten shallow ones across folders. Barrels bloat bundles and hide cycles. Write for brains, not style cops: minimize hops, keep related logic close, abstract when it’s earned.
15 min read
Jun 22
Cutting Redundant Data Fetches with React’s `cache` in React 19

Cutting Redundant Data Fetches with React’s `cache` in React 19

React 19’s cache memoizes server calls per request. Wrap a fetch or DB query, call it from multiple server components, and React runs it once. Fewer duplicate hits, faster pages, consistent data. The cache clears after render. Use it in Next.js 15 with RSC.
7 min read
Jun 11
The Real Bug Is in Your Brain

The Real Bug Is in Your Brain

The hardest bugs are not in your repo but in your reasoning. Confirmation, optimism, anchoring, availability, and Dunning-Kruger warp decisions. Fight back with disconfirming tests, independent estimates, broader hypotheses, and KISS. Debug your mind first.
14 min read
Jun 10
TypeScript Soup: Taming an Unruly API

TypeScript Soup: Taming an Unruly API

One tiny helper, big payoff. Use template literal types to infer base fields from `nameFr` style keys, then `getLocalized(locale, obj, fields)` returns exactly what you asked for. No copy-paste, no string concat, typos blocked, locales centralized, fallbacks handled.
3 min read
May 21
No, the Code Doesn’t Speak for Itself

No, the Code Doesn’t Speak for Itself

“Self-documenting code” is a comforting lie. Without READMEs, API contracts, and decision logs, you create onboarding hell, brittle integrations, and knowledge silos. Adopt a “just-enough docs” mindset and make documentation part of done.
7 min read
May 12
Exponential Backoff in Modern JavaScript

Exponential Backoff in Modern JavaScript

Stop hammering a sick API. Exponential backoff—with jitter and caps—turns retries into resilience. I show how to wire it in React/Next.js (client + Route Handlers) and Fastify, when to retry vs bail, and how to keep users happy in 2025.
13 min read
May 12
React 19’s New Hooks: Practical Relief or Added Complexity?

React 19’s New Hooks: Practical Relief or Added Complexity?

React 19: use() for async data, form actions with useFormStatus/useActionState, useOptimistic for snappy updates, and async transitions. Fewer effects and form libs—cleaner patterns for forms, fetching, and UX.
16 min read
May 09
Vibe Coding Is the New Spaghetti Code

Vibe Coding Is the New Spaghetti Code

Vibe coding feels like magic: talk and code appears. But the first draft often hides spaghetti. Use it for prototypes, not production. Treat AI like a junior dev. Review, refactor, test, and own the architecture. Speed wins nothing if maintenance loses.
6 min read
May 09
Why Fundamentals Matter More Than Ever in the AI Era

Why Fundamentals Matter More Than Ever in the AI Era

AI can write features fast, but speed without understanding is a trap. Never merge code you cannot explain. Treat AI like a junior: good for drafts, not decisions. Review, test, and refactor. Fundamentals turn quick wins into systems that stand up under load.
13 min read