Bisect, don't guess
When a bug appeared somewhere between a working version and a broken one, binary-search the history instead of eyeballing the diff — check the midpoint, then repeat until one change is left standing.
Software Engineer · Writes, tests and maintains the code that runs modern life — and is one of the first professions watching AI automate its own daily work.
Darker cells mean a higher score for this topic on that metric.
LessMore
Last reviewed Sources & creditsMedia creditsMethodology
Most days split between writing new code, reading other people's code during review, fixing bugs, and talking to teammates about what to build next. Meetings, planning and mentoring take up more time than newcomers expect. A senior engineer often writes less code personally than a junior one, spending more time on design decisions, reviews and unblocking others.
No, but it remains the most common and lowest-friction route. A four-year degree teaches algorithms, data structures and systems concepts that are expensive to learn on the job. Bootcamp graduates and self-taught engineers do get hired, especially by smaller companies, but usually need a strong portfolio or open-source work to substitute for the credential.
Parts of it already are. Tools built into modern code editors now write a large share of routine code — boilerplate, first-draft tests, translations between languages — for engineers who use them regularly. What is much harder to automate is deciding what to build, why, and how a system should be shaped so it survives contact with real users and failure.
It varies enormously by country and company. In the United States the median is around $133,000 a year; in Germany roughly €69,000; in India, where the industry employs the most people, a national average is closer to ₹900,000. Senior and staff engineers at large technology companies can earn several times the national median once stock compensation is included.
In practice, little — the titles overlap and companies use them inconsistently. 'Programmer' is the oldest term and emphasises writing code; 'developer' is common in web and product companies; 'software engineer' leans on the idea of applying disciplined process, testing and design, borrowed from older engineering fields, to building software. Job descriptions rarely distinguish them consistently.
At most established technology companies, yes: a live or take-home technical interview, often involving algorithm problems on a shared document or whiteboard, remains the standard filter, alongside a system-design round for more senior roles. Smaller companies and startups are more likely to substitute a paid trial project, a portfolio review, or a conversation about past work.
The image of an engineer typing continuously for eight hours is mostly wrong. Reading other people's code, reasoning about a failure with no obvious cause, and explaining a technical trade-off to people who are not engineers take up as much of the job as writing new code — often more, for anyone past their first couple of years.
The craft passed down inside the profession is less about which language to learn and more about habits of mind: how to search for a bug systematically instead of guessing, when to leave working code alone, and when deleting code is the most valuable thing you did all week.
Breaking a vague, large request into small, independently buildable and testable pieces — the skill that most separates productive engineers from ones who stall on big tasks.
Systematically narrowing down where and why a system misbehaves, rather than guessing and changing things until it happens to work.
Choosing how services, data and teams should be divided so the whole thing can keep changing safely for years, not just work on day one.
Explaining a technical trade-off to a non-engineer, writing a change up clearly for reviewers, and negotiating scope — most professional code is read and argued about far more than it is written.
Writing checks that catch a broken change before a user does, and keeping a codebase legible enough that the next person — often the same engineer, months later — can safely modify it.
Languages, frameworks and now AI tools turn over every few years; engineers who stop deliberately learning after their first job plateau quickly.
Catching up on overnight alerts and messages, then a short stand-up meeting where the team says what it is working on and what is blocking it.
The best-protected block of the day, ideally with notifications off, spent implementing a feature or fix that needs sustained concentration.
A genuine break; many engineers report this is the first thing that disappears in a crunch, and the first thing they regret losing.
Reading colleagues' pull requests, pairing on a hard problem, and the design or planning meetings that tend to cluster in the afternoon.
Finishing and shipping the day's change, watching it roll out safely, and leaving notes for tomorrow or for whoever is on call overnight.
Personal time and sleep — unless it is an on-call week, when a phone alert can turn 3 a.m. into an unplanned production incident.
Craft knowledge practitioners actually pass on — not motivation.
When a bug appeared somewhere between a working version and a broken one, binary-search the history instead of eyeballing the diff — check the midpoint, then repeat until one change is left standing.
The full error message, stack trace and surrounding log lines usually contain the answer already; jumping straight to the source and guessing wastes the one piece of evidence the computer freely gave you.
When a feature is hard to add, that is usually a sign the code is shaped wrong for it. Refactor first, with no behavior change, until the feature becomes a small, obvious diff — then make that diff.
Before deleting or simplifying code, a config value, or a check you don't understand, find out why it was put there. It may be quietly protecting against a failure that hasn't happened in years for exactly that reason.
Code that no longer exists cannot have a bug, cannot confuse the next reader, and cannot need updating. Removing dead paths and unused features should be celebrated the same way shipping a feature is.
Explain the problem out loud, line by line, to a colleague or even an inanimate object before asking for help. The act of articulating it precisely often surfaces the bug before anyone answers.
Visual Studio Code and JetBrains' IDEs dominate; both now build AI-assisted autocomplete and chat directly into the editor.
The version-control system nearly the whole industry standardised on after Torvalds wrote it in 2005; almost nothing ships without it.
Jira, Linear or GitHub Issues turn a backlog of bugs and features into something a team can plan a week or a quarter around.
Automated systems that build, test and deploy code on every change, turning a release from a nervous manual event into a routine one.
Tools like GitHub Copilot now write a large share of the lines an engineer accepts, shifting the daily job toward reviewing and directing rather than typing.
Choosing a trendy language, framework or architecture because it looks good on a resume rather than because it fits the problem, leaving behind complexity the next team has to maintain.
Pattern-matching to a remembered fix instead of reading what the program is actually reporting, which can burn hours chasing the wrong cause.
Scrapping a working system to rebuild it 'properly' from scratch is a famously risky move — Netscape's late-1990s full rewrite of its browser is a widely cited case where it cost the company its market lead.
Closest neighbours on the six-score profile — not the same field only.
Finds patterns and builds predictive models from data — a 2008 job title built on three centuries of counting, testing and visualizing evidence.
AI-resistant 38 📦Builds the systems that train, deploy, monitor and govern machine-learning models in production.
AI-resistant 54 🗺️Decides what a company should build next, and why — turning customer needs, business goals and engineering limits into one shared plan nobody else fully owns.
AI-resistant 50 🔐Protects systems, data and people by finding, preventing and responding to digital attacks.
AI-resistant 63 🌿Leads the strategy, measurement and reporting that helps organizations reduce environmental and social harm while meeting business obligations.
AI-resistant 66 🧾The keeper of the books: heir to a craft so old it invented writing itself, now negotiating with the software built to automate it.
AI-resistant 35Designs and tests the algorithms behind machine intelligence, in a field now racing to automate a growing share of its own research process.
AI-resistant 50 🛰️Designs, analyzes and certifies the aircraft, rockets and spacecraft that leave the ground, working to safety margins that leave no room for guessing.
AI-resistant 74 🌉The profession that turns rivers, rock and gravity into bridges, roads and clean water — civilization's quiet load-bearing trade since Imhotep.
AI-resistant 72 🔌Designs and fabricates the transistors inside every computer, phone and weapon, using machines precise enough that only a few factories on Earth can run them.
AI-resistant 60 🦾Designs the machines that sense, decide and act in the physical world, where the hard problem was never intelligence but the world itself.
AI-resistant 65 🔐Protects systems, data and people by finding, preventing and responding to digital attacks.
AI-resistant 63 📦Builds the systems that train, deploy, monitor and govern machine-learning models in production.
AI-resistant 54 🌬️Designs, builds and improves wind, solar, storage and grid systems that turn renewable resources into dependable electricity.
AI-resistant 72