A practical guide for evaluating software engineering job offers

You go with the biggest pay cheque. It's that simple, right? Wrong.

Don't get me wrong, your salary is very important and you should never compromise on that. However, I believe that not spending enough time on your job decisions directly affects your overall job satisfaction when your job stops meeting your inflated optimistic expectations. I'll try to walk through all the details that matter to me when I'm evaluating job offers. In some sections you'll find a "no-no" list, which is basically the list of things I believe are a hard pass for me if any company had them. Please remember that this is how I approach the topic and it's not necessarily the best approach. Before going into details, let's go through some quick FAQs around the topic.

1- Do I really have to go through your boring post even though I only have one offer?
A little offended but Ok. YES, you should. You have to know what you are walking into even if it's your only offer to adjust your expectations to reality. Or even better, walk away from an offer that will harm your career and be worse than a few extra months of job hunting.

2- Does that guide apply to everyone and every company?
These points are deliberately generalized to be a fits-all model and of course any kind of generalization have flaws. So, read with caution that your country, company, offer, etc might not match 100% of the criteria but still be good enough. For example, not all companies offer equity, but that doesn't mean that companies that does not are worse. You have to put in mind the market in that country, other compensation factors, your skillset, etc and make a mindful choice.

3- What are the numbers beside some sub categories?
These are weights that sum up to 10 per category. A category with less than 7 points is a bad indicator. One with less than 4 is ehrab ya yaseen.


Whether it is a feedback, question or if you feel something is missing or wrong: https://curiouscat.me/essamhassan and I'll consider adding it here.

Company

Upper Management [3]
You should learn about the management strategy and goals. How are there actions conforming with their promises and claimed visions. Good signs are long consistent leadership with little conflicts and a series of delivered promises. Bad signs are inflated executive salaries, unpredictable reorgs, insider trading gossip, record of ethical or legal misconduct.
My no-no list:
- Companies with history of unpredictable layoffs of large number of employees. Yes, you Uber. Reference: https://bit.ly/2CuTD26
- Companies with irresponsible or corrupt Management. Uber, again but now Tesla too. References (just a few..): https://bit.ly/2Q0Fb5s https://nyp.st/2ShFvyT https://bit.ly/2MZqwuZ

Performance [3]
By performance, I mean both stock value performance and financial performance for non-IPO companies. Look at their numbers and see if they maintain consistent good performance. You don't have to be an analyst to do that. I like this guide as it's simple, and they don't use lots of cryptic financial terms: https://bit.ly/2T2nvbA


Culture [4]
This is a very hard topic to tackle, because for big companies it's almost always depending on where you work in these companies. And in startups it's not easier at all. Because startups mature at a much faster rate than big companies, startups' cultures can change in months, even weeks from the heaven workplace to a terrible place to work or vice versa. You have to be able to find your type. Not all people like relaxed cultures and relaxed goals. Some people want something fast and high velocity. Others want something formal and strict ( which is not necessarily a bad thing ). So the first step in this point is to find what your type is. If you look at the feedbacks on Glassdoor you'd be surprised of the people who left your dream companies because they weren't 'serious enough' or that they weren't working on challenging enough projects or just the fact that people didn't get any work done.

My no-no list:
- Companies with toxic blame culture, where you'll be afraid to make a mistake in your code and this fear will end up crippling you and make it harder for you to make impact and grow in the company.
- Companies with no well-defined cultures. Those who let mid-level managers drive the culture of the company and not the opposite. It takes one bad manager for the company to sink into toxicity losing most of their talent and gaining a very bad reputation for it. Most engineers with a couple years of experience will be able to relate to this specific type.

Career

Role [3]
Is it really what you want to do? Look at the description and communicate efficiently with your prospect manager. Don't "figure it out on the spot". Recruiters usually sell to you that you can move teams if you didn't like your first team. This is true, but not the complete truth. Yes, you can, but doing that very early is a serious bad sign on your profile. The outcome can range from a very bad feedback stuck to your profile with this company forever to an immediate firing decision.

Manager [4]
YES, your next manager should be one of the most important factors in your decision making process. Not only in this category but overall. Your first manager will help you navigate your future in a company, prep you for your role and communicate their feedback clearly with you. It's very tricky to get insights about your manager but you can do so by either asking fellows in that teams, if possible, or having calls with them asking them questions that can reveal as much as possible about their management style. The Joel Test is one of the very insightful list of questions to start that conversation with. The programmer's bill of rights is less appropriate for a manager call but very good for your online research of the company.

My no-no list:
- Passive aggressive managers.
- Technically incompetent managers.
-  Unethical managers.
-  Managers who have conflict of interest with your career growth*** This is very important. Say you are going to work for a company and the manager said something like "we need someone to maintain our legacy system, because it's in a bad shape, and we have been searching for someone to maintain it for a year now". Now, the phrase means a couple of things. First, it's a legacy system, there will be no updates to it or feature changes. This means no challenges and therefore halted promos. Also, It's against the manager's interest for you to switch to something else. It's a plus negative sign if the stack they are using for the legacy system is a popular stack "Java" it basically means no one wanted the job.

Growth [3]
It's really hard to measure your growth in a company before joining but you can still rely on a couple of factors. One of the things to consider, most good companies have a well defined criteria for promotions in the form of a job ladder guide. It's usually well-defined making it highly unlikely for you to be denied a promotion if you are meeting the publicly shared guide. Ask your recruiter/manager about your potential for promotions.

But again, promotions are not the only kind of growth you get in a company. Skills growth is a very important factor. Learn how the company invests in you and your skills.

My no-no list:
- Companies with vague unclear selective promotions.
- Companies with low demand in upper levels. It's usually much harder to get promoted or even get the chance to work on challenging exciting projects if they have an influx of senior engineers. And even though you'll be surrounded with senior engineers, and you'll be able to learn from them, I believe the cons outweigh the pros.

Contract

Beware: too many underlined words for very valid reasons ahead.

There are a couple of points you should check while reading any offer letter. Aside from the basics like checking the title, role, salary, bonus, etc, you should read clauses about working hours, holidays and sick leaves, causes of termination, start/end dates and notice period.

The most important thing in this section is to check for any restrictive clauses. Things like non-compete, non-solicitation, non-dealing, non-poaching, no-second-job, etc. These can have serious implications on your future and you should make sure you are okay with whatever is in your contract, otherwise revise it with your recruiter.

My no-no list:
- Very restrictive clauses like long non-compete especially if it might conflict with my future interest.

Compensation

Sub-categories in italic are optional*

Base: cash you get every month in the bank and usually presented in yearly format.
Base is always within a fixed range per level. You should research your company and country compensation average and most importantly the average skills in that specific level. Compare your research output with your offer and you'll end up with a clear idea if you are getting paid enough. Another important tip if you are moving to a new country/state, most countries tax people differently based on many factors. Make sure you learn your net salary and how it compares to the cost of living of your new city, if you are moving.

My no-no list:
- Offers with very low bases in exchange of "a chance to learn". This usually happens with startups with tight budget and high potential. The rule is if you are going to do the work, you have to be paid the money.

Stocks: company stock grants to employee usually distributed over four years.
Those are optional and most companies don't offer them, BUT you should expect your offer to include stocks/stock options, if the company is an early to mid stage startup. Stocks are usually a standard part of job offers from companies like Amazon, Google, Facebook and Apple. It's a way of retaining talent as you usually receive them over four years. The vesting schedule, which is the schedule for you to receive your shares, is usually a standard 25/25/25/25. However, It still differs from a company to another. Amazon, for example, offers a different 5/15/20/40. Schedules have more details than that so you should be aware of the plan you are on and make sure you are ok with it. Also, stocks are usually a very good negotiation point, unlike base, and you can always try to push for 20-30% if you think you deserve it.

Signing Bonus: one time bonus you get when you join the company.
Optional signing bonus is usually given for candidates as a standard offering or to make the offer more competitive compared to other offers. A good strategy to evaluate the signing bonus is to divide it on 4 years and add to your total compensation. We'll talk more about that at the end of this section.

Yearly Bonus: % of your base salary given out yearly on a prorated basis.
Bonuses are pretty standard. Worth noting that most companies have a performance multiplier which means if you are initially offered 15% bonus, your final bonus can be between 1 x 15% to 2 x 15%. Of course these numbers are not accurate and will differ depending on the company. Feel free to ask your recruiter about these numbers.

Yearly Raise: % increase of your base salary usually based on performance.
This is pretty standard as well but usually not clear enough on your package. You should ask about the raise and make sure it's within the acceptable ranges. I've had encounters with companies that offer very low yearly raise so unless you promote, your salary won't be really changed. Make sure you are ok with your yearly raise.

Refreshers:
The word refreshers usually means additional stocks given out after your initial stocks. Not all companies have refreshers and companies have different schedules and reasons for giving refreshers. Know if your potential employer offers any kind of stock refreshers and when those refreshers are given.

Benefits:
Yes, benefits are not just perks. They directly translate to your compensation. A company that offers free food adds a surplus of money not spent on food to your base. A company supporting your transportation ticket adds that amount of money on your base as well. Make sure to have this input very clear to you when you are making a decision. Also, be critical about these benefits. A company can offer 20+ benefits on their site but all can end up a very small surplus to your income and that you'd have been better going with the company with the higher base fulfilling the Tom Cruise dream.

Total compensation: It gets really overwhelming boiling down all these in your salary so I have this formula that can help you do it. And since this is specifically for software engineers:

* expected years at that company, ** costIdx is cost index of the country you are moving to [optional], *** yearly.bonus.percent not raise

Keep in mind that this is a made up formula put together by a very sleepy person late in the night, and it's a little different to the well-known total compensation calculations on the internet so treat it with a grain of salt.

At the end

Take your time, consider everything in this post but most importantly consider what matters to you before making up your mind. Good luck!

Essam Hassan

Essam Hassan

A pragmatic software engineer, cyber security enthusiast and a Linux geek. I curse at my machine on a daily basis. My views are my own.
Zurich, Switzerland