Careers - Specializations
Software Engineering is a very broad job family. Though all software engineers code, they may have different focus areas or specializations.
Product / Application Development (Front-end, Back-end, Full-stack, Android, iOS)
You may work on front-end, back-end, full stack, or mobile. The main focus is to develop products/features. It can be exciting to see people are using and loving your product, but can also be frustrating to feel "I'm just implementing the business logic", or "just translating designer's sketch to code".
Besides coding, "product sense" and "empathy for your users" are also critical for this type of roles, unless you want to blindly follow and totally rely on your PM, and be the junior software engineer forever.
Infra / Platform Engineers
Infra teams build internal tools, frameworks, libraries, etc.
This is not that related to business logic, your work is not measured by earnings or user churn rate or other business metrics, but more by system performance metrics like latency, throughput, and 99.999% reliability. It sometimes required more hardcore computer science knowledge, especially about distributed systems.
"Platform Engineering" is sometimes used in the cloud-native era. The goal to make the infra self-served.
Machine Learning Engineers / Data Scientist / Research Scientist
"Data Scientist" is an over used term. In some companies they are building machine learning models; however in some companies they are more like "data analysts": defining metrics, creating queries and dashboard, and model training is done by software engineers (called Ranking / Algorithm / ML Engineer).
Data Engineers work on Data Warehouse, data pipelines. Using tools like Hadoop, Spark, Presto, BigQuery, etc.
EngProd / DevProd / Productivity Engineering
Work alongside other engineers to identify constraints in a process and remove bottlenecks.
DevOps / SRE / Production Engineer / Release Engineer
The key to DevOps are monitoring and automation
SRE (Site Reliability Engineer) is a term coined by Google. One big part of SRE's job is oncall. Normally software engineer will be oncall when the product is newly launched, then it will be transferred to SRE.
SRE is what you get when you treat operations as if it’s a software problem.
Google explains the relationship of SRE and DevOps as:
class SRE implements DevOps
meaning DevOps is the "interface", the set of best practices, while SRE is a concrete "class", or job title that follow those best practices. However as a class may implement more than one interface, SRE is not limited to DevOps
Some SREs come with Sys Admin, Network Engineer, DevOps background, while others have coding and software engineering abilities. The latter has the same interviewing bar as SWE and can transfer to other SWE positions.
Some companies also use the title "Cloud Ops".
Compare different software development / deployment models:
- Dev develops it, SysAdmin runs it. "throw over the fence"
- DevOps: "You build it, you run it". Dev will be oncall.
- initial launch: Dev oncall, consult SRE, stabilized the deployement.
- deployment stablized: Dev "hand-off" to SRE to operate and be oncall.
Focus on testing. Similar to SRE, some test engineers have the coding / SWE background.
Customer Engineers / Sales Engineers / Solutions Engineers / Technical Support Engineer / Developer Relations Engineer
Well the names can be different, but they all work closely with customers, and are roughly divided by pre-sales vs post-sales.
A pre-sales engineer is focusing on getting new customer onboard, usually paired up with a salesperson.
A post-sales engineer is focusing on solving technical problems after the customer is fully onboarded.
Developer Relations Engineer exists in companies building platforms, APIs. (e.g. Google)
Privacy Engineers / Security Engineers
Arguably they may not be "software" engineer, but again titles could be used differently across companies.
Privacy and security are becoming hot topics now, and there are large engineering groups dedicated to those, for example, they may work on internal tools for data retention, wipeout, anonymization, encryption, etc.
Build internal tools.
Program Managers / Technical Program Managers
Program managers generally rely upon their engineering teammates when technical decisions are required.
TPMs typically don't execute engineering work themselves (e.g. write production code) but rather exercise their technical judgement to identify dependencies and make decisions to avoid technical issues.
- Hardware Engineers
- Firmware Engineers
- Network Engineers
- System Admins
- Database Engineer
Work on hardware / firmware.