Blog

Posts on software development, careers, and craft.

Physical projects: Measure twice, cut once

Physical projects: Measure twice, cut once. Undo is expensive. 😬 Virtual projects: Try and iterate. Undo is free. 😍

I'm switching between JavaScript and TypeScript

I'm switching between JavaScript and TypeScript. I've noticed TypeScript has a lower mental load. Here's why: In JS I have to remember object shape...

Three things I like to separate: 1

Three things I like to separate: 1. Retrieving data 2. Transforming / formatting data 3. Displaying data Often, when I’m dealing with code that’s c...

TypeScript union types are 🔥

TypeScript union types are 🔥. Example: type Status = "Open" | "Pending" | "Closed"; However, what if I want to be able to iterate over these too?...

How to attract and retain great developers: Pay well Use modern tech Offer...

How to attract and retain great developers: Pay well Use modern tech Offer flexible hours Provide fast laptops Support remote work Treat people wit...

Just upgraded a project to React 17

Just upgraded a project to React 17. Importing React is no longer required in React 17, so I used this react-codemod command to remove unnecessary...

I've found reviewing code on GitHub alone isn't sufficient

I've found reviewing code on GitHub alone isn't sufficient. I also: 1. Run the code. I check the visual design, user experience, perf, accessibilit...

How to effectively answer “I don’t know” in an interview: ✅ “I don’t know,...

How to effectively answer “I don’t know” in an interview: ✅ “I don’t know, but based on my experience, x might work.” ✅ “I don’t know, but I’m curi...

Just interviewed a seriously impressive developer

Just interviewed a seriously impressive developer. 😀 Here's what I look for in an interview: ✅ Clear communication ✅ The humility to say "I don't...

As a consultant, I’ve found 7 common reasons dev teams struggle: 1

As a consultant, I’ve found 7 common reasons dev teams struggle: 1. Using complex tools they don’t need 2. Slow, flakey dev environment 3. No mock...

Two pet peeves: 1

Two pet peeves: 1. Developers who don't participate in code reviews 2. Developers who merely approve all pull requests Ignoring or "rubber stamping...

I often commit a change, then before I push I realize “Oops, I’m on the...

I often commit a change, then before I push I realize “Oops, I’m on the wrong branch!”. 🤦‍♂️ Here’s how I fix it: git reset --soft HEAD~ This is b...

Something 2020 made clear: Remote meetings work REALLY well when *everyone*...

Something 2020 made clear: Remote meetings work REALLY well when *everyone* is remote. Why? Because no one is a "second class" attendee. We can hea...

My rule for writing reliable, scalable software: Each feature must have...

My rule for writing reliable, scalable software: Each feature must have automated tests. If it's not covered by an automated test, it's not a suppo...

I quit my job to be an independent consultant in 2019

I quit my job to be an independent consultant in 2019. A few months later, the virus hit. I went from doing on-site React training/consulting sessi...

Unpopular opinion: Separate QA teams lower quality

Unpopular opinion: Separate QA teams lower quality. Here's why: When you tell developers some other team is responsible for testing and assuring qu...

Hot take: Relying on QA to write your tests and find your bugs is malpractice

Hot take: Relying on QA to write your tests and find your bugs is malpractice. QA isn’t your personal debugging and test creation team. So, if you...

I’ve reached the point of coding in TypeScript where coding in plain...

I’ve reached the point of coding in TypeScript where coding in plain JavaScript almost feels reckless. I miss autocomplete. I miss explicit functio...

Habit: When I open a pull request, I do my own code review first

Habit: When I open a pull request, I do my own code review first. Things I often find and address: Logic errors Poor names Repeated code TODO comme...

I'm building a large React component library for a client

I'm building a large React component library for a client. I just added a section for reusable Hooks. It's wonderful that React makes it so easy to...

When I do OO programming, automated testing feels harder

When I do OO programming, automated testing feels harder. Here's why: Private methods, shared state (properties outside the method), and complex de...

One of my favorite git commands: git checkout - This checks out the branch I...

One of my favorite git commands: git checkout - This checks out the branch I was on previously. So it's handy for toggling between branches.

Things many people don’t like to do: Exercise Negotiate Work for free Read...

Things many people don’t like to do: Exercise Negotiate Work for free Read the docs Teach yourself Delay gratification Learn during free time Choos...

3 patterns that make TypeScript hard: 1

3 patterns that make TypeScript hard: 1. Inconsistent data structures 2. Overloaded functions 3. Multiple return types from the same function Here'...

To motivate a dev team, you don’t need gimmicks

To motivate a dev team, you don’t need gimmicks. You need basics. Solve meaningful problems. Treat people with respect. Remove blockers. Fire the c...

Microservices lead to many separate databases

Microservices lead to many separate databases. Yet these DBs often have related data structures. This creates a common risk: Primary keys in one DB...

Hey developers, please stop disabling copy/paste in form fields

Hey developers, please stop disabling copy/paste in form fields! 🚨 It’s awful UX. It’s confusing. It doesn’t improve security. It breaks password...

"That's easy

"That's easy. 5 minutes, tops." 1 day later: "I need another day...Changing that breaks this other thing..." 🤦‍♂️ ------- "That's not supported. I...

Writing software is basically a 2 step process: 1

Writing software is basically a 2 step process: 1. Ask the computer to do something 2. Verify its response That’s why I believe in creating fast fe...

The worst dev team I ever worked on: No source control

The worst dev team I ever worked on: No source control. We yelled “stay out of x!” No tickets or written requirements. No tests. We fixed bugs when...