Blog

Posts on software development, careers, and craft.

2022 Frontend security in 1 tweet: 1

2022 Frontend security in 1 tweet: 1. Use HTTPs 2. Server render 3. Store JWT/token in 'secure', 'samesite', 'httponly' cookie (prevent XSS). 4. De...

Imagine a skill that empowers you to build anything you can imagine, all by...

Imagine a skill that empowers you to build anything you can imagine, all by yourself, for free. No career comes closer to achieving this amazing dr...

One of the most common causes of needless complexity that I see in code:...

One of the most common causes of needless complexity that I see in code: Inconsistent terminology It's easy to accidentally use different terms for...

I’m creating a library for developers

I’m creating a library for developers. This library makes it easy to create custom DevTools, feature toggles, and mock APIs for your web app. Can y...

The larger a codebase is, the harder it is to make big changes

The larger a codebase is, the harder it is to make big changes. I'm learning this the hard way today. The changes I'm making would be easy if the a...

Question: What’s the most efficient way to store JSON in the URL’s query string

Question: What’s the most efficient way to store JSON in the URL’s query string? The most efficient option I’ve found: JSONCrush. https://github.co...

This is a great error message

This is a great error message. It tells me three useful things: 1. Where the error happened. 2. Why the error happened. 3. Precisely how to fix it....

Developer productivity requires balancing two competing desires: 1

Developer productivity requires balancing two competing desires: 1. Improve process. 2. Finish the current task. It’s often tempting to improve som...

I’ve spent the few weeks building a custom React devTool library

I’ve spent the few weeks building a custom React devTool library. I’m so excited about it I can hardly sleep. My goal: Make it easy to quickly crea...

Scenario: You need to store a nested JavaScript object in the URL's querystring

Scenario: You need to store a nested JavaScript object in the URL's querystring. Solution: 1. Convert the object to a string via JSON.stringify 2....

Software development estimates are frequently *way* off

Software development estimates are frequently *way* off. Why? Because many aspects of software development are nearly impossible to estimate. Here...

I'm enjoying working with @tailwindcss

I'm enjoying working with @tailwindcss. The final CSS is lean. I don't have to name things. Each style I use is well documented. Autocomplete is ex...

I typically bill hourly

I typically bill hourly. But, I just completed a *fixed bid* development project for the first time in 20+ years. Result? It took me twice as many...

React devs are in a wonderful spot today

React devs are in a wonderful spot today. Why? Because many new libraries that are challenging React…are heavily inspired by React (and the React e...

Woah, I just learned that tsconfig.json allows comments

Woah, I just learned that tsconfig.json allows comments! json doesn't normally allow comments, but comments are valid in tsconfig.json. It's offici...

create-react-app remains popular

create-react-app remains popular. But these days, many people are reaching for Next.js and Remix instead. They're great, but sometimes they're over...

Bun is a big, risky bet

Bun is a big, risky bet. Here’s why: The JavaScript ecosystem innovates rapidly. And it’s characterized by many, focused, discrete packages that do...

React state management approaches have evolved a lot over the years

React state management approaches have evolved a lot over the years. This post comprehensively reviews where we've been, where we are, and why. And...

As a JavaScript developer in 2022, I have analysis paralysis

As a JavaScript developer in 2022, I have analysis paralysis. Should I use npm, Yarn, pnpm, or Bun for package management? Should I run my code in...

Bun isn’t merely exciting

Bun isn’t merely exciting. It’s deeply motivating. Bun is a striking example of how productive a single developer can be. To think that something a...

The longer I’ve been coding the more I realize: If I’m doing something...

The longer I’ve been coding the more I realize: If I’m doing something weird, it’s time for reflection. My use case likely isn't that special. So,...

A lesson I've learned the hard way countless times: Keep changes as small as...

A lesson I've learned the hard way countless times: Keep changes as small as possible. Small, frequent, incremental changes are typically preferabl...

I don’t set goals

I don’t set goals. I create systems. Here are seven systems I’ve found useful. My learning system 1. Subscribe to relevant newsletters (and read th...

Okay, Bun looks🔥

Okay, Bun looks🔥. But… I just converted my projects to esbuild. I haven’t tried Deno yet. I haven’t converted from Jest to Vit test either. Guess...

I admire that the React team is focusing on performance

I admire that the React team is focusing on performance. 👍 But, I find React is usually plenty fast without optimizations. So: 1. I rarely use per...

The smaller the dev team, the higher the output per developer

The smaller the dev team, the higher the output per developer. ✅Fewer code reviews ✅Less communication overhead ✅Fewer people to ask for permission...

The JavaScript ecosystem is huge

The JavaScript ecosystem is huge. Module: esm, cjs, amd, umd Package manager: npm, yarn, pnpm Bundler: Webpack, Rollup, Parcel, Bun Compiler: Babel...

Microfrontends require balancing user experience (UX) with developer...

Microfrontends require balancing user experience (UX) with developer experience (DX). Here’s why: Microfrontends improve DX by enabling team autono...

Even after 20+ years of coding, I often make rookie mistakes

Even after 20+ years of coding, I often make rookie mistakes. I learn new things that someone else learned early in their career. My learning path...

Critique: “Remix looks like PHP”

Critique: “Remix looks like PHP”. Rebuttal: 1. PHP is popular because it’s a simple way to compose logic with markup. Same with Remix. 👍 2. PHP do...