Skip to content

Writings

These posts include memos, essays, and research. For case-studies and client testimonials, see ExtendedPlay.io.

My Decade with Oh My Zsh and Why I'm (Finally) Moving On

It’s funny how deeply ingrained some tools can become in our workflows. Back around 2012, I stumbled upon Robby Russell's Oh My Zsh, and like many, it felt like a revelation. Suddenly, my terminal wasn't just a command line; it was this vibrant, supercharged environment. It was the gateway drug for many of us into the rich Zsh ecosystem, and for that, I'm genuinely grateful. It made the shell approachable and, dare I say, fun.

For over ten years, Oh My Zsh has been a steadfast companion. But as with all things in tech (and life!), needs evolve, perspectives shift, and sometimes, the tools that once felt indispensable start to feel a bit... much.

A General-Purpose Python AI Development Environment

(Updated May 13, 2025)

I was watching popular AI-trending youtuber Matthew Berman build a local environment for AI development the other day. And it was amazing how issues like virtual environments, package mangement and versioned dependencies were huge pain points and hurdles.

It occured to me that with all the excitement about AI and tooling, that there's common issues that folks who aren't used to the command line may run into – and be stopped dead in their tracks.

Three maps better than a roadmap

"We need a roadmap, is there a template we can use?"

I see this request all the time. From clients to peers, developers to product execs.

The idea is that with the right template: you fill in the squares and your viola your roadmap is ready. I get it. A roadmap feels like such a great thing, its an artifact that says "this is what we're doing, and when we'll do it".

Most roadmaps look like this:

I love developing, again

I'm writing this today to remind myself: I actually do love developing. I do love the moment of sitting in my editor, with a challenge or idea, and writing an elegant solution to it.

Running an app on production – is a different beast. A nearly joy-less scenario. Its all remedial! Its scaling, bug-finding, performance tuning, conflict merges, security audits, etc. It's a lot of work. All the benefits come from that software's near-invisibility to the customer who uses it.

The OODA Loop: How to repeatably identify and overcome the worst technical debt

Technical debt isn't always immediately obvious from a far, but easily recognizable when you touch it: it feels bad. Its a broken abstraction – a manual work-around. Its a burden. Its embarrassing. You scratch your head wondering how you got here and how to never get here again. It is often so woven into your particular workflow that off-the-shelf or external solutions don't seem to apply – its isolating.

A "necessary e-mail"

Setting up emails is still a silly, annoyingly technical task. Often, my clients don't anticipate just how many email systems are needed, even for a tiny saas business.

I'll walk through the four necessary categories of emails below and how they differ in setup.

Company Accounts

These are the @example.com email addresses. You'll need them, your team will need them, and you'll want to be able to create aliases and groups. Your domain registrar will say they offer this. Don't use it.

Tasks: - Setup a G-Suite account with your domain - Connect your domain to it via MX records

Transactional Emails

These are the emails that get sent as receipts or in conjunction with core user activity on your app. These shouldn't be conflated with your marketing emails. Send them separately through Postmark or Sendgrid. You want these to be delivered and the reputation to be separate from your marketing campaigns.

Tasks: - Setup a new domain name - Attach it to a transactional email service - Follow their onboarding rules and hoops, and give yourself time (sometimes weeks) to make it through their verification processes

Support Emails

This inbox will be where your customer support happens, so do yourself a favor and create a shared inbox. This can be a group or alias that goes to a shared G-Suite inbox, or a dedicated service like Intercom or HelpScout.

These emails require visibility so try to have multiple eyes on them !

Tasks: - Create a "group" in G-Suite that receives emails address to [email protected] - Add support team members to the group

Marketing & Sales Emails

You'll use one or more services for marketing emails and these domains have the highest risk attached. I recommend separating them from your transactional email domain and company email domain to better insure than any reputation issues that affect them don't impact the other channels.

Starting out, you'll also want to be smart about the "reply-to" address used in these emails. For onboarding drip campaigns: reply-to founders – this is product research. For others, make sure your reply-to lands in someone's real inbox. Customer's rarely reply to email blasts, but if they do – you want to know.

Tasks: - Sign up for MailChimp, ActiveCampaign, Customer.io, etc - Register a subdomain, email.example.com - Follow their onboarding process for verification (note: it may take days, or even weeks before you can begin sending en masse) - Begin sending slowly, an early misstep in sender reputation can be costly - Setup email security domain records: spf, dkim

Technical debt

Technical Debt

n. Inefficiency introduced to satisfy a requirement, because the resources (time, knowledge, solutions, funding) are not available.

I'm not sure where I saw this definition, but I loved it. It includes the motivations behind why we choose technical debt as humans.

You want a car, but you don't have $50,000 today. So, you take on debt and get the car today. Now you have the car, and you carry the debt. The debt doesn't actually hurt you. The debt only comes into play when you're making decisions.

Technical debt only hurts in a system that needs to make changes and respond to new priorities.

You need to get from point A to B.

You can build a bridge, or you can pay a toll.

You don't have time to build a bridge, or the right bridge-builder, or the steel at hand to build a bridge.

So you take the toll road – you’ve created technical debt.

That’s the debt, the cost of taking that toll now every time you need to get from point A to B.