Blog
Posts on software development, careers, and craft.
A powerful way to grow quickly: Learn alone, for free
A powerful way to grow quickly: Learn alone, for free. I don't need permission, a teacher, or costly resources to learn a new skill. I just need to...
To close out the year, I'm experimenting with using these compelling tools...
To close out the year, I'm experimenting with using these compelling tools more in 2022: @remix_run @turborepo @tailwindcss @ApiMocking @prisma @pn...
15 ways to make a slow React app: Put all state in the root Don’t cache,...
15 ways to make a slow React app: Put all state in the root Don’t cache, refetch Pass needless props Change state constantly Request more data than...
Becoming a software developer is a journey, not a destination
Becoming a software developer is a journey, not a destination. The moment you write your first code, you’re a software developer. The rest is a jou...
I admire how @remix_run embraces convention over configuration (as...
I admire how @remix_run embraces convention over configuration (as popularized by Rails) ✅ Name your file, and get a route "for free" ✅ Export a fu...
My code review checklist: ✅ Tested ✅ Secure ✅ Robust ✅ Reusable ✅ Accessible...
My code review checklist: ✅ Tested ✅ Secure ✅ Robust ✅ Reusable ✅ Accessible ✅ Performant ✅ Configurable ✅ Documented I use this as a quick reminde...
I find TypeScript gets me to a better design, faster, because it encourages...
I find TypeScript gets me to a better design, faster, because it encourages me to refactor earlier, and more often. In JS, I’m hesitant to change m...
To expedite code reviews, I keep my PR's small
To expedite code reviews, I keep my PR's small. Here's how: ✅ Focus on 1 thing. ✅ Only change what’s necessary for that 1 thing. ✅ Handle bugs, new...
I’ve seen some teams fail to successfully create design systems and...
I’ve seen some teams fail to successfully create design systems and component libraries. Mistakes: ❌ Poor docs ❌ Allowing designers/devs to ignore...
My initial impressions on @remix_run: ✅ Uses the web platform ✅ Works...
My initial impressions on @remix_run: ✅ Uses the web platform ✅ Works without JS ✅ Elegantly mixes React with backend code ✅ Clear “page” API ✅ Fil...
Today I’m thankful for: @reactjs - For providing an elegant component API...
Today I’m thankful for: @reactjs - For providing an elegant component API @TestingLib - For helping me write user-oriented tests, & accessible...
A frustrating trend: The biggest reason I see teams ignoring/violating the...
A frustrating trend: The biggest reason I see teams ignoring/violating the design system isn’t developers. It’s designers. Some designers reinvent...
Problem: I have a React component with optional props that should only be...
Problem: I have a React component with optional props that should only be used together. Solution: I unify the props into a single prop that accept...
Pull request habit: Provide before and after screenshots in the pull request...
Pull request habit: Provide before and after screenshots in the pull request description. I'm on a team that's doing this consistently. I've found...
After working in TypeScript for awhile, writing JavaScript feels...
After working in TypeScript for awhile, writing JavaScript feels surprisingly dangerous, and mentally taxing. Here's why: ✅ TypeScript makes the im...
Just found a way to write React tests faster
Just found a way to write React tests faster! Instead of writing tests from scratch, I'm writing Jest tests against my Storybook stories via this "...
Habit: I step away from the machine when I get a confusing error
Habit: I step away from the machine when I get a confusing error. Benefits: ✅ Stepping away lowers my stress and fosters creativity. ✅ I know what...
Ever wonder if your TypeScript app has unused code
Ever wonder if your TypeScript app has unused code? This handy package finds unused exports: https://github.com/pzavolinsky/ts-unused-exports #type...
I need to pick an auth provider for a web app startup
I need to pick an auth provider for a web app startup. I like Auth0, but my client is concerned about the cost at scale. Questions: 1. What other p...
Wow, the #React ecosystem now has (at least) 3 routers: 1
Wow, the #React ecosystem now has (at least) 3 routers: 1. React Router 2. Next.js Router 3. React Location - the new router from @tannerlinsley (t...
Being a developer requires balancing 2 skills: 1
Being a developer requires balancing 2 skills: 1. Be curious (get to the root of the problem) 2. Accept some mysteries (so you can get things done)...
With projects that use npm, it's easy to make two mistakes: ❌ Unused...
With projects that use npm, it's easy to make two mistakes: ❌ Unused packages in package.json ❌ Using packages that aren't in package.json To catch...
Many #React devs consider create-react-app the obvious choice
Many #React devs consider create-react-app the obvious choice. But that era is passing. - It’s not supported by Meta full-time anymore - There are...
I was using fireEvent with @TestingLib
I was using fireEvent with @TestingLib. But, I've switched to using user-event instead. Why? The docs now recommend user-event instead fireEvent: h...
Two things I enjoy: ✅ Fast machines ✅ Fast test suites On the M1 Max, 300+...
Two things I enjoy: ✅ Fast machines ✅ Fast test suites On the M1 Max, 300+ tests pass in less than 1 second! 😍
Code review habit: To review tests, I split my editor vertically
Code review habit: To review tests, I split my editor vertically. Left side: File under test Right side: Test Benefits: ✅ Reading tests helps me un...
This week I learned more about a new React framework: @blitz_js
This week I learned more about a new React framework: @blitz_js. Blitz "wraps" Next.js and adds: ✅@prisma DB ✅Generates funcs for calling the API v...
Had an awesome evening out last night in Atlanta with @jcreamer898...
Had an awesome evening out last night in Atlanta with @jcreamer898 @kentcdodds @flybayer @RayGesualdo! Having a blast at @connect_js!
When I consider splitting up a component: 1
When I consider splitting up a component: 1. Support reuse 2. Eliminate duplicated markup 3. JSX is hard to read / "too long" / doesn’t “fit in my...
Checklist: How to make your React app faster ⚛️: ✅ Keep state as local as...
Checklist: How to make your React app faster ⚛️: ✅ Keep state as local as possible. Start by declaring state in the component that uses it. Lift as...