Engineering insights
Practical notes on technical ownership, collaboration and building maintainable products.
Aug 182 min read
React 19 Actions: forms, useActionState and useOptimistic
Replace hand-written pending, error and optimistic state with the built-in form primitives.
React 19 made async mutations a first-class concept. A function passed to a form's action prop is an Action: React tracks its pending state, handles errors, and resets the form on success.
Read articleJul 142 min read
TypeScript 7: what the native compiler changes in practice
A Go-based compiler that is roughly an order of magnitude faster. What to expect in CI, editors and tooling.
TypeScript 7.0 is the compiler rewritten in Go. Microsoft reports full-build speedups in the range of 8x to 12x on large codebases (for example, VS Code going from about 126 seconds to about 11 seconds). The type system is a faithful port, so the same code should produce the same errors.
Read articleJun 092 min read
React Compiler 1.0 in practice: do you still need useMemo?
What automatic memoization changes, how to adopt it incrementally and when manual hooks still matter.
React Compiler reached 1.0 in October 2025. It is a build-time tool that analyzes components and inserts memoization for you, so most useMemo, useCallback and React.memo calls become unnecessary.
Read articleMay 122 min read
Upgrading to Next.js 16: proxy.ts, Turbopack and async params
A practical upgrade checklist for the changes that actually break builds.
Next.js 16 is mostly an evolutionary upgrade, but a few changes will touch every project. This is the checklist we use.
Read articleApr 142 min read
Modern JavaScript you can use now: iterator helpers, Set methods and more
Features that are now safe in current browsers and Node.js, with before/after examples.
Several long-awaited additions are now widely available. Here are the ones that remove the most boilerplate. Verify support for your audience on MDN or caniuse before shipping.
Read articleMar 262 min read
TypeScript 6.0: the bridge release before the native compiler
New defaults, deprecations and a migration checklist for getting your tsconfig ready for TypeScript 7.
TypeScript 6.0 shipped on March 23, 2026 as the last release built on the JavaScript codebase. It adds little new syntax. Its job is to align defaults and deprecate legacy options so that the move to the native TypeScript 7 compiler is boring.
Read articleMar 032 min read
CSS container queries: components that respond to their own space
Size queries, container units, style queries and scroll-state queries, with what is safe to use today.
Media queries ask about the viewport. But a card in a sidebar and the same card in a wide grid need different layouts at the same viewport width. Container queries let a component respond to the size of its container instead.
Read articleFeb 241 min read
React 19.2: Activity and useEffectEvent
Keep hidden UI alive without paying for it, and stop effects from re-running for the wrong reasons.
React 19.2 (October 2025) adds two features that fix long-standing annoyances: <Activity> for preserving UI state, and useEffectEvent for effects that read fresh values.
Read articleFeb 102 min read
Temporal: JavaScript dates, finally fixed
Immutable, time-zone-aware date and time types that ship in Chrome 144 and Firefox 139. How to use them and what to do about Safari.
Date has been a source of bugs for decades: it is mutable, months are zero-based, parsing is inconsistent, and time zones are implicit. Temporal replaces it with a set of explicit, immutable types.
Read articleJan 202 min read
Next.js 16 Cache Components: explicit caching with use cache
Why the App Router moved from implicit caching to opt-in, and how to cache pages, components and functions.
Next.js 16 (October 2025) changes the caching model. Earlier App Router versions cached aggressively by default, which surprised many teams. With Cache Components, code is dynamic at request time unless you opt in with the "use cache" directive. It builds on Partial Pre-Rendering: a static shell is served instantly and dynamic parts stream in.
Read article