This is the full report on which our Software engineering at large tech-firms career profile is based.
Table of Contents
- 1 What do software engineers do day to day?
- 2 What are the key stages of a career?
- 3 Should you do it?
- 4 Will it put you in a better position to make a difference later in your career?
- 5 Will you excel at it and will you enjoy it?
- 6 Job satisfaction
- 7 How does it compare to alternatives?
- 8 If you want to do it, what should you do?
- 9 Further reading
What is software engineering?
Software engineers (or software developers1) create the programs which turn computers into useful machines that can, among other things, send email, search the world wide web, make video calls and run industrial robots. By making the software which tells computers what to do, software engineers play a central role in the ongoing digital revolution, which is transforming human civilisation and has led to the beginning of the Information Age. Software engineers are employed by organisations in a wide range of industries, but in this profile we focus on those employed by large technology companies such as Google, Facebook and Apple.
What do software engineers do day to day?
Software engineers run the entire process of creating and developing software. This includes writing computer programs, which are written in source code — a special language designed for computers, telling them exactly what to do and how to do it. This requires extremely good attention to detail and the careful organisation of many interconnected parts.
Software engineers also do things in addition to writing code: they generate software ideas, they work with stakeholders to understand requirements, they test and maintain the final product and they co-ordinate the entire software development process. These tasks are what distinguishes software engineers from computer programmers — computer programmers tend to only write code.2
There are many descriptions of what’s it’s like to be a software engineer. Here are two of most useful ones we’ve came across:
- A Day in the Life: Software Developer (Vault)
A common way of dividing software engineers is into:
- Web developers, who make websites. A large number of websites are fully functional applications (e.g. Google, Facebook, Twitter, Gmail), so many web developers work on developing web applications, though some work on static webpages. More on what web developers do.
Application developers, who make applications such as Skype or Microsoft Office. These applications might run on various platforms, such as desktop computers, laptops, mobile phones or tablets.
Systems developers, who make the operating systems on which applications run.
What are the key stages of a career?
Here is a diagram of career stages for software developers, with rough estimates of average pay ranges.3 Bear in mind that these are averages and it is possible to earn much more than this, especially in major tech companies like Google.
You usually start out as a junior developer, where you write simple scripts and gain a preliminary understanding of the software development lifecycle. You usually to stay in this role around for around three years.
If you are successful you can become a senior developer. As a senior developer you write complex applications and have a deep understanding of the entire application lifecycle. You can stay in this role for much of your career, though it becomes harder to compete with younger talent as you get older. At this point you have the skills to leave and become a technical founder or CTO of a startup.
If you are a senior developer and want to progress whilst avoiding management, you can become an architect, which is the highest level on the technical career ladder. Architects design complex systems that get implemented by teams of senior and junior developers. You can stay in this role for all of your career — 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 software engineer career track.
If you are a senior developer and you don’t mind doing some management, you can become a lead developer. Lead developers co-ordinate the work of junior and senior developers but usually don’t hire or fire developers.
After architect and lead developer there are mid-level manager roles, which offer the potential to enter senior management. We don’t address these later stages in this profile, but you can read more about them here.
Should you do it?
You should strongly consider software engineering if you’ve tried out programming and you enjoy it, if you want to open up the possibility of working in technical roles in the future, if you’d prefer not to work the long hours common in law, finance or consulting, if you are attracted to contributing through earning to give, and if you want to gain the option of doing freelance and remote work in the future.
Can I make a difference as a software engineer?
The main way for software engineers to make a difference is by making socially useful software, earning to give or doing flexible work that allows you to pursue high-impact projects on the side.
Making socially useful software
Software has had a transformative influence on society, and will likely continue to do so, and so it’s an important area to be involved in.4 As a software engineer your direct impact mainly comes from helping further the goals of the organisation that you’re working for. Therefore, the direct impact of your work mainly depends on where you work and how much the goals of your employer help produce social value.
There are software companies which have plausibly produced substantial social value, such as Google and Wikipedia, but it is nonetheless hard to estimate the amount of social value they produced (see for example our study of Google.) Even setting aside organisations whose goals are directly linked to producing social value, it may still be substantially net positive to increase the efficiency of many organisations, due to the “flow-through effects” of increasing general human empowerment.
Pursuing high-impact projects on the side
Software engineering jobs provide outstanding flexibility along a number of dimensions:
- Flexible hours are common, and some places even work a 4 day, 32-hour work week (for example Treehouse does this all year round and Basecamp does it from May to October).
There are many jobs which let you work work remotely. See for example this aggregator of remote jobs at startups.
Freelance and contract work are common, which lets you take on projects when you want work and take time off as you choose.
This flexibility has enormous value. In terms of direct impact, it means that:
- You can use your time outside work for other high-impact projects and even relocate to a place where you want to volunteer on a project.
You can work remotely to lower your cost of living and increase your donatable income, or reduce your working hours to free up more time for side projects. Many software engineers now live in Chiang Mai in Thailand, where living costs are 1/4 of US. Read our post on remote and freelance work for more details.
Software engineering is a moderately well-paid career, so can be used to earn to give. Average US earnings (including bonuses) for entry-level software engineers are $56,000-$72,000, graduates of bootcamps can earn around $100,000 and engineers at Google can start on around $120,000. However, progression is more limited than in many alternatives and many engineers “cap out” after a few years. Even at Google, which has among the highest salaries, it’s relatively rare to earn over $300,000. The overall average salary for software engineers is around $100,000 in US.
Pay is much lower in the UK – average salaries are 40% higher in the US than in the UK, 80% higher in Silicon Valley than in London, and starting salaries for bootcamp graduates are around twice as high in Silicon Valley as in London.
Here are the average US salaries for software developers, from the US Bureau of Labor Statistics:
Average US salaries for software engineers in 2014 (excluding bonuses)5
Within software engineers, systems developers tend to earn more than application developers, and web developers earn the least.
Here are the median salaries at different levels of progression, both in the US as a whole and in Mountain View and Palo Alto.6 In general, pay rises quite rapidly in the early stages of this career, but then levels off and grows by only a few percent per year after around a decade. Progression to higher levels isn’t guaranteed, and depends on performance.
|Stage||Usual length of experience required||US (Median salary + bonus)||Mountain View and Palo Alto, CA (Median salary + bonus)|
|Software engineer I (entry level)||0-2 years||$64,000||$75,000|
|Software engineer II||2-4 years||$81,000||$96,000|
|Software engineer III||4-6 years||$96,000||$113,000|
|Software engineer IV||6-8 years||$115,000||$135,000|
|Software engineer V||8-10 years||$130,000||$154,000|
|Senior Software Architect||10+ years||$156,000||$184,000|
|Software Engineer Director||10+ years||$191,000||$226,000|
|Top Software Development Executive||15+ years||$229,000||$270,000|
These are just the national averages. You can earn more if (a) you work in certain parts of the country (b) you do a coding bootcamp or (c) you work at a top-tier tech company like Google, which we address next.
California has the highest average salaries for systems and application developers (though Washington is highest for web developers7), and Silicon Valley is the highest paid metropolitan area for all three types of software developers:
Mean salary by US region in 20148
Of course the cost of living in California and Silicon Valley is higher than in other parts of the US (Silicon Valley’s cost of living is 1.5 times the US national average9) and so this reduces the amount of disposable income you have. Whether you would have more disposable income as a software engineer in California or Silicon Valley than in other parts of the US depends on what your post tax income is (which is affected by how much you donate), and how much you spend on your cost of living. If you want to estimate this for yourself, you can estimate your post-tax income here, find out the cost of living in different cities here, and calculate your donatable income here (under the ‘Calculating donations’ heading).
There are intensive twelve week coding bootcamps which train people in programming and web development. Graduates of these make significantly more than the average entry level software engineer salary. To give two examples in 2014, 98% of graduates of App Academy had offers or jobs with an average starting salary of $105,000 in San Francisco and $89,000 in New York10 and 99% of graduates of Hack Reactor had offers or jobs with an average starting salary of $105,000.11 In terms of fees, App Academy takes an 18% cut of your first year salary if you get a job, and Hack Reactor charges $17,780 in tuition. There are many other bootcamps with roughly similar figures. Note that these bootcamps are highly selective so these salaries may only reflect the opportunities for an unusually able portion of the population.
Top tier software companies
Google engineers are among the most highly paid and companies like Facebook, Twitter, Dropbox and Apple also offer good pay. We have an upcoming analysis of earnings at Google which has more detail on the expected earnings of working at Google, but to get a rough sense of their earnings, here are the reported Glassdoor mean salaries for US software engineers. Note that higher earnings are possible but aren’t available on Glassdoor.
Google software engineers in US in 201412
|Stage||Base Salary||Total Compensation|
|Software engineer II||$110,823||$143,664|
|Software engineer III||$132,723||$180,260|
|Software Engineer IV||$149,411||$193,015|
|Senior software engineer||$162,179||$243,938|
|Google Engineering Director||$272,000||$425,000|
There is much less data available on the earnings of software engineers in the UK, but the pay is significantly lower than in the US. The mean salary for ‘programmers and software development professionals’ is £44,000 (US$68,000), including incentive pay.13 Within the UK, software engineers are highest paid in London.
UK Programmers and Software Development Professionals in 2014
|Median base salary||Mean base salary||Mean incentive pay|
|UK||£40,000 (US$60,000)||£42,000 (US$65,000)||£2,000 (US$3,000)|
|London||£47,000 (US$73,000)||£49,000 (US$76,000)||N/A|
For bootcamp pay, the most prestigious UK bootcamp is Maker’s Academy in London and it places students into junior developer roles with an average salary of £30,000 (US$46,000).14
UK vs US earnings
The US has much higher salaries than the UK. US salaries are 40% higher nationally, 55% higher in California than London, 80% higher in Silicon Valley than in London and average bootcamp starting salaries are around twice as high in Silicon Valley than in London.15 The cost of living in London is 1.4 times higher than Silicon Valley, which makes the comparison even more favourable for the US.16
If you want to work in the US, your chances of getting a visa are best if you have a degree from a US university, but having a computer science or maths degree from another country also helps.
The future demand for software engineers is promising. The US Bureau of Labor Statistics projects 22% growth in US employment of software engineers from 2012-22, which is much higher than the growth rate for all occupations (11%). 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 growth for web developers is projected to be 20% from 2012-2022. The main reasons for this projected growth are the expected increase of online purchasing and an increase in mobile devices which 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.
In terms of supply, there are signs of a shift towards much greater supply, with a recent proliferation of free online training courses, publicity of this opportunity (e.g. this article in the WSJ, and InfoWorld), and programming bootcamps (such as App Academy, General Assembly, and Dev Bootcamp, all founded in the last 3 years). However, it remains to be seen whether this will significantly push down salaries.
In the medium term, salaries can go up or down depending on the stage of the business cycle an economy is in, and also depending on what stage of the industry cycle an industry is in. Right now the technology industry is not likely to be at the bottom of a cycle (see e.g. our position in the Dow Jones US Technology index below), which means there is a chance that salaries will go down in the medium term if there is a contraction in the sector.
In the long-term, there is a theoretical argument for increased future demand of software engineers, sometimes called the idea that ‘software is eating the world’. The idea, first pushed by Marc Andreessen is that: “More and more major businesses and industries are being run on software and delivered as online services—from movies to agriculture to national defense.”17 This suggests that software engineers will be in demand across a wide range of industries in the future.
Will it put you in a better position to make a difference later in your career?
The skills you learn as a software engineer are useful for a number of reasons:
- Programming opens up the possibility of entering a range of promising jobs including data science (there are bootcamps for retraining from software engineering to data science), tech-entrepreneurship (as a technical founder or early employee at startup), carrying on in a large tech-firm, finance, for example in quantitative hedge funds or investment banks and academia where programming is increasingly used.
Programming is also useful in many non-technical corporate and government jobs where elements of web development, data analysis or other automation are used.18
Looking further into the future, software engineering skills are likely to become useful across an even wide range of industries as the economy shifts further into the information age.
As a senior software engineer you also learn project management, which is a highly useful transferable skill.
You gain a flexible fall back option for making money as a freelancer or contractor, which you can do remotely and part time. This is useful for testing new projects and volunteering, as well as making money to increase your savings, investing in training or covering other unforeseen financial needs.
Overall, you gain great skills that there’s a shortage of, which gives you great bargaining power and a wide range of options with very different risk-rewards and lifestyles.
In terms of prestige and status, working in the tech industry is becoming increasingly common for elite graduates (for example many more Harvard M.B.A.’s are going into tech), and jobs in the tech industry now hold comparable prestige to jobs in finance and consulting.
This also means that the network you gain access to working at tech-firms is increasingly made up of wealthy and influential people. Moreover, the tech industry has a high concentration of progressively-minded people who are interested in doing good – notable examples include Bill Gates, Dustin Moskovitz and Elon Musk. If you are a software engineer in the Bay Area, you are also in a major hub of the effective altruism community.
It is relatively quick and cheap to test out your fit for software engineering through online programming courses, bootcamps, and internships, and so it is a good option for exploration value. We will cover how to test it out next.
Will you excel at it and will you enjoy it?
Many people from arts backgrounds think they can’t become software engineers, but this is simply not true. Although many software engineers studied computer science, it is not a requirement and many entry-level jobs don’t ask for a computing related degree or even a quantitative degree. Another reason software engineering is easier to enter and do well in than many people think is that it doesn’t require advanced maths — most software engineers never have to use calculus.19 We’ve seen many cases of people with humanities and social science degrees get junior software engineer jobs with salaries 50-100% higher than their previous jobs, just through learning on their own or doing bootcamps.
Predictors of sucess
From speaking to software engineers and surveying advice online, the most commonly mentioned traits of successful engineers are great attention to detail, not getting upset when things don’t work immediately, willingness to try out many different solutions and generate hypotheses, inquisitiveness and curiosity.20 Some predictors of success suggested in the academic literature are:
- General intelligence (Mayer, Dyck, & Vilberg 1989)
Self-predicted success, attitude, keenness and general academic motivation (Roddan 2002; Rountree, Rountree, & Robins 2002)
Spatial reasoning and mathematical ability (Wilson & Shrock 2001)
Musical ability, logical reasoning ability, and previous academic background (Boyle, Carter, & Clark 2002)
However overall not much is known about general predictors of success for programming, so the best way to find out if you have a chance of succeeding is to try it out.
Test it out
The most accurate way to find out whether you’ll excel at a job and whether you’ll enjoy it is to try it out. We recommend that you take the following steps to test how well it fits you.
Step 1: Try out writing code
Programming is a big part of software engineering, so it’s important to try out. In less than 20 minutes and with no programming background at all, you can write a program which reminds you to take a break every two hours, by following the instructions in this post. You can then take the Intro to Computer Science course on Udacity, which teaches you computer science basics and the Python programming language. This will give you an idea of how much you enjoy programming and the kinds of skills involved. However bear in mind that many people don’t enjoy programming right at the beginning, especially before they can write programs that they see as useful. You may also want to check out this programmer competency matrix to get a sense of what programming involves at different levels.
Step 2: Do a project
Next do a project with other people. This lets you find out what it’s like to write code in a team working with larger codebases, you can ask for feedback from others on your coding ability and you get exposure to some of the non-programming elements of software engineering, such as generating ideas to fulfill user requirements. Contributing to open source projects in particular lets you work with very large existing codebases.
Step 3: Talk to software engineers
To find out more about your fit for software engineering, we recommend talking to people in your network who are software engineers, ideally who are similar to you, and asking them:
- What kinds people tend to do well?
How satisfied are they with their job?
What are their colleagues like?
Step 4: Take an internship or do a bootcamp
Once you’ve the above steps want to test this career further, you can try an internship, or do a bootcamp.
Many software engineers we have spoken to say the work is engaging, often citing the puzzles and problems involved with programming, and being able to enter a state of flow. On the negatives, some people we’ve spoken to feel like their work isn’t meaningful and many say that working with large existing codebases and fixing bugs are the less pleasant parts of the job. Read our five interviews with software engineers for more details.
Work life balance is generally better than in jobs with higher or comparable pay. According to one survey, software engineers work 8.6 hours per day,21 though hours are likely to be longer in more highly paid roles and at startups. As mentioned above, some tech companies work a 4 day, 32-hour work week (for example Treehouse does this all year round, Basecamp does it from May to October).
In terms of general working conditions, tech companies are progressive, often having flexible hours, convenient perks, remote working and a results-driven culture. The best companies in the industry, like Google, are leaders in evidence-based management and widely regarded as among the best places to work in the world.22
Remote working opens up location flexibility, which is excellent for improving your quality of life: you can move to climates and cities that you prefer, you can increase your disposable income by moving to places with a lower cost of living and you can be close to family and friends. You also have the added peace of mind of being able to get work as a freelancer or a contractor as and when you may need to.
How does it compare to alternatives?
Some commonly considered alternatives to software engineering are:
- Academic research – this has scope for greater direct impact through doing research into important questions, higher potential for advocacy through building a public platform and usually offers more intellectual satisfaction. On the other hand, software engineering is much better than academia for earning to give, it is much easier to get jobs and you get much faster and clearer feedback on your work. An interesting case study of someone choosing between academia and software engineering is this tenured Harvard professor who left academia to go work at Google.
Quantitative finance – there are many roles in quantitative trading and hedge funds that use programming skills, as well as machine learning and modeling skills. We suspect the earnings are higher, although the direct value of the work is likely to be lower, and the level of competition is higher. In terms of keeping options open, if you are choosing between doing software engineering at a technology company and a role in quantitative finance, our impression is that it is probably easier to go from a finance role to a software engineering role than it is the other way. For a comparison of working at large tech companies, startups and quant hedge funds, see this Quora thread.
Founding a startup or joining as an early employee– has potential for greater earnings if you are successful, but is much more stressful, the hours are much longer and it is harder to leave than a software engineering job. Commonly given advice is that you should only start a startup if you are highly motivated to build a product that you are incredibly passionate about. For more on choosing whether to start a startup, see this post by Dustin Moskovitz and this post by Matt Clifford.
If you want to do it, what should you do?
Learning to program
First you’ll need to learn to program. There are three main ways to do that:
- Learning on your own. We know of many people who got junior software engineer jobs in less than a year of learning on their own. There are many great introductory computer science and programming courses online. Which is best mainly depends on your taste and learning style, so we recommend that you try a few and pick the one you like the most. Some popular courses to try out: Udacity’s Intro to Computer Science, MIT’s Introduction to Computer Science and Programming and Stanford’s Programming Methodology.
Attending a coding 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 about App Academy, read our interview with one of their instructors.
Studying computer science at university (or another subject involving lots of programming). This will give you a better theoretical understanding of computing (which can 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.
Getting your first job
Once you know how to program, you’ll want to get your first job. Here’s one in-depth guide on how to do that.
Larger companies have graduate schemes. For smaller companies, you’ll have to reach out directly and through your network.
Once you get to the interview, you may be given technical challenges to complete at home within a particular timeframe. Some companies will ask you questions about algorithms. It may help to study algorithms, and to study the most popular interview guide, Cracking the Coding Interview. Once you get an offer, it is usually good to negotiate for a better deal.
If you only read one thing, then read Things I Wish Someone Had Told Me When I Was Learning How to Code.
Other useful links:
What it’s like being a web-developer at different types of companies.
Boyle, Roger, Janet Carter, and Martyn Clark. “What makes them succeed? Entry, progression and graduation in Computer Science.” Journal of Further and Higher Education 26.1 (2002): 3-18.
Mayer, Richard E., Jennifer L. Dyck, and William Vilberg. “Learning to program and learning to think: what’s the connection?.” Communications of the ACM29.7 (1986): 605-610.
Roddan, Matt. “The determinants of student failure and attrition in first year computing science.” Computing Science, Glasgow University, project Summer(2002).
Wilson, Brenda Cantwell, and Sharon Shrock. “Contributing to success in an introductory computer science course: a study of twelve factors.” ACM SIGCSE Bulletin. Vol. 33. No. 1. ACM, 2001.