Skip to content

Instantly share code, notes, and snippets.

@markthomas93
Forked from Riizade/career-advice.md
Created June 9, 2022 21:54
Show Gist options
  • Save markthomas93/fb2f47162793ef9491819bb6a93baf15 to your computer and use it in GitHub Desktop.
Save markthomas93/fb2f47162793ef9491819bb6a93baf15 to your computer and use it in GitHub Desktop.
A compilation of my career advice for students, new grads, and to some degree even experienced individuals in the software development field.

Optimize for happiness.

Not for salary, not for status, not for "career growth". All of those things are just proxies for things people think will make them happy. Sometimes the best job you can have is a "rest and vest" position working 5 hours a week (not exaggerating, I've been there).

Always think about a job (and anything else) in terms of tradeoffs. How good is the food in the area? Can you enjoy your favorite hobbies in the area (skiing, camping, sports, esports, scuba, surfing, etc)? Will you have time for your hobbies? Can you walk to work? Do you have friends at the company/in the area?

Trying to tie a dollar amount to the above is usually a fool's errand, but generally once you're making $100k+/yr even a substantial pay increase is not worth a noticeable decrease in quality of life elsewhere.

Negotiation is more important than you think.

Read this wonderful blog post by patio11. https://www.kalzumeus.com/2012/01/23/salary-negotiation/

Evaluate companies qualitatively.

Shitty companies thrive on information opacity. When you get an offer, you'll know the compensation and probably the team and/or project, and it's easy to compare offers and see "Company A pays $165k and I'd work on self-driving cars" and "Company B pays $150k and I'd work on point-of-sale software", but this is far from the whole picture.

Before you accept an offer, ask to have lunch with your potential team. Make sure you like the people and the vibe, because that will affect your happiness way more than higher compensation.

If the company says you can't meet the team/have lunch, that's generally a red flag, because they absolutely can and it's such a simple request that denying it means they don't value you as a candidate. And if they don't value you as a candidate, they certainly won't value you as an employee.

Make sure you have a good idea of how long your workday will be (including your commute), how much vacation people are able to take, if there are on-call rotations, the general stress level, level of collaboration/friendliness, etc.

Recognize unhealthy work culture.

I was yelled at by a manager on a Friday night in front of my partner at the time. There was swearing and insults. I brought it up to upper management and was told "he's just old school", "well, you did make a mistake, you're not blameless", and "maybe try to look like you're working harder".

I left that job and burned some bridges along the way. Those bridges were absolutely worth burning. There were signs before this that I should have heeded. Yelling in a workplace is not okay. Gaslighting and guilt-tripping in a workplace is not okay. In general, people often spend as much or more time at work than they spend with their significant others, being in an especially toxic environment will affect your health.

This is especially relevant for startups or small companies. Being in a "high-stress environment" is not an excuse for treating other people poorly.

Promotions/raises are random.

Despite what managers and employers will tell you, hard work and impact are not the primary inputs to promotions/raises. Budgets are assigned at a high level based on strategic priorities of the company. Managers can only spend so much budget, and often that budget is shared between infrastructure costs, new headcount, existing salaries, promotions, bonuses, and other miscellaneous costs.

At one position, I asked for a promotion and was told to accomplish a list of X things. I worked hard, I worked extra hours, I learned new skills, and I completed the list. I asked again for the promotion and was told "maybe next cycle". That next cycle, our department had a large budget increase and something like 50% of engineers in our department got a promotion, some of which were promoted to the same new position as me with less experience, less tenure at the company, and (subjectively) far less impact.

Do enough to be on-par with engineers at the same level as you, but don't try to be a "rockstar" or "10x engineer". At best, you're likely to be promoted only slightly faster than your adequately-performing peers. Even if you do get promoted quickly, it's almost certainly worth less monetarily than if you had been paid overtime wages for the extra time you worked. Working extra hours and devoting energy to your job causes you to sacrifice a lot more than you might realize in terms of health, stress, free time, relationships, etc. Remember to always optimize for happiness.

Regularly record your wins.

Take a look at all the code you've written at the company. Go through your version control UI and take screenshots or save the HTML pages. Send them to your personal email (do not use your work email to send it, I recommend signing into a dummy email account on a separate brower then using the dummy email to send the files to your actual email account). Record documentation you've written. Write documents just listing your accomplishments.

Doing this helps fight impostor syndrome by helping you realize that you are completing way more work than you think you are. It also feels good to look at your accomplishments. Write a list and send it to your manager before performance review season. Use the records to update your resume when looking for a new job.

In general, during performance review cycles, people reach back into their memory and try to remember the big things they worked on. They invariably forget small tasks that had huge impact, and sometimes even large projects that for whatever reason they haven't thought about in a while. Methodically recording your productivity will give you a much stronger argument when it comes to promotions (or in the unfortunate case of defending your work against a potential PIP, dismissal, etc).

I recommend doing this every 3 or 6 months, or just before each performance review season.

Titles mean nothing.

Never accept a promotion that comes without a salary increase. Companies will generally not give you a large outside-promotion raise for any reason, meaning in general, getting a promotion without an accompanying salary increase actually lowers your salary growth over time.

FAANG companies regularly hire employees from smaller companies with titles like "VP of X" or "CTO" as entry-level or mid-level engineers because titles just don't matter. Don't make the mistake of thinking a fancy title will help you get a better job at another company later. What matters is what you're actually working on and how you can sell the narrative.

Don't be afraid to leave a company for any reason at any time.

I left a company after 1 month because everyone in my direct reporting chain above me had never written a single line of code (among other red flags). I moved from Bellevue, WA to San Francisco, CA and paid back a $10,000 starting bonus. I doubled my salary ($84,000 to $165,000) and had a much more fun job.

I left a different position with less than two weeks' notice, and I was even fired from an internship.

I've had people tell me variations on the following:

  • "company loyalty is worth a lot"
  • "you're burning bridges"
  • "who would hire someone who quit so quickly?"
  • "they might not be good references if you quit like that"

But I've yet to have anyone call my previous employers for reference purposes or care in any way about these things.

If push comes to shove, leave it off your resume and say something vague about a "gap year" or "personal projects".

Of course, this advice isn't completely applicable if you have visa considerations or golden handcuffs, but the core sentiment is that company loyalty actually has negative value over time due to salary increases that come with switching jobs.

From a moralistic/fairness standpoint, the company will never extend the same loyalty to you. The moment you become a liability to them they will fire you with 0 notice. If leaving would impact your teammates' workload, that's a planning and staffing failure from your leadership, and it's not your responsibility to stay because of their mistakes. Don't let the company's mistakes guilt you into staying longer than you'd like.

Every company's purpose is profit.

Do not believe anything a CEO or recruiter says about a company's "mission". Lyft says they want to make a greener society (less carbon emissions), but they and Uber have undone all of the emissions gains US metro areas have made in the last 30 years. If their mission is to make the world greener, they'd just dissolve immediately, but they would obviously never do that. Coinbase says they believe in cryptocurrency, but if they could increase their profits 20% by taking an action that harms the cryptocurrency ecosystem in a way that won't come back to harm them, they would undoubtedly make that tradeoff every time. Public companies in the USA actually have a legal obligation to maximize profit. Taking an action that optimizes for something else can actually be considered securities fraud, and they can be sued by their shareholders.

All of the above to say that if you're passionate about, say, cryptocurrency, consider joining a big, slow organization like Google or Salesforce and then spending your free time contributing to open-source libraries and tools. Don't let large companies exploit your passion for profit. Companies don't actually care about whatever it is they claim to care about, and there are hundreds of ways to explore your passion without having it squeezed out of you for someone else's profit.

Take breaks.

I'd recommend roughly every 2 years, switch companies and take 2-6 months off between jobs. Evaluate what's important to you, catch up on stuff you've been wanting to do, and relax. This has the added benefit of a higher salary increase, because switching companies will almost always yield a higher salary increase than staying at a company. If a company is really worth staying at, they'll offer a formal sabbatical process to make this easier.

Of course, be wary of visa issues if that applies to your situation. There are ways to take breaks, but they generally involve accepting an offer before you leave and transferring your visa status, returning to your home country during the break, or taking advantage of internal sabbatical/leave policies.

Startups are generally a bad value proposition.

Startups will generally tell you that their valuation is projected to increase rapidly over the next X years, but here's what they don't tell you.

  • Each funding round typically dilutes your shares by about 25%
  • You have to consider the tax implications of RSUs vs NSOs vs ISOs
  • For stock options, you have to spend money to purchase your shares at the Strike price, which effectively lowers your salary pre-IPO/exit
  • There is no legal protection for your shares, at any time the founders/investors can decide to do a stock split and not grant you shares proportional to the split, diluting your equity; up to and including making them worthless with a 1,000x split
  • The average equity grant before dilution for the first engineer is 0.3% while the average for a founder at exit (after dilution) is ~15-20% (~50x higher, they do not take 50x the risk or perform 50x the work)
  • Only about 2.5% of startups become unicorns ($1 billion USD valuation)
  • You will on average work longer hours with higher stress
  • You will have less opportunity to learn from senior engineers who have bandwidth dedicated to mentoring
  • Even if you're on-paper rich, it takes an average of 6+ years to IPO before you can actually spend any of that money

If we assume nothing bad happens and you have 0.3% equity and your startup is a unicorn and they IPO after 4 years, you'll make 15% more than what you'd make working at a large, slow public company for the same amount of time. I have some back-of-the-napkin calculations elsewhere if you want to see them.

The dream scenario for an incredibly successful startup that you've likely made huge sacrifices for is only slightly better than doing the bare minimum at an established company.

Of course, sometimes companies close to IPO can be a good deal, or you really want to work with a project/tech stack/team at a particular startup, but in general, equity compensation is overvalued and recruiters and hiring managers will exploit this heavily. Be aware of this, and don't index your equity compensation to what it could be worth in the future. Companies do everything they can to get you to dismiss the risks and ignore factors like strike price and share dilution when evaluating your equity.

Value your time.

A good rule-of-thumb exercise is to calculate your estimated hourly pay for a company. If company A pays $150k/yr and it seems like a slow-paced place where you might work 30 hours a week, that's roughly $150k/(30 hours/week * 48 weeks/year) = $104/hr. Comparatively, a higher-stress company that pays $200k/yr for 50 hours a week would be $200k/(50 h/w *48 w/y) = $83/hr.

This is only one component of evaluating a company, and not all time spent is equal (50 enjoyable hours can be preferable to 30 agonizing hours), but it's worth recognizing that there are real differences in the amount of time you'll spend at different companies. Companies aren't going to advertise that you'll work less than 40 hrs/week, but rest-and-vest positions have that name for a reason.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment