No matter what you do, work is frustrating sometimes. More broadly, life is just full of challenges. Growing up in Alabama, I was taught a single, noble way of dealing with these challenges:
- Try harder
- Do better
- Grit & Bear It
- Build Character
- Nothing worth doing is easy
In fact, it was considered bad to try & out-think life's challenges, or to cleverly avoid hard work. At the time, I bought in 100% to this idea, and took great pride in my self-discipline. However, I've had to undo a lot of that programming as an adult.
I frame it this way: as long as you trust that the system around you is optimal, it makes sense to hunker-down. However, if the people around you have complicated incentives, then critical thinking is really important.
For example, in high-school sports, it can be very beneficial to just shut up & drink the kool-aid:
- Low opportunity-cost (what else are you going to do after school?)
- The coach's primary goal is to help you develop as a person
- There is some expectation of fairness -- literally a "level playing field"
Given this, there is little risk to just "trust the process". I did this with high-school football, and it was incredible. I was not a great player -- but I just did what the coaches said, all the time, without running it through any critical-thinking filter in my head. I pushed myself further than I ever thought possible, and my work-ethic improved as a result.
Like all powerful forces, this suspension-of-suspicion is a double-edged sword. It can create a misguided sense of loyalty and discourage your ability to think rationally. I've seen this first-hand in college, where many trade the camaraderie of a sports team for the brotherhood of a fraternity. This blind buy-in involves drinking a more literal type of kool-aid, and groups of people often make terrible decisions with immediate negative consequences.
After college, I've noticed many of my classmates have committed to employers that are dangerous in more subtle ways. While there is no immediate danger to working a sub-optimal job, I think that people tend to take waaaay too long to quit their first job, and this has a significant affect on their career trajectories (not to mention their well-being).
I think the stress comes from this mindset:
- I need to prove that I can hold a job
- This isn't a "bad" company, so if I don't succeed here, it's because I'm somehow "bad"
- Nobody will hire a quitter
- A good person would stick it out
- If I work harder, my situation will drastically improve
^^ This mindset is toxic. We're not playing high-school sports anymore:
- There is a near-infinite opportunity-cost. You could live ANYWHERE and do ANYTHING
- Your manager, and the company as a whole, has many incentives more important than developing you
- There is NO expectation of fairness, some people get more for less just because of who they are
This doesn't mean that every company is bad -- far from it! My point is that you should always be willing to reconsider the investment of your time (and your life) into a company, especially early-on. It's naive to try and apply binary labels like "good" or "bad" to complicated systems (and people), so you should get comfortable holding a more nuanced position, and doing so shamelessly.
It genuinely breaks my heart to see some of my old engineering classmates still working for the same company they started at after college, who at this point can't really be effective in any other company without a super-human effort to reprogram themselves. After graduation, they got a job, and they trusted that job was what they were supposed to do, and after work they went home and had a good work-life balance. They were smart, humble people that trusted the system around them, and worked exactly as hard as their teachers & managers told them to, and now their life is deeply entrenched in a specific trajectory.
Occasionally, people love that trajectory & their life is just hunky-dory. More often, these people are complainers -- they encounter problems at work that can't be out-worked (never getting promoted, lack of resources, bad management, etc...). By the time they realize the system around them is inefficient & throwing them problems they can't really solve, they have a mortgage, maybe a family, and are apparently stuck in a town with relatively limited career opportunities.
The only reason this isn't the case for me is basically a stroke of luck. I was applying my high-school-football work-ethic to a computer engineering degree at Mississippi State University for 2 years, and my 4.0 GPA earned me an internship at a huge telecommunications company that didn't generally recruit from my school. During the internship, several middle-aged people opened up & mentored me with all the common wisdom.
Then, the company laid off 10,000 of these people.
I learned a lot during that internship.
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:
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.
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.
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.