The blog

Writing from the workshop

111 articles on the parts that actually hurt.

section
You're rethrowing errors and losing context. `Error.cause` fixes that.
JavaScript

You're rethrowing errors and losing context. Error.cause fixes that.

Every time you catch an error and rethrow a new one without forwarding the original, you lose the stack trace, the error type, and everything useful about what actually went wrong. ES2022 added `Error.cause` to fix exactly this.

Jul 21, 2026 · 4 min
TypeScript Generics: The Complete Guide (with Cheat Sheet)
TypeScript

TypeScript Generics: The Complete Guide (with Cheat Sheet)

Learn TypeScript generics from the ground up — generic functions, constraints, defaults, and classes — with worked examples and a copy-paste cheat sheet.

Jul 20, 2026 · 15 min
Your scroll listener fires on every pixel. `IntersectionObserver` fires when visibility actually changes.
JavaScript

Your scroll listener fires on every pixel. IntersectionObserver fires when visibility actually changes.

Detecting whether an element is in the viewport by listening to scroll events runs an expensive layout calculation on every frame. `IntersectionObserver` is the browser-native alternative — it fires only when visibility changes, off the main thread, with no scroll handler involved.

Jul 19, 2026 · 4 min
You're using Floating UI to position your tooltip. The browser does it natively now.
CSS

You're using Floating UI to position your tooltip. The browser does it natively now.

CSS Anchor Positioning is Baseline 2026 — it lets any element declare itself an anchor and any floating element position relative to it in pure CSS. No JavaScript, no layout math, no ResizeObserver wiring.

Jul 18, 2026 · 5 min
Your `margin-left` doesn't exist in Arabic. CSS logical properties fix that.
CSS

Your margin-left doesn't exist in Arabic. CSS logical properties fix that.

Physical CSS properties like `margin-left` and `padding-right` break silently when a layout needs to support right-to-left languages. Logical properties replace the physical axis with a writing-mode-aware model — one codebase, every direction.

Jul 17, 2026 · 5 min
Your CSS Grid cards look misaligned. `subgrid` is the fix you didn't know existed.
CSS

Your CSS Grid cards look misaligned. subgrid is the fix you didn't know existed.

CSS Grid controls your outer container, but its children can't participate in the same tracks. `subgrid` closes that gap — nested elements align to the parent grid's rows and columns without padding hacks, fixed heights, or JavaScript measurements.

Jul 16, 2026 · 4 min
Your `.sort()` is mutating state. JavaScript finally gave you the fix.
JavaScript

Your .sort() is mutating state. JavaScript finally gave you the fix.

The classic array methods — sort, reverse, splice — mutate the original array, silently breaking React state updates and surprising anyone who forgot to spread first. ES2023 added four immutable counterparts: toSorted, toReversed, toSpliced, and with.

Jul 15, 2026 · 5 min
You've been writing this `reduce` a hundred times. `Object.groupBy` does it in one.
JavaScript

You've been writing this reduce a hundred times. Object.groupBy does it in one.

Grouping an array by a key is one of the most common data transforms in frontend code. You've been wiring it by hand with `reduce` for years. `Object.groupBy` is the native version — no helper, no library, no ceremony.

Jul 14, 2026 · 4 min
JavaScript Event Loop Explained: The Complete Guide
JavaScript

JavaScript Event Loop Explained: The Complete Guide

Learn how the JavaScript event loop really works — call stack, microtasks, and macrotasks — with worked examples, edge cases, and a cheat sheet.

Jul 13, 2026 · 13 min
You reach for `Promise.all` for every concurrent request. Here's when to use the other three.
JavaScript

You reach for Promise.all for every concurrent request. Here's when to use the other three.

`Promise.all` fails the moment any one request fails. `allSettled`, `any`, and `race` each solve a different concurrency problem — dashboard partial results, CDN failover, and timeouts. Here's the taxonomy.

Jul 13, 2026 · 5 min
Your dropdown is a div. The browser has a native popover now.
JavaScript

Your dropdown is a div. The browser has a native popover now.

Custom dropdowns, tooltips, and menus built with stacked divs and click-outside listeners — the Popover API landed in every browser in 2024, and the baseline version is two HTML attributes.

Jul 12, 2026 · 4 min
Your TypeScript config objects are losing type information. `satisfies` fixes it.
TypeScript

Your TypeScript config objects are losing type information. satisfies fixes it.

Type annotations widen your object types and erase the precise values TypeScript inferred. The `satisfies` operator validates against a type without changing what TypeScript keeps — you get the check without the widening.

Jul 11, 2026 · 5 min