A monkey in nurse's scrubs reads Polya's 'How to Solve It' while a bear and pirate look on.
When Planning, Plan

I got a lovely email from Gustavo Carvalho, in Brazil. It’s a professional question, not so much a technical question. I’m fine with those.

He wrote:


Did you ever set long-term professional goals? If so, how did you approach it? How did you set it up?

I’m having a really hard time thinking about it, especially when I need to think about the steps to achieve it.

I’ve set up something like: “Be a better Ruby/Rails developer”, “Be a great problem solver” or “Get promoted to Senior Software Engineer”, but I found them to be so vague and hard to break down into smaller steps.

I started then asking myself “why do I want to be a better Ruby/Rails developer?” or “what is my goal in being a great problem solver?”.

Funny enough, while writing this email it seems I started to make the right questions. When I set “where do I want to be in x years” I just need to change the question to “why do I want to be there? How?”. But even so, when I jump in to write about it, tons of thoughts start to flood my mind, and then I don’t even know where I want to be in the next 5 - 10 years.

Sorry for this weird email out of nowhere, but when I was writing my long-term goals down your name came to my mind: “Hmm… I wonder if Noah experienced something like that in his career… Why not ask him?”. So here I am.


Here’s roughly what I wrote back:

These are very reasonable questions to have. And yeah, I definitely do the same thing.

It sounds like you’ve figured a lot out while writing. As you say, turning it into something more specific tends to help a lot. Vague goals – dreams, really – are a starting place, not an ending.

For myself, it’s usually about the what and the why. Do I want to make more money? That’s doable, and I can plan around it. Do I want to be more listened-to? My job can’t usually do that, but my hobbies can, and I can plan around that too.

I spent a long time trying to get to “the next level” after senior engineer, back when staff/principal wasn’t as well-known a thing. And I basically wandered around the senior-and-above org chart, trying one thing and then another. I was an architect, a tech lead, a manager and a few other things. The “get to the next level” part wasn’t spelled out well, and so I had trouble with it. But each smaller sub-goal was doable, and I basically did them by switching role and/or company one after another.

I wanted to keep working on open source software for a living but making good money. In some ways I stumbled into that. But I did it multiple times so perhaps I know something useful about it. Partly: keep your eyes open. If you know what you want then you know where to look, and you’ll know it if you see it. I’m looking for open-source work, so I often say, “what companies produce interesting open-source software? Who at those companies works on it? Do they do it on company time?” and similar. It’s the same idea as “if you want to be a director/manager/CEO/etc, go see how the current people got there.”

Also keep in mind the similar-but-different question, “what would need to be true for this to happen?” If I was going to get paid to work on open-source, somebody would have to believe I was competent to do it. How would I help them believe it? What made me believe that about people in similar positions already? Writing my book was really good… and I also turned it into a few other things like giving more talks, getting paid for a few workshops, a reasonably successful Twitter following. It’s not that any of these things was necessarily huge by itself. But by having small, specific goals I could keep adding little interesting things. I also knew what small projects would count as “interesting.” Amy Hoy calls this “stacking the bricks.” It’s a good way to think of it. Figure out what counts as a “brick” – as small progress toward your own specific goal.

At the moment I feel like I have most of what a professional job can give me. I make good money, and the only way to increase it much would be to move to a bigger company. And Shopify’s not that small. I have an excellent reputation, and a lot of it is independent of my employer. In fact it kind of goes the other way: if I want a better reputation inside Shopify, the path goes through getting better-known outside Shopify.

So what am I doing? I’m big enough that the Ruby community is starting to be too small. I still love it. But I’m already on the short list of well-known people. It’s no good trying to wrestle my way a few more places to a slightly better position. It’s time to be looking outside that community too, where there’s an enormous amount of space and headroom.

Why do I care? A few reasons. I’d like to be sufficiently well-known that I can make great money doing weird stuff. The career path that folks like Bret Victor and Alan Kay have, for instance – I tend to think of it as “mad scientist.” Or “skunkworks engineer” would be another variation on the same idea. And I want that because I love directing myself, and because I want to talk to the other people who do that. Those are the peers I want, and they’ll need a reason to think I’m worth talking to. So I’m doing the work. YJIT is a great step in that direction, but not enough by itself. Rebuilding Rails was a great step. Mastering Software Technique, great step. Some recent talks that are not all tech, great step.

So what’s the next concrete step? Well, right now that means writing something that’s less specifically about Ruby. The book I’m halfway through writing is called Rebuilding HTTP. It’s very clear how I’ll market it to my Ruby folks, and it’s written in Ruby (at least, the first edition is only Ruby!). But understanding HTTP has enormous appeal outside the Ruby community. Rebuilding Rails is about as big as it’s getting in Ruby-land, to within a 2x-10x multiple. But HTTP is a thousand times as big, or more. I won’t get to 1000x this year or next year, but I don’t have to. I’ll grow a lot faster with that much headroom.

As Obi-Wan put it, the first step into a larger world. I’m pretty constantly stepping into larger worlds. It’s been a great path over the years.

So: clear, specific goals. Know what you want and why you want it. Keep your eyes open for opportunities. Keep doing things, large and small, on your own.