The most persistent misconception about software engineering is that the job is essentially solitary coding — a developer alone at a screen, translating requirements into working programmes through pure technical work. This image is accurate for perhaps a third of the actual job at most companies, and an even smaller fraction at senior levels. The rest involves code review, system design discussions, debugging production incidents at 2am, explaining technical tradeoffs in product planning meetings, mentoring colleagues, writing documentation, and navigating the organisational dynamics of large engineering organisations.

This gap between the perception and the reality matters for two groups. Aspiring software engineers need an accurate picture of what they are actually signing up for — including both the genuinely interesting parts (system design, technically challenging problems, building things used by millions of people) and the unglamorous but unavoidable parts (on-call rotations, meetings, legacy code). Managers and non-engineers working alongside software teams need to understand what engineers are actually doing when they are not visibly writing code, because misunderstanding this creates unrealistic expectations, poor planning, and friction.

This guide covers the full scope of software engineering work — day-to-day responsibilities, the level system at major technology companies (with salary data), the frontend/backend/fullstack distinction, career progression from L3 to L7+, and what getting started in the field actually requires. The numbers come from verified sources including Levels.fyi, Bureau of Labor Statistics data, and published compensation surveys.

"Programming is not about typing code. It's about thinking." — Leslie Lamport, Turing Award winner and creator of LaTeX


Key Definitions

System design: The process of defining the architecture of a software system — how components fit together, how data flows, how the system handles load, failure, and scale. System design is a core senior engineering skill and a primary focus of technical interviews at major companies.

Code review: The practice of having peers examine code changes before they are merged into the main codebase. Reviews catch bugs, enforce coding standards, and transfer knowledge. Most engineering teams require at least one reviewer approval before merging.

On-call rotation: A schedule by which engineers take turns being the first responder to production incidents outside business hours. On-call engineers carry a pager (now typically a phone alert through PagerDuty or similar) and are responsible for triaging and resolving alerts that cannot wait until morning.

Technical debt: The accumulated cost of previous shortcut decisions in a codebase. Code written quickly to meet a deadline is often harder to maintain, extend, and debug than code written carefully — the "debt" is the future work required to address those shortcuts.

Continuous integration / continuous deployment (CI/CD): Automated pipelines that build, test, and deploy code changes. Engineers commit code to a repository; the CI/CD system automatically runs tests and, if they pass, deploys the change to production. Managing and improving these pipelines is a real part of engineering work.


What a Software Engineer Does: The Real Day-to-Day

An engineer's day at a mid-to-large technology company typically divides across five types of activity, in varying proportions depending on seniority and role.

Writing Code

New code — implementing features, building services, writing scripts — is what most people imagine when they think of software engineering work. At junior levels, this occupies perhaps 50-60% of working time. At senior and staff levels, it can drop to 20-30% as coordination, design, and review work expands.

Writing code well requires more than knowing language syntax. It involves understanding the codebase's existing patterns and conventions, writing tests that cover meaningful cases, handling edge cases and error conditions, considering how the change affects performance and reliability, and writing code that colleagues can read and maintain rather than just code that works.

Code Review

Most engineering teams require changes to be reviewed by one or more peers before merging. Code review is not simply rubber-stamping. Good reviewers check correctness, security, test coverage, performance implications, consistency with architectural patterns, and readability. Senior engineers often spend 1-2 hours per day reviewing colleagues' code — time that does not produce code output but is critical to overall team quality and knowledge sharing.

System Design and Architecture

As engineers progress, they spend increasing time thinking about how systems should be structured rather than how individual pieces of code should be written. System design involves questions like: how should this service communicate with others (REST, gRPC, event streams)? How will the system handle 10x current load? What happens when this dependency is unavailable? How do we make this observable when things go wrong?

At staff engineer level and above, system design is the dominant technical work. This involves writing design documents (sometimes called design docs or RFCs — Requests for Comment), presenting proposals for peer feedback, and guiding implementation decisions across multiple teams.

Debugging and Incident Response

Software breaks. Bugs escape to production; services go down; performance degrades under load. Debugging is a genuine skill — the ability to form hypotheses, examine logs and metrics, isolate variables, and identify root causes in large systems. Some engineers find this genuinely engaging; others find it stressful. All of them must be able to do it.

On-call rotations ensure that someone is accountable for responding to production incidents around the clock. Being on-call means being reachable 24/7 for a rotation period (typically one week per month in well-run organisations) and accepting that some on-call periods will be quiet while others will involve multiple middle-of-the-night incidents.

Meetings and Communication

Software engineering at product companies involves significant meeting load: daily standups (15-30 minutes of status updates and blocker identification), sprint planning (setting work goals for the coming two weeks), design reviews (discussing technical proposals), product planning (working with PMs and designers on upcoming features), and one-on-ones with managers and mentors. Estimates from studies of engineering time use place meetings at 20-35% of total work time for mid-level engineers and higher for senior and staff engineers.

Written communication matters as much as meeting participation. Design documents, postmortem write-ups (analyses of production incidents), technical guides, and comment threads in code reviews collectively constitute a large volume of engineering writing that directly affects team knowledge and decision quality.


The Level System: L3 to L7+ at Major Technology Companies

Large technology companies use levelling systems to standardise career progression and compensation benchmarking. Google's system is widely referenced because it is publicly discussed and companies often benchmark against it.

L3 (Entry Level / New Graduate): Can implement defined tasks with limited guidance. Learning the codebase, tools, and team processes. Expected to ask for help frequently and deliver assigned work accurately.

L4 (Software Engineer II / Confident Individual Contributor): Works independently on well-scoped features. Contributes to code reviews. Identifies and resolves bugs. Makes reasonable technical decisions within established patterns.

L5 (Senior Software Engineer): Leads features or small projects end-to-end. Makes significant technical decisions. Mentors junior engineers. Begins influencing the broader technical direction of the team. The modal level for experienced engineers at major companies.

L6 (Staff Software Engineer): Drives technical direction across multiple teams or a major component. Identifies problems that teams are not seeing, proposes and drives cross-cutting improvements. Writing and reviewing design documents that affect significant parts of the system.

L7 (Senior Staff / Principal Software Engineer): Organisation-wide technical leadership. Identified with the company's most technically significant systems. Shapes how engineering is practised. Very rare — fewer than 2% of engineers at major companies reach this level.

L8+ (Distinguished Engineer / Fellow): Industry-wide recognition. Fewer than a dozen at Google or Meta. Considered among the most technically accomplished people in the field.

Salary by Level (United States, Total Compensation including Equity, 2024)

Data from Levels.fyi, aggregating self-reported compensation at major technology companies.

Level Google Meta Amazon Industry Average
L3 / Entry $180,000 - $220,000 $170,000 - $210,000 $155,000 - $190,000 $100,000 - $140,000
L4 $220,000 - $300,000 $220,000 - $290,000 $175,000 - $230,000 $130,000 - $180,000
L5 / Senior $300,000 - $420,000 $290,000 - $400,000 $225,000 - $320,000 $160,000 - $220,000
L6 / Staff $400,000 - $600,000 $380,000 - $580,000 $300,000 - $450,000 $200,000 - $300,000
L7 / Sr Staff $550,000 - $900,000+ $500,000 - $850,000+ $400,000 - $650,000+ $280,000 - $450,000+

"Industry average" reflects typical technology companies outside the FAANG tier. Startups may pay less in cash but offer equity that can be highly valuable upon a liquidity event.

Outside the United States, salaries are substantially lower. UK senior engineers average GBP 80,000-130,000. German engineers earn EUR 75,000-110,000. These gaps reflect both cost of living differences and the concentration of high-paying technology employers in US markets.


Frontend vs Backend vs Fullstack Engineering

Frontend engineering focuses on the user-facing layer of software: browsers and mobile applications. Core technologies include HTML, CSS, and JavaScript, with modern frontends typically built using frameworks like React, Vue, or Angular. Frontend engineers care about performance (page load times, rendering efficiency), accessibility (ensuring the product works for users with disabilities), and visual correctness across browsers and screen sizes.

Backend engineering focuses on server-side systems: the APIs that serve data to frontends, the databases that store it, the services that process it, and the infrastructure that keeps everything running. Languages commonly used include Python, Java, Go, Rust, Node.js, and C++. Backend engineers care about reliability, performance under load, data consistency, and security.

Fullstack engineering describes engineers who work competently across both layers. True fullstack proficiency — meaning real depth in both frontend and backend — is less common than the title suggests. Most "fullstack" engineers have a primary orientation and functional competence in the other area. Fullstack roles are more common at startups and smaller companies where resource constraints require individuals to span the entire stack.

Specialisations within these categories include mobile engineering (iOS, Android), platform engineering (building internal developer infrastructure), site reliability engineering (SRE, focused on production reliability), and data engineering (building data pipelines and infrastructure).


How to Become a Software Engineer

Computer science degree: The traditional path provides strong foundations in algorithms, data structures, computer architecture, operating systems, and software design that remain relevant throughout a career. A CS degree from a strong university facilitates entry to FAANG-tier companies through campus recruiting.

Bootcamp: Intensive programmes of 12-26 weeks teach practical web development skills and help graduates build portfolios. Bootcamp graduates regularly land roles at technology companies, though typically not at FAANG level without additional preparation. Outcomes vary significantly by programme quality and individual effort.

Self-taught: Many professional engineers are self-taught, particularly in frontend and web development. Free resources (freeCodeCamp, The Odin Project, MIT OpenCourseWare) combined with consistent project building and community participation are viable paths. Getting the first job without a degree or bootcamp credential requires a strong portfolio and network.

Technical interview preparation — in particular, practising algorithms and data structures problems on platforms like LeetCode — is essentially mandatory for entry into major technology companies, regardless of how you learned to program.


Practical Takeaways

The engineers who advance fastest are typically not the ones who write code most quickly — they are the ones who communicate clearly, make thoughtful decisions about tradeoffs, help their colleagues succeed, and understand enough about the business context to work on what actually matters. Technical skill is necessary but not sufficient at L5 and above.

On-call rotations, code reviews, and design documents are not interruptions to the real work of engineering — they are the real work. Treating them as second-class to coding output is a misunderstanding of where engineering value is actually generated at scale.


References

  1. Larson, W. "An Elegant Puzzle: Systems of Engineering Management." Stripe Press, 2019.
  2. Levels.fyi. "Software Engineer Salary Data by Level." Levels.fyi, accessed 2024.
  3. Bureau of Labor Statistics. "Occupational Outlook Handbook: Software Developers." BLS.gov, 2023-24 edition.
  4. Fowler, M. "Refactoring: Improving the Design of Existing Code." Addison-Wesley, 2nd edition, 2018.
  5. Google. "Site Reliability Engineering: How Google Runs Production Systems." O'Reilly Media, 2016.
  6. McConnell, S. "Code Complete: A Practical Handbook of Software Construction." Microsoft Press, 2nd edition, 2004.
  7. DeMarco, T., & Lister, T. "Peopleware: Productive Projects and Teams." Dorset House, 3rd edition, 2013.
  8. Patterson, D., & Hennessy, J. "Computer Organization and Design." Morgan Kaufmann, 6th edition, 2020.
  9. Stripe. "The Developer Coefficient: Software Engineering and the GDP." Stripe research report, 2019.
  10. Evans, E. "Domain-Driven Design." Addison-Wesley, 2003.
  11. Bass, L., Clements, P., & Kazman, R. "Software Architecture in Practice." Addison-Wesley, 4th edition, 2021.
  12. Stack Overflow. "Developer Survey." Stack Overflow, 2024.

Frequently Asked Questions

What does a software engineer actually do beyond writing code?

Code writing typically accounts for only 30-50% of a software engineer's time. The rest involves code review, system design, debugging production issues, attending planning meetings, writing documentation, mentoring colleagues, and participating in on-call rotations. Senior engineers spend progressively more time on architecture and cross-team coordination.

What is the difference between L3, L4, and L5 engineers at FAANG companies?

At Google, Meta, and similar companies, L3 is entry-level (new graduate), L4 is a confident independent contributor, L5 is a senior engineer who leads projects and mentors others, L6 is a staff engineer setting technical direction across multiple teams, and L7+ is principal or distinguished engineer with org-wide or company-wide impact.

What is the difference between frontend, backend, and fullstack engineers?

Frontend engineers build what users see and interact with — browsers, mobile apps, and UI components. Backend engineers build server-side logic, APIs, databases, and infrastructure. Fullstack engineers work across both. In practice, most engineers specialise with some fluency in adjacent areas, rather than being equally expert in all.

How much do software engineers earn at FAANG companies?

At Google, Meta, Amazon, Apple, and Netflix, L3 engineers earn \(150,000-\)200,000 in total compensation including equity and bonus. L4 earns \(200,000-\)280,000. L5 earns \(280,000-\)400,000. L6 staff engineers can earn \(400,000-\)600,000. These figures are significantly above industry average and reflect Silicon Valley market rates.

Do software engineers need a computer science degree?

A CS degree is not strictly required. Many working engineers entered through bootcamps, self-study, or adjacent degrees in maths or physics. However, a CS degree provides strong foundations in algorithms, data structures, and systems that remain relevant for technical interviews at top companies and for senior system design work.