You have to know how to drive the car
There are lots of different ways to be a software engineer. You can grind out code for twelve hours a day to make the world a better place. You can focus on glue work: process-based work that makes everyone around you more successful. You can join the conversation with your product manager and designer colleagues to influence what gets built, not just how it gets built. You can climb the ladder to staff engineer and above, or you can take it easy and focus on your hobbies. But whichever of these you choose, you have to know how tech companies work.
I want to credit Alex Wennerberg for drawing out this point in our recent discussion. Wennerberg thinks I spend too much time writing about the realpolitik of tech companies, and not enough time writing about value: in his words, the delivery of software “that people want and like”. The whole point of working in tech is to produce value, after all.
To me, this is like saying that the point of cars is to help you reach goals you care about: driving to the grocery store to get food, say, or to pick up your partner for a date. That’s true! Some goals you can achieve with cars are better than others. For instance, driving to your job at the Torment Nexus is much worse than driving to your volunteer position at the soup kitchen. But whatever you want to do, you have to know how to drive the car.
Let’s walk through some examples. Suppose you’re an ambitious software engineer who wants to climb the ranks in your company. You ought to know that crushing JIRA tickets is rarely a path to promotion (at least above mid-level), that glue work can be a trap, that you will be judged on the results of your projects, and therefore getting good at shipping projects is the path to career success. You should therefore neglect piece-work that isn’t part of projects you’re leading, grind like a demon on those projects to make sure they succeed, and pay a lot of attention to how you’re communicating those projects up to your management chain. So far, so obvious.
Alternatively, suppose you’re an unambitious software engineer, and you just want to take it easy and spend more time with your kids (or dog, or model trains). You probably don’t care about being promoted, then. But you ought to be aware of the dangers of glue work, and of how important projects are. You should be carefully tracking the spotlight, so you can spend your limited amount of effort where it’s going to buy you the most positive reputation (while never having to actually grind).
Finally, suppose you’re a software engineer who wants to deliver value to users - real value, not what the company cares about right now. For instance, you might really care about accessibility, but your engineering organization only wants to give a token effort. You thus probably want to know how to build up your reputation in the company, so you can spend that credit down by doing unsanctioned (or barely-sanctioned) accessibility work. You should also have a larger program of accessibility work ready to go, so you can “catch the wave” on the rare occasion that the organization decides it cares about accessibility.
Not knowing how to drive the car can get you in trouble. I have worked with ambitious software engineers who pour their energy into the wrong thing and get frustrated when their promotion doesn’t come. I’ve worked with unambitious software engineers who get sidelined and drummed out of the company (though at least they tend to have a “fair enough” attitude about it). I’ve worked with many engineers who had their own goals they wanted to achieve, but who were completely incapable of doing so (or who burnt all their bridges doing so).
The only way to truly opt out of big-company organizational politics is to avoid working at big companies altogether. That’s a valid choice! But it also means you’re passing up the kind of leverage that you can only get at large tech companies: the opportunity to make changes that affect millions or billions of people. If you’re going after that leverage - whatever you want to do with it - you really ought to try and understand how big companies work.
If you liked this post, consider subscribing to email updates about my new posts, or sharing it on Hacker News. Here's a preview of a related post that shares tags with this one.
I'm addicted to being useful
When I get together with my friends in the industry, I feel a little guilty about how much I love my job. This is a tough time to be a software engineer. The job was less stressful in the late 2010s than it is now, and I sympathize with anyone who is upset about the change. There are a lot of objective reasons to feel bad about work. But despite all that, I’m still having a blast. I enjoy pulling together projects, figuring out difficult bugs, and writing code in general. I like spending time with computers. But what I really love is being useful.
Continue reading...