Blog
Posts on software development, careers, and craft.
The cost of a slow development environment: It lowers my morale It drains my...
The cost of a slow development environment: It lowers my morale It drains my energy It clouds my thinking It lowers my creativity It inhibits getti...
Two coding styles: 1
Two coding styles: 1. A few long functions 2. Many small functions I prefer small, focused functions. I find they’re easier to understand, test, re...
Integration testing tip: Avoid creating many small tests
Integration testing tip: Avoid creating many small tests. Instead, create a few big tests. Here’s why: There’s a lot of overhead in starting each i...
Sprint planning: "Let's commit to exactly what we're going to deliver over...
Sprint planning: "Let's commit to exactly what we're going to deliver over the next 2 weeks." That's a problem. Why? Because that's not how softwar...
I rarely use Storybook for my clients
I rarely use Storybook for my clients. Instead I: 1. Use create-react-app and the company’s design system to create a custom doc site 2. Generate c...
If I constantly search for better approaches, I’ll rarely get anything done
If I constantly search for better approaches, I’ll rarely get anything done. If I only do what I know, I risk doing things the hard way. And I’ll n...
Over the years, I've hired dozens of devs
Over the years, I've hired dozens of devs. The devs that didn't work out: 🚩Claimed to understand when they clearly didn't 🚩Often said "I'll be do...
What I look for in a pull request: ✅ As small as practical ✅ Focused on one...
What I look for in a pull request: ✅ As small as practical ✅ Focused on one thing ✅ Tied to a well-documented issue ✅ Has comprehensive tests ✅ Inc...
Occasionally I review React code bases where React.memo and useCallback are...
Occasionally I review React code bases where React.memo and useCallback are used everywhere. Don’t do that. It usually costs more than it saves. If...
I rarely use these React performance features: React.memo useCallback...
I rarely use these React performance features: React.memo useCallback useMemo If I have a performance issue, I usually find I made a mistake or am...
I prefer small, focused pull requests
I prefer small, focused pull requests. They're easier to code review, and foster rapid feedback. How to encourage small PRs: Small tickets Fast CI...
Developer tip: If you're unclear about your task, speak up
Developer tip: If you're unclear about your task, speak up. Don't worry about asking a "dumb" question. Instead, worry about wasting hours going in...
My favorite way to wrap text in an HTML tag in VS Code: Use Emmet
My favorite way to wrap text in an HTML tag in VS Code: Use Emmet. 1. Open the command palette (Cmd+Shift+P) 2. Execute "Emmet: Wrap with Abbreviat...
5 books that improved my life - and their big idea: Ego is the Enemy - Be...
5 books that improved my life - and their big idea: Ego is the Enemy - Be humble The Happiness Advantage - Be optimistic The Power of Habit - Build...
Software tradeoffs: Build vs Buy Reuse vs Copy Sync vs Async Serial vs...
Software tradeoffs: Build vs Buy Reuse vs Copy Sync vs Async Serial vs Parallel Dynamic vs Static Concise vs Explicit Unified vs Separate Secure vs...
Why I ♥️ being a software developer: -Good pay -Fast feedback -1000’s of...
Why I ♥️ being a software developer: -Good pay -Fast feedback -1000’s of free tools -Undo costs me nothing -I can automate repetitive tasks -Genero...
While working on a ticket, I'm often tempted to fix/improve unrelated code
While working on a ticket, I'm often tempted to fix/improve unrelated code. I've learned to open a ticket to document the issue instead. This helps...
Adding Custom Testing Library Queries
Testing Library is great. But it’s lacking a few queries I would find useful. Here’s an example of enhancing Cypress Testing Library with a plain function: I of…
If you write tests with @TestingLib, here's a handy tool:...
If you write tests with @TestingLib, here's a handy tool: http://testing-playground.com This is a handy environment for testing queries in isolatio...
React Server Components in 5 Minutes
I’m excited about React Server Components. In this post, I will summarize the benefits and limitations in a few quick points. For more details, check out the Fa…
Two fundamental risks I mitigate: 1
Two fundamental risks I mitigate: 1. Health problems How: ✅ Eat well ✅ Exercise daily ✅ Sleep without an alarm clock ✅ Design a low-stress life ✅ B...
I'm starting to think the greatest advantage of being independent is being...
I'm starting to think the greatest advantage of being independent is being able to stop work whenever I feel stuck. Yesterday I was stumped on a te...
A surprising way to make significantly more money: Work for free
A surprising way to make significantly more money: Work for free. Work “for free” in the short-term, in exchange for a chance of a big payout in th...
Pro athletes do drills to improve
Pro athletes do drills to improve. Developers can too: 1. Practice new keyboard shortcuts 2. Do coding katas 3. Read open source code 4. Write a li...
My favorite financial habits: 1
My favorite financial habits: 1. Automatically invest monthly in low cost index funds (VTSAX, FZROX). Buy and hold. 2. Track net worth. 3. Use poin...
Coding without tests, static types, code reviews, and CI is like...
Coding without tests, static types, code reviews, and CI is like constructing a building without a shared blueprint or frequent inspections. In the...
Mistake 1: Ignoring new tech, so I end up doing things the old/hard way
Mistake 1: Ignoring new tech, so I end up doing things the old/hard way. Mistake 2: Being so busy toying with new tech that I never get very good a...
React = reusable components
React = reusable components. Typescript = reusable types. So with TypeScript, I know my reusable components are passed the exact shape they require...
Some teams call tasks “done” when they’re not done
Some teams call tasks “done” when they’re not done. It’s not done until its: Tested Secure Reliable Accessible Performant Configurable Maintainable...
It's surprising how many REST APIs lack useful docs
It's surprising how many REST APIs lack useful docs. Useful docs should include: - BaseURLs for all environments - Potential HTTP response codes -...