Genuinely Care

I often reflect on a conversation from years ago with a former Army boss. It is a core component of my leadership style. He said that being a leader means you have to “Genuinely care.” This phrase helped me instantly understand all the leaders I’d encountered up to that point. And better understand my own successes and failures. Followers will forgive many shortcomings and failures in their leader, if they believe that they truly care about what happens to them. ...

June 29, 2026

Catastrophic Mistakes Are a Team Failure

If people can make catastrophic mistakes on your team, the process is broken. Real-World Example: Git Branch Protections An example is branch protections in a Git repository. These are rules that prevent engineers from deleting or altering history in shared branches, such as main, which on most teams would lead to a major problem. Engineers don’t intend to delete or alter main, but it can happen when rifling through terminal commands. We’re moving fast, and occasionally we press enter on the wrong command. As a contributor, I expect policies to catch me when I make this mistake. ...

April 20, 2026

User Manual

Working with me? Awesome! I built this user manual to share my working style and communication preferences. For those interested in building their own user manual, here’s the guide that helped me. Work What is your work and life setup? I start work at 9 AM EST. As a team lead, I have a morning routine that includes focusing my day’s priorities, reviewing PR’s and tickets, moving my personal tickets work forward, reading emails, and following up on requests that I’ve made. ...

November 13, 2025

Lessons from Running a Tech Meetup for 10 Years

I’ve been organizing Meetups for a decade, starting with Vim Chicago and Chicago Elixir, and now running Maine JS from Portland, Maine. Here’s my practical guide on how to start a Meetup group, based on what’s worked for me. How to start a meetup group The steps that follow are in rough order. You’re going to be doing many of them in the beginning; that’s the time when you do the most sustained work. ...

February 3, 2025

Being the Third Engineer

I was the third engineer hired by my company, not counting our technical co-founder. I like that position, and it seems to play to my strengths. Who Is the Third Engineer? Who is the third engineer? Looking at the startup hiring process, I’ve noticed a pattern. The first engineer is usually a trusted senior that the founders know. The second engineer is the same, or a referral from the first engineer. ...

October 16, 2024

How to Run an Agile Retrospective for Leaders

Retrospectives are one of my favorite engineering team practices. In this post, I’ll explain why and how I run retros. I’ll be covering: What is a retro? Why should we retro? Retro setup Running the retro Let’s get started! What is a Retro? What is a retro? From a dictionary: Retro, short for retrospective: ‘a surveying of the past.’ Retros are a Scrum/Agile ‘ceremony’, a collection of best practices for software engineering teams. ...

March 15, 2023

How I Talk: My Guide to Tech Public 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 this post, I’m going to use that opportunity as an excuse to document my speaking process. Some smart people have written on this subject, and anything I’d have to say is partly inspired by these ideas: Conference Prompts: Or How to Submit Proposals and Influence People How to Prepare a Talk Improve Your Presentations In Under $50 Speaking.io What I learned from reading 429 conference proposals What Your Conference Proposal Is Missing Several of these writers talk about submitting conference proposals, AKA CFPs. I don’t plan to cover that in-depth. Why not? I believe once you can write a compelling proposal, getting accepted is the product of a variety of factors you can’t control. So, submit many proposals, and be like Thomas Jefferson, who once said: “I’m a great believer in luck, and I find the harder I work the more I have of it.” And in the meantime, learn to give a great talk. ...

August 9, 2017

You Should Blog

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 should blog. Why? For me, it’s been an invaluable opportunity to practice explaining my thoughts, and to watch myself grow. Explaining Thoughts Translating technical ideas into words is one of the great challenges of being a programmer. We have to master it. Communicating well with everyone on your team is crucial. ...

February 11, 2017

Writing Elixir Sigils

Sigils are a mechanism for working with textual representations in Elixir. If you’ve ever made an array of Strings in Ruby with %w(), the API is similar. A neat feature of sigils is that we can make custom variants, or override existing Kernel variants. The latter is generally discouraged. Creating a Sigil Here’s some code I wrote for an exercise, defining a new sigil, u: defmodule SigilWriter do @moduledoc """ Provides a module for creating new sigils. """ @doc """ Defines the new sigil function for `u`. """ def sigil_u(content, _opts) do content |> String.split |> Enum.map(&String.downcase/1) end @doc """ Calls the `u` sigil. """ def split_and_downcase(content) do ~u(#{content}) end end The sigil_u function defines the new u sigil— u is just a convenience method. This function takes the content, splits it, and downcases each word in the list. This only works because u is not already a defined sigil in Elixir. ...

July 4, 2016