The Sweet Spot
On software development, engineering leadership, machine learning and all things shiny.

All Articles

2022
March
What's the fuss about formal specifications? (Part 2)

In which we debug a production bug (loosely based on a real bug at Lyft) and check its fix in the TLA+ model checker!

What's the fuss about formal specifications? (Part 1)

What Math ✨ can bring to your daily toolbox of programming tools to write robust, concurrent programs: a light introduction to TLA+.

Consider consulting

What career move will give you maximal exposure to technologies, industries, and orgs? Why you should consider a stint in consulting as part of your career path.

February
Quarter Life Crisis

At 23 years old I decided to quit my first full time tech job and take a year off to figure out my life. Was it worth it?

Let's talk about the FAANG interview

If you've ever cruised Hacker News or Blind, you'll know there's an intense obsession with passing the interview loop at big tech companies like FAANG. This is a post for early-career engineers and those looking to break into the field. As someone who's failed SO MANY of these loops, I'm here to tell you to relax.

January
I believe in you

Struggling with the responsibilities of being a new manager, I received encouragement from an unlikely person. This next post is a short one. It's about the power of encouragement at the right time and place.

Overproduction and its discontents

I'm committing myself to an article a week on this blog while on paternity leave in early 2022. Today's topic is on how I'm recovering and reorienting myself after a disorienting 2021.

2021
November
Expand Your Scope (Without Losing Your Soul) - A Staff Engineer's Guide to Career Development

So you've set your sights on a staff-plus title, or you're looking to grow in your role. How do you proceed?

July
What linguistics can teach us about building software with distributed teams

What can semiotics reveal about the hidden cultural frictions in distributed software development?

2020
December
How now, sacred cow?

Sometimes, our most dearly-held beliefs and practices are the very things that keep us from succeeding in new leadership roles.

August
The Product Owner Engineer - The Four Product Hats

Cool, we've got swarms of empowered ICs working on their newly ideated projects. How do you keep the team holistically moving toward the right goals, without having the superpowers of a PM on hand? You improvise and hand out some hats.

The Product Owner Engineer - Engineers as Project Drivers

When individual empowerment is your radical idea, then you commit fully to it with the Engineer as Project Driver. All engineers, no matter their experience, are given the responsibility to take a project from start to finish and own the outcomes.

June
The Product Owner Engineer - The Idea Backlog

How do you teach engineers to think like PMs? You give them the awesome and scary responsibility of choosing their work. Our team learned how to think and prioritize strategically by collectively building an Idea Backlog where we dream up and prioritize impactful projects to tackle. Here's how it works.

May
The Product Owner Engineer: What if there were no PMs?

Can a team with a recently-departed product manager learn to survive on its own? How we built a bottom-up product development culture on my team at Lyft.

January
High Output Management for (Non-managing) Tech Leads

If you've worked in tech long enough, you'll hear praise for Andy Grove's High Output Management, oft-praised as a touchstone of technology management (Grove is often referred to as the "Father of the OKR"). A year or so ago, I got to read his book through Harrison Metal's General Management course. What can you apply from the book when you're a tech lead, and not actually a manager?

2019
December
Integrating Personas in User-Centered ML Model Development

For all the toil that went into developing the pipeline and deep learning model for my ML baby monitor project, I discovered that my model didn't actually solve the problem at hand. This kind of gap exists in the real world of ML development as well, and there's a critical insight from the field of User-Centered Design that could be the key to bridging it.

October
TensorFlow for Tears (Or: Can Neural Networks Make Me a Better Parent?) - Part 3

Over a year ago, I wrote a couple of blog posts about how I trained a TensorFlow model on audio clips of my crying baby so I could get some insights into his sleep patterns and behavior. I distilled this experience into a PyGotham talk titled "Can Neural Networks Make Me a Better Parent?" and it reflects some extra maturity in my machine learning knowledge, as well as some hard-won parenting wisdom and experience.

March
My Biggest Three Mistakes as a Manager

It's been several years since I've come off of my former role as an engineering manager, and with enough humble introspection I've had several insights into the mistakes I've made, and how I'm integrating those learnings into my teams nowadays.

2018
September
I choose XP

A discussion about why I enjoy working in the XP-school of Agile. (tl;dr: I enjoy working in a pull-based work stream. I like that pair programming, TDD and other best-practice batteries are all included.)

August
Tensorflow for Tears: Part 2

In which we train an TensorFlow model with the tears of my little one, then deploy it on a Raspberry Pi.

March
TensorFlow For Tears: Part 1

How do you deal with the travails of colic and new parenthood? You plunge yourself into an ML project, of course. Here, we discuss a naive solution to detecting baby cries via an onboard microphone on a Raspberry Pi.

Elixir and Elm things I've written about elsewhere

While it’s been pretty quiet around these parts, I’ve kept the technical blogging up over on my employer’s blog. I’ve got quite a few posts around Elixir:

2017
September
Wejoinin at Ten

I posted an article on Medium titled “Wejoinin at Ten” describing our experience developing Wejoinin over the past ten years as a long-running passion project - and talk about the directions we hope to be taking it in the next ten.

July
Pitfalls to avoid when moving to async systems

I recently published a post on the Carbon Five blog titled “Evented Rails: Decoupling complex domains in Rails with Domain Events” that takes some of my thoughts about moving a Rails app to use Domain Events - leveraging the power of Sidekiq (or your job runner of choice) to send async messages between different domains of your app.

2016
October
JHipster & Spring Boot for Rails developers

The first question you may be asking is - why would I want to go from Rails to Java?

June
Rails, meet Phoenix: Migrating to Phoenix with Rails session sharing

You’ve resolved to build your company’s Next Big Thing in Phoenix and Elixir. That’s great! You’re facing a problem though - all user authentication and access concerns are performed on your Rails system, and the work to reimplement this in Phoenix is significant.

Evented Rails: Decoupling domains in Rails with Wisper pub/sub events

One common pattern in Domain-Driven Design is the use of publish/subscribe messaging to communicate between domains. When Domain Events are created from within a domain, other domains are able to subscribe to these events and take action within their own domains, respectively.

April
Domain-Driven Design & The Joy of Naming

I want to discuss a topic near and dear to my heart, and what I believe is at the crux of effective software design. It’s not a new functional language, it’s not a fancy new framework, a how-to guide to do microservices, nor a quantum leap in the field of machine learning.

Knex.js and PostGIS cheat sheet

As follows are some code snippets for using Knex.js for executing Postgres and PostGIS queries.

March
Lossless rate limiting with RxJS

Much of RxJS involves working with backpressure - how to reconcile streams that emit/process data at different rates, without overloading the system. Much of that model is built with lossy handling in mind - it makes sense that when your system is under duress, that you design your streams to degrade gracefully (e.g. drop certain events, or rate limit them by chunking into windows, etc).

February
Partitioning RxJS streams: adventures in nested Observables with groupBy() and flatMap()

One of the confusing aspects about working with streams is diving into Rx operators that take a stream and fan out into multiple streams.

2015
September
Strange Loop 2015: Notes & Reflections

Going to Strange Loop was a huge check off my conference bucket list (lanyard?). I’d always heard about this slightly-weird, highly academic collision between academia and industry, skewing toward programming languages you haven’t heard of (or, at the very least, you’ve never used in production). I anticipated sitting at the feet of gray-haired wizards and bright-eyed hipsters with Ph.Ds.

June
Notes on performance tuning a Puma server

A couple of months ago, I was tuning a Rails app for one of our clients. This client wanted to know how performant their app would be under load.

Toolbox: learning Swift and VIPER

The following are some notes I’m compiling as I’m beginning a journey down the rabbit hole, writing an app in Swift utilizing the VIPER app development methodology

April
Building GPX stats through FRP principles with Bacon.js

With my current fascination with tracking workouts and location-based-activities, I have been interested in how I might be able to rewrite some of my stats logic with FRP principles.

March
Docker, Rails, and Docker Compose in your development workflow

(This post originally appeared on the Carbon Five blog.)

2014
November
Explorations in logic programming

Out of Storybook, a side project I’ve been doing for a friend, I had the opportunity to model the problem domain as a constraint satisfaction problem (CSP). It goes:

My own robot training buddy.

As an ultra runner, I am really into the mountains. As a software engineer, I’m really into data. So naturally, I’m interested in the intersection of both.

Recap: QCon SF 2014

Blurb sent me off to QCon SF 2014 for three days.

QConSF: Day Three

Melody Meckfessel: Google/Cloud Engineering

QConSF: Day Two

Leslie Lamport: Programming is more than coding

QConSF: Day One

Bruce Schneier: Security

Conway's Law for humans

If you’re familiar with Conway’s Law, it states:

June
Mocks aren't stubs: mockist & classic testing

With the famed “TDD is dead” debate around the Rails community largely coming to an end, I found myself referencing Martin Fowler’s article, Mocks Aren’t Stubs a good deal, trying to make sense of it in terms of how I write tests and code.

Running Mocha tests with ES6/AMD modules

In one of my personal projects (Chordmeister), I’ve been trying to upgrade the code to be written in ES6 modules and transpile down to AMD modules with Square’s very excellent es6-module-transpiler project.

April
Implementing DDD: Domains, Subdomains and Bounded Contexts

Chapter 2: Domains, Subdomains, and Bounded Contexts

March
Six months as a manager

It’s been approximately six months since I’ve entered engineering management. Here are some thoughts reflecting back on that season now.

February
Blogging through: Implementing Domain-Driven Design

In recent conversations with coworkers, the topic of Domain-Driven Design has arisen on more than a few occasions in design and architecture meetings. “Have you read it?” a coworker asked, “I think it’d help us a lot.”

January
Moving to Ember App Kit

I’ve noticed a bit of the buzz around Ember App Kit recently and decided to move Hendrix, my music management app, over from a Yeoman-generated Ember app to EAK with all its bells and whistles.

2013
December
Ember Data, Rails, CORS, and you!

I’m starting up a new personal project involving Ember-Data and Rails (more to come). The gist of it is that it’s a pure frontend app engine built in Yeoman and Grunt, and designed to talk to a remote API service built on Rails.

2012
Decomposing Fat Models

Heard an awesome Ruby Rogues podcast recently: “Decomposing Fat Models”.

October
Deploying Janky on Ubuntu

Janky is a Github-developed Hubot + Jenkins control interface. It’s developed to be deployed on Heroku. However, what if you need it to live on an internal VM? Here’s how I got it running on a Ubuntu (12.04 Precise) VM.

June
Updating max file limit on OSX Lion

I’ve been hitting a lot of “Maximum file limit exceeded” dialogs after a long day at work – at any point in time I’ve got a kajillion Chrome tabs open, five or six Rails envs running (for dev and test) + Guard/Spork actively watching tests, and Sublime with another kajillion tabs open.

April
Speeding up Rspec/Cucumber feedback times without sacrificing coverage

Rocket Fuelled Cucumbers View more presentations from Joseph Wilk

Backup, backup, backup

Well, the inevitable happened: I finally experienced a hard drive failure. It’s pretty incredible that in the twenty-odd years I’ve been around computers I’ve never had the horror of losing a drive.

HAML object references

Did you guys know that you can use the ‘[ ]’ brackets in HAML to automatically set the id and class on a tag, kind of like Rails’ tag helper?

March
RSpec order-agnostic array matching

What’s that? You want to write an expectation for an array but your method returns the Array in a nondeterministic ordering?

January
Ohm gotchas

Here’s a list of things that have been annoying, or at least a bit frustrating using Ohm, the Redis ORM, in a Rails app. Beware to those who assume Ohm is ActiveRecord in new clothes. It is, but it’s not:

2011
November
Now at Blurb

I should have mentioned this long ago, but I started work at Blurb in early August. It’s been a quick ramp-up and I’m loving it there, surrounded by smart engineers and great designers. I do Rails/JS work there, and I’m building a lot of chops around Agile/TDD methodologies.

October
mmtss, a collaborative loop station

mmtss is a loop station built for live performances.

August
Introducing Boink, a photobooth for the rest of us.

My friends were complaining that wedding photobooths were too expensive to rent. Could we make one for them?

July
Chat App - Frontend Prototype

June
BRUTE LABS UX project: StudentsConnect

I’m on a team with BRUTE LABS, a volunteer-led design agency working on StudentsConnect, a prototype project making chatroulette-style interactions connecting students from the global North and South. Here’s a UX flow we worked on:

Code For Oakland Barcamp

[caption id=”” align=”alignnone” width=”500” caption=”Is that Jon Chan I see? Yes it is. Photo credit Oakland Local.”][/caption]

March
UN Declaration of Human Rights (Visualization)

Slavery Today (Infographic)

February
Save our souls - a Twitter art installation

Here’s how the installation looked on the day of the art show.

Arduino and python-firmata

I just spent five hours trying to figure out why  none of the Firmata libraries for Python were working over my serial connection. I was wondering why the previous program remained on the board and none of the signals sent were hot.

Currently: frustrated

So I got the poster printed, and the LEDs currently show through the board pretty well. This is good:

Update

A quick update on the art project:

The making of SOS: Intro

January
Using 37signals shorthand for UX flows

http://37signals.com/svn/posts/1926-a-shorthand-for-designing-ui-flows

AppStoreConnect UX

2010
December
Aristo, the shiniest jQuery UI theme of them all.

Let’s face it: jQuery UI skins suck. They’re flat, they’re boring, they don’t pop.

August
On selling my soul and switching to Mac

A month ago I bought an ‘07 MacBook on Craigslist. No, it’s not one of those sexy aluminum hot rods, but it sure is pretty.

June
post-review, git-svn and Review Board

Here’s how to set up the excellent VMware-developed open-source Review Board and its [post-review](http://www.reviewboard.org/docs/releasenotes/dev/rbtools/0.2/) command line review creation utility to work with git and git-svn on your computer.

April
YUI 3 Widget lazy instantiation

At work, we make good use of YUI 3. It’s a really well-thought-out framework, from sandboxing and deep namespaces to CSS3 selector support and lazy-loading modules through the Yahoo! CDN. One of YUI 3’s biggest features is the Widget framework, which specifies an object on the page that the user can tweak to his or her whims.

It's official: "Web site" becomes "website"

I Love/Hate Marmite

I had my first taste of Marmite last year while in Botswana. My South African roommate loved it, and encouraged me to try it and spread it on my toast. One bite and I gagged. It was like somebody mixed soy sauce and peanut butter and cranked it to 11.

March
Upgrading Wejoinin to unicorn

(Reposted from the Wejoinin Blog)

Shiny font overhaul!

2009
September
UXweek Day 3 - Perception

Prof. Temple Grandin - Colorado State - “Autism, Drawing and Design”

UXweek Day 2 - Expression

From here on out, the speakers were a bit more unconventional, with more emphasis on the human interaction and experience side of things.

UX Week: Day 1

I’m here in San Francisco at UXweek 2009, sent by Riverbed, determined to learn all I can and rub shoulders with the best and brightest minds in the industry. It’s been a really cool couple of days so far. I’ve met some really cool designers and got to pick their brains on their team practices. The food, oh the food: it’s excellent (ahi tuna? creme brulee? smoked salmon? green tea cookies? Pinch me.)

February
Thoughts on rural computing in Botswana

I’m currently in Botswana, doing volunteer work at a nonprofit Christian agency called Love Botswana Outreach Mission. Among my responsibilities are helping out with the organization’s IT needs. I was pleasantly surprised to discover that the organization is wired for 24/7 Internet access, despite being located about 10km out from the center of Maun, a medium-sized village.

2008
October
First look at SproutCore and Cappuccino

One trend on the Web these days is to move away from traditional full-stack frameworks (like Rails) toward client-side, full-stack Javascript frameworks (among them Dojo, GWT, SproutCore, and Cappuccino). There’s been a lot of buzz about SproutCore and Cappuccino, because of their design elegance, shiny Mac-ness and promises of really rich client experiences. I’ve been checking them out and here’s some of my observations so far:

GWT vs. SproutCore vs. Cappuccino

I’m looking to develop a Web application with a full-stack Javascript framework like GWT, SproutCore or Cappuccino. I’m making the decision to go with a Javascript framework over a traditional full-stack framework (like Rails) because:

March
After site duplication, an .htaccess redirect for old Wordpress posts

I think I must preface this post with a bit of context:

2006
September
GTD-izing my Thunderbird client, and other productivity things

Do any fellow geeks out there follow any GettingThingsDone (GTD) practices?

July
The FAQQLY Tour

Many of you have wondered what it’s like daily indulging in the opulence that are the FAQQLY offices. Allow me to take you on a tour.