acquisition

How to navigate and/or survive your acquihire.

⭐ How the Digg team was acquihired.

acre

Freebase Hackday and Image Game

actors

Recurring Events and Message Passing

A Couple of Clojure Agent Examples

Actors in Common Lisp

adult

Teaching Adult English Classes

agents

Recurring Events and Message Passing

Scalable Scraping in Clojure

A Couple of Clojure Agent Examples

analytics

Writing, Analytics and Analysis

How to Filter Bots From Analytics

anti-pattern

The Grand Migration.

A Django Anti-Pattern, Rolling Your Own REST

apache

Measuring Single and Multi Server Performance

Overview of Single vs. Multi Server Architecture

The Django and Ubuntu Intrepid Almanac

Dreamier Dream Server with Nginx

Apache/Lighttpd Confusion

api

Make Slack app respond to reacji.

Adding App Home to Slack app in Python.

Creating a Slack App in Python on GCP.

apis

Some delightful developer experiences in 2019.

architecture

⭐ Managing technical quality in a codebase.

The Grand Migration.

How to practice backend engineering.

Hotspotting developer productivity.

Notes on Building Evolutionary Architectures.

Healthchecks at scale.

Describing fault domains.

Distributed systems vocabulary.

⭐ Reclaim unreasonable software.

Notes on The Timeless Way of Building

Notes on A Philosophy of Software Design.

You can't reason about big balls of mud.

⭐ From lambda to kappa and dataflow paradigms.

Providing pierceable abstractions.

Options for orchestrating periodic tasks.

Infrastructure between cost center and ego trip

Braindump on Load Generation

Usable QA Environments

Serverless: Gatekeeping and Profit Margins

Fail Open and Layer Policy

Thoughts on Envoy's Design

QoS, Cost & Quotas

⭐ Developing service oriented architectures.

Building a Software Deployment Pipeline

Configuration Driven Behavior

Building Technical Leverage

Digg v4's Architecture and Development Processes

⭐ Introduction to architecting systems for scale.

Overview of Single vs. Multi Server Architecture

Designing My Future Home

aym-cms

HSS and YUI Compressor in AYM CMS

R.I.P. Your Resume Site to Awesome

A One-Stop AYM CMS Solution

Making Static Dynamic Again; AYM CMS

beepbeep

Generating RSS feeds via BeepBeep

Pitance: Template and Snippet Infrastructure

Changing Mimetypes for Text Responses in BeepBeep

BeepBeep, CouchDB and a Trivial Blog

Using Ajax with the BeepBeep Microframework

Getting Started With BeepBeep

binder

Binder for hosting Jupyter notebooks.

blog

RSS feed changing! Migrating blog in next few days.

2020 in review.

2019 in review.

2018 in review.

Notes from fifth blog rewrite

Wherein I Rewrite My Blog a Fifth Time

Irrational Exuberance's Fourth Coming

Writing, Analytics and Analysis

Irrational Exuberance's Third Rebirth

Smaller Header, JobSyndicate, Printable Articles

Don't Repeat Yourself for Bloggers: Dynamic Blog Context in LifeFlow

Installing a Development Deployment of LifeFlow, a Django Blog Solution

Another Slight Mistake...

Moving Writings to Separate Flow

A Few Quick Updates to Site

blueprint

BluePrint CSS makes LifeFlow look better, and easier to customize

book

Self-publishing Staff Engineer.

Staff Engineer.

Early Edition of "Staff Engineer" coming Jan 31st.

Notes on Building Evolutionary Architectures.

Notes on data modeling from Handbook of Relational Database Design.

Notes on Escaping the Build Trap

Notes on Soul of a New Machine, Messy Middle, Crazy at Work, Company of One.

Notes on Structure and Interpretation of Computer Programs.

Notes on The Timeless Way of Building

Notes on The Pyramid Principle.

Notes on A Philosophy of Software Design.

Book recommendations.

Notes from "Good Strategy, Bad Strategy."

Seth Godin's The Dip.

boss

Reranking Results in django-springsteen

django-springsteen and Distributed Search

Visualizing Keyterms with BOSS and Processing

Releasing Source for Mahou

Extending Mahou; Gotchas and Snippets

Writing Mahou; a Cappuccino Image Search

BossArray for list-like Yahoo search results

Stripping Reddit From HackerNews With BOSS Mashup

Polishing Up Our Django & BOSS Search Service

Search Recipes for Yahoo's BOSS in Python

Yahoo's Build your Own Search Service in Django

braindump

Braindump on Load Generation

build

burnout

Healing a Burned Out Team

calm

Joining Calm.

cappuccino

Releasing Source for Mahou

Yes, You Do Care About Cappuccino

Extending Mahou; Gotchas and Snippets

Extending Classes in Cappuccino

Writing Mahou; a Cappuccino Image Search

career

How to be a tech influencer.

Tech Lead Management roles are a trap.

Interesting work happens at the edges.

2020 in review.

Mailbag: Advice for someone five years into their tech career?

Finding the right company to reach Staff Engineer.

Deciding to switch companies.

Being visible.

Does the Staff title even matter?

My career story.

Mailbag: Evolving your engineer career beyond the career level.

Joining Calm.

2019 in review.

You only learn when you reflect.

⭐ A forty-year career.

Some career advice.

Path to engineering manager of managers.

Growing with your company's complexity.

Meeting people.

Career narratives.

Roles over rocket ships, and why hypergrowth is a weak predictor of personal growth.

cassandra

SuperFamily Relationships with Lazyboy

clojure

Recurring Events and Message Passing

Scalable Scraping in Clojure

A Couple of Clojure Agent Examples

Writing Files in Clojure

Reading Files in Clojure

cloud

Head in the clouds.

Running systems library as Cloud Function.

⭐ The physics of Cloud expansion.

cocoa

Notes on Cocos2d iPhone Development

Epic PyObjC, Part 5: Resources and Farewell

Epic PyObjc, Part 4: Drag & Drop, Multiple Nibs

Epic PyObjC, Part 3: Browsing, Caching, Indicating

Epic PyObjC, Part 2: Adding a Library & Bindings

⭐ An Epic Introduction to PyObjC and Cocoa

Writing to Application Support in PyObjC

Deleting From NSOutlineView With the Delete Key

Cocoa Drag and Drop text into the Dock Icon

Designing Elesma

Opening Files With Associated App in Cocoa

Handling Files With CoreData

Assigning One To Many Relationships in CoreData

cocos2d

Introducing a Tutorial and touchDefense

Creating Slideshows with Cocos2d iPhone

Touch Detection in Cocos2d iPhone

Notes on Cocos2d iPhone Development

common-lisp

The Subtle Joys of Generic Methods

Actors in Common Lisp

community

Opinionated Programming Languages, The Huddled Masses, and Elitism

compliance

Notes on compliance tools.

computer-science

Comments on "Why Engineers Should Consider Formal Methods"

Paper Review of "Hints On Computer System Design"

Paper Review of "A Transaction Model"

Genetic Programming: A Novel Failure

⭐ Genetic algorithms: cool name & damn simple.

concurrency

Recurring Events and Message Passing

Scalable Scraping in Clojure

A Couple of Clojure Agent Examples

conferences

Example Call For Proposals submissions.

contentful

Poking around Contentful.

contract

Being a Local Maximum

Failing a Contract

coredata

Handling Files With CoreData

Assigning One To Many Relationships in CoreData

couchdb

How Pitance Versions Documents in CouchDB

BeepBeep, CouchDB and a Trivial Blog

Setting up CouchDB-Lucene on OS X

A Command Line Tool for Loading CouchDB Documents

Full-Text Search in CouchDB Using... CouchDB

An Introduction to Using CouchDB with Django

cto

⭐ Your first 90 days as CTO or VP Engineering.

culture

Do you work at a tech company?

data

Async processing with sync semantics?

Analyzing cross-service requests with Apache Beam.

data-localization

Can governments design great APIs? Let's hope so.

deployment

Simple Continuous Deployment on GKE with gke_ci

Building a Software Deployment Pipeline

design

A Filter to Display Neighbors in a List

Redesign of Lethain.com

Transcending Search-as-You-Type Stickiness

How to Write a Wrapper Library

Defining Your Web Aesthetic

devtools

Accelerate's definition of developer productivity.

Refactoring Ruby programmatically.

digg

⭐ How the Digg team was acquihired.

Digg v4 @ Internet History Podcast

⭐ Digg's v4 launch: an optimism born of necessity.

Why Pagination Was Hard at Digg

Digg v4's Architecture and Development Processes

Using Flot.js with the Digg Streaming API

digg-streaming-api

Using Flot.js with the Digg Streaming API

distributed-systems

Refactoring & Testing Our Dynamo Clone

Durable Writes & Consistent Reads

Hands On Review of the Dynamo Paper

django

DjangoDash and Drinkfindr

Retiring and Releasing Codernote.com

What Do Django People Search About?

Findjango, A Week of Progress

Making Django Apps Run On and Off GAE

Findjango: A Django Search Vertical

Solango and Tomcat 6 on Ubuntu Intrepid

Deploying django-springsteen on Google App Engine

Reranking Results in django-springsteen

django-springsteen and Distributed Search

The Django and Ubuntu Intrepid Almanac

A Filter to Display Neighbors in a List

Django-Portfolio: Organize and Display Projects

A Different Approach to local_settings.py

Slides from django-nyc on 11/18/2008

Bad Ideas and Regular Expressions in Templates

Deploying Django with Fabric

Development to Deployment in Django

Customize site style by user with django-userskins

User Registration Apps for Django

Taming AuditTrail Proliferation

Choosing Between AuditTrail and Django-Rcsfield

Setting Up Django-Rcsfield

Restricting User Signups in Django

Suffer Less By Using Django Dev Server as a Proxy

As-You-Type Slug Uniqueness Validation

Layers of Authentication

Custom Django Views for Happier Ajax

Intro to Unintrusive JavaScript with Django

Making Static Dynamic Again; AYM CMS

Intricate Static Websites With Django Templates

Migrating the 'This Week in Django' Concept

Dynamic Ad Targeting With django-monetize

An Introduction to Using CouchDB with Django

A Syntax Coloring Template Filter for Django

Replacing Django's ORM with SQLAlchemy

Replacing Django's Template Language With Jinja2

An Introduction to Django's Loose Coupling

Polishing Up Our Django & BOSS Search Service

Yahoo's Build your Own Search Service in Django

JSON, Object Oriented Views, and Starting a Real App

Ambush Code Review Learns Code Diffs

Overview of Using Django on the Google App Engine

A Sunday Project: Ambush Code Review

Up to Speed

A Django Anti-Pattern, Rolling Your Own REST

Minimalism

Working on LifeFlow's Public Face

Release of LifeFlow Version 0.90

Using Optional Parameters in Django Urls

Technical Aspects of the Life Flow Editor

Installing a Development Deployment of LifeFlow, a Django Blog Solution

Implementing Threaded Comments in LifeFlow

Two-Faced Django Part 7: PyFacebook and FBJS Ajax

Two-Faced Django: Live install

Two-Faced-Django Part 6: PyFacebook

Two-Faced Django Part 5: JQuery Ajax

Two-Faced Django Part 4: The Webapp

Two-Faced Django Part 3: Newforms

Two-Faced Django Part 2: Models and Django Testing

Two-Faced Django Part 1: Building a project that exists simultaniously on Facebook and the web

Using JQuery with Django for Autocomplete Fields

Using PyFacebook without the Facebook middleware

Dreamier Dream Server with Nginx

Adding Social Bookmarking To a Django App

Syntax Highlighting with MarkDown, and a pinch of Automagick for Django

Extracting Models From Django Datadump

Creating my Dream Server for Django

How to Migrate Data Across Model Changes

Writing Custom Contexts for Django

A Django Middleware for Google Analytics (repost)

Reflections on Django (repost)

django_monetize

Dynamic Ad Targeting With django-monetize

dreamhost

Leaving DreamHost

Two-Faced Django: Live install

education

Teaching Elementary Classes as an ALT

Why Was The Syllabus Born?

On Hegemony and an Anti-Capitalist Bias in European Textbooks

On Education, Self-Responsibility and Manure

Teaching Adult English Classes

elegant-puzzle

Using QR Codes in printed books.

An Elegant Puzzle by the numbers, five months later.

An Elegant Puzzle @ Software Engineering Daily

What I learned writing a book.

Elegant Puzzle press, reviews and podcasts.

An Elegant Puzzle is released today!

An Elegant Puzzle is available for pre-order.

An Elegant Puzzle coming in late May.

An Elegant Puzzle: Systems of Eng Management.

elementary

Teaching Elementary Classes as an ALT

elesma

Designing Elesma

english

Lesson Plan: My Winter Vacation

Teaching Adult English Classes

entrepreneurship

Startups and Assembly Lines

Reading "The Nudist on the Late Shift" in 2008

environment

Looking for Recycling's Lost Sex Appeal

erlang

The Day I Broke Production

Debugging Crashes With Small Scripts

Formatting Multipart Formdata in Erlang

Refactoring & Testing Our Dynamo Clone

Nagios Monitoring for Erlang

Replicating receive-after in an Erlang gen_server

Durable Writes & Consistent Reads

Hands On Review of the Dynamo Paper

Recurring Events and Message Passing

Cleaning up erlang_markdown

A Failed Stack-based Markdown Interpreter

Erlang Brush for SyntaxHighlighter

Load Balancing Across Erlang Process Groups

Distinguishing Strings from Lists in Erlang

BeepBeep, CouchDB and a Trivial Blog

Using Ajax with the BeepBeep Microframework

Getting Started With BeepBeep

Cull Lingering Erlang Heart Processes

Writing Join in Erlang

Thoughts on Dating Erlang

essay

Money or Meaning: Spending Our Wealth of Time

Startups and Assembly Lines

excel

Creating Multi-Worksheet Excel Docs with xlwt

experiment

Measuring Single and Multi Server Performance

extraction

Extraction: Get Metadata from HTML Documents

fabric

Deploying Django with Fabric

facebook

Two-Faced Django Part 7: PyFacebook and FBJS Ajax

Two-Faced-Django Part 6: PyFacebook

Using PyFacebook without the Facebook middleware

fail

YUI Dialogs, IE z-index and Tragedy

OS X Textfield Encoding (maybe) Issue

When psycopg2 Can't Import tz

Failing a Contract

Poor Wireless Connectivity for MacBook

Writing Titles Under Ninety-Five Characters

Stability Issues

findjango

Findjango Redesign & Slides for django-nyc

Findjango, A Week of Progress

Findjango: A Django Search Vertical

flot

Using Flot.js with the Digg Streaming API

food

Another Breakfast With You

Merry Christmas 2007

Reliable Mealtime Friends

Grocery Shopping in Japan

framing

Startups and Assembly Lines

freebase

Freebase Hackday and Image Game

functional

Writing Join in Erlang

Thoughts on Dating Erlang

Filtering Arrays in Objective C

Failure of Implicit Conventions: Determining Function Destructiveness

gcf

Running systems library as Cloud Function.

gcp

Testing Python projects for Google Cloud Run.

Distributing your Slack application.

Using Cloud Firestore to power a Slack app.

Creating a Slack App in Python on GCP.

genetic-algorithms

Genetic Programming: A Novel Failure

⭐ Genetic algorithms: cool name & damn simple.

git

IE's New Infrastructure and Writing Workflow

gke

Simple Continuous Deployment on GKE with gke_ci

Trying out Google Container Engine

go

Experiment with distributed finite state machines.

google-app-engine

Making Django Apps Run On and Off GAE

Simplified django-springsteen Deploy on GAE

Deploying django-springsteen on Google App Engine

Releasing Source for Mahou

Extending Mahou; Gotchas and Snippets

Writing Mahou; a Cappuccino Image Search

Ambush Code Review Learns Code Diffs

Overview of Using Django on the Google App Engine

A Sunday Project: Ambush Code Review

graphql

Quick tutorial on using GraphQL with Python.

haiku

Our Yellow Woods, and a Story

Spring Haiku and Tanka

Haiku for an April

hiking

A Brief Winter Hike

Hiking Tengaisan

hiring

Some common hiring manager mistakes.

Interviewing senior engineering leaders.

Do you work at a tech company?

Modeling a hiring funnel with Systems library.

Designing interview loops.

Your hiring funnel.

Consider the team you have for senior positions.

⭐ Cold sourcing: hire someone you don't know.

Running a Humane Interview Process

idm

Seeking Some Music I Can't Find

inclusion

Stuff I've learned about Diversity, Equity and Inclusion over the past few years.

Privilege's upward-facing window.

Opportunity & Membership.

Selecting project leads.

increment

"Do engineering managers need to be technical?" in Increment.

Increment has launched.

infrastructure

Incident response, programs and you(r startup).

Maintaining platform-product fit.

Expanding on S[a-z]{3,} Reliability Engineer roles.

Forecasting synthetic metrics.

"Investing in technical infrastructure"

Healthchecks at scale.

Describing fault domains.

Distributed systems vocabulary.

Head in the clouds.

Don't follow the sun.

⭐ How to invest in technical infrastructure.

To innovate, first deprecate.

Magnitudes of exploration.

Writing a reliability strategy: reason about complex things with system models.

"Paying Technical Debt at Scale - Migrations"

⭐ Infrastructure planning: users, baselines and timeframes.

Service cookbooks.

Accelerate's definition of developer productivity.

Infrastructure migrations @ Interestings

Experiment with distributed finite state machines.

You can't reason about big balls of mud.

⭐ Migrations: the sole scalable fix to tech debt.

The Redis Protocol is pretty great.

⭐ Some of my favorite technical papers.

Infrastructure engineering @ Inside Intercom

⭐ Product management in infrastructure eng.

Global secondary indexes.

⭐ The physics of Cloud expansion.

Async processing with sync semantics?

⭐ Engineering management stuff I learned in 2017.

Analyzing cross-service requests with Apache Beam.

Infrastructure between cost center and ego trip

⭐ Developing service oriented architectures.

⭐ Introduction to architecting systems for scale.

install

Installing a Development Deployment of LifeFlow, a Django Blog Solution

interviewing

Staff-plus interview processes.

How to practice backend engineering.

Picking problems for programming interviews.

Acing Your Architecture Interview

iphone

Crash on Compiling App With MKMapView

Reading XML Files on the iPhone

Creating Slideshows with Cocos2d iPhone

Touch Detection in Cocos2d iPhone

Notes on Cocos2d iPhone Development

japan

Landing in the JET Program.

A Year Later, Home From Japan

Reflections on a Year of Blogging and Japan

小学校と教える授業の最後の日

Last Day of Elementary School and Classes

Advice for ALTs Considering a Second Year

A Thursday: Elementary School

An Introduction to a Week in Japan

Things I'll Miss in Japan

Looking for Recycling's Lost Sex Appeal

May in Review

Photographing Japan

A Picture of a Couple

A Week In The Job

Failed Night Time Pictures of Sakura Blossoms

A Brief Winter Hike

Catching Up On Some Thoughts

Quick Reflections on JET in Haiku

Spring Doesn't Come in February, But Snow Does

Teaching Elementary Classes as an ALT

My First Sickday in Japan

Hot Water Is Broken

Introduction to Kamioka-cho, Hida-shi, Gifu-ken, Japan

Driving on the Left Side

Reflections on the old year, and the new one

Music Recommendations & Snow Pictures

Visiting Kiyomizudera

Packaging of Renu Contact Solution

Miyajima and Hiroshima

Those Annoying Habits

Introducing my Japanese Kitchen

Hiking Tengaisan

Reliable Mealtime Friends

Grocery Shopping in Japan

Getting Cold in Kamioka

Teaching Adult English Classes

Expectations and Reality for the lowly ALT

Eating Cornflakes

Leaving Tokyo, Arriving in Kamioka

From America into an American Bubble: The Flight to Japan

JET Pre-Departure Orientation

Picture from Hotel Room

Heading toward Atlanta

Applying to the JET Programme

java

Opinionated Programming Languages, The Huddled Masses, and Elitism

Is the JVM the "next assembly"? I hope not. (repost)

javascript

Using Flot.js with the Digg Streaming API

Callbacks Are An Informal Pipeline

Porting Django's urlpatterns to Node.js

Log Collection Server with Node.js

The Magical Source of YUI Get's Power

Custom Django Views for Happier Ajax

Intro to Unintrusive JavaScript with Django

Updates to Sparklines.js

Sparklines in Javascript With Sparklines.js

Processed Tower Defense 1.0

Strangest JavaScript Bug I've Ever Seen

Updates to Processed Tower Defense

Processing.jsの使い方

Updating Processing.js Graphics via Ajax

Design of Processed Tower Defense

Three Processing.js Examples

Using Javascript to Control Processing

Getting Started with Processing.js

jet

Landing in the JET Program.

小学校と教える授業の最後の日

Last Day of Elementary School and Classes

Advice for ALTs Considering a Second Year

A Thursday: Elementary School

An Introduction to a Week in Japan

Things I'll Miss in Japan

May in Review

A Week In The Job

Catching Up On Some Thoughts

Quick Reflections on JET in Haiku

Spring Doesn't Come in February, But Snow Does

Teaching Elementary Classes as an ALT

My First Sickday in Japan

A Historical Perspective on the JET Program in 2008

Failures of Proactive Communication & Other Generic Complaints

Lesson Plan: My Winter Vacation

Introduction to Kamioka-cho, Hida-shi, Gifu-ken, Japan

Driving on the Left Side

Reflections on the old year, and the new one

Those Annoying Habits

Introducing my Japanese Kitchen

Hiking Tengaisan

Expectations and Reality for the lowly ALT

FAQ about JET

Eating Cornflakes

Leaving Tokyo, Arriving in Kamioka

From America into an American Bubble: The Flight to Japan

JET Pre-Departure Orientation

Heading toward Atlanta

Applying to the JET Programme

jinja

Replacing Django's Template Language With Jinja2

jquery

Using Ajax with the BeepBeep Microframework

As-You-Type Slug Uniqueness Validation

Custom Django Views for Happier Ajax

Intro to Unintrusive JavaScript with Django

Two-Faced Django Part 5: JQuery Ajax

Using JQuery with Django for Autocomplete Fields

jupyter

System dynamics in a jupyter notebook.

k8s

Sketching out failure injection on Kubernetes.

Simple Continuous Deployment on GKE with gke_ci

Trying out Google Container Engine

Options for orchestrating periodic tasks.

kamioka

Introduction to Kamioka-cho, Hida-shi, Gifu-ken, Japan

Music Recommendations & Snow Pictures

kappa

Introducing Kappa, a Twitter Client

language-design

The Subtle Joys of Generic Methods

Spoken Languages, Blub, and Convenience

Opinionated Programming Languages, The Huddled Masses, and Elitism

Failure of Implicit Conventions: Determining Function Destructiveness

lazyboy

SuperFamily Relationships with Lazyboy

leadership

Writing strategies and visions.

Guiding broad change with metrics.

My rails for engineering leadership.

lesson-plan

Lesson Plan: My Winter Vacation

lifeflow

Irrational Exuberance's Third Rebirth

Fixing What Ails LifeFlow

Release of LifeFlow 0.91

ReST, Textile and HTML in Markdown

Working on LifeFlow's Public Face

Release of LifeFlow Version 0.90

Improvements to LifeFlow Editor

Technical Aspects of the Life Flow Editor

Introducting the LifeFlow Editor

Catching Lessons From Spam

Translating Entries into Other Languages with LifeFlow

New Style for Including Resources in Entries on LifeFlow

Adding Arbitrary Mods to LifeFlow

Don't Repeat Yourself for Bloggers: Dynamic Blog Context in LifeFlow

Customizing LifeFlow Quickly with Skins

Installing a Development Deployment of LifeFlow, a Django Blog Solution

BluePrint CSS makes LifeFlow look better, and easier to customize

Implementing Threaded Comments in LifeFlow

Status Update for LifeFlow

New Look for LifeFlow, Deployment on Dreamhost

lifeflow-editor

Release of LifeFlow Version 0.90

Improvements to LifeFlow Editor

Technical Aspects of the Life Flow Editor

lighttpd

Apache/Lighttpd Confusion

Creating my Dream Server for Django

literal

What's the inverse of literate programming.

load-testing

Braindump on Load Generation

lucene

Setting up CouchDB-Lucene on OS X

mahou

Extending Mahou; Gotchas and Snippets

Writing Mahou; a Cappuccino Image Search

mailbag

Mailbag: Should we just call them architects?

Mailbag: How to deal with unhappy users on your Internal platform?

Mailbag: Building alignment around a new strategy.

Mailbag: How to encourage good documents rather than perfect documents?

Mailbag: Advice for someone five years into their tech career?

Mailbag: Evolving your engineer career beyond the career level.

Mailbag: When your team wants your job, personal brand, and service registries.

management

Can senior leaders make friends at work?

Mailbag: How to deal with unhappy users on your Internal platform?

Measures of engineering impact.

The curious case of the missing regretted attrition.

How to present to executives.

Pacing and isolating change.

Tech Lead Management roles are a trap.

Interesting work happens at the edges.

Managing Staff-plus engineers.

Finding your Staff sponsor.

Renegotiating your first vendor contract.

Engineering strategy every org should write.

Surplus rules of engineering strategy.

Care and feeding for your engineering strategy.

Things that aren't engineering strategy.

A survey of engineering strategies.

Engineering strategy.

Performative leadership.

Promotion pathologies.

The Saint-Exupéry of metrics.

Some common hiring manager mistakes.

External office hours.

Where do Staff-plus engineers fit into the org?

Stuff I've learned about Diversity, Equity and Inclusion over the past few years.

Trapped in a Values Oasis.

To lead, you have to follow.

The rush to "show value."

Staff engineer archetypes.

Build versus buy.

Staying aligned with authority.

Getting in the room.

From one to two: how to start a successful distributed engineering office.

Interviewing senior engineering leaders.

Crowdsourcing CTO/VPE learning circles.

Share stories, not advice.

How to partner with an executive assistant.

Some rough notes on running learning circles.

How to build your company's engineering brand.

⭐ Your first 90 days as CTO or VP Engineering.

How to navigate and/or survive your acquihire.

"Good Process is Evolved, Not Designed" in 97 Things Every Engineering Manager Should Know

Mailbag: When your team wants your job, personal brand, and service registries.

"How to successfully design organizational processes"

"Do engineering managers need to be technical?" in Increment.

You only learn when you reflect.

Sending weekly 5-15 updates.

Nobody cares about quality.

Organizing team offsites.

Fostering program engagement.

Programs: tips for owning the unownable.

Path to engineering manager of managers.

Privilege's upward-facing window.

An Elegant Puzzle is released today!

Make timeline tradeoffs using iterative elimination tournaments.

Magnitudes of exploration.

Fire fixation.

Rules of thumb for org design.

⭐ How to evolve an engineering organization.

Paying the predictability tax.

⭐ Why limiting work-in-progress works.

Notes on Soul of a New Machine, Messy Middle, Crazy at Work, Company of One.

Growing with your company's complexity.

Meeting people.

An Elegant Puzzle: Systems of Eng Management.

⭐ Metrics for the unmeasurable.

Good process is evolved, not designed.

Defining policy, process and programs.

⭐ Infrastructure planning: users, baselines and timeframes.

Headcount dilemmas.

Talent distributions.

Capturing resources.

Career narratives.

Saying no.

Work the policy, not the exceptions.

Introduction to systems thinking.

Designing interview loops.

Communities of learning.

Time management: the leadership meta-problem.

Problem exploration, selection and validation.

⭐ Introducing SREs, TPMs and other specialized roles.

Career levels, designation momentum, etc.

Designations, levels and calibrations.

Make your peers your first team.

Presenting to executives.

Your hiring funnel.

Scaling consistency.

Book recommendations.

Succession planning.

Identify your controls.

Opportunity & Membership.

⭐ Sizing engineering teams.

Selecting project leads.

Writing strategies and visions.

Guiding broad change with metrics.

Goals and baselines.

My rails for engineering leadership.

The briefest of media trainings.

A case against top-down global optimization.

Staying on the path to high performing teams.

Where to stash your organizational risk?

Consider the team you have for senior positions.

Setting organizational direction.

Model, document and share.

⭐ Migrations: the sole scalable fix to tech debt.

Close out, solve or delegate.

Managing in the growth plates.

Notes from "Good Strategy, Bad Strategy."

How I write group emails at work.

⭐ Product management in infrastructure eng.

⭐ Inclusion in the first shift.

Vulnerability.

⭐ Cold sourcing: hire someone you don't know.

Roles over rocket ships, and why hypergrowth is a weak predictor of personal growth.

⭐ Engineering management stuff I learned in 2017.

Tools for operating a growing organization.

Running an engineering reorg

Partnering with your manager

Infrastructure between cost center and ego trip

Ways Engineering Managers Get Stuck

Finding Managerial Scope

⭐ Productivity in the age of hypergrowth.

You Should Take More Vacation

Running a Humane Interview Process

Healing a Burned Out Team

Your Philosophy of Management

Adding Value as an Engineering Manager

Company Culture and Managing Freedoms

Kill Your Heroes, Stop Doing it Harder

Social Hierarchies in Engineering Organizations

Hosting a Paper Reading Group

Slack and Hope for Middle Management

markdown

A Python-Markdown Extension for Embedding Graphviz

Cleaning up erlang_markdown

A Failed Stack-based Markdown Interpreter

ReST, Textile and HTML in Markdown

Don't Repeat Yourself for Bloggers: Dynamic Blog Context in LifeFlow

Cleanly Extending Python Markdown with Syntax Highlighting

memcache

The Django and Ubuntu Intrepid Almanac

Dreamier Dream Server with Nginx

Creating my Dream Server for Django

memos

More great memos.

mentorship

Mentoring from privilege.

metrics

The Saint-Exupéry of metrics.

Forecasting synthetic metrics.

⭐ Metrics for the unmeasurable.

Guiding broad change with metrics.

Goals and baselines.

microsoft

On The Causes and Cures of Malware

mod_wsgi

Measuring Single and Multi Server Performance

The Django and Ubuntu Intrepid Almanac

monocle-studios

Founding Monocle Studios.

Introducing a Tutorial and touchDefense

movie

Music Video? Movie? The 'Once' Dilemma

music

The Fate of Pop and Hip-Hop in 2008

Music From the iTunes Store, 1

Seeking Some Music I Can't Find

Some Biased Analysis of Music Videos

"You Are Beautiful At All Times" by Yppah

"Puddle City Racing Lights" by Windmill

newforms

Two-Faced Django Part 3: Newforms

news

Recycling Hacker Fear-Mongering

newsletter

Newsletter for Irrational Exuberance.

nginx

Measuring Single and Multi Server Performance

Rewriting Parameterized URLs with Nginx

Overview of Single vs. Multi Server Architecture

The Django and Ubuntu Intrepid Almanac

Dreamier Dream Server with Nginx

nj

I Live in New Jersey

node-js

Callbacks Are An Informal Pipeline

Porting Django's urlpatterns to Node.js

Log Collection Server with Node.js

notes

Notes on compliance tools.

objc

Finally Waving The White Flag to Objective-C 2.0

Reading XML Files on the iPhone

Touch Detection in Cocos2d iPhone

Cocoa Drag and Drop text into the Dock Icon

Opening Files With Associated App in Cocoa

Handling Files With CoreData

Assigning One To Many Relationships in CoreData

Filtering Arrays in Objective C

object-oriented

Tip Your Hat To Accessors And Mutators

once

Music Video? Movie? The 'Once' Dilemma

org-programs

Fostering program engagement.

Programs: tips for owning the unownable.

os-x

Using Automator to Scale Images Horizontally

Poor Wireless Connectivity for MacBook

Introducing Kappa, a Twitter Client

Epic PyObjC, Part 5: Resources and Farewell

Epic PyObjc, Part 4: Drag & Drop, Multiple Nibs

Epic PyObjC, Part 3: Browsing, Caching, Indicating

On The Causes and Cures of Malware

pattern

The Grand Migration.

perl

Intro to HTTP::Server::Simple::CGI

Prevent Cron Cancer With a File-based Mutex

XML::Twig for Large XML Files in Perl

XML::Simple for Non-Perlers

photo

Photographing Japan

A Picture of a Couple

php

Several Approaches to Versioning Files in PHP

Simple Unittesting in PHP

pil

A Photo Album with Python and PIL

pirsig

Context is a Parameter in Calculating Truth

pitance

How Pitance Versions Documents in CouchDB

Erlang Brush for SyntaxHighlighter

Pitance: Template and Snippet Infrastructure

podcast

Speaking and podcasts in 2020.

An Elegant Puzzle @ Software Engineering Daily

Elegant Puzzle press, reviews and podcasts.

Digg v4 @ Internet History Podcast

Infrastructure migrations @ Interestings

Infrastructure engineering @ Inside Intercom

poem

Our Yellow Woods, and a Story

postgresql

When psycopg2 Can't Import tz

The Django and Ubuntu Intrepid Almanac

Dreamier Dream Server with Nginx

Creating my Dream Server for Django

processing

Depicting Human Relationships

Visually Representing Word Structures

We're All Sinners and Cosiners

Circle and Line Diaspora

Spiral and Square

Visualizing Keyterms with BOSS and Processing

processing-js

Updates to Sparklines.js

Sparklines in Javascript With Sparklines.js

Updates to Processed Tower Defense

Processing.jsの使い方

Updating Processing.js Graphics via Ajax

Design of Processed Tower Defense

Three Processing.js Examples

Using Javascript to Control Processing

Getting Started with Processing.js

product

Notes on Escaping the Build Trap

Valuing already-solved problems.

Some delightful developer experiences in 2019.

Problem exploration, selection and validation.

⭐ Product management in infrastructure eng.

productivity

My skepticism towards current developer meta-productivity tools.

Developer productivity surveys.

Hotspotting developer productivity.

programming

Notes on Structure and Interpretation of Computer Programs.

protocols

The Redis Protocol is pretty great.

prototyping

Suffer Less By Using Django Dev Server as a Proxy

ptd

Deployment Scripts With BeautifulSoup

Processed Tower Defense 1.0

pyfacebook

Two-Faced Django Part 7: PyFacebook and FBJS Ajax

Two-Faced Django: Live install

Two-Faced-Django Part 6: PyFacebook

Two-Faced Django Part 1: Building a project that exists simultaniously on Facebook and the web

Using PyFacebook without the Facebook middleware

pyobjc

Releasing Kappa Source (PyObjC Twitter Client)

Naming and Casing Convention in PyObjC

Epic PyObjC, Part 5: Resources and Farewell

Epic PyObjc, Part 4: Drag & Drop, Multiple Nibs

Epic PyObjC, Part 3: Browsing, Caching, Indicating

Epic PyObjC, Part 2: Adding a Library & Bindings

⭐ An Epic Introduction to PyObjC and Cocoa

Writing to Application Support in PyObjC

Deleting From NSOutlineView With the Delete Key

How to Use Selectors in PyObjC

Cocoa Drag and Drop text into the Dock Icon

python

Using QR Codes in printed books.

Picking problems for programming interviews.

Testing Python projects for Google Cloud Run.

Distributing your Slack application.

Using Cloud Firestore to power a Slack app.

Make Slack app respond to reacji.

Adding App Home to Slack app in Python.

Creating a Slack App in Python on GCP.

HMAC SHA256 signatures in Python and Flask.

Quick tutorial on using GraphQL with Python.

Analyzing cross-service requests with Apache Beam.

War Card Game in Python

Extraction: Get Metadata from HTML Documents

Creating Multi-Worksheet Excel Docs with xlwt

Storing Bounded Timeboxes in Redis

Python Default Parameter Value Gotchas

Python Datastructures Backed by Redis

SuperFamily Relationships with Lazyboy

Tailing in Python

A Python-Markdown Extension for Embedding Graphviz

A Photo Album with Python and PIL

How To Remotely Admin Servers Via Twitter

Using Threadpools in Python

Stripping Illegal Characters from XML in Python

Huge CSV and XML Files in Python

The Subtle Joys of Generic Methods

A Command Line Tool for Loading CouchDB Documents

Parallel HTTP Requests in Python

Python-Brightkite for... you get the idea

Deploying Django with Fabric

R.I.P. Your Resume Site to Awesome

Setting Up Django-Rcsfield

As-You-Type Slug Uniqueness Validation

Intricate Static Websites With Django Templates

Sparklines.js Port to Python

Extracting Data From Google Analytics Reports

Epic PyObjC, Part 5: Resources and Farewell

Epic PyObjc, Part 4: Drag & Drop, Multiple Nibs

Epic PyObjC, Part 3: Browsing, Caching, Indicating

Epic PyObjC, Part 2: Adding a Library & Bindings

⭐ An Epic Introduction to PyObjC and Cocoa

An Introduction to Compassionate Screen Scraping

A Syntax Coloring Template Filter for Django

Python Content Scraper for OneManga.com

BossArray for list-like Yahoo search results

Stripping Reddit From HackerNews With BOSS Mashup

Search Recipes for Yahoo's BOSS in Python

JSON, Object Oriented Views, and Starting a Real App

Minimalism

Deployment Scripts With BeautifulSoup

Using Optional Parameters in Django Urls

Cleanly Extending Python Markdown with Syntax Highlighting

Accolades for Pygments 0.9

Using PyFacebook without the Facebook middleware

Adding Social Bookmarking To a Django App

Syntax Highlighting with MarkDown, and a pinch of Automagick for Django

Extracting Models From Django Datadump

How to Migrate Data Across Model Changes

Writing Custom Contexts for Django

qa

Usable QA Environments

redis

The Redis Protocol is pretty great.

Storing Bounded Timeboxes in Redis

IE's New Infrastructure and Writing Workflow

Python Datastructures Backed by Redis

Time to Load Redis Snapshots

Notes on Redis Memory Usage

reflection

Technical Debt and Peanut Butter Jars

Starting Again, Keeping It Simple

Reflections on a Year of Blogging and Japan

reliability

Incident response, programs and you(r startup).

Forecasting synthetic metrics.

Don't follow the sun.

reorg

Running an engineering reorg

rest

A Django Anti-Pattern, Rolling Your Own REST

rethinkdb

Reflection on RethinkDB

retrospective

Reflections on the Systems & Papers.

review

Notes on Escaping the Build Trap

Notes on Soul of a New Machine, Messy Middle, Crazy at Work, Company of One.

Notes on Structure and Interpretation of Computer Programs.

Notes on The Timeless Way of Building

Notes on The Pyramid Principle.

Notes on A Philosophy of Software Design.

Book recommendations.

Notes from "Good Strategy, Bad Strategy."

Seth Godin's The Dip.

Reading "The Nudist on the Late Shift" in 2008

"You Are Beautiful At All Times" by Yppah

"Building Scalable Web Sites" by Cal Henderson

"Puddle City Racing Lights" by Windmill

ruby

Refactoring Ruby programmatically.

Odors from Shoes Curious in OS X 10.4

Getting started with Shoes on OS X

Anti-Objects and Reflexive Decisions (repost)

rust

What's the inverse of literate programming.

scaling

QoS, Cost & Quotas

"Building Scalable Web Sites" by Cal Henderson

YouTube Scalability

scheme

Opinionated Programming Languages, The Huddled Masses, and Elitism

screen

Customizing screen and screenrc.

screen-scraping

Scalable Scraping in Clojure

An Introduction to Compassionate Screen Scraping

Python Content Scraper for OneManga.com

serverless

Serverless: Gatekeeping and Profit Margins

shoes

Odors from Shoes Curious in OS X 10.4

Getting started with Shoes on OS X

sisyphus

Writing, Analytics and Analysis

IE's New Infrastructure and Writing Workflow

Irrational Exuberance's Third Rebirth

sketches

Digital gardening at Exuberant Sketches.

skinning

Customizing LifeFlow Quickly with Skins

slack

Distributing your Slack application.

Using Cloud Firestore to power a Slack app.

Make Slack app respond to reacji.

Adding App Home to Slack app in Python.

Creating a Slack App in Python on GCP.

HMAC SHA256 signatures in Python and Flask.

slicehost

Leaving DreamHost

Upgrading from 256 to 512 megs of ram

Dreamier Dream Server with Nginx

Creating my Dream Server for Django

slides

Findjango Redesign & Slides for django-nyc

Slides from django-nyc on 11/18/2008

soel

software

Hard and Soft, Fluffy and Brittle

Using Our Own Software

software-engineering

⭐ Some of my favorite technical papers.

Technology Inheritance

Building a Software Deployment Pipeline

Company Culture and Managing Freedoms

Kill Your Heroes, Stop Doing it Harder

Configuration Driven Behavior

Social Hierarchies in Engineering Organizations

Building Technical Leverage

Hosting a Paper Reading Group

Comments on "Why Engineers Should Consider Formal Methods"

Paper Review of "Hints On Computer System Design"

Paper Review of "A Transaction Model"

Feedback Loops in Software Development

Skew, The Frontend Engineer's Misery

Technical Debt and Peanut Butter Jars

solango

Solango and Tomcat 6 on Ubuntu Intrepid

source

Releasing Kappa Source (PyObjC Twitter Client)

spam

Catching Lessons From Spam

sparklines-js

Sparklines.js Port to Python

Updates to Sparklines.js

Sparklines in Javascript With Sparklines.js

speaking

Speaking and podcasts in 2020.

Example Call For Proposals submissions.

"How to successfully design organizational processes"

"Investing in technical infrastructure"

"Paying Technical Debt at Scale - Migrations"

Speaking at QCon SF 2018 about migrations.

springsteen

Findjango Redesign & Slides for django-nyc

Findjango: A Django Search Vertical

Simplified django-springsteen Deploy on GAE

Deploying django-springsteen on Google App Engine

Reranking Results in django-springsteen

django-springsteen and Distributed Search

squeak

Tools, Languages, and Squeak

sre

Expanding on S[a-z]{3,} Reliability Engineer roles.

staff-eng

Mailbag: Should we just call them architects?

Self-publishing Staff Engineer.

Mailbag: Building alignment around a new strategy.

Mailbag: How to encourage good documents rather than perfect documents?

Staff Engineer.

Why not create a StaffEng Slack or Discord?

Early Edition of "Staff Engineer" coming Jan 31st.

StaffEng Updates, June 2020

April updates for StaffEng.

How do folks reach Staff Engineer?

Mailbag: Evolving your engineer career beyond the career level.

staff-plus

How to present to executives.

Weak and strong team concepts.

What do Staff engineers actually do?

Managing Staff-plus engineers.

⭐ Write five, then synthesize: good engineering strategy is boring.

Interviewing for Staff-plus roles.

Finding your Staff sponsor.

Engineering strategy.

⭐ Managing technical quality in a codebase.

Finding the right company to reach Staff Engineer.

Deciding to switch companies.

Being visible.

Staff projects.

⭐ Work on what matters.

Build a network of peers.

Staff promotion packets.

Create space for others.

Staff-plus interview processes.

Does the Staff title even matter?

Where do Staff-plus engineers fit into the org?

Picking problems for programming interviews.

Staff engineer archetypes.

Staying aligned with authority.

Getting in the room.

Learn to never be wrong.

Resources for Staff-plus engineers.

storage

Global secondary indexes.

stories

An interlude.

My career story.

Black Lives Matter.

Minding our stories.

⭐ How the Digg team was acquihired.

Founding Monocle Studios.

Rewriting the Yahoo! BOSS Datahub.

Landing in the JET Program.

⭐ Digg's v4 launch: an optimism born of necessity.

The Day I Broke Production

strategy

⭐ Write five, then synthesize: good engineering strategy is boring.

Engineering strategy every org should write.

Surplus rules of engineering strategy.

Care and feeding for your engineering strategy.

Things that aren't engineering strategy.

A survey of engineering strategies.

Engineering strategy.

syntaxhighlighter

Erlang Brush for SyntaxHighlighter

systems

Running systems library as Cloud Function.

Binder for hosting Jupyter notebooks.

Writing a reliability strategy: reason about complex things with system models.

System dynamics in a jupyter notebook.

systems-thinking

To innovate, first deprecate.

⭐ Why limiting work-in-progress works.

Binder for hosting Jupyter notebooks.

Writing a reliability strategy: reason about complex things with system models.

Modeling a hiring funnel with Systems library.

Introduction to systems thinking.

talks

Speaking and podcasts in 2020.

"How to successfully design organizational processes"

"Investing in technical infrastructure"

"Paying Technical Debt at Scale - Migrations"

tanka

Spring Haiku and Tanka

tech

Minding our stories.

techwriters

TechWriters community.

templates

Bad Ideas and Regular Expressions in Templates

testing

Simple Unittesting in PHP

Two-Faced Django Part 2: Models and Django Testing

thoughts

The Blogging Hypochondriac

Spoken Languages, Blub, and Convenience

On Writing

Midnight Philosophy in The Garden of Good and Evil

Using Our Own Software

Replacing the Karma Social Model with Whuffie

Changes from Living

Reflections on the old year, and the new one

Context is a Parameter in Calculating Truth

tla

Setting Up TLA+ Tools on OS X

tokyo

Picture from Hotel Room

touchdefense

Introducing a Tutorial and touchDefense

transactions

Paper Review of "A Transaction Model"

translations

Translating Entries into Other Languages with LifeFlow

travel

Visiting Kiyomizudera

Miyajima and Hiroshima

ubuntu

Solango and Tomcat 6 on Ubuntu Intrepid

The Django and Ubuntu Intrepid Almanac

Dreamier Dream Server with Nginx

Creating my Dream Server for Django

ui

Transcending Search-as-You-Type Stickiness

usability

Don't Make Me Defend Your Claims

web-callbacks

Proposal for Authenticating Web Callbacks

windmill

"Puddle City Racing Lights" by Windmill

winter

Music Recommendations & Snow Pictures

writing

Digital gardening at Exuberant Sketches.

How to be a tech influencer.

"Good Process is Evolved, Not Designed" in 97 Things Every Engineering Manager Should Know

"Do engineering managers need to be technical?" in Increment.

What I learned writing a book.

Elegant Puzzle press, reviews and podcasts.

An Elegant Puzzle is released today!

An Elegant Puzzle: Systems of Eng Management.

2018 in review.

Quick blogging update for October 2018

Braindump on approach to writing a technical book.

Experimenting with content and distribution.

Increment has launched.

Blogging as People

The Blogging Hypochondriac

You Only Learn the First Time

Advice to Programmers in College

Being a Local Maximum

Failing a Contract

Writing for Consumption

On Writing

4. Airplanes

3. Shuttle Busses

2. Traffic Jams

1. Beginnings

0. Introduction

Examining Web Analytics to Implement (repost)

Anti-Objects and Reflexive Decisions (repost)

A Comp. Sci Degree is What You Make Of It (repost)

Is the JVM the "next assembly"? I hope not. (repost)

Good to Great, Paul Graham and Ayn Rand (repost)

Reflections on Django (repost)

Finding Our Programming Flow (repost)

yahoo

Rewriting the Yahoo! BOSS Datahub.

yppah

"You Are Beautiful At All Times" by Yppah

yui

YUI Dialogs, IE z-index and Tragedy

The Magical Source of YUI Get's Power