Jake Worth

Jake Worth

Blog

Favorite Posts

Over the years, I’ve published a few hundred blog posts. Here are some favorites.

All Posts

How to Deliver Code Every Day

Published: February 15, 2024 • Updated: February 16, 2024 5 min read
  • shipping

I recently calculated that I merge 0.8 pull requests every day into my team repo. “How to Deliver Code Every 0.8 Days” didn’t sing, so let’s…

Practical Ways to 'Learn in Public' Now

Published: January 28, 2024 • Updated: January 29, 2024 4 min read
  • ideas

I’ve been a practitioner of Shawn Wang’s ‘Learn in Public’ for years. In this post, I’ll share a list of ways I’ve found to learn in public…

Reflections on Ten Years Professionally Programming

Published: January 09, 2024 3 min read
  • retros

I recently hit a decade of professional programming. I’d like to take a moment here and reflect on what I’ve learned. This post is for me…

My Annual Review 2023

Published: December 28, 2023 3 min read
  • retros

Each year (mostly) I conduct a review to reflect on the ending professional year and share the results of that review on this blog. Here’s…

You Can't Be Looking Up map

Published: December 07, 2023 2 min read
  • ideas

When I was learning to program, I was fortunate to pair with several very experienced engineers. One day while coding, iterating became…

"What Would Finishing This Today Look Like?"

Published: November 09, 2023 • Updated: May 23, 2024 2 min read
  • agile

When I don’t feel like I’m making sufficient progress at work, I have a favorite technique: asking “What would finishing this today look…

Absence Of Color Is Better Than the Wrong Color

Published: November 06, 2023 2 min read
  • design
  • a11y

A design principle that’s crept into my programming could be summarized as: “Absence of color is better than the wrong color.” Color in user…

Product Hack: Asking 'What's the Why?'

Published: October 30, 2023 • Updated: January 29, 2024 2 min read
  • product

One of my favorite product hacks is asking: “What’s the why?” Before delivering a feature, stop and ask: why is this feature worth adding…

Write Boring Code

Published: September 13, 2023 2 min read

Write a little bit of code, and you may come to an unsettling realization: there are multiple ways to do almost any programming task. How do…

Take the Big Project

Published: September 06, 2023 2 min read
  • projects
  • career

Something I’ve learned as an engineer: when presented with the option of working on a Big Project, or doing anything else, take the Big…

Thinking of Bugs in Classes

Published: September 03, 2023 2 min read
  • bugs
  • testing

“How did this feature break? I thought we were writing tests.” –Frustrated Boss We spent the time writing tests, and yet, a bug survived…

Why Great PRs Are Great: Pull Requests Templates

Published: August 14, 2023 • Updated: October 14, 2023 2 min read
  • github
  • devexp

Have you ever seen a pull request that seems to completely explain itself? It’s a real artifact. I don’t know the project, yet I understand…

Don't Ask for Advice; Ask for a Code Review

Published: August 09, 2023 • Updated: August 10, 2023 2 min read
  • career

Here’s some advice about programming, that also isn’t advice: “Don’t ask for advice; ask for a code review.” In this post, I’d like to…

From Booleans to Strings in Frontend State

Published: August 04, 2023 • Updated: September 05, 2023 5 min read
  • react
  • booleans

When it comes to controlling frontend presentation in React, booleans are a common tool, but they often fall short. In this post, I’ll…

The Case Against "Try This" Debugging

Published: June 26, 2023 3 min read
  • debugging

I recently wrote about a debugging technique that I recommend: making a prediction. The idea is that before trying an experiment during a…

The Joy of JavaScript Absolute Imports

Published: May 02, 2023 3 min read
  • javascript

Absolute imports are an essential feature for me in any JavaScript application. In this post, I’ll explain what they are and why they’re…

My Daily Programming Routine

Published: April 10, 2023 • Updated: April 08, 2024 5 min read
  • routines

After a decade of programming full-time, I’ve developed a daily work routine that I’d like to share. I hope to revisit it and share it with…

Variable Name Antipatterns Named and Explained

Published: April 03, 2023 • Updated: April 17, 2023 5 min read
  • naming

There are only two hard things in Computer Science: cache invalidation and naming things. — Phil Karlton Let’s talk about variable name…

Cold Water for Your Code Coverage

Published: March 28, 2023 • Updated: March 04, 2024 3 min read
  • testing

Code coverage, the percentage of your code covered by automated tests, is a metric associated with quality. In this post, I’d like to…

Does ChatGPT Mean Software Engineering Is Over?

Published: March 26, 2023 3 min read
  • ai

Here’s an argument that’s gaining momentum in my field: AI like ChatGPT and GitHub Copilot is very good at writing describable code…

One-Sentence Summaries of Popular Technology Books

Published: March 21, 2023 • Updated: November 07, 2023 3 min read
  • books

Here are some one-sentence summaries of books that have helped me understand programming and technology. Some are technical and some are…

How to Run an Agile Retrospective for Leaders

Published: March 15, 2023 • Updated: May 01, 2023 4 min read
  • agile

Retrospectives are one of my favorite engineering team practices. In this post, I’ll explain why and how I run retros. If you’ve never done…

Just Right: Type Your TypeScript Library Functions

Published: March 01, 2023 2 min read
  • typescript

There’s been a lot of recent discussion in the TypeScript community about typing functions. These arguments tend to take binary positions…

The Power of CRUD Operations Explained with SQL

Published: January 12, 2023 2 min read
  • databases

CRUD is an acronym that’s used a lot in web and mobile development. Frontend engineers in particular might wonder what it means and why we…

How to Create a Timer or Polling in React with setInterval

Published: December 29, 2022 • Updated: February 05, 2024 4 min read
  • react
  • javascript

Have you ever wanted to create a timer in a React app? This could be in support of a UI timer or polling. In this post, I’ll explain how to…

Given/When/Then Works Incredibly Well

Published: December 20, 2022 • Updated: April 20, 2023 3 min read
  • agile

When I am preparing development work, I write Gherkin-style stories, which follow the “Given/When/Then” format. I learned this technique at…

Button, Link, or Neither? Three Principles for Clarity and Accessibility

Published: December 03, 2022 • Updated: January 30, 2023 4 min read
  • html
  • a11y

Which HTML elements should we be giving a user to click? In this post, I’ll share some best practices for clickable elements. To summarize…

All My Best Tips For Expertly Reviewing Your Own Code

Published: November 12, 2022 • Updated: April 24, 2024 5 min read
  • github

This post was inspired by the following Tweet: You need a code review, but you don’t have another person. Maybe you’re building a startup…

Deliver a Great Standup Report as an Engineer

Published: November 09, 2022 • Updated: May 16, 2023 2 min read
  • agile

I’ve been lucky to have worked with some great engineers, and one thing that they tend to do exceptionally well is reporting about their…

How to Write a Resume for Transitioning to Programming

Published: October 27, 2022 • Updated: April 03, 2023 4 min read
  • career

How do you write a resume that helps you transition to programming? You have experience in another field. You want to be a programmer. You…

Solving Exercism's Resistor Color Trio in TypeScript

Published: October 26, 2022 • Updated: January 03, 2023 2 min read
  • typescript

Today I completed the ‘Resistor Color Trio’ TypeScript exercise on Exercism. This exercise asks us to write a TypeScript function that takes…

Vim Scratchpad Part 2

Published: October 26, 2022 3 min read
  • vim

Today, I’d like to dive deeper into a part of my practice: using a persisted text file for jotting things down. You can read the post I’m…

Buy the Best Hardware You Can

Published: October 25, 2022 • Updated: July 21, 2023 2 min read
  • hardware

Some advice I offer people entering the programming profession is to buy the best hardware you can. You’re going to need it. Get the most…

Solving Exercism's Resistor Color Duo in TypeScript

Published: October 24, 2022 • Updated: January 03, 2023 2 min read
  • typescript

Today as a code kata I completed the ‘Resistor Color Duo’ TypeScript exercise on Exercism. Here’s my work. This exercise asks us to write a…

Print Last Exit Code

Published: October 21, 2022 2 min read
  • terminal

The exit code of a command in a Unix-based system is an important and easy-to-miss piece of data. It isn’t printed to standard out; you have…

You Can't Change Nothing

Published: October 21, 2022 • Updated: March 03, 2023 2 min read
  • debugging

Here’s a meme I saw this week: Here we have a person debugging code, and they’re saying “My code doesn’t work. Let’s change nothing and run…

Read the Docs

Published: October 19, 2022 2 min read
  • docs

When learning a new language or framework, the first thing I do is read the official documentation cover-to-cover. Choose the latest version…

Why Do I Have to Use the Factorybot Gem, Again?

Published: October 17, 2022 • Updated: December 30, 2022 3 min read
  • ruby
  • testing

The FactoryBot gem, previously known as FactoryGirl, is ubiquitous in Ruby and Ruby on Rails testing. If you aren’t familiar with it, you…

Default to Programming Convention

Published: October 14, 2022 • Updated: February 09, 2023 2 min read
  • conventions

Trying to enforce unconventional coding preferences on a team is an uphill battle. When in doubt, default to convention. Contrived Example…

Recommended Reading

Published: September 28, 2022 • Updated: October 14, 2022 2 min read
  • books

Here are some books that have helped me understand programming. This list is a living document that I plan to update as I read. Recommended…

How to Introduce New Ideas

Published: September 08, 2022 • Updated: November 21, 2023 2 min read
  • ideas

How do you introduce new ideas and ways of working? We want to bring a new idea to our engineering teams, such as a new command-line…

Computers Can Be Understood

Published: September 06, 2022 • Updated: June 25, 2023 2 min read
  • learning

A big mental leap I made early in my programming was starting to view computers as something that could be understood. What is a computer…

Vim Scratchpad

Published: August 25, 2022 2 min read
  • vim

Today I’d like to share a small part of my practice: using a persisted scratchpad text file for jotting things down. When coding, often I’ll…

Improve Your API Documentation Workflow with Dash

Published: August 21, 2022 • Updated: January 09, 2023 3 min read
  • docs
  • mac

One of my all-time favorite programming tools is Dash by Kapeli. In this post, I’ll share some tips for leveraging this fantastic program…

Prefer Real Data For Software Development

Published: August 18, 2022 • Updated: February 08, 2024 2 min read
  • data

When testing with data, I prefer realistic data rather than random data. This might sound like something everyone agrees on, but it isn’t…

How Luck Played a Role in my Career

Published: August 15, 2022 • Updated: March 30, 2023 2 min read
  • career

I believe that luck is part of every professional journey. Here’s a sampling of the luck I’ve had. A passage I recently read caught my…

All My Best Debugging Tips

Published: August 05, 2022 • Updated: November 29, 2023 9 min read
  • debugging

This is a list of all the best debugging tips I’ve picked up over the years. Some of these might seem obvious, yet we forget them when it…

Tmux Application Startup Script

Published: July 28, 2022 2 min read
  • tmux

My development environment depends on several processes running. Here’s how I’ve scripted this setup. Whenever I boot up, I need at least…

Recognizing and Repairing a Broken Mental Model

Published: July 25, 2022 • Updated: April 26, 2023 2 min read
  • debugging
  • ai

Perhaps you’re familiar with this scenario: you’re debugging and stuck. You’ve Googled, read some blog posts, docs, and forum answers. You…

Retros Need Action Items

Published: July 19, 2022 2 min read
  • agile

Agile retrospectives should produce many action items. What Are Action Items? Action items are small, defined, actionable TODOs to follow up…

Better Than 'foo'

Published: July 13, 2022 3 min read
  • naming

There’s almost always a better variable name or value than ‘foo’. It’s useful as a placeholder, but it almost never belongs in production…

Database Migration Checklist

Published: July 11, 2022 • Updated: July 12, 2022 2 min read
  • databases

Here’s my checklist for a great database migration. A great migration is: Correct Atomic Reversible Consistent with the style of the…

Save Debugging Cycles by Always Logging an Object in JavaScript

Published: July 07, 2022 • Updated: August 04, 2023 2 min read
  • javascript
  • debugging

When printing a JavaScript value to the console, I suggest using an object literal over the raw value. It’s a little thing that over time…

Why Ruby?

Published: June 30, 2022 2 min read
  • ruby

Why should someone learn Ruby in 2022? Ruby was my first programming language, and although I’ve drifted elsewhere, I write Ruby every day…

What Are the Tradeoffs of Passing Objects as React Props?

Published: June 27, 2022 • Updated: January 19, 2023 2 min read
  • react

A common React pattern is to pass an object as a prop. Consider a user avatar component that shows the user’s initials. You might see one in…

What Is a Naive Implementation? The Art of Artless Programming

Published: June 23, 2022 • Updated: May 04, 2023 2 min read
  • agile

A naive implementation is a programming technique that prioritizes imperfect shortcuts for the sake of speed, simplicity, or lack of…

Authentication vs. Authorization

Published: June 21, 2022 2 min read
  • auth

Authentication and authorization are two distinct concepts. Yet, I’ve found they’re sometimes used interchangeably. In this post, I’d like…

The Power of Spell Checking with Vim: Tutorial and Best Practices

Published: June 15, 2022 • Updated: January 14, 2023 2 min read
  • vim

I write each post for this blog in Vim. Writing in the terminal makes me feel like a programmer, even when I’m not specifically programming…

How to Write a Perfect Bug Report

Published: June 13, 2022 • Updated: October 24, 2023 4 min read
  • debugging

You’re a person who opens bug reports for software engineering teams. Perhaps your bug reports take a long time to resolve, and you’d like…

Make a Prediction

Published: June 08, 2022 • Updated: May 17, 2023 2 min read
  • debugging

Imagine you’re debugging, and you’re stuck. Everything you try leads to another unexpected result. You continue to be surprised by what you…

Desire Paths

Published: June 05, 2022 2 min read
  • ux

Lately I’ve been thinking about desire paths. We’ve all seen a desire path. They are footpaths created by erosion from human and animal…

Think Hard

Published: June 01, 2022 • Updated: November 29, 2023 2 min read
  • ideas

This is a response to Ben Kuhn’s ‘Think Real Hard.’ Ben starts by sharing a problem-solving checklist from the scientist Richard Feynman…

PostgreSQL Polymorphism

Published: May 30, 2022 • Updated: June 22, 2023 2 min read
  • postgresql

Scenario: you have a database record that can belong to one record or another, but not both. That ambiguous ownership could be called…

Goodbye Shared Dotfiles

Published: May 25, 2022 2 min read
  • terminal

A lot of people start programming with shared dotfiles, copied from a team or online. I did. Maybe you’re ready to move on. Why would you do…

Organizing React Components

Published: May 23, 2022 2 min read
  • react

You’re creating a React app, and want to organize your components. Or maybe you’re working in a legacy codebase, with many components in one…

Thoughts On Starting Your Programming Task Over

Published: May 18, 2022 • Updated: January 14, 2023 2 min read
  • ideas

I used to have a bad habit when working alone: I’d start a feature, begin questioning my approach, throw away my work, and start over from…

How to Identify the Breaking Commit With Git Bisect

Published: May 17, 2022 • Updated: June 27, 2023 4 min read
  • git
  • debugging

Some code is broken, and you can’t figure out why. Maybe there are a lot of changes to consider, and identifying that breaking change seems…

Be Fast

Published: May 06, 2022 • Updated: September 14, 2023 2 min read
  • career

Great programmers can be great because they are fast. I’ve sunk a lot of time into being fast at Vim. I’ve used it as my text editor for…

Commit Part of a File in Git

Published: May 06, 2022 2 min read
  • git

You’ve been working on a big set of changes, and haven’t committed to Git yet. Now, you want to commit some, but not all, changes to a file…

Only One Way Out of a Function

Published: May 02, 2022 • Updated: August 11, 2023 4 min read
  • javascript

A programming style I try to practice could be described as: “there should be only one way out of a function.” Early returns can often cause…

Am I Too Old to Become a Programmer?

Published: April 28, 2022 • Updated: April 19, 2023 2 min read
  • career

“The best time to plant a tree was twenty years ago. The second best time is now.” — Chinese proverb I mentor adults who are learning to…

It's Harder to Read Code Than Write It

Published: April 25, 2022 • Updated: August 23, 2023 4 min read
  • rewrites

In Things You Should Never Do, Part I, Joel Spolsky narrates Netscape’s ruinous decision to rewrite their browser from scratch. This…

The Problems With Code Screenshots

Published: April 19, 2022 • Updated: March 20, 2023 3 min read
  • debugging

A common anti-pattern on sites where code is discussed, such as Slack, Stack Overflow, GitHub Issues, etc., is to post a screenshot of code…

Hash Fetch Instead of If/Else

Published: April 16, 2022 2 min read
  • ruby

Conditional logic has its place, but often there’s a better alternative. Today, we’ll look at a Ruby solution: a hash with . My thanks to…

First Get It Working, Then Make it Look Good

Published: April 13, 2022 • Updated: March 17, 2023 3 min read
  • agile

I recently completed a winter survival course where we built shelters in just ten minutes with only the contents of our packs. The pack I…

My psql Config

Published: April 12, 2022 2 min read
  • postgresql

RC files, thought to stand for “run command” files, are read by a program during startup. The file that configures the PostgreSQL REPL psql…

Solved! How to Exit Vim "Ex" Mode

Published: April 06, 2022 • Updated: January 03, 2023 2 min read
  • vim

How does one exit Vim “Ex” mode? But first… how did you even get into “Ex” mode? Probably by accidentally typing in normal mode: If this is…

How to Read a Stack Trace

Published: April 05, 2022 4 min read
  • debugging

A stumbling block for many people when debugging is reading the stack trace. Today I’d like to discuss this skill. What is a stack trace…

RSpec.describe vs. describe: Which Should I Use?

Published: April 02, 2022 • Updated: December 29, 2023 2 min read
  • ruby
  • testing

Ruby’s RSpec block has two common syntaxes. Which should you use? 👉Disclaimer: they both work. But I’m assuming since you’re here, you’re…

Your Demo Doesn't Need Auth

Published: April 01, 2022 • Updated: October 26, 2022 2 min read
  • auth

When building a demo application, I believe you often can skip authentication. Picture this: a coding school student team demoing a project…

The Importance of a Bug

Published: March 30, 2022 • Updated: March 29, 2023 3 min read
  • debugging

In today’s post, I want to talk about the importance of a bug. I remember the first bug that I shipped to production. I was upset that I’d…

Debugging Tip: Learning From Bugs

Published: March 25, 2022 • Updated: April 03, 2023 4 min read
  • debugging

You were stuck, and now you aren’t. 👏 Congratulations! Before you move on, it’s vital to stop and learn from it. It’s the best way I know…

How to Make Renames Easy

Published: March 22, 2022 3 min read
  • naming

“There are only two hard things in Computer Science: cache invalidation and naming things.” — Phil Karlton Today I want to talk about re…

How to Read Postgres Docs

Published: March 21, 2022 2 min read
  • postgresql

Have you ever tried to read the documentation for a Postgres command? Although many consider Postgres’ docs best-in-class, they include…

Build

Published: March 16, 2022 • Updated: March 20, 2024 2 min read
  • career

If I could give one piece of advice to anyone learning to program: build. This advice might be most helpful to beginners. But it’s been…

Which Operating System Is the Best for Programming?

Published: March 14, 2022 • Updated: June 01, 2023 2 min read
  • career

Which operating system is the best for programming? This is a perennial question in code boot camps where I’ve taught. I think students see…

Autoformat Your Code

Published: March 10, 2022 • Updated: August 14, 2023 2 min read
  • devexp

Auto-formatting code is good, and you should be doing it all the time. Why? It helps you write better code in real-time, it preempts trivial…

How I Review Code

Published: March 06, 2022 4 min read
  • github

Code reviews are important on many teams. Do them well, and your code ships quickly and safely. Do them poorly, and your code ships slowly…

How I Make Sure I Understand a Feature Before Building

Published: March 02, 2022 • Updated: July 07, 2022 2 min read
  • agile

Here’s an idea that’s not ready for programming work: “Let’s add social login to our website.” Same idea, ready for work: “A logged-out…

Don't Stay Stuck

Published: March 01, 2022 2 min read
  • debugging

We’ve all seen this: a frustrated coworker hunched over a computer after hours, flailing alone against some impossible bug. Go home…

Why Vim

Published: February 23, 2022 • Updated: January 02, 2023 2 min read
  • vim

I’ve been using, teaching, and stanning Vim since almost the beginning of my programming career. Yet, when asked to explain this preference…

On Disabling Tests

Published: February 22, 2022 • Updated: October 03, 2022 2 min read
  • testing

I want to talk about a common technique: disabling problematic tests to allow a feature to ship. I challenge this practice because I believe…

Count to Ten

Published: February 15, 2022 2 min read
  • debugging

A trick that that has helped me as a programmer: count to ten before killing a process. I learned this in IT. When a screen froze, the IT…

Avoid Similar Variable Names

Published: February 14, 2022 2 min read
  • naming

A convention I see, particularly in Ruby tests, are variable names like this: Swap these out for and , or and , and you have a very…

Refining Your Terminal Aliases

Published: February 10, 2022 • Updated: June 01, 2023 2 min read
  • terminal

Any command you type out manually, or even tab-complete a few times, can be shortened. A common shortening technique is the terminal alias…

Ruby's Frozen String Comment: YAGNI

Published: February 09, 2022 • Updated: January 03, 2023 5 min read
  • ruby

Open a production Ruby file, and you’ll often see this magic comment at the top. Today I’d like to argue that most Ruby files do not need…

Two Reasons Why I Don’t Point Agile Bug Tickets

Published: February 07, 2022 • Updated: January 23, 2023 3 min read
  • agile
  • debugging

When I create Agile bug tickets, I don’t add Agile story points. In this post, I’d like to explain this preference via two arguments…

Weekly Summary Technique

Published: February 04, 2022 3 min read

I’ve written a weekly summary for myself and my teams for years. In this post, I’ll explain why I do and how I use this tool. Why Write a…

Opt Into Beta

Published: February 02, 2022 2 min read
  • startups

Here’s a technique I’ve used on launches: instead of a big scary waterfall, or, in tandem with a phased release, let customers opt into a…

How to Find a Programming Mentor

Published: January 31, 2022 • Updated: July 02, 2023 3 min read
  • career

“How do I find a programming mentor?” I feel grateful to have collected a group of mentors over the years. I call on them frequently to talk…

Use a Dev Email

Published: January 29, 2022 2 min read

An engineering technique I recommend: when you sign up for any service, even on a side project that’s just getting off the ground, create an…

How to Answer Questions on Stack Overflow

Published: January 27, 2022 • Updated: June 07, 2023 3 min read
  • community

I enjoy answering questions on Stack Overflow. It helps me learn about common challenges and practice reviewing code. In the beginning, it…

Want Better Automated Tests? Hard-Code Your Expectations

Published: January 25, 2022 • Updated: January 25, 2023 3 min read
  • testing

Here’s a kind of assertion I see often in tests: And here’s that same assertion with a hard-coded expectation, which is almost always better…

Presence is Boolean

Published: January 24, 2022 • Updated: June 13, 2023 2 min read
  • booleans

When possible, I prefer to use the presence of data as a boolean, rather than a boolean itself. Here’s a problematic pattern I see a lot in…

Be a Better Technical Consultant by Saying "I Think That..."

Published: January 19, 2022 • Updated: January 31, 2023 2 min read
  • consulting

An idea I find useful as an individual contributor is starting my consulting with this phrase: “I think that…“. The idea is to let your…

Bug Reports Are Gold

Published: January 15, 2022 • Updated: September 05, 2023 2 min read
  • debugging
  • cx

Me: Hey, I’m experiencing an issue with your software. Here’s a detailed bug report. SaaS CTO: What you’re describing isn’t possible…

Get Good

Published: October 13, 2021 2 min read
  • career

What should you focus on at the beginning of your programming career? My answer is: being really good at programming. “Be So Good They Can’t…

How to Organize JavaScript Imports

Published: August 30, 2021 • Updated: November 26, 2022 2 min read
  • javascript

The statements at the top of a JavaScript component file can be a confusing, duplicative, churning mess. Is there a way to organize them…

Write Better Code by Knowing When Not To Refactor

Published: August 26, 2021 • Updated: July 17, 2023 3 min read
  • refactoring

Refactoring (noun): a change made to the internal structure of software to make it easier to understand and cheaper to modify without…

The Tutorial Anti-Pattern

Published: August 24, 2021 3 min read

Here’s a scenario: you’re applying for your first tech job. You’ve found a bunch of tutorials like Rails Tutorial and you’re speeding…

Consultancy Cycles

Published: August 04, 2021 2 min read
  • consulting

This week in conversation I made this argument: Working at a quality software development consultancy like Hashrocket early in your…

What is the Sub Claim of a JSON Web Token?

Published: April 02, 2021 • Updated: December 31, 2022 2 min read
  • jwt

Today I’d like to explain the , or subject, registered claim of a JSON Web Token. Registered claims are predefined fields of the JWT that…

Augmenting an Object With the Proxy Pattern

Published: February 26, 2021 • Updated: August 21, 2023 3 min read
  • ruby
  • oop

Here’s a Ruby class that claps: And here’s me using an instance of it to do something surprising. is not defined in , or any parent of it…

Do the Hard Things First

Published: January 25, 2021 • Updated: May 23, 2023 2 min read
  • startups

“First thing in the morning, eat a live frog, and you can go through the rest of your day knowing the worst is behind you.” — Mark Twain A…

My Annual Review 2020

Published: December 30, 2020 7 min read
  • retros

Each year (mostly) I conduct a review to reflect on the ending professional year and share the results of that review on this blog. Here’s…

Exercism Raindrops in Python

Published: December 06, 2020 2 min read
  • python

I’ve been learning a bit of Python this Fall to facilitate conversations with a mentee. In this post, I’m going to share the first Python…

Programming Resources for Beginners

Published: December 05, 2020 3 min read
  • resources

A self-teaching, learning programmer asked me the following question: Can you recommend any resources or sites that you go to with questions…

My Annotated Vim Configuration File

Published: November 26, 2020 • Updated: June 30, 2023 6 min read
  • vim

I love Vim. Folks who’ve programmed with me, or attended a Vim Meetup when I was an organizer, can attest. When I was learning to code…

Essays on Programming I Think About a Lot

Published: October 29, 2020 • Updated: January 30, 2024 11 min read
  • ideas

Programming is a new and abstract field, and so we place great emphasis on ideas. How should we deliver value? How should we prevent defects…

My Development Roadmap

Published: October 20, 2020 4 min read
  • agile

I’ve been working on a development roadmap for my projects, and wanted to share my process. Consider this my recipe to turn an idea into…

You Have New Mail

Published: October 16, 2020 • Updated: October 31, 2023 2 min read
  • terminal

Here’s a familiar scenario: you open a new terminal, and before the prompt appears, you see the following. You have new mail. What’s going…

Restore a Heroku Database Locally

Published: October 11, 2020 2 min read
  • postgresql

Sometimes a post is just for me, and this is likely one of those posts. Several of my open source projects run on Heroku, and I often want…

Duplicate your Development Branch for QA

Published: October 09, 2020 2 min read
  • git

I’m working on a team where we keep a clone of the branch (the main place where work is done), used to deploy to a QA environment. The…

How I Clean Up JavaScript Dependencies

Published: August 03, 2020 2 min read
  • javascript

Unused dependencies are bad: they increase the size of your project, slow down your processes, require upgrades, and send incorrect messages…

My Annual Review 2019

Published: December 31, 2019 3 min read
  • retros

Each year (mostly) I conduct a review to reflect on the ending professional year and share the results of that review on this blog. Here’s…

Technologist Reading List

Published: September 28, 2019 3 min read
  • books

“Not all readers are leaders, but all leaders are readers.” –Harry S. Truman It’s been said that most programmers read less than one…

A Very Short Introduction to Test-Driven-Development (TDD)

Published: September 11, 2019 • Updated: October 04, 2023 3 min read
  • testing

I’ve practiced TDD (Test-Driven-Development) a lot and feel knowledgable about when it’s useful and when it isn’t. In this post, I’d like to…

Pangram in TypeScript

Published: July 29, 2019 2 min read
  • typescript

I’ve been doing Exercism’s TypeScript exercises, and wanted to share some of my early solutions. A pangram is a sentence that contains each…

My Annual Review 2018

Published: December 31, 2018 2 min read
  • retros

Each year (mostly) I conduct a review to reflect on the ending professional year and share the results of that review on this blog. Here’s…

JavaScript Equality

Published: July 17, 2018 2 min read
  • javascript

A few weeks ago, I built an app with React.js and create-react-app that I call ‘JavaScript Equality’. View deployment here. This application…

mgrim: Everything Updated All The Time

Published: July 11, 2018 2 min read
  • git
  • terminal

My current favorite command line alias is , composed of four other aliases: Here’s what this does (starting from a feature branch…

Comprehensive Instructions

Published: July 09, 2018 • Updated: March 29, 2023 2 min read
  • oss

A user opened an issue in Tilex last week that I spent a significant amount of time thinking about and talking about (thanks JB) before…

Autoformat Elixir on Buffer Write

Published: February 17, 2018 2 min read
  • elixir
  • vim

I’ve been working with the Elixir 1.6 autoformatter a lot this year. Part of that journey was adding the following to my local Vim…

My Annual Review 2017

Published: December 31, 2017 4 min read
  • retros

Each year (mostly) I conduct a review to reflect on the ending professional year and share the results of that review on this blog. Here’s…

The Universal Programming Language

Published: September 17, 2017 2 min read

Recently I tried to answer a question that is common when talking about software. I’ll paraphrase: Why can’t there be an “universal…

How I Talk: My Guide to Tech Public Speaking

Published: August 09, 2017 • Updated: April 19, 2023 9 min read
  • speaking

I’ve been giving technical talks for a few years, and I’m speaking at the Vim Chicago Meetup next month about integrating React with Vim. In…

It's Done

Published: July 19, 2017 2 min read
  • consulting

When a stakeholder asks for a change to the software we’re developing, my typical response is, roughly: “Sure thing.” Then later: “I’m…

Don't Build Every Feature

Published: June 19, 2017 2 min read
  • agile

Mold clay to form a bowl; it is the empty space which makes the bowl useful. –Tao Te Ching There’s a detail about Today I Learned some might…

Work Small

Published: June 10, 2017 2 min read

Write programs that do one thing and do it well. –The Unix Philosophy I believe in working small. I love small Git commits and pull requests…

Tilex Progress

Published: June 05, 2017 2 min read
  • elixir

First, some background. Tilex, our Phoenix port of Today I Learned, is coming really well. After a personal hiatus for RailsConf prep, I’m…

Binary to Decimal Conversion in Ruby

Published: May 04, 2017 • Updated: December 30, 2022 2 min read
  • ruby
  • algorithms

This week I wrote an algorithm in Ruby to convert binary numbers into decimal numbers. Here’s the problem description, from Exercism…

You Should Blog

Published: February 11, 2017 3 min read

I created this blog to reflect on my code and development as a programmer. In that spirit, I’d like to make a pitch to anybody reading: you…

Reset an Ecto Heroku Postgres Database

Published: January 07, 2017 2 min read
  • elixir
  • postgresql

We introduced some breaking database changes to our Phoenix port of Today I Learned on Friday; today I deployed them to staging. Resetting…

My Annual Review 2016

Published: December 24, 2016 4 min read
  • retros

Each year (mostly) I conduct a review to reflect on the ending professional year and share the results of that review on this blog. Here’s…

Vim Nonrecursive Mappings

Published: December 17, 2016 2 min read
  • vim

My first PR to a new Vim plugin was merged this week, check it out. For context, vim-termbux is a plugin by my friend Dillon Hafer that…

Porting TIL from Rails to Phoenix: Initial Commits

Published: November 29, 2016 2 min read
  • elixir
  • ruby

Last week, I started a new project: porting Today I Learned from Ruby on Rails to Phoenix (Elixir). The first few commits were pair…

Hamming Distance in Elixir

Published: September 11, 2016 2 min read
  • elixir

Today I solved the Exercism Hamming Distance problem in Elixir. Problem Description From Exercism: Write a program that can calculate the…

Exercism's Sum of Multiples in Elixir

Published: August 26, 2016 • Updated: January 03, 2023 2 min read
  • elixir

Today I solved Exercism’s Sum of Multiples problem in Elixir. Here’s the description of the task: Write a program that, given a number, can…

Run Length Encoding in Elixir

Published: July 31, 2016 4 min read
  • elixir

I’ve been working through the Elixir challenges on Exercism.io, to learn the language in the same way James Edward Gray recently attempted…

Learn to Test

Published: July 15, 2016 2 min read
  • testing
  • career

What is one skill I could learn to set myself apart from other apprentice candidates? Testing. The web frameworks of today all have mature…

Why Elixir?

Published: July 06, 2016 2 min read
  • elixir

I’ve been learning and using Elixir lately, and loving it. More than once, I’ve been asked some version of the question: why are you…

Writing Elixir Sigils

Published: July 04, 2016 2 min read
  • elixir

Sigils are a mechanism for working with textual representations in Elixir. If you’ve ever made an array of Strings in Ruby with , the API is…

How and Why to Squash Your Pull Request

Published: July 03, 2016 5 min read
  • git

Most pull requests go through a cycle like this: Programmer opens pull request Maintainer gives feedback Programmer makes changes Repeat #…

Recreating Elixir's Enum.sum

Published: June 30, 2016 2 min read
  • elixir

I’m learning Elixir, and today as an exercise, I was challenged to recreate using recursion. For those new to the language, iterates over…

Server Side Sorting in Ruby

Published: June 28, 2016 2 min read
  • ruby

Recently a friend asked me this question about server-side sorting in Rails: I’m working on an app that displays movies. The index page…

Keyword, Match, and Region in VimScript

Published: April 20, 2016 2 min read
  • vim

After a recent talk I gave that included VimScript, an attendee asked a question about the differences between , , and following in a Vim…

From One End to the Other in Ruby

Published: March 06, 2016 2 min read
  • ruby

A while back I tackled the following programming challenge: From One End to the Other: Find the smallest possible (positive) integer that…

LED Clock in Ruby

Published: March 06, 2016 2 min read
  • ruby

A few weeks ago I attempted to solve a programming challenge that was described as such: LED Clock: You are (voluntarily) in a room that is…

Round Robin Problem in Lua

Published: March 06, 2016 2 min read
  • lua

A while ago, I solved the following programming challenge: Round Robin: Given 3 Teams (A, B, C), we want to organize a tournament schedule…

Vim Buffer Problem

Published: March 06, 2016 • Updated: July 26, 2023 2 min read
  • vim

A few weeks back I tackled the following programming challenge from my colleague Josh Branchaud: Vim Buffer 🐈‍⬛ I open up a new Vim buffer…

My Annual Review 2015

Published: January 01, 2016 5 min read
  • retros

Each year (mostly) I conduct a review to reflect on the ending professional year and share the results of that review on this blog. Here’s…

Reflecting on Three Years of Programming

Published: November 03, 2015 2 min read

This month marks three years since I started programming; I’d like to take a minute and reflect on this milestone. Programming is Awesome…

Silver Searcher RDoc Support

Published: October 30, 2015 • Updated: March 20, 2023 2 min read
  • ruby

Today I submitted my first pull request to The Silver Searcher project: PR #782 Silver Searcher is a fantastic command line search tool. I…

Ceramic Nation

Published: September 11, 2015 • Updated: January 04, 2023 2 min read
  • algorithms
  • ruby

Project announcement! Last night I built a Markov Chain-generated novel, titled Ceramic Nation. It’s presented as a robot named Ellis…

The N + 1 Problem

Published: February 22, 2015 2 min read
  • performance

Recently, I was thinking about the N + 1 problem. N + 1 is a performance issue in a web application, where a method call unleashes a torrent…

Learning to Program as a Career Change

Published: January 21, 2015 6 min read
  • career

A few years ago, I wrote my first computer program. It was a line of JavaScript that printed my name on the screen, using the website…

Ruby Symbol#to_proc

Published: October 31, 2014 2 min read
  • ruby

Explore a Rails app, and you might see something like this: What is that , you might be wondering? It’s shorthand for this: Often in Ruby…

Code Club: Rack and Rails Server

Published: August 27, 2014 2 min read
  • ruby

This week in Code Club we explored Rack, the middleware of the Rails stack. Rack is newsworthy of late due to a change in ownership…

Vim Cheat Sheet

Published: August 22, 2014 2 min read
  • vim

The Vim adventures continue. Today I started reading through the ‘help’ section, which is vast and full of surprising ideas. Starting to…

Vim or Bust

Published: August 20, 2014 2 min read
  • vim

Starting with this blog post, I will be using Vim as my primary text editor. When I started programming, I was on a Windows machine. I used…

Mass-Opening Like Files in a Directory

Published: May 08, 2014 2 min read
  • terminal

The Unix command line is powerful. Before doing anything in a GUI, I usually first try to see if it can be done in the command line. Often…

Save a Command's Output to a File

Published: April 08, 2014 2 min read
  • terminal

One tool that I love allows you to take the output of a terminal command and save it in a file. That command is: An example: This runs the…

The Case for One Computer Monitor

Published: March 31, 2014 • Updated: October 10, 2023 2 min read
  • hardware

I have one computer monitor on my desk. Not long ago, this was common, but today, many people have two, three, or four monitors. In this…

Hello World!

Published: February 09, 2014 2 min read

I’ve been writing code for a few years now, and am proud to be launching my own developer’s blog. The developer’s blog is a time-honored…


Join 100+ engineers who subscribe for advice, commentary, and technical deep-dives into the world of software.