Blog
Posts on software development, careers, and craft.
Problem: You want to link to a page and highlight specific text
Problem: You want to link to a page and highlight specific text. Solution: Use the text fragments API. https://developer.mozilla.org/en-US/docs/Web...
I occasionally see companies create reusable component libraries that make...
I occasionally see companies create reusable component libraries that make it hard to restyle. Their goal is admirable - they want to enforce consi...
I've found it's important to run PRs so I can review the user experience
I've found it's important to run PRs so I can review the user experience. I believe user experience is everyone's responsibility.
Imagine your CI build took only 5 seconds
Imagine your CI build took only 5 seconds. How would this impact your team? My take: ✅ We’d open PRs more often because they’re so fast. ✅ We’d fix...
Me: "If it doesn't improve the user experience, it doesn't matter." Dev:...
Me: "If it doesn't improve the user experience, it doesn't matter." Dev: "What about CI, types, and tests?! They matter!" Me: "Agreed. Those improv...
Problem: aria-labels are often overly broad
Problem: aria-labels are often overly broad. Remember, an aria-label provides a label for assistive tech. So the user may not be able to see the su...
I’m helping a team add end-to-end tests to an existing app
I’m helping a team add end-to-end tests to an existing app. But, the app is slow, so the e2e tests are slow. The good news? Now we have a *lot* of...
If you work in TypeScript, this style guide by @mkosir_ is a wonderful resource
If you work in TypeScript, this style guide by @mkosir_ is a wonderful resource. Many thoughtful tips and links to related resources. https://mkosi...
Many companies are unwilling to spend a little extra money to make CI faster
Many companies are unwilling to spend a little extra money to make CI faster. This is a silly place to save money. A fast CI server that paralleliz...
Some people “overdo” their job
Some people “overdo” their job. Examples: 🚫 A software architect that over-engineers a simple problem. 🚫 A UI designer that redesigns something t...
When working in TypeScript, I think in sets
When working in TypeScript, I think in sets. Each type describes a potential set of values. The goal: Make each set as specific as possible.
A common TypeScript mistake: Needless optional fields
A common TypeScript mistake: Needless optional fields. Me: “Why is this field optional?” Dev: “In case someone doesn’t pass it.” Me: If the field i...
Electrician installed the Tesla wall connector today on a 60 amp breaker
Electrician installed the Tesla wall connector today on a 60 amp breaker. Now the Model S charges at 41 miles/hour in my garage!
I just built a product catalog app with @nextjs new app folder
I just built a product catalog app with @nextjs new app folder. I’m impressed. ✅ The new file-based routing with nested layouts works great, and fe...
If I were a dev manager again, here's a stat I'd track: PR comment/approval...
If I were a dev manager again, here's a stat I'd track: PR comment/approval ratio. Examples: Bob made 0 PR comments this month and approved 25 PRs....
Sometimes a simple REST API change can significantly simplify the UI
Sometimes a simple REST API change can significantly simplify the UI. Example: An endpoint returns either an array, or null. This requires the UI t...
4 software delivery metrics worth tracking: 1
4 software delivery metrics worth tracking: 1. Change lead time - How long does it take to go from code committed to prod? 2. Deployment frequency...
One of my clients just did a demo of http://builder.io
One of my clients just did a demo of http://builder.io. Wow, I’m impressed. Drag and drop React components. Configure their props. Dynamic routes....
Okay, this is wild
Okay, this is wild. I just saw metrics at a company on PRs per developer, per year. The company has around 100 devs. At the top, some devs complete...
A problem I'm seeing on @nextjs: Sometimes I save changes, but I still see...
A problem I'm seeing on @nextjs: Sometimes I save changes, but I still see old results. I delete the .next folder and restart to resolve it. I've p...
I've been using @nextjs 13, the app folder, and React Server Components a...
I've been using @nextjs 13, the app folder, and React Server Components a lot lately. What a wonderful combination. I'm really impressed by how fas...
Some programmers are code-first
Some programmers are code-first. They focus on the code. Other programmers are product-first. They focus on the product and user experience. Strive...
Types vs tests is a false dichotomy
Types vs tests is a false dichotomy. You can and should use both. But here’s why some teams favor types over tests: ✅ Types provide real-time inlin...
I ❤️ pnpm
I ❤️ pnpm. Just radically sped up a CI build by switching to pnpm and parallelizing tasks (which pnpm supports built-in) Before: 12 minutes After:...
Poll: Imagine your team has to build a project with either types or tests
Poll: Imagine your team has to build a project with either types or tests. You can't have both. Which would you pick?
Here are the slides for "Creating Reusable Components...That Are Actually...
Here are the slides for "Creating Reusable Components...That Are Actually Reusable" at @ReactRally These are new slides and recommendations I creat...
I thought that lounge access was silly
I thought that lounge access was silly. Then I finally tried it when my Amex card got me in for free. Now I get it. Wow. Such a wonderful, quiet pl...
One of the most common reusable component mistakes I see: They're not...
One of the most common reusable component mistakes I see: They're not discoverable. I often ask teams "Where are your reusable components?" Their a...
Storybook is nice, but it can be tricky to fully emulate my app's...
Storybook is nice, but it can be tricky to fully emulate my app's environment because it has a separate build. And it's often brittle when I add/up...
Problem: 🚫 Your project has unused files
Problem: 🚫 Your project has unused files. 🚫 It has unused npm dependencies. 🚫 It has unused TypeScript exports. But you haven't noticed, because...