This is the full report on which our Software engineering at large tech-firms career profile is based.

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.

An example of source code
An example of source code

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 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.

Image from Century Link Labs
Image from Century Link Labs

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.

Earnings

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.

USA

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

MeanMedian
Systems/Applications/Web developers$99,000n/a
Systems developers$106,000$103,000
Applications developers$100,000$96,000
Web developers$69,000$63,000

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.

StageUsual length of experience requiredUS (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 II2-4 years$81,000$96,000
Software engineer III4-6 years$96,000$113,000
Software engineer IV6-8 years$115,000$135,000
Software engineer V8-10 years$130,000$154,000
Senior Software Architect10+ years$156,000$184,000
Software Engineer Director10+ years$191,000$226,000
Top Software Development Executive15+ 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

NationalCaliforniaSilicon Valley
Systems/Applications/Web developers$99,000$118,000$139,000
Systems developers$106,000$124,000$138,000
Applications developers$100,000$120,000$142,000
Web Developers$69,000$80,000$107,000

US Software Developer Salary by Region

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).

Bootcamp salaries

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

StageBase SalaryTotal 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

UK earnings

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 salaryMean base salaryMean 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

Software engineer salaries UK and USA

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.

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 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.

Software developers outlook

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.

Web developers outlook

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.

Dow Jones U.S. Technology Index - Google Finance
Dow Jones U.S. Technology Index – Google Finance

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?

Career capital

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.

Exploration value

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?

Entry requirements

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.

Job satisfaction

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.

Further reading

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:

Sources

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.

Notes and references

  1. Software developers are a very closely related role and the terms software engineer and software developer are often used interchangeably. Often whether someone is a software engineer or a software developer just depends on what a company chooses to call a position. The official stated difference between the two is that in contrast with software developers, software engineers are able to apply the principles of engineering to the entire software development process (requirements, design, development, maintenance, testing and evaluation). In this profile we cover both these roles. Source
  2. "The terms Programmer and Software Engineer, contrary to popular belief, are not interchangeable. A programmer knows how to code and may have the technical skills needed to build meaningful products. A software engineer follows a systematic process of understanding requirements, working with stakeholders and developing a solution that fulfills their needs. A programmer tends to work alone. A software engineer is part of a larger team." The Difference Between Programming and Software Engineering, Udacity Blog)
  3. From Century Link Labs
  4. One field with an especially large potential for transforming human society is artificial intelligence. A popular introduction to the potential impact of artificial intelligence on human life is Smarter Than Us: The Rise of Machine Intelligence by Stuart Armstrong, and you can read an informal introduction to the topic on the Wait But Why blog.
  5. Rounded to nearest $1000. Bureau of Labor Statistics, U.S. Department of Labor, Occupational Employment Statistics on the Internet at http://www.bls.gov/oes/current/oes_nat.htm (visited May 18, 2015).
  6. Data from Salary.com, rounded to the nearest $1,000.
  7. Bureau of Labor Statistics
  8. Rounded to nearest $1000. Bureau of Labor Statistics, U.S. Department of Labor, Occupational Employment Statistics on the Internet at http://www.bls.gov/oes/current/oes_nat.htm (visited May 18, 2015). The "Systems/Applications/Web developers" is the weighted mean for these three types of developer. "Silicon Valley" is the San Jose-Sunnyvale-Santa Clara, CA metropolitan area.
  9. Its cost of living index is 148 (100 = US national average), according to the Council for Community and Economic Research via Wolfram Alpha
  10. 98% of our graduates have offers or are working in tech jobs. In 2014, SF graduates received an average salary of $105,000; in 2014, NY graduates received an average salary of $89,000."
  11. “$105k average graduate salary; 99% graduate hiring rate”
  12. Data from GlassDoor.com
  13. UK Office for National Statistics Annual Survey of Hours and Earnings, 2014.
  14. Course Report
  15. Nationally, the mean US salary for software developers and programmers is 40% higher than the mean in the UK ($95,000 in the US and $68,000 (£44,000) in the UK). Average salaries in California are about 55% higher than in London ($118,000 in California and $76,000 (£49,000) in London) and Silicon Valley salaries are about 80% higher than in London ($139,000 in Silicon Valley). The starting salaries of the top bootcamps in the US are around double those of UK bootcamps ($89,000 - $105,000 in the US and $39,000-$60,000 (£25,000 - £40,000) in the UK). The reported salaries on Glassdoor for a relatively junior Google software engineer are around 40% higher in the US than in the UK ($133,000 in the US and $93,000 (£60,000) in the UK).
  16. London’s cost of living index is 206.5 (100 = US national average), and Silicon Valley’s is 148, according to the Council for Community and Economic Research via Wolfram Alpha
  17. Wall Street Journal
  18. An example of this from Codecademy.
  19. Quora
  20. See for example this quora thread
  21. Survey
  22. Google runs its management and HR department in a highly data driven way, and even measures employees’ happiness levels. This is covered in more detail here. As of 2015, Google was ranked number 1 in Forbes ‘100 Best Companies to Work For’ list for 6 years running. Archived here. Accessed Mar 31 2015.