November 29, 2025
Six Years of Hooks
Hooks turned six. A retrospective on the mental models, the mistakes, and how the patterns evolved — from class components to hooks to Server Components to the Compiler.
Showing posts tagged: react
Technical articles about software engineering, architecture, and web development.
November 29, 2025
Hooks turned six. A retrospective on the mental models, the mistakes, and how the patterns evolved — from class components to hooks to Server Components to the Compiler.
September 20, 2025
Six server action patterns I use every week: standard mutations, redirects, optimistic lists, file uploads, progressive enhancement, and hexagonal composition. Code-heavy, opinion-light.
June 14, 2025
The React Compiler went stable and I enabled it on BeautyGlam, MoneyTrack, and EduPlay. Some things got faster. Some things broke. One thing surprised me completely.
March 8, 2025
I migrated two production apps to React 19 in January. Here's what happened -- the wins, the bugs that only showed up in production, the 3am debugging session, and whether I'd do it again.
December 21, 2024
React 19 went stable on December 5, 2024. This is the comprehensive reference I wish I'd had -- every new API, the mental model shift, migration gotchas, and specific recommendations depending on your project size.
September 7, 2024
React 19's useOptimistic hook lets you show users what they expect to see before the server confirms it. One hook, one pattern, and a UX problem I've been solving the wrong way for years.
June 15, 2024
I recommended React Hook Form in my very first blog post. Four years later, I've removed it from three projects. Are React 19's built-in form primitives enough? The honest answer is: it depends, and here's where I draw the line.
March 2, 2024
React 19 beta dropped. I installed it on a side project and started taking notes. This is the raw, unfiltered first-impressions version — what excited me, what confused me, and what I need to think about more.
November 11, 2023
A case study of the architectural decisions behind a multi-tenant SaaS — hexagonal architecture, server actions as composition root, domain events, multi-tenant routing. What worked, what didn't, and what I'd change.
August 26, 2023
I should have cared about accessibility from my first React component. I didn't. That's on me. Here's what I learned after finally sitting down with a screen reader and realizing my forms were completely unusable.
May 6, 2023
Three years ago I wrote a post about useEffect data fetching patterns that I now think was solving the wrong problem entirely. Here's the confession, and the new model that replaced it.
February 4, 2023
I went all-in on the Next.js App Router for a greenfield project and kept notes along the way. Week by week, from total confusion to something resembling understanding. This is the unedited version.
November 12, 2022
Everything I thought I knew about React components turned out to be half the story. Server Components aren't SSR with a new name — they're a different execution model entirely. Here's the mental shift.
September 10, 2022
A single malformed API response blanked our entire dashboard for 2,000 users. This is the story of that incident, what we learned about error boundaries, and the recovery patterns we built after.
July 2, 2022
Everyone's writing about concurrent rendering. Meanwhile, streaming SSR and useId are quietly reshaping how React apps get built. These are the React 18 features that will actually matter in two years.
April 16, 2022
React 18 shipped. I've been using both concurrent hooks in production for six weeks. Here's each one side by side — same UI, with and without — so you can see exactly what they do and when to reach for which.
February 5, 2022
I migrated three projects to React 18 RC in two weeks. Here's my day-by-day diary of what broke, what didn't, and the useEffect cleanup audit that took longer than the actual upgrade.
November 6, 2021
I've been burned by 'this will change everything' before. But concurrent features in the React 18 alpha actually look different. startTransition, automatic batching, Suspense improvements -- here's what I found poking at the alpha for a week.
September 4, 2021
Compound components, render props with hooks, headless hooks, polymorphic components. Four patterns, minimal prose, lots of code. Bookmark this one.
July 3, 2021
TypeScript is worth the pain. Even when it makes you want to throw your laptop out the window. I just started at a new codebase where everything is strictly typed, and after weeks of fighting the type system I finally get why that matters.
May 29, 2021
My early React tests were a mess of implementation details: checking setState was called, verifying class names, asserting on component internals. They broke constantly and gave me zero confidence. Let me show you exactly how bad they were.
April 3, 2021
I'm going to say it: Redux is dead for 90% of new projects in 2021. React Query handles server state better than any Redux setup ever did. Zustand is lighter. Context + useReducer covers the rest. Fight me.
February 13, 2021
Week 1: my first custom hook was terrible. Week 3: slightly less terrible. Month 2: I think I get it. Here's the progression from embarrassing to actually useful, with all the mistakes I made along the way.
January 16, 2021
I see this in every codebase review — performance optimizations that make the code slower. Here's when memoization actually helps.
December 6, 2020
Most tutorials introduce useRef as 'the hook for DOM nodes.' That covers about 30% of what it actually does. Here are the things I had to learn the hard way.
November 2, 2020
React 17 shipped with zero new developer-facing features. No hooks, no Suspense, no concurrent mode. And it might be the most strategically important release in React's history.
October 4, 2020
When you have five related useState calls and scattered update logic, useReducer brings order. A practical guide with real form and cart examples.
August 29, 2020
Context solves prop drilling but introduces re-render traps. Here are the questions I keep getting from study groups and Slack channels, answered honestly.
July 21, 2020
Race conditions, stale closures, missing dependencies, infinite loops — useEffect is where most React bugs are born. A deep dive with real patterns and strong opinions.
June 3, 2020
useState looks simple. Then you hit state batching, stale closures, and object mutations, and you spend a Saturday debugging something that should have taken five minutes.
April 19, 2020
I resisted hooks for longer than I want to admit. Then I actually understood the mental model, and everything about how I write components changed.
March 8, 2020
The setup guide I wish someone had handed me. Tooling, project structure, and component patterns that hold up.
February 12, 2020
After years of Angular, one late-night debugging session changed everything. An honest senior take on choosing React.