Skip to content

Instantly share code, notes, and snippets.

@Riizade
Last active June 8, 2023 05:20
Show Gist options
  • Save Riizade/49a6a78e22fe5dec7353898c4d60c2f4 to your computer and use it in GitHub Desktop.
Save Riizade/49a6a78e22fe5dec7353898c4d60c2f4 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.

Preface

This document is intended to provide advice for people working in industry, but primarily for those working in software engineering or very closely related high-paying tech fields such as security, IT, machine learning, data science, etc.

This is written from the perspective of 6+ years experience, but hopefully contains some good nuggets of advice even for those who have experience beyond that.

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 for comparatively less salary, because time spent with family and on your hobbies is more important than the salary growth you give up in exchange.

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+ USD per year (or $160k+ in expensive areas like San Francisco) even a substantial pay increase is not worth a noticeable decrease in quality of life elsewhere. You are more than your job, and you should make conscious decisions about where to focus your time and energy instead of going with the American default of prioritizing a career over everything else.

Having money is great, and certainly makes a lot of things easier, but it is still surprisingly easy to be miserable making $300k/yr, and perhaps less surprisingly, it's not uncommon to be perfectly happy making $60k/yr.

Negotiation is more important than you think.

Read this wonderful blog post by patio11. It is longer than this entire page though, so consider coming back to it. 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 allow you to meet the team and it's such a simple request that denying it means they don't value you as a candidate. Further, 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 after work in front of my partner at the time. Swore at me, insulted me, etc. 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, both physically and mentally.

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 "not this cycle, maybe next cycle". No promotion. That next cycle, our department had a large budget increase and something like 50% of engineers in our department got a promotion, many of which were promoted to the same new position as me with less experience, less tenure at the company, and (subjectively) far less impact.

At another position, I received performance reviews commensurate with the top ~25% of performers for my role for every performance review for 3 years. After 3 years, "time-at-level" was reached ("time-at-level" is the point at which you're expected to be promoted as long as you're meeting expectations). No promotion. Next review cycle (6 months later), no promotion. The company was in the process of reigning in spending in preparation to look good for public investors for a potential IPO (Initial Public Offering), and I suspect they made a call to informally slow down promotions and raises; and again, this had a much greater impact on my ability to get promoted than my performance did. I did later receive information from former managers at the company that supported the suspicion.

Regarding the above, there is probably some level of incredible performance I could have strived for that would have gotten me the promotions as expected. But it's anyone's guess as to how far I would've had to go, and how much I might have sacrificed elsewhere to achieve it.

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, not income or prestige.

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. Record documentation you've written. Write documents to yourself just listing your accomplishments (often called a "brag doc").

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 nobody in my direct reporting chain above me had any clue what programming actually entailed; they had never written code and didn't understand how it worked (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 for-profit 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. Electronic Arts says they want to make great games, and to some degree they do, but those games are filled with abusive psychological mechanisms to get people to spend more money than they might be able to afford. 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, video games, consider joining a big, slow organization like Google or Salesforce and then spending your free time dabbling on the side. 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.

The above applies less to NGOs (Non-Governmental Organizations), non-profits, cooperatives, etc., and they are entirely a valid route to go down if you're interested in avoiding soul-sucking capitalist leech type work. But typically those positions are much like startup positions in that they don't pay as well, you might work long hours in stressful situations, etc. You'll of course have to make your own decisions about how to prioritize and balance these things.

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 it easier to stay at a company while being able to take a break.

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 ~25% 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 their reputation for a reason.

Additional Resources

  • See the rest of my advice here
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment