Where should great programmers choose to work?
[I say 'choose' because anyone who has worked with programmers understands that the great ones are worth far more than the average ones. Sometimes 50 times as much. That's because great programmers are able to architect systems that are effective, that scale, and that do things that other programmers can't imagine until after they're done.]
While this is a post about people who work to become great programmers, I think it applies to most fields, including sales and design.
Many programmers are drawn to famous, hip, growing tech companies. There are literally tens of thousands of programmers working at Apple, Google and Facebook, and each company receives more than a thousand resumes a day.
It might not be a great choice, though. Not for someone willing to exchange the feeling of security for the chance to matter.
The first challenge is freedom: Not just the freedom to plan your day and your projects, but the freedom to try new things, to go out all the way out to the edge, to launch things that might not work.
A key element of freedom is control. Controlling what you work on and how you do it. If you are part of a team of a hundred people working on an existing piece of software, you will certainly learn a lot. But the areas you have control over, responsibility for, the ability to change—are small indeed.
The team that built the Mac (arguably one of the most important software teams in history) was exactly the right size for each member to have freedom and control while also shipping important work.
Alas, when an organization gets bigger, the first technical choice they make is to build systems based on programming jobs that don't need brilliant engineers. The most reliable way to build a scalable, predictable industrial organization is to create jobs that can be done by easily found (and replaced) workers. Which means less freedom and less control for the people who do the work, and more freedom and more control for the organization.
When faced with the loss of freedom and control, many talented people demand an increase in security and upside. That's one big reason (irony alert) that fast-growing companies go public—so they will have the options currency to pay their team handsomely, which puts the future of the company in the hands of Wall Street, which will happily exchange stock price growth for the banality of predictable. This, of course, leads to programmers losing even more freedom and even more control.
It's entirely possible that an industrialized organization is going to change the world, but they're going to do it with you or without you.
The alternative, as talented outliers like Marco Arment have shown us, is to take a good idea (like Tumblr or Overcast) and make it into something great.
The challenges here are that finding a great idea is a lot of work (and a distinct skill) and making it into a company that succeeds is a lot of work as well. Programmers who do both those jobs are often left fighting for the time to do the programming they actually love to do. (Mark Zuckerberg decided to give up serious programming at Facebook, Dave Filo chose not to at Yahoo).
The alternative? Be as active in finding the right place to work as great founders are in finding you. The goal might not be to find a famous company or even a lucrative gig. Instead, you can better reach your potential by finding the small shop, the nascent organization, the powerful agent of change that puts you on the spot on a regular basis.
This is a lot of work. Not only do you need to do your job every day, and not only do you need to continually hone your skills and get ever better at your work, but now you're expected to spend the time and energy to find clients/bosses/a team where you are respected and challenged and given the freedom and control to do even better work.
If I were a great programmer, I'd be spending the time to figure out what I'd want my day to look like, then going to events, startup weekends, VC firms and other places where good idea people are found. The best jobs might be the most difficult to find.
Bernie Taupin needed Elton John as much as John needed Taupin.
You can't get away with this strategy of self-selection if you're simply a good programmer. It won't work if you don't have a point of view about your craft and if you need management supervision in order to ship great code. You need to build a trail that proves you're as good as you assert you are. But those are all skills, skills worth acquiring in an age when they are worth more than ever before.
Once you have those chops, though, the onus is on you to choose not to be a cog in a well-oiled machine that will rob you of freedom and control, not to mention the personal development and joy that come with a job where you matter.
To be really clear, it's entirely possible to be a great programmer doing important work at a big company. But those companies must work overtime to create an environment where systems-creep doesn't stifle the desire and talent of the best people on the team.
The naive person wonders, "how come so many great architects build iconic buildings early in their career?" In fact, the truth is:
doing the work that earns a commision for an iconic building makes you into a great architect.
Michael Graves and Zaha Hadid didn't wait for someone to offer them a great project. They went and got it.
[If this resonates with you, I might have precisely the right gig for the right programmer. You can read the details here. If you know someone, please share.]