Are you frustrated at work?
Try Harder, Do Better, Grit & Bear It, Build Character, Nothing Worth Doing is Easy, etc…
These all seem intuitively useful for things like… I dunno… high-school sports. Here are characteristics of high-school sports that make this advice applicable:
- Time constraint: 4 years
- Some expectation of fairness
- Low opportunity-cost: what else are you going to do after school?
Early in your career, none of these constraints exist:
- No time-constraint: your career should be several decades long
- No expectation of fairness: to phrase it optimistically, some soil is more fertile than elsewhere
- Very high opportunity-cost: you can spend your time lots of ways, some are much more valuable than others (although it’s not always obvious which is best)
Most people have an exaggerated sense of loyalty to their employers, and this has a negative impact on their career growth & personal happiness. I think that a slight adjustment to the I-should-quit-now threshold early on will yield incredible benefits with almost no negative side-effects.
Career growth is non-linear, specifically in 2 areas:
1) You get diminishing returns on how much you learn very quickly at your first few jobs – like, after a few weeks. This statement is polarizing, but I stand by it.
2) You are significantly more effective (both technically & organizationally) after you’ve worked on multiple teams with wildly different values.
For instance, some product companies want to quickly provide value to customers, while software development agencies charge hourly for software development & have different incentives for “efficiency”. Among agencies, some are small, scrappy, and provide incredible opportunity for a junior dev to do critical work on big projects. This comes at the expense of stability, and often results in unmaintainable code… but maybe that’s fine!
I’ve worked at product companies where code-review was rigorous & lots of time was spent writing unit tests, integration tests, and documentation. There are other companies where any of these things would have been at least a waste of time, and often people would find it downright offensive to review their code or write tests, as if you didn’t trust them.
There are more subtle lessons to learn, especially around establishing a healthy team culture & learning how to build trust.
Early in your career:
- When you stop learning, start quitting
- When in doubt, quit
- Don’t fight uphill battles, just leave
- When the goin gets tough, the tough get goin… out the door… to greener pastures
Later in your career:
- Learn how to grow a team around you
- Take the time to build trust & effect organizational change
Early in your career, you’ll lack the wisdom / conviction / experience / perspective to recognize problems, suggest solutions, negotiate for them, implement them, & iterate on them. Specifically, it’s difficult to get buy-in for your solution from anyone higher-up in the org. Maybe they’re wrong, maybe you’re wrong, maybe you’re just bad at communicating – the best way to learn is to first gain a breadth of experience (by quitting a lot). This makes you wiser & more effective later when you decide to invest deep amounts of time into a single team.
In the same way that you get diminishing returns on staying early in your career, you get diminishing returns on bouncing around later.
The caveat to these learn-a-ton jobs is that some of the later, high-value lessons take an increasingly long time to learn – especially lessons related to managing people. These tenures are important opportunities to make deep friends, because when these co-workers go start a company, they’re only going to choose 1 or 2 co-founders, and these are more likely to be great business partners than the friends you met at your first job.
Are There Shortcuts?
Yes, but they come with tradeoffs:
Join an agency. You’ll be exposed to a large variety of clients, but the tradeoff is that you’ll generally be following the agency’s same process for each client, and you won’t learn as much about each company as you would being an employee (your incentives are a little skewed towards billable hours, and you might not even get that much face-time with the client as a junior).
Interview at lots of companies. It’s a great way to look under the hood. Again, there’s a trade-off: you’ll get rose-colored insights into how the company works (our team acts like a startup within the larger organization, etc…)
Work at a big company with lots of different departments, and change teams often. You can learn a large variety of topics (frontend dev, backend dev, etc..), but it will all be flavored the same, and you’re unlikely to get as much variation in culture / values etc…
You learn more by doing, so just do what interests you, when it interests you.