A year ago, I founded Ministry of Velocity to build the consulting company I wanted to work at. Overall, it’s been a good year. I’ve spent roughly half my time pairing with developers at client companies, leveling up their teams. The other half has been longer-term community stuff like conferences, writing, and open source.

In the course of the year, I discovered three interesting things:

First, I really like refactoring large codebases. I’ve gathered that for normal people, these projects are a punishment. But I love looking other people’s code. Usually I learn more about people from their code than the other way around.

Second, the half-and-half mix of project and community work is pretty amazing. It keeps my head in real-life-development-land, while giving me time to reflect and write and work on the community stuff I think is important. I am so, so grateful to be where I am.

Third, running a company is not for me. This was the hardest realization to come by, and the saddest. Right now I’m doing too many things; I would like to do fewer things, but be better at them. And there’s a lifestyle mismatch, too. What the Ministry really needs right now is more time on client work, and less time on community work. Given even just my current commitments, though, that’s not in the cards for me.


The Ministry and I are parting ways. Friday September 12th is my last day. It breaks my heart, but of course they’ll go on without me. Doc Ritezel, my co-founder, is a great developer and also human being, and I look forward to seeing the Ministry continue to grow and thrive without me.


Of course I have them. Come Monday September 15th, I’m delighted to be joining Chicago-based Devmynd Software as Chief Consultant. I’ve known the founders, Brad and JC, for a while now, and I’m excited by how much our philosophies and ways of working overlap. They’ve built a fantastic team that I’m really looking forward to working with.

Logistically speaking, I’m staying in San Francisco, doing consulting, teaching, and writing around here, pretty much like I have been. However, those of you in Chicago will be seeing more of me than you did before.

But not to worry – the Devmynd folks have already issued me the standard California advisories: that a hoodie does not constitute a “real” coat, and that sometimes I won’t want to wear sandals. Which, ha ha ha! Midwesterners are such jokers!

But just in case…maybe when I come out in November, I’ll bring two hoodies.


Programming Is Not Math

When I learned to program, back when dinosaurs walked the earth and the internet had no cats, there was an idea: if you were good at math, you’d be good at programming. I was great at math as a kid, but perhaps because I didn’t like it much, no one steered me towards programming. I came to it accidentally, in college, when I took an elective programming class because it fit my schedule.

So my first programming language was Fortran, an abbreviation of “Formula Translation.” As you might expect from the name, the projects in the class were exciting things like estimating the area under a curve using rectangles, like you see in the diagram below.

The Riemann Sum.

The Riemann Sum. Thanks to H.J. Keisler.

Doing Riemann sums in Fortran is about as math-oriented an introduction to programming as you can get.

And I loved it. SO MUCH!

That same quarter, I was taking my first Japanese class. Towards the end of the term, when I was getting ready to change my major to computer science because PROGRAMMING FUCK YEAH, I thought briefly about how similar the two classes felt. In both cases, I was coming into a culture I didn’t understand or feel part of. I was learning the mechanics of communicating, while at the same time trying to gain enough cultural knowledge to feel at ease.

But I knew – and everyone knew – that programming was like math. So clearly, I was good at Fortran because I was good at math.

Now, almost twenty years later, Read more »

What Your Conference Proposal Is Missing

As a developer, doing talks at tech conferences is great for lots of reasons: boosting your career, promoting your company, and getting more excitement into other parts of your life. As an introvert, though, the best perk as far as I’m concerned is the stream of people who come up and talk to me. No more awkward unstructured break time!

I’ve done almost 30 conference talks since 2009, but I still remember how hard it was to figure out at first. The biggest mystery in the whole process, for me, was responding to a Call For Proposals (CFP).

When a conference has an open CFP, even if you’ve thought of some topics you want to talk about, it’s not obvious how you translate that into a title, an abstract, and a description. I’ll talk about those three here. Sadly, I still have no idea how to write a speaker bio, so you’re still on your own for that. Read more »

Why You Should Never Use MongoDB

Disclaimer: I do not build database engines. I build web applications. I run 4-6 different projects every year, so I build a lot of web applications. I see apps with different requirements and different data storage needs. I’ve deployed most of the data stores you’ve heard about, and a few that you probably haven’t.

I’ve picked the wrong one a few times. This is a story about one of those times — why we picked it originally, how we discovered it was wrong, and how we recovered. It all happened on an open source project called Diaspora. Read more »

How To Prevent Inappropriate Presentations

This weekend there was another inappropriate presentation at a technology conference. This is sadly not a new phenomenon. But in my work with RailsBridge over the last four years, I have found the secret to preventing these types of talks.
Read more »

How Diaspora Connects Users

Note: this is the first in a series of technical posts about Diaspora’s software architecture and code, and is a slightly modified version of the original on the Diaspora blog. If you have topics you’d like to see covered in future installments, please let me know.

A single installation of the Diaspora software is called a pod. The Diaspora distributed network is made up of hundreds of these pods, each with a set of users – sometimes just one on an individual pod, sometimes tens of thousands on a community pod. Each pod is run by a different person or organization. But no matter what pod you sign up on, you can connect with users on any other pod.

When you have friends on different pods, your stream seamlessly mixes updates from remote friends with updates from friends on your pod. In this way Diaspora is a distributed social network that resembles, from the user’s perspective, a centralized social network.
Read more »

CruiseControl.rb and RubyGems 1.5.2

Diaspora uses CruiseControl.rb to run our continuous integration server. CC.rb is on Rails 2.3, but the applications it’s building are on Rails 3, which means I occasionally run into … weirdness.

Last week, for example, I wanted to speed up our builds by upgrading Bundler to 1.0.10 and RubyGems to 1.5.2. Because of the new partial caching of the dependency graph, the upgrades shaved two whole minutes off the build locally, and I wanted to get that on CI.
Read more »

Running Cucumber Features Without a Display

I’ve been helping out with the Diaspora project, an open source social network that gives you control over your own data.

When I first started poking around the codebase a few months ago, they’d just started writing a few cucumber selenium integration tests – which of course I want to encourage! – but they weren’t running them on their continuous integration box. And if you aren’t running them on CI, you can’t really call them tests…

It’s not that the developers were lazy; it’s just that Diaspora’s CI box is an ubuntu server instance that doesn’t even have xwindows. There’s no way to attach a display, and without a display, a browser won’t run. So how can you run selenium features that have to actually open a browser window and click on stuff?
Read more »

Disalienation: Why Gender is a Text Field on Diaspora

A few months ago, I started contributing to the Diaspora project. I began by refactoring their test suite and setting up a continuous integration server. Then I installed Jasmine and started mucking around with the JavaScript. That was all pretty straightforward.

A few weeks ago I made a slightly more controversial change.
Read more »

Speak Ruby in Japanese

I’ve studied Japanese on and off for more than ten years – mostly “off.” I took a year of language when I was in college, but since then it’s just been periodic classes at Soko Gakuen in San Francisco.

I managed to pass the JLPT level 3 a few years ago, so in Japan last month, I was decent at ordering food and navigating the subway. But I quickly discovered that I couldn’t really talk to another programmer. None of my classes even taught me how to say “programmer,” let alone “code,” “object,” “method,” “development environment”… Read more »