Blog

Posts on software development, careers, and craft.

The first thing I do when I consult with a company: I review their app’s...

The first thing I do when I consult with a company: I review their app’s dependencies. I typically run webpack-bundle-analyzer. It gives me a clear...

Regex: Write once, read never

Regex: Write once, read never. My solution: 1. Put the regex in a pure function, with a good name. 2. Write automated tests on the function. Benefi...

I'm a big believer in automated testing

I'm a big believer in automated testing. But I typically write tests *after* writing the code. Why? Because my first design is rarely the final des...

Simple pattern to reduce the pain of “prop drilling”: Consider using an...

Simple pattern to reduce the pain of “prop drilling”: Consider using an object instead of separate props. Another advantage to this approach: When...

“What gets measured, gets managed.” So as a dev, I measure: ✅ Build time ✅...

“What gets measured, gets managed.” So as a dev, I measure: ✅ Build time ✅ Bundle size ✅ Code coverage ✅ Code quality (Via ESLint, TypeScript, auto...

I was immediately excited when I saw React

I was immediately excited when I saw React. I recognized the pain it would remove. I was tired of: ❌ Cryptic runtime errors ❌ Proprietary templatin...

Reusable React component design tip: Mimic native HTML APIs

Reusable React component design tip: Mimic native HTML APIs. Example: Avoid <Button label="Send" /> Prefer <Button>Send</Button>...

Woah, just learned about CSS Container Queries

Woah, just learned about CSS Container Queries. Big idea: Declare queries that monitor *the size of the component's container* (instead of the enti...

Why I taught my son HTML, JS, and CSS before Git: I believe it’s easier to...

Why I taught my son HTML, JS, and CSS before Git: I believe it’s easier to learn and appreciate something, if you’ve experienced the pain first. I...

Why I ❤️ software development: Experimentation is typically acceptable,...

Why I ❤️ software development: Experimentation is typically acceptable, fast, and cheap. I sit down with a simple goal: Get *closer* to the solutio...

Splitting up a large front-end dev team requires 3 key ingredients: ✅ A...

Splitting up a large front-end dev team requires 3 key ingredients: ✅ A design system ✅ Designers that use the design system as their guide ✅ A com...

The most useful piece of advice I’ve heard for designing reusable React...

The most useful piece of advice I’ve heard for designing reusable React components: Use popular libraries as inspiration. Before implementing my ow...

Early in my career, my boss asked me to email all our customers

Early in my career, my boss asked me to email all our customers. I used a while loop…and forgot to increment the counter. The script emailed all ou...

When creating reusable React components, prefer compound components over...

When creating reusable React components, prefer compound components over config objects. Compound components are more flexible and offer a more nat...

Two code review approaches: 1

Two code review approaches: 1. Pull request 2. Pair/mob programming My take? I believe in a hybrid model. Neither is perfect. So we should use both...

6 React “frameworks” and their typical use case: ⚛️ create-react-app:...

6 React “frameworks” and their typical use case: ⚛️ create-react-app: Client-rendered apps ⚛️ Gatsby: Server-rendered static apps ⚛️ Nextjs, Remix,...

React tip: To keep JSX simple, return early

React tip: To keep JSX simple, return early. Check for loading, 404s, or other errors first. #react

The more I read about React 18, the more I realize: React is maturing into a...

The more I read about React 18, the more I realize: React is maturing into a library for building frameworks! Sure, I can build apps with just Reac...

Years ago I read “The Non-Designer’s Design Book”

Years ago I read “The Non-Designer’s Design Book”. It was an excellent time investment. I learned the fundamentals: Color 🖍 Spacing 👽 Typography...

5 strategies for quickly merging PRs: 1 Create small PRs 2 Open tickets for...

5 strategies for quickly merging PRs: 1 Create small PRs 2 Open tickets for issues that can be fixed later 3 Use feature toggles so work can be con...

Developers who merely click approve on every pull request aren’t doing their job

Developers who merely click approve on every pull request aren’t doing their job. They’re a liability. They squander the opportunity for quality co...

As a manager, I happily promoted proactive employees

As a manager, I happily promoted proactive employees. Proactive employees didn't merely bring me problems. They brought me solutions. They thought...

To get promoted, exceed expectations

To get promoted, exceed expectations. Be proactive. Think bigger picture. Take on more responsibility. Identity and resolve quality issues (perform...

Being a developer requires balancing hubris with humility

Being a developer requires balancing hubris with humility. Hubris: “I’ve never done that. But sure, I can handle it”. Humility: “I just finished it...

It's hard to mentally disconnect

It's hard to mentally disconnect. When I'm stuck, I ruminate on programming problems during my free time. https://t.co/VA3ROSbHgh

TypeScript tip: VSCode's TypeScript server hangs sometimes

TypeScript tip: VSCode's TypeScript server hangs sometimes. When this happens, it will say something is an invalid type, when it's actually valid....

Developers often focus on improving their coding skills

Developers often focus on improving their coding skills. But it’s the non-coding skills that transform developers into true leaders: Code review Pl...

When a developer responds to every pull request with “looks good to me”, I...

When a developer responds to every pull request with “looks good to me”, I don’t think “wow, you’re easy to work with!” I think “are you too busy t...

One developer, working alone, can ship as much code as an entire team

One developer, working alone, can ship as much code as an entire team. No communication overhead. No waiting for approvals. No cross-team blockers....

Woah, just learned you can use $npm_execpath to write npm scripts that work...

Woah, just learned you can use $npm_execpath to write npm scripts that work with both npm and Yarn: "prebuild": "$npm_execpath run clean" $npm_exec...