Kent C. Dodds

  1. You Own the Outcome: Product Engineering in the Age of AI

    Agents are great at producing code. The valuable work left for you is deciding what should exist, how it should behave, and what you're willing to trade for it.

    Published

  2. Introducing Kody: Your Personal Software Factory

    Kody turns the good answer into a package you keep.

    Published

  3. Implementing Hybrid Semantic + Lexical Search

    Semantic search alone wasn't good enough. Here's how I improved search on kentcdodds.com through three rounds of iteration with Cursor and GPT-5.4, each time learning something that the previous design missed.

    Published

  4. Simplifying Containers with Cloudflare Sandboxes

    How I replaced a long-lived Cloudflare Container with a one-shot Cloudflare Sandbox, deleted most of the control-plane code, and let an agent do the heavy lifting in less than an hour of my own time.

    Published

  5. Migrating to Workspaces and Nx

    The interesting part of moving kentcdodds.com to npm workspaces was not the file moves. It was everything the file moves broke.

    Published

  6. Offloading FFmpeg with Cloudflare

    How I moved Call Kent podcast episode processing off my primary Fly.io app server and onto Cloudflare Queues and Containers: what broke, what I missed, and whether it was worth the complexity.

    Published

  7. Building Semantic Search on my Content

    I've added some pretty cool AI-powered features to kentcdodds.com and I want to tell you all about it.

    Published

  8. Helping YOU ask ME questions with AI

    Here's how I've made it easier for you to call into the Call Kent podcast without having to record yourself and also make yourself anonymous using AI.

    Published

  9. How I used Cursor to Migrate Frameworks

    I upgraded kentcdodds.com from Remix v2 to React Router v7 in a day with over 17k lines of code changed. Here's how I did it.

    Published

  10. The Dow's Start on the Covenant Path

    My experience sharing the gospel with Jeremiah and Beiyi Dow

    Published

  11. 2025 in Review

    Looking back over my 2025 and looking forward to my 2026

    Published

  12. The next chapter: EpicAI.pro

    What I'm working on with AI education and why I think it's the future.

    Published

  13. AI is taking your job

    AI is changing how hiring works, and that makes in person connections even more important.

    Published

  14. How I increased my visibility

    Someone asked me this and here's my answer.

    Published

  15. 2023 in Review

    A review of what happened in the life of Kent C. Dodds in 2023

    Published

  16. Launching Epic Web

    The story of how Epic Web came to be

    Published

  17. Stop Being a Junior

    Some advise for people who still consider themselves junior developers

    Published

  18. RSC with Dan Abramov and Joe Savona Live Stream

    I had a live streamed conversation with Joe Savona and Dan Abramov. Here's a summary of our discussion.

    Published

  19. Fixing a Memory Leak in a Production Node.js App

    How I found and fixed a memory leak on kentcdodds.com

    Published

  20. 2022 in Review

    A review of what happened in the KCD world in 2022

    Published

  21. My Car Accident

    I was involved in a very bad car accident in 2022. Here's the story.

    Published

  22. I Migrated from a Postgres Cluster to Distributed SQLite with LiteFS

    Why and how I migrated from distributed postgres to distributed sqlite on kentcdodds.com

    Published

  23. I'm building EpicWeb.dev

    I've struck out on my own again to focus on my most ambitious project yet.

    Published

  24. A review of my time at Remix

    As I move on to my next adventure, I want to take this opportunity to review what I accomplished while at Remix.

    Published

  25. Remix: The Yang to React's Yin

    Remix fills the missing piece that all React web applications need: The Network Chasm

    Published

  26. How I help you build better websites

    I'm making a career move to more effectively help you make the web (and the world) better.

    Published

  27. Why I Love Remix

    I've written tens of thousands of lines of code with Remix and I want to tell you why I love using this framework.

    Published

  28. The State Initializer Pattern

    A simple pattern used in libraries like downshift and ReachUI to enable component/hook users to initialize your state and even reset it to that initial value.

    Published

  29. How to React ⚛️

    Let's see how learning React ⚛️ in the right order can make it less overwhelming.

    Published

  30. Get a catch block error message with TypeScript

    TypeScript forces you to acknowledge you can't know what was thrown making getting the error message a pain. Here's how you can manage it.

    Published

  31. Building an awesome image loading experience

    How Unsplash's blurred image loading works and why I did mine differently for a more excellent experience on my site.

    Published

  32. How Remix makes CSS clashes predictable

    Remix has this beautifully simple feature for CSS that I want to tell you all about.

    Published

  33. Introducing the new kentcdodds.com

    This site just experienced a huge rewrite and I want to show you around a bit.

    Published

  34. How I built a modern website in 2021

    I rewrote kentcdodds.com using the latest technologies and I want to talk about what I did.

    Published

  35. How to use React Context effectively

    How to create and expose React Context providers and consumers

    Published

  36. Static vs Unit vs Integration vs E2E Testing for Frontend Apps

    What these mean, why they matter, and why they don't

    Published

  37. The Testing Trophy and Testing Classifications

    How to interpret the testing trophy for optimal clarity

    Published

  38. Array reduce vs chaining vs for loop

    A comparison of different approaches to operating on an array

    Published

  39. Don't Solve Problems, Eliminate Them

    How eliminating problems can drastically simplify your codebases and life

    Published

  40. Super Simple Start to Remix

    The simplest distraction-free version of a remix app

    Published

  41. Super Simple Start to ESModules in Node.js

    All supported versions of Node.js support ESModules now. Here's how to get started using them.

    Published

  42. JavaScript Pass By Value Function Parameters

    How it works and how to work with it... and around it

    Published

  43. How to write a Constrained Identity Function (CIF) in TypeScript

    A handy advanced TypeScript pattern to increase your productivity.

    Published

  44. How to optimize your context value

    Why and how you can optimize your context provider's value to avoid performance issues

    Published

  45. How to write a React Component in TypeScript

    There are plenty of ways to do it, here's how I recommend typing React Components

    Published

  46. TypeScript Function Syntaxes

    The syntax for various functions and function types in TypeScript with simple examples.

    Published

  47. Listify a JavaScript Array

    Make a human readable list from an array in JavaScript.

    Published

  48. Build vs Buy: Component Libraries edition

    Some things to think about before you decide to create your own component library.

    Published

  49. Using fetch with TypeScript

    How to make HTTP requests with fetch and TypeScript

    Published

  50. Wrapping React.useState with TypeScript

    How to make a custom hook that wraps useState with TypeScript properly

    Published

  51. Define function overload types with TypeScript

    Have your JS expressiveness and type it too.

    Published

  52. 2020 in Review

    An overview of what I accomplished in 2020 and a bit about my goals for 2021.

    Published

  53. Business and Engineering alignment

    How to convince "the business folks" to let you do what you want.

    Published

  54. Hi, thanks for reaching out to me 👋

    How to get help from Kent

    Published

  55. useEffect vs useLayoutEffect

    The simple rules for when to use each.

    Published

  56. Super simple start to Firebase functions

    The simplest getting started guide for Firebase Cloud functions

    Published

  57. Super simple start to Netlify functions

    Easily create server code without worrying about managing servers yourself

    Published

  58. Super Simple Start to css variables

    How to get started using css variables

    Published

  59. Favor Progress Over Pride in Open Source

    How I deprecated my most popular open source project in favor of a better library

    Published

  60. Testing Implementation Details

    Testing implementation details is a recipe for disaster. Why is that? And what does it even mean?

    Published

  61. How getting into Open Source has been awesome for me

    An anecdotal argument for contributing and using open source

    Published

  62. useState lazy initialization and function updates

    When to pass a function to useState and setState

    Published

  63. Use ternaries rather than && in JSX

    What problems can happen when you use && to conditionally render content in JSX

    Published

  64. Application State Management with React

    How React is all you need to manage your application state

    Published

  65. Use react-error-boundary to handle errors in React

    How to simplify your React apps by handling React errors effectively with react-error-boundary

    Published

  66. JavaScript to Know for React

    What JavaScript features you should be familiar with when learning and using React

    Published

  67. How I structure Express apps

    The build/dev tools and scripts I use for Node backends.

    Published

  68. What open source project should I contribute to?

    My silver bullet answer to this frequently posed question, and how to get started

    Published

  69. When I follow TDD

    Test-Driven Development doesn't always make sense, here's when it does for me.

    Published

  70. AHA Programming 💡

    The dangers of DRY, the web of WET, the awesomeness of AHA.

    Published

  71. How I Record Educational Videos

    My process for making high value-to-minute content.

    Published

  72. Should I write a test or fix a bug?

    How to prioritize tests relative to everything else.

    Published

  73. Stop mocking fetch

    Why you shouldn't mock fetch or your API Client in your tests and what to do instead.

    Published

  74. Intentional Career Building

    A challenge and ideas for you to do something to build your career.

    Published

  75. Improve test error messages of your abstractions

    How to manipulate stack traces to get beautiful error messages with Jest and your test helper functions.

    Published

  76. Tracing user interactions with React

    How to use the (EXPERIMENTAL) interactions tracing API in React.

    Published

  77. Eliminate an entire category of bugs with a few simple tools

    How you can use a few simple static code analysis tools to avoid common programming bugs.

    Published

  78. Common mistakes with React Testing Library

    Some mistakes I frequently see people making with React Testing Library.

    Published

  79. Super Simple Start to React

    The most simple React setup imaginable

    Published

  80. Stop using client-side route redirects

    Why you should stop using client-side route redirects (like the `from` prop on React Router's Redirect component) and what you should do instead.

    Published

  81. The State Reducer Pattern with React Hooks

    A pattern for you to use in custom hooks to enhance the power and flexibility of your hooks.

    Published

  82. Function forms

    When I prefer to use function declarations instead of arrow functions

    Published

  83. Replace axios with a simple custom fetch wrapper

    Axios can do a ton of stuff, but here's a simpler solution that can handle most use cases

    Published

  84. How to test custom React hooks

    Get confidence your custom React hooks work properly with solid tests.

    Published

  85. React Production Performance Monitoring

    How to set up performance monitoring for production React applications.

    Published

  86. Should I useState or useReducer?

    Two built-in React hooks that handle state, which one should you use?

    Published

  87. Stop using isLoading booleans

    Why using a status enum (or even better: a **state machine**) will help your app stay bug free

    Published

  88. Make Your Test Fail

    If you're not careful you can write a test that's worse than having no tests at all

    Published

  89. Make your own DevTools

    How creating DevTools specific for your own app can improve your productivity

    Published

  90. An Argument for Automation

    Why it can be worth spending 1 hour automating a 10 second task

    Published

  91. Fix the "not wrapped in act(...)" warning

    There are a few reasons you're getting this warning. Here's how you fix it.

    Published

  92. Super Simple Start to ESModules in the Browser

    All major browsers support ESModules now. Here's how to get started using them.

    Published

  93. Implementing a simple state machine library in JavaScript

    Let's write a state machine abstraction together to understand it better

    Published

  94. 2010s Decade in Review

    The 2010s are over, time to think back, then forward

    Published

  95. Why users care about how you write code

    Your coding practices and technology choices impact user experience...

    Published

  96. Why I avoid nesting closures

    A little tendency I have to reduce cognitive load for readers of my code.

    Published

  97. Don't call a React function component

    The difference between React.createElement and calling a function component directly

    Published

  98. Why your team needs TestingJavaScript.com

    A letter you can copy/paste and send to your boss.

    Published

  99. Inversion of Control

    A simple principle that can drastically improve your reusable code

    Published

  100. Understanding React's key prop

    The key prop is a mechanism for controlling component instances.

    Published

  101. How to Enable React Concurrent Mode

    Concurrent Mode is an enormous improvement for user experience and developer experience. Here's how you enable it.

    Published

  102. How to add testing to an existing project

    This is how you get started in testing your application

    Published

  103. Building the Open Source Community We Want

    Let's be intentional about the open source community we want and work hard to build it.

    Published

  104. Making your UI tests resilient to change

    User interface tests are famously finicky and prone to breakage. Let's talk about how to improve this.

    Published

  105. Speed up your App with Web Workers

    How to get started using web workers for practical use cases

    Published

  106. Don't Sync State. Derive It!

    How to avoid state synchronization bugs and complexity with derived state.

    Published

  107. State Colocation will make your React app faster

    How state colocation makes your app not only more maintainable but also faster.

    Published

  108. Profile a React App for Performance

    How to use the React DevTools and React's profiling build to properly profile a production app

    Published

  109. Fix the slow render before you fix the re-render

    How to start optimizing your React app renders

    Published

  110. How to implement useState with useReducer

    A fun exercise to help understand the differences and use cases of these two related hooks

    Published

  111. Write fewer, longer tests

    Making tests too short often leads to poor testing practices and way more tests.

    Published

  112. How to get experience as a software engineer

    There's no shortcut to experience, but there are things you can do to increase the impact of your time.

    Published

  113. 5 Tips to Help You Avoid React Hooks Pitfalls

    Let's explore some hook gotchas and how to avoid them.

    Published

  114. Avoid Nesting when you're Testing

    Why using hooks like beforeEach as a mechanism for code reuse leads to unmaintainable tests and how to avoid it.

    Published

  115. When to break up a component into multiple components

    At what point does it make sense to break a single component into multiple components?

    Published

  116. Write tests. Not too many. Mostly integration.

    [Guillermo Rauch](https://x.com/rauchg) [tweeted](https://x.com/rauchg/status/807626710350839808) this a while back. Let's take a dive into what it means.

    Published

  117. React Fundamentals: Props vs State

    What's the difference between props and state in React?

    Published

  118. How I Teach

    How I apply the science of learning to help students retain what I teach them, and how I learn.

    Published

  119. One simple trick to optimize React re-renders

    Without using React.memo, PureComponent, or shouldComponentUpdate

    Published

  120. Colocation

    Maintainability through colocation

    Published

  121. When to useMemo and useCallback

    Performance optimizations ALWAYS come with a cost but do NOT always come with a benefit. Let's talk about the costs and benefits of useMemo and useCallback.

    Published

  122. Avoid the Test User

    How your UI code has only two users, but the wrong tests can add a third

    Published

  123. Authentication in React Applications

    How to handle user authentication in modern React Applications with context and hooks

    Published

  124. How to know what to test

    Practical advice to help you determine what to test.

    Published

  125. AHA Testing 💡

    How to apply the "Avoid Hasty Abstraction" principle to your test code.

    Published

  126. How to get started with programming

    So you want to get into programming? Here's how you get started.

    Published

  127. How to Enable React Strict Mode

    What it is and how to add it to your app.

    Published

  128. Goodbye Medium

    I've migrated from Medium to kentcdodds.com/blog... Here's why

    Published

  129. React Hooks: Compound Components

    How do compound components change with React hooks?

    Published

  130. 🚨 Big Announcement: I'm a full-time educator! 👨‍🏫

    After years of teaching on the side, I've decided to take the plunge and go full-time as an educator!

    Published

  131. Please stop building inaccessible forms (and how to fix them)

    I regularly find inaccessible forms. In this post we'll check out some common accessibility problems and fix them.

    Published

  132. 2018 in Review

    An overview of what I've accomplished in 2018 and a bit about my goals for 2019.

    Published

  133. React Hooks: Array Destructuring Fundamentals

    React's upcoming useState hook relies on array destructuring, let's dive in and see how that feature works.

    Published

  134. React Hooks: What's going to happen to my tests?

    How can we prepare our tests for React's new hooks feature?

    Published

  135. React Hooks: What's going to happen to react context?

    With the cool new stuff coming to React (Hooks/Suspense), what's going to happen to the context api?

    Published

  136. React Hooks: What's going to happen to render props?

    What am I going to do with all these render props components now that react hooks solve the code reuse problem better than render props ever did?

    Published

  137. How Gratitude can make you a better developer

    What does gratitude have to do with software development?

    Published

  138. Introducing a new course: Simplify React Apps with React Hooks and Suspense

    Learn about the massive improvements coming to function components in React via a fresh new course showing you how to refactor an existing...

    Published

  139. Common Testing Mistakes

    Today let's talk about some common mistakes that people make when testing JavaScript applications.

    Published

  140. UI Testing Myths

    Some common myths around testing and what the reality is...

    Published

  141. The Merits of Mocking

    What are you doing when you mock something, and when is it worth the cost?

    Published

  142. The time I messed up

    That time I went too far with Test Driven Development and forgot a very important step

    Published

  143. React is an implementation detail

    ...yep, you read that right. Most of the course actually has nothing to do with React specifically.

    Published

  144. Why you've been bad about testing

    Some common struggles people have with testing, and things you can do to improve.

    Published

  145. Demystifying Testing

    How to get from aimlessly testing or not testing at all to really understanding how and what to test.

    Published

  146. Confidently Shipping Code

    Why I care about testing

    Published

  147. React/JSX as a server-side templating language

    Using React function components to render your website's skeleton index.html

    Published

  148. How I am so productive

    People regularly ask me how I get so much done. Here's my secret...

    Published

  149. Getting Noticed and Widening Your Reach

    Some things you can do to gain a wider audience and get your stuff noticed

    Published

  150. Make Impossible States Impossible

    A simple trick to simplify your application and component state

    Published

  151. How to make the most out of conferences

    Some specific things you can do as a conference attendee

    Published

  152. Why and How I started public speaking

    Some stories and some advice from an international speaker and trainer

    Published

  153. mdx-deck: slide decks powered by markdown and react

    Why it's awesome, what it is, how it works, and how to use mdx-deck.

    Published

  154. unpkg: An open source CDN for npm

    Let's learn how unpkg the service and the open source project can improve performance for your company's apps.

    Published

  155. Polyfill as needed with polyfill-service

    How to maximize the performance of loading polyfills for your application users.

    Published

  156. What is a polyfill

    The difference between a polyfill and a code transform.

    Published

  157. Why I Never Use Shallow Rendering

    Tests should help me be confident that my application is working and there are better ways to do that than shallow rendering.

    Published

  158. What is JSX?

    You may use it every day, but have you seen what happens after Babel compiles it?

    Published

  159. Test Isolation with React

    Why your tests should be completely isolated from one another and how to do that.

    Published

  160. JavaScript default parameters

    The expressive power of expressions in default values for parameters

    Published

  161. Dealing with FOMO

    What is "Fear Of Missing Out" and how to deal with this natural unhealthy tendency.

    Published

  162. 🏎 downshift 2.0.0 released 🎉

    Even better accessibility, React Native and ReasonReact support, even simpler API, improved docs, new examples site, Flow and TypeScript...

    Published

  163. When to use Control Props or State Reducers

    Comparing two similar patterns that enable many of the same use cases.

    Published

  164. Write your own code transform for fun and profit

    How to write your own code macro with babel-plugin-macros 🎣

    Published

  165. 💯 UPDATED: Advanced React Component Patterns ⚛️

    Now featuring the latest React APIs (like context) and entirely new patterns (like state reducer props).

    Published

  166. React DevTools

    A quick demo of the browser extension you should definitely be using.

    Published

  167. Prop Drilling

    What it is, why it's good, why it's bad, and how to avoid common problems with it

    Published

  168. How I learn an Open Source Codebase

    What I do to learn and understand an open source project to which I want to contribute.

    Published

  169. Mixing Component Patterns

    Let's make a component that supports Render Props, Component Injection, Compound Components, the Provider Pattern, and Higher Order...

    Published

  170. Pure Modules

    How you write your ES Modules impacts the performance and maintainability of your code.

    Published

  171. Migrating to React's New Context API

    Let's compare the before/after of React's new context API.

    Published

  172. Compose Render Props

    One of the reasons I'm so excited about render props

    Published

  173. Introducing the react-testing-library 🐐

    A simpler replacement for enzyme that encourages good testing practices.

    Published

  174. When to NOT use Render Props

    Let's back up from the hype and think critically about the render props pattern

    Published

  175. But really, what is a JavaScript mock?

    Let's take a step back and understand what mocks are and how to use them to facilitate testing in JavaScript.

    Published

  176. Increase your marketability

    Some tips of things that I've done that have helped me get where I want to be in the industry.

    Published

  177. Solidifying what you learn

    Teaching is nature's way of letting you know how sloppy your understanding is.

    Published

  178. The state reducer pattern ⚛️ 🏎

    A new pattern has been implemented in downshift and it's awesome. Use the state reducer pattern to make your components more useful.

    Published

  179. Answers to common questions about render props

    Because there's a ton of hype, and a bunch of questions ⚛️

    Published

  180. React's ⚛️ new Context API

    It's way more ergonomic, it's no longer "experimental," and it's now a first-class API! OH, AND IT USES A RENDER PROP!

    Published

  181. Concerning toolkits 🛠 📦

    The merits and use cases of consolidating tools into one "zero config" toolkit.

    Published

  182. Spelunking in node_modules 👷

    Deep dive into Jest, React, and jsdom: A story about how I go about finding and fixing bugs in my dependencies.

    Published

  183. Building Production Apps 100% in the browser

    How I built & deployed 2 production apps without downloading any source code.

    Published

  184. Testing ⚛️ components using render props

    Let's look at how we can write tests for React components that use render props!

    Published

  185. But really, what is a JavaScript test?

    Let's take a step back and understand automated testing of JavaScript from square one.

    Published

  186. Merry Christmas!

    As I write this, it's Christmas Eve. My kids have fallen asleep and I've wrapped up the last few presents I've made or purchased for them...

    Published

  187. The Beginner's Guide to ReactJS

    The course is free forever on egghead.io! Let's talk about how it teaches even developers experienced with React ⚛️

    Published

  188. Giving good demos

    I gave a pretty good demo and here are some things I did that might help you give good demos too.

    Published

  189. Advanced React Component Patterns

    An overview of some of the patterns covered in my recently released egghead.io course (free until Friday).

    Published

  190. Learn React Fundamentals 🆓 and Advanced Patterns ⚛️ 🎁

    Two and a half hours of new beginner (free) and advanced React material are now available egghead.io!

    Published

  191. Becoming an Open Source Project Maintainer

    Some tips and tricks that have worked for me.

    Published

  192. Rendering a function with React

    How I tricked React into rendering a function (not call it... render it)

    Published

  193. Improving the usability of your modules

    How to make your modules more generically useful and easier to test.

    Published

  194. Effective Snapshot Testing

    Snapshot testing can be useless, or super useful. Your choice. Let's talk about how to make them useful.

    Published

  195. Make maintainable workarounds with codegen 💥

    Sometimes you need to workaround issues in other libraries. These workarounds can often lead to messy code. codegen is a tool that helps...

    Published

  196. How to give rendering control to users with prop getters

    Render props are awesome, put it together with prop getters and you have an awesome combination to give users of your React components...

    Published

  197. Tools without config 🛠📦

    TL;DR/Spoiler alert: I'm working on a tool at PayPal called paypal-scripts and a personal one called kcd-scripts. You should try it too!

    Published

  198. Introducing downshift 🏎 for React ⚛️

    downshift 🏎 is the primitive you need to build simple, flexible, WAI-ARIA compliant React...

    Published

  199. How writing custom Babel & ESLint plugins can increase productivity & improve user experience

    And it's way more approachable than you think...

    Published

  200. Classes, Complexity, and Functional Programming

    When I use classes, when I don't, what I do instead, and why

    Published

  201. Introducing glamorous 💄

    A styled-components 💅 and jsxstyle inspired solution for styling ⚛️ React Components from PayPal

    Published

  202. Tips for making a CLI-based tool with node

    I got this question on my AMA and decided to turn the answer into a formal blogpost.

    Published

  203. Migrating to Jest

    on the P2P team at PayPal

    Published

  204. 🌆 Sunsetting JavaScript Air 🌆

    for now... 🌇

    Published

  205. Kent OOO (Out Of the Office)

    Why this week's episode of JavaScript Air is canceled and where I'm going...

    Published

  206. Introducing: How to Contribute to Open Source

    My free, first-timer friendly egghead.io series all about how to contribute to open source projects on GitHub.

    Published

  207. Misunderstanding ES6 Modules, Upgrading Babel, Tears, and a Solution

    On October 29th, 2015, Sebastian McKenzie, James Kyle, and the rest of the Babel team dropped a huge major release for frontend developers...

    Published

  208. Semicolons in JavaScript: A preference

    An argument for why use of semicolons in JavaScript source is a preference

    Published

  209. Please, don't commit commented out code

    Some solid reasons you should delete code that is not used

    Published

  210. Open Source Stamina

    You contribute best to something you use regularly.

    Published

  211. Why I don't commit generated files to master

    for libraries...

    Published

  212. How to Write a JavaScript Library

    There are so many reasons to open source your code. But knowing how to do it can be a real challenge.

    Published

  213. First Timers Only

    A suggestion to Open Source project maintainers...

    Published

  214. Newspaper Code Structure

    Your code should read like a newspaper article. Important stuff at the top, details at the bottom. I have a particular convention for my...

    Published