On December 31, 2021, the most valuable company on Earth was Apple, worth around $3 trillion. After that came Microsoft, at $2.5 trillion, then Google (officially Alphabet) at $1.9 trillion, then Amazon at $1.5 trillion.
On December 31, 2020, the four most valuable companies were: Apple, Microsoft, Amazon, and Google.
On December 31, 2019, the four most valuable companies were: Apple, Microsoft, Google, and Amazon.
And on December 31, 2018, the four most valuable companies were: Microsoft, Apple, Amazon, and Google.
If you’re anything like me, you’re starting to spot a pattern here.
Revenue in software has grown from $400 billion in 2016 to $500 billion in 2021, and is projected to reach $800 billion by 2026.
Software has an increasing and overwhelming importance in our economy — and everything else in our society. High demand and low supply makes software engineering well-paid, and often enjoyable.
Software engineering could be a great option for having a direct impact on the world’s most pressing problems. If you have good analytical skills (even if you have a humanities background), you might consider testing it. Basic programming skills can be easy to learn and extremely useful even if you decide not to go into software engineering, which means trying this out could be particularly low cost.
Gain a flexible skill set.
Make a significant direct impact, either by working on AI safety, or in otherwise particularly effective organisations.
Have excellent working conditions, high pay, and good job security.
Late-stage earnings are often lower than in many other professional jobs (especially high-paying roles such as quantitative trading), unless you help found a successful startup.
Likely only a small proportion of exceptional programmers will have a highly significant impact.
Initially, it could be relatively challenging to gain skills quickly compared to some other jobs, as you need a particular concrete skill set.
Key facts on fit
Willingness to teach yourself, ability to break problems down into logical parts and generate and test hypotheses, willingness to try out many different solutions, high attention to detail, quantitative degree useful but not required.
Sometimes recommended — personal fit dependent
This career will be some people's highest-impact option if their personal fit is especially good.
Based on an in-depth investigation
This review owes a lot to helpful discussions with (and comments from) Andy Jones, Ozzie Gooen, Jeff Kaufman, Sasha Cooper, Ben Kuhn, Nova DasSarma, Kamal Ndousse, Ethan Alley, Ben West, Ben Mann, Tom Conerly, Zac Hatfield-Dodds, and George McGowan. Special thanks go to Roman Duda for our previous review of software engineering, on which this was based.
Why might software engineering be high impact?
Software engineers are in a position to meaningfully contribute directly to solving a wide variety of the world’s most pressing problems.
Many people we’ve spoken to at these and other organisations have said that they have real difficulty hiring extremely talented software engineers. Many nonprofits want to hire people who believe in their missions (just as they do with operations staff), which indicates that talented, altruistic-minded software engineers are sorely needed and could do huge amounts of good.
Smaller organisations that don’t focus on engineering often only have one or two software engineers. And because things at small organisations can change rapidly, they need unusually adaptable and flexible people who are able to maintain software with very little help from the wider team.1
It seems likely that, as the community of people working on helping future generations grows, there will be more opportunities for practical software development efforts to help. This means that even if you don’t currently have any experience with programming, it could be valuable to begin developing expertise in software engineering now.
This has led to an explosion in empirical AI safety research, where teams work directly with deep neural networks to identify risks and develop frameworks for mitigating them. Examples of organisations working in empirical AI safety research include Redwood Research, DeepMind, OpenAI, and Anthropic.
These organisations are doing research directly with extremely large neural networks, which means each experiment can cost millions of dollars to run. This means that even small improvements to the efficiency of each experiment can be hugely beneficial.
There’s also often overlap between experimental results that will help further AI safety and results that could accelerate the development of unsafe AI, so it’s also important that the results of these experiments are kept secure.
However, there is a serious risk associated with this route: it seems possible for engineers to accidentally increase risks from AI by generally accelerating the technical development of the field. We’re not sure of the more precise contours of this risk (e.g. exactly what kinds of projects you should avoid), but think it’s important to watch out for. That said, there are many more junior non-safety roles out there than roles focused specifically on safety, and experts we’ve spoken to expect that most non-safety projects aren’t likely to be causing harm. If you’re uncertain about taking a job for this reason, our team may be able to help you decide.
Software engineer salaries mean you can earn to give
If you’re skilled enough to work at top companies, software engineering is a well-paid career. In the US, entry-level software engineer salaries start at around $110,000. Engineers at Microsoft start at $150,000, and engineers at Google start at around $180,000 (including stock and bonuses). If you’re successful, after a few years on the job you could be earning over $500,000 a year.
Pay is generally much lower in other countries. Median salaries in Australia are around 20% lower than salaries in the US (approximately US$80,000), and around 40% lower in the UK, Germany, Canada, and Japan (approximately US$60,000). While much of your earnings as a software engineer come from bonuses and equity, rather than just your salary, these are also lower outside the US.
Ultimately, the best ways to have an impact with software engineering are probably things like working at an AI lab or a particularly effective nonprofit.
To get there, there are two broad paths that you could follow to build software engineering skills (and, given the high salaries in software engineering, you can earn to give along the way):
Working for a large, stable company (e.g. Microsoft, Google, Amazon)
Working for a small, fast-growing startup
In general, you will gain broadly transferable skills through either of these options. To gain experience as quickly and effectively as possible, look for roles that offer good management and mentorship opportunities. You should also make sure you gain a really deep understanding of the basics of software development.
Working at a top-tier tech company also holds comparable prestige to working in finance or consulting, and gives you the opportunity to make connections with wealthy and influential people, many of whom are impact-minded and interested in doing good.
The best way to develop software skills is to practise writing code and building software through years of experience. Direct one-on-one mentorship is extremely valuable when developing skills, and this is often provided through software engineering jobs at large tech companies.
Top firms (e.g. Microsoft, Google, Amazon) are particularly good at providing training to develop particular skill sets, such as management and information security. After talking with people who have experience in training at both tech giants and elsewhere, we think that this internal training is likely the best way to develop knowledge in software engineering (other than on-the-job practice), and will be better than training provided outside of these big tech companies.
However, it’s important to ensure that your role provides you with a variety of experiences: five years of software development experience is not the same as having the same year of experience five times over.
For example, it can be harder to gain full-stack or transferable front-end development experience at a large company. Many large mature products have a large front-end team making many small tweaks and analysing their performance in experiments. This provides good training in experiment design and analysis, but often isn’t very transferable to the sorts of front-end work you’d do at smaller companies or nonprofits, where you’ll often be working in a much smaller team with a focus on developing the experience as a whole rather than running experiments on small changes.
It generally takes around two years for new starters at big tech companies to have the experience they need to independently work on software, and another two years to reach a position where they are able to give advice and support to others in the company and manage projects.
Key career stages at large tech companies
First you’ll need some basic experience. You can get this from a relevant degree; working on a job at a smaller, less prestigious company; or from a bootcamp (see how to enter below for more).
New graduates, and other people with a couple of years of relevant experience, will start out as junior engineers. As a junior engineer, you’d complete small, clearly specified tasks and gain a preliminary understanding of the software development lifecycle. You’ll generally be given lots of guidance and support from more experienced engineers. You usually stay in this role for around three years, gradually expanding your scope. In the US, you’d be paid an entry-level compensation of $100,000 to $200,000 (as of early 2022).
Once you’ve successfully demonstrated that you can work on projects without needing much support, you’ll be given more responsibility. For a couple of years, you’ll work on more complex projects (often in one or two languages in which you’ve specialised), and with less support from others.
After five to eight years2, you’ll generally progress to a senior engineer position. As a senior engineer, you write complex applications and have a deep understanding of the entire software lifecycle. You may lead small teams or projects, and you’ll be expected to provide mentorship and guidance to junior engineers. You can stay in this role for much of your career, though it becomes harder to compete with younger talent as you get older. Compensation in 2022 at this level is around $300,000 to $400,000 in the US.
Progressing past senior engineers, you’re typically responsible for defining as well as doing your job. You may go into management positions, or could become a staff engineer. Staff engineers, while still building software, also set technical direction, provide mentorship, input an engineering perspective to organisational decisions, and do exploratory work. At this level, at top firms in the US, you can earn upwards of $500,000 and sometimes more than $1,000,000 a year.
Software engineering is unusual in that you can have a senior position without having to do management, and many see this as a unique benefit of the career. (To learn more about post-senior roles, we recommend The Staff Engineer’s Path by Tanya Reilly and the StaffEng website.)
Working for a startup as a software engineer
Working for a startup can give you a much broader range of experience, including problem-solving, project management, and other ‘soft’ skills — because unlike in large companies, there is no one else at the organisation to do these things for you. You can gain a strong understanding of the entire development process as well as general software engineering principles.
Startups often have a culture that encourages creative thinking and resourcefulness. This can be particularly good experience for working in small software-focused nonprofits later in your career.
However, the experience of working in small organisations varies wildly. You’ll be less likely to have many very senior experienced engineers around to give you the feedback you need to improve. At very small startups, the technical cofounder may be the only experienced engineer, and they are unlikely to provide the level of mentorship provided at big tech companies (in part because there’s so much else they will need to be doing). That said, we’ve spoken to some people who have had great mentorship at small startups.
You also gain responsibility much faster at a fast-growing startup, as there is a desperate need for employees to take on new projects and gain the skills required. This can make startups a very fertile learning ground, if you can teach yourself what you need to know.
Pay at startups is very variable, as you will likely be paid (in large part) in equity, and so your earnings will be heavily tied to the success of the organisation. However, the expected value of your earnings may be comparable to, and in some cases higher than, earnings at large companies.
Many startups exit by selling to large tech companies. If this happens, you may end up working for a large company anyway.
Moving to a direct impact software engineering role
Working in AI safety
If you are looking to work in an engineering role in an AI safety or other research organisation, you will probably want to focus on back-end software development (although there are also front-end roles, particularly those focusing on gathering data from humans on which models can be trained and tested). There are recurring opportunities for software engineers with a range of technical skills (to see examples, take a look at our job board).
If you have the opportunity to choose areas in which you could gain expertise, the experienced engineers we spoke to suggested focusing on:
In general, it helps to have expertise in any specific, hard-to-find skill sets.
The Effective Altruism Long-Term Future Fund and the Survival and Flourishing Fund may provide funding for promising individuals to learn skills relevant to helping future generations, including new technologies such as machine learning. If you already have software engineering experience, but would benefit from explicit machine learning or AI safety experience, this could be a good option for you.
Anyone with a good understanding of how to build software can be useful in these small organisations, even if they don’t have much experience. However, if you want to work in this space, you’ll need to be comfortable getting your hands dirty and doing whatever needs to be done, even when the work isn’t the most intellectually challenging. For this reason, it could be particularly useful to have experience working in a software-based startup.
Much of the work in biosecurity is related to handling and processing large amounts of data, so knowledge of how to work with distributed systems is in demand. Expertise in adjacent fields such as data science could also be helpful.
There is also a big focus on security, particularly at organisations like SecureDNA.
Most code in biosecurity is written in Python.
If you’re interested in working on biosecurity and pandemic preparedness as a software engineer, you can find open positions on our job board.
Other important direct work
Nonprofit organisations and altruistic-minded startups often have very few team members. And no matter what an organisation does, they almost always have some need for engineers (for example, 80,000 Hours is not a software organisation, but we employ two developers). So if you find an organisation you think is doing something really useful, working as a software engineer for them might be an excellent way to support that work.
Engineering for a small organisation likely means doing work across the development process, since there are few other engineers.
Often these organisations are focused on front-end development, with jobs ranging from application development and web development to data science and project management roles. There are often also opportunities for full-stack developers with a broad range of experience.
Founding an organisation yourself is more challenging, but can be even more impactful. And if you’ve worked in a small organisation or a startup before, you might have the broad skills and entrepreneurialism that’s required to succeed. See our profile on founding new high-impact projects for more.
Reasons not to go into software engineering
We think that most people with good general intelligence will be able to do well at software engineering. And because it’s very easy to test out (see the section on how to predict your fit in advance), you’ll be able to tell early on whether you’re likely to be a good fit.
However, there are lots of other paths that seem like particularly promising ways to help solve the world’s most pressing problems, and it’s worth looking into them. If you find programming difficult, or unenjoyable, your personal fit for other career paths may be higher. And even if you enjoy it and you’re good at it, we think that will be true for lots of people, so that’s not a good reason to think you won’t be even better at something else!
As a result, it’s important to test your fit for a variety of options. Try taking a look at our other career reviews to find out more.
How much do software engineers earn?
It’s difficult to make claims about software engineer earnings in general.
For a start, almost all of the official (especially government) data on this is on salaries rather than total compensation. By the time you’re a senior engineer, less than half of what you earn will be from your salary — the rest will be from bonuses, stock, and other benefits.
As a result, you should think of the figures below as representing salaries for early- to mid- career software developers.
Even given all these caveats, the figures we present here are instructive for understanding the relative salary levels (e.g. between locations), even if the absolute values given aren’t perfect.
More data is available at Levels.fyi, which collects data from people self-reporting their total compensation, and also has data on the distribution of what people earn, rather than just averages.
Software engineering salaries in the US
Here are the median US salaries for software developers, from the US Bureau of Labor Statistics:
Median US salaries for software engineers in 2020 (excluding bonuses)3
Software developers and software quality assurance analysts and testers
Web developers and digital interface designers
Here are the median salaries at different levels of progression, both in the US as a whole and in Mountain View and Palo Alto (i.e. Silicon Valley).4 In general, salaries rise quite rapidly in the early stages of the career, but then level off and grow by only a few percent per year after around a decade. However, this is probably offset by increases in other forms of compensation.
Median US salaries for software engineers in 2020 at different levels of progression
Usual experience required
US (median salary + bonus)
Mountain View and Palo Alto, CA (median salary + bonus)
Software engineer I (entry level)
Software engineer II
Software engineer III
Software engineer IV
Software engineer V
Software engineering manager
Software engineer director
Software engineer director
For figures on total compensation, especially at top companies, we can again look at Levels.fyi. These figures are far higher. Entry-level compensation is around $150,000, rising to $300,000 to $400,000 for senior engineers, and above $500,000 for late-career engineers. The top compensation levels reported are over $1,000,000.
Salaries also vary by location within the US; they are generally significantly higher in California (although web developers are best paid in Seattle).
It’s worth noting, however, that the cost of living in Silicon Valley is higher than in other parts of the US (Silicon Valley’s cost of living is 1.5 times the US national average7), reducing disposable income. (In general, data on average cost of living is particularly representative of the costs you’d expect to pay if you have a family or want to own a house.)
If you want to estimate your own disposable income given different scenarios, you can try these tools:
Software engineers are paid significantly less outside the US. The UK Office for National Statistics found that the mean salary for “programmers and software development professionals” in 2020 was £46,000 (US$59,000 in 2020).8 Even when looking at full compensation, we see similar trends across the world.
The only countries with earnings as high as the US are Israel and Switzerland, and no countries have earnings as high as Seattle or the San Francisco Bay Area. The cost of living in major cities in Israel and Switzerland is around 20% higher than in Silicon Valley.9
Compensation across the world is often higher if you work from a major city.
Software engineer compensation in major cities outside the US6
It can be difficult to get a visa to work in the US. For example, US immigration law mandates that a maximum of 65,000 H-1B visas (one of the most common types for software engineers) are issued a year. Also, because of the cost of flying you out for an interview, there will often be a higher bar for international applicants passing phone interviews.
There are some things that can make it easier to get a visa:
Having a degree in computer science or other field related to your job
Applying to companies with enough capital and flexibility to bear the time and financial costs of the visa process
Having a specific unusual skill set that may be hard to find in the US
Despite all of this, remote work in software development is becoming far more common. There’s a growing trend for a few companies to hire globally for remote roles, and pay US-market compensation. If you manage to get one of those roles, you can earn a lot from anywhere.
Software engineering job outlook
The future demand for software engineers is promising. The US Bureau of Labor Statistics projects 22% growth in US employment of software engineers from 2020–30, which is much higher than the growth rate for all occupations (8%). The main reason given for this growth is a large projected increase in the demand for software for mobile technology, the healthcare industry, and computer security.
The number of web development jobs is projected to grow by 13% from 2020–2030. The main reasons for this are the expected growth of e-commerce and an increase in mobile devices that access the web.
What does this mean for future salaries? Strong growth in demand provides the potential for salary growth, but it also depends on how easily the supply of engineers can keep up with demand.
Software engineering job satisfaction
The same high demand for software engineers that leads to high pay also leads to high bargaining power. As a result, job satisfaction among software engineers is high.
Work-life balance in software engineering is generally better than in jobs with higher or comparable pay. According to one survey, software engineers work 8.6 hours per day (though hours are likely to be longer in higher-paid roles and at startups).
Tech companies are progressive, often having flexible hours, convenient perks, remote working, and a results-driven culture. The best companies are widely regarded as among the best places to work in the world.
Examples of people pursuing this path
How to predict your fit in advance
The best way to gauge your fit is to try it out. You don’t need a computer science degree to do this. We recommend that you:
Do a project with other people — this lets you test out writing programs in a team and working with larger codebases. It’s easy to come up with programming projects to do with friends — you can see some examples here. Contributing to open-source projects in particular lets you work with very large existing codebases.
It seems likely that a few software engineers could be significantly better than average. These very best software engineers are often people who spend huge amounts of time practising. This means that if you enjoy coding enough to want to do it both as a job and in your spare time, you are likely to be a good fit.
To enter, you need some basic programming skills and to be able to demonstrate a strong interest in software engineering. We’ve seen many people with humanities and social science degrees get junior software engineer jobs with high salaries, just through learning on their own or through coding bootcamps.
Learning to program
Basic computer programming skills can be extremely useful whatever you end up doing. You’ll find ways to automate tasks or analyse data throughout your career. This means that spending a little time learning to code is a very robustly useful option.
Attending a coding bootcamp. We’ve advised many people who managed to get junior software engineer jobs in less than a year through going to a bootcamp. Coding bootcamps are focused on taking people with little knowledge of programming to as highly paid a job as possible within a couple of months. This is a great entry route if you don’t already have much background, though some claim the long-term prospects are not as good because you lack a deep understanding of computer science. Course Report is a great guide to choosing a bootcamp. Be careful to avoid low-quality bootcamps. To find out more, read our interview with an App Academy instructor.
Studying computer science at university (or another subject involving lots of programming). If you’re in university, this is a great option because it allows you to learn programming while the opportunity cost of your time is lower. It will also give you a better theoretical understanding of computing than a bootcamp will (which can be useful for getting the most highly paid and intellectually interesting jobs), a good network, some prestige, and a better understanding of lower-level languages like C. Having a CS degree also makes it easier to get a US work visa if you’re not from the US.
Doing internships. If you can find internships, ideally at your target employers (whether big tech companies or nonprofits), you’ll gain practical experience and the key skills you otherwise wouldn’t pick up from academic degrees (e.g. using version control systems and powerful text editors).
Getting your first job in software engineering
Larger companies will broadly advertise entry-level roles. For smaller companies, you may have to reach out directly and through your network. You can find startup positions on job boards such as AngelList, and many top venture capital firms have job boards for their portfolio companies.
Large software firms can have long and in-depth interview processes. You will be asked about general software knowledge, and later rounds of interviews are likely to give you problems around coding and algorithms, during which you will be asked to collaborate with the interviewer to solve the problem.
It’s worth practising software engineering interview questions in advance; often this means apply for companies you are less likely to want to work at first, and use these applications to get used to the process. This can be a stressful process (in part because you might face some early rejections, in part because it’s tricky to navigate applying if you don’t really want the job that much), so it’s important to take care of your mental health throughout the process.
We think that this guide to getting a software engineering job is particularly helpful. There are six rough steps:
Send a company your resume. Make it as specific as possible to the job you’re applying for, and proofread it carefully. If you can get a referral from a friend, that will significantly increase your chances of success.
Speak to a recruiter. Read up about the company in advance, and make sure you have questions. Be nice — it’s going to help if the recruiter is on your side.
Have a technical phone interview. You’ll solve some problems together. Make sure you ask questions to clarify the problem, and strategise about the best possible approach before you start writing code. Finish by checking for bugs and make sure you’re handling errors correctly. When you’re done, ask the interviewer some questions!
Have a three- to six-hour on-site interview. It’s key to talk out loud as you work through a problem. And again, ask your interviewer some questions about them and the company.
Get an offer from the recruiter. You should make sure they think you are seriously considering the company or you may not get an offer. If you don’t get an offer, ask for feedback (though it’s not always possible for companies to give detailed feedback). If you need more time to think (or to apply elsewhere), tell them in advance, and they may choose to wait to give you details when you’re more ready to go through with an offer.
Accept the offer!
Want one-on-one advice on pursuing this path?
If you think software engineering might be a great option for you, but you need help deciding or thinking about what to do next, our team might be able to help.
We can help you compare options, make connections, and possibly even help you find jobs or funding opportunities.
Plus, join our newsletter and we’ll mail you a free book
Join our newsletter and we’ll send you a free copy of The Precipice — a book by philosopher Toby Ord about how to tackle the greatest threats facing humanity.
Notes and references
Even if you’re not working at an organisation focused on a particularly pressing problem, there may still be opportunities to have direct impact as a software developer. We argue elsewhere that improving institutional decision-making could be an effective way of preventing costly mistakes. Many important institutions — such as governments, international organisations like the United Nations, and the World Bank — rely, as we all do, on software. Improving this software and its use could be a reasonable way of improving their decisions.↩