GitHub

Software Engineering Landscape 2025: A Data-Driven White Paper


The software engineering profession is undergoing a structural shift on three axes simultaneously: AI tooling is becoming ambient infrastructure, containerization has eclipsed raw cloud provider usage as the dominant deployment primitive, and the polyglot stack has stabilized around a small core of battle-tested languages while appetite for systems languages like Rust and Go grows steadily. This white paper synthesizes the two most recent Stack Overflow Developer Surveys — 2024 (n=65,437) and 2025 (n=49,191) — into a coherent picture of where the discipline stands, where it is moving, and what practitioners and architects should pay attention to. Coverage spans six domains: language ecosystem, database landscape, cloud and infrastructure, web frameworks, AI tooling, and developer experience. A unified architecture diagram ties all six together at the close.


Stack Overflow’s annual developer survey remains the largest systematic cross-section of the global software engineering workforce. Two consecutive editions — 2024 and 2025 — provide enough data to distinguish signal from noise: trends that persist across both editions are structural; anomalies confined to one are methodological or cyclical. Where 2025 revised its question framing (notably, collapsing cloud platforms and package managers into a single “worked with” question), the directional implications are noted explicitly rather than elided.

I work as a senior engineer at a Fortune 100 technology company. This white paper consolidates survey findings into a reference document suitable for engineering teams, architects, and technical stakeholders evaluating tooling and platform decisions.


JavaScript, Python, SQL, and HTML/CSS form a durable four-language core that dominates both usage and stated desire across consecutive surveys. TypeScript’s continued ascent — from 39% to 44% — reflects the industry’s appetite for type-safety without abandoning the JavaScript ecosystem. Bash/Shell’s jump from 34% to 49% is arguably the most underreported signal: it reflects the normalization of DevOps and platform engineering as general developer responsibilities rather than specialist roles.

{
"data": [
{
"type": "bar",
"name": "Used 2024",
"x": ["JavaScript","HTML/CSS","Python","SQL","TypeScript","Bash/Shell"],
"y": [63, 53, 51, 51, 39, 34],
"marker": {"color": "#1565c0"}
},
{
"type": "bar",
"name": "Used 2025",
"x": ["JavaScript","HTML/CSS","Python","SQL","TypeScript","Bash/Shell"],
"y": [66, 62, 58, 59, 44, 49],
"marker": {"color": "#42a5f5"}
}
],
"layout": {
"title": "Most-Used Languages: 2024 vs 2025 (% of respondents)",
"barmode": "group",
"yaxis": {"title": "% of Respondents", "range": [0, 80]},
"xaxis": {"title": "Language"},
"legend": {"orientation": "h", "y": -0.2}
}
}

Rust and Go are the standout aspirational systems languages. Rust held the top spot on the “most admired” list for the ninth consecutive year in 2024 and ranks sixth on “want to work with” at 34.2% in 2025. Go sits at 27.4%. Their rise signals that performance-sensitive and cloud-native workloads are pulling developers toward memory-safe, compiled alternatives to C and C++. The aspiration data is a leading indicator: languages developers want to learn today become the languages organizations hire for in two to three years.

{
"data": [
{
"type": "bar",
"orientation": "h",
"x": [45.9, 41.6, 39.4, 39.1, 37.3, 34.2, 32.0, 27.4, 22.6, 19.4],
"y": ["Python","SQL","HTML/CSS","JavaScript","TypeScript","Rust","Bash/Shell","Go","C#","C++"],
"marker": {"color": "#2e7d32"}
}
],
"layout": {
"title": "Languages Developers Want to Work With — 2025 (Top 10, % of respondents)",
"xaxis": {"title": "% of Respondents"},
"margin": {"l": 120}
}
}
flowchart TD
classDef webLayer fill:#e3f2fd,stroke:#1565c0
classDef dataLayer fill:#fff3e0,stroke:#e65100
classDef sysLayer fill:#e8f5e9,stroke:#2e7d32
classDef glueLayer fill:#f3e5f5,stroke:#6a1b9a
START["New Engineering Project"] --> Q1{"Primary Domain?"}
Q1 -->|"Web / Frontend"| WEB["JavaScript / TypeScript<br>(React, Next.js, Node.js)"]
Q1 -->|"Data / ML / AI"| DATA["Python<br>(pandas, PyTorch, scikit-learn)"]
Q1 -->|"Systems / Performance"| SYS["Rust / Go / C++"]
Q1 -->|"Automation / DevOps"| GLUE["Bash/Shell / PowerShell"]
Q1 -->|"Enterprise / Backend"| ENT["Java / C# / SQL"]
WEB --> TS["TypeScript for<br>type-safe scale"]
DATA --> SQL2["SQL for<br>data access layer"]
SYS --> RUST["Rust for<br>memory safety"]
GLUE --> PIPE["Pipeline orchestration<br>& CI/CD scripts"]
ENT --> CLOUD["Cloud-deployed<br>microservices"]
class WEB,TS webLayer
class DATA,SQL2 dataLayer
class SYS,RUST sysLayer
class GLUE,PIPE glueLayer

PostgreSQL has overtaken MySQL as the default relational choice and widened its lead year-over-year, growing six percentage points to 57%. Redis is the second most notable mover, growing eight percentage points to 29%, reflecting the normalization of caching and pub/sub as first-class architectural concerns rather than performance afterthoughts. MongoDB held steady at 25-26%, suggesting NoSQL document databases have plateaued at a useful but specialist position in the stack.

Database2024 Usage2025 UsageΔ
PostgreSQL51%57%+6pp
MySQL42%41%−1pp
SQLite35%38%+3pp
Microsoft SQL Server26%31%+5pp
MongoDB26%25%−1pp
Redis21%29%+8pp
{
"data": [
{
"type": "bar",
"name": "2024",
"x": ["PostgreSQL","MySQL","SQLite","MS SQL Server","MongoDB","Redis"],
"y": [51, 42, 35, 26, 26, 21],
"marker": {"color": "#0f5132"}
},
{
"type": "bar",
"name": "2025",
"x": ["PostgreSQL","MySQL","SQLite","MS SQL Server","MongoDB","Redis"],
"y": [57, 41, 38, 31, 25, 29],
"marker": {"color": "#20c997"}
}
],
"layout": {
"title": "Database Usage: 2024 vs 2025 (% of respondents)",
"barmode": "group",
"yaxis": {"title": "% of Respondents", "range": [0, 70]},
"legend": {"orientation": "h", "y": -0.2}
}
}
flowchart LR
classDef source fill:#fff3e0,stroke:#e65100
classDef integration fill:#e8f5e9,stroke:#2e7d32
classDef target fill:#e3f2fd,stroke:#1565c0
classDef reporting fill:#f3e5f5,stroke:#6a1b9a
APP["Application Layer<br>(Backend Services)"] -->|"structured / relational"| PG["PostgreSQL<br>(51% → 57%)"]
APP -->|"embedded / mobile / testing"| SQLITE["SQLite<br>(35% → 38%)"]
APP -->|"legacy enterprise"| MSSQL["MS SQL Server<br>(26% → 31%)"]
APP -->|"document / flexible schema"| MONGO["MongoDB<br>(26% → 25%)"]
APP -->|"caching / pub-sub / queues"| REDIS["Redis<br>(21% → 29%)"]
APP -->|"legacy web / LAMP"| MYSQL["MySQL<br>(42% → 41%)"]
PG -->|"read replicas / analytics"| ANALYTICS["Analytics / Reporting Layer"]
REDIS -->|"session store / rate limit"| INFRA["Infrastructure Layer"]
class APP source
class PG,SQLITE,MSSQL integration
class MONGO,REDIS,MYSQL target
class ANALYTICS,INFRA reporting

The 2025 survey reframed “cloud platforms” to include build and package tooling — and the result is revealing. Docker at 71.8% is the single most-used platform in the entire survey, eclipsing AWS (43.8%) by nearly 30 percentage points. This is not a cloud-versus-container debate; it reflects that containerization is now a universal baseline, independent of which hyperscaler sits underneath. npm at 57.3% confirms that JavaScript ecosystem tooling is ubiquitous infrastructure, not just a language choice.

{
"data": [
{
"type": "bar",
"orientation": "h",
"x": [71.8, 57.3, 43.8, 41.3, 28.8, 26.6, 25.9, 24.8, 20.3, 17.9],
"y": ["Docker","npm","AWS","Pip","Kubernetes","Azure","Homebrew","Google Cloud","Cloudflare","Terraform"],
"marker": {
"color": ["#084298","#664d03","#ff9900","#0f5132","#326ce5","#0078d4","#bf4f00","#4285f4","#f6821f","#7b42bc"]
}
}
],
"layout": {
"title": "Cloud Platforms and Tools — 2025 (% worked with, top 10)",
"xaxis": {"title": "% of Respondents"},
"margin": {"l": 130}
}
}

The apparent drop in AWS, Azure, and GCP share is partly methodological — the 2025 question grouped Docker, npm, Kubernetes, and Pip into the same question, diluting pure cloud provider numbers. The directional signal that Cloudflare grew while hyperscalers plateaued is meaningful independent of the methodology change.

Provider20242025Δ
AWS52%43.8%−8.2pp
Azure30%26.6%−3.4pp
Google Cloud27%24.8%−2.2pp
Cloudflare16%20.3%+4.3pp
flowchart TD
classDef compute fill:#cfe2ff,stroke:#084298
classDef storage fill:#d1e7dd,stroke:#0f5132
classDef network fill:#fff3cd,stroke:#664d03
classDef identity fill:#f8d7da,stroke:#842029
DEV["Developer Workstation"] -->|"git push"| CI["CI/CD Pipeline<br>(GitHub Actions / GitLab)"]
CI -->|"docker build"| REG["Container Registry<br>(ECR / ACR / GCR)"]
REG -->|"deploy"| KUBE["Kubernetes Cluster<br>(28.8% usage)"]
KUBE --> SVC1["Service A<br>(Node.js / Python)"]
KUBE --> SVC2["Service B<br>(Go / Rust)"]
SVC1 -->|"reads/writes"| PG2["PostgreSQL"]
SVC1 -->|"cache"| RED2["Redis"]
SVC2 -->|"reads/writes"| PG2
KUBE -->|"exposed via"| CDN["Cloudflare CDN<br>(+4.3pp YoY)"]
CDN --> USERS["End Users"]
CLOUD["Hyperscaler<br>(AWS 43.8% / Azure 26.6% / GCP 24.8%)"] -.->|"managed infra"| KUBE
CLOUD -.->|"managed DBs"| PG2
IaC["Terraform<br>(17.9%)"] -->|"provisions"| CLOUD
class DEV,CI identity
class KUBE,SVC1,SVC2 compute
class PG2,RED2,REG storage
class CDN,CLOUD,IaC network

4.1 React and Node.js Hold — Next.js Grows

Section titled “4.1 React and Node.js Hold — Next.js Grows”

The web framework stack has been stable at the top but Next.js and ASP.NET Core are the notable growers. The React plus Next.js combination is becoming the dominant full-stack pattern, with Node.js and Express as the API layer underneath. jQuery’s persistence at 24% is a reminder that the long tail of production web applications runs on a very different stack than the conference circuit suggests.

Framework20242025Δ
Node.js44%50%+6pp
React42%46%+4pp
jQuery23%24%+1pp
Next.js19%21%+2pp
Express19%20%+1pp
Angular18%
ASP.NET Core20%
{
"data": [
{
"type": "bar",
"name": "2024",
"x": ["Node.js","React","jQuery","Next.js","Express","Angular"],
"y": [44, 42, 23, 19, 19, 18],
"marker": {"color": "#1565c0"}
},
{
"type": "bar",
"name": "2025",
"x": ["Node.js","React","jQuery","Next.js","Express","ASP.NET Core"],
"y": [50, 46, 24, 21, 20, 20],
"marker": {"color": "#42a5f5"}
}
],
"layout": {
"title": "Web Framework Usage: 2024 vs 2025 (% of respondents)",
"barmode": "group",
"yaxis": {"title": "% of Respondents", "range": [0, 60]},
"legend": {"orientation": "h", "y": -0.2}
}
}
flowchart LR
classDef webLayer fill:#e3f2fd,stroke:#1565c0
classDef dataLayer fill:#fff3e0,stroke:#e65100
classDef sysLayer fill:#e8f5e9,stroke:#2e7d32
classDef glueLayer fill:#f3e5f5,stroke:#6a1b9a
BROWSER["Browser / Client"] -->|"React 46%"| NEXTJS["Next.js<br>(SSR / SSG / RSC)"]
NEXTJS -->|"API routes"| EXPRESS["Express / Node.js<br>API Layer"]
NEXTJS -->|"server components"| NODE["Node.js Runtime<br>50% usage"]
EXPRESS --> DB1["PostgreSQL"]
EXPRESS --> DB2["Redis"]
LEGACY["Legacy Apps"] -->|"jQuery 24%"| BROWSER
ENTERPRISE["Enterprise Apps"] -->|"ASP.NET Core 20%<br>Angular"| BROWSER
class BROWSER,NEXTJS,EXPRESS,NODE webLayer
class DB1,DB2 dataLayer
class LEGACY glueLayer
class ENTERPRISE sysLayer

This is the sharpest signal across consecutive surveys. In 2024, 62% of respondents used AI tools. By 2025, 47% use AI tools daily and only 16% say they have no plans to adopt. The question has shifted from whether to adopt AI tools to how deeply they are integrated into the development workflow. Daily usage at nearly half the survey population means AI coding assistance is now a baseline expectation in the same way that syntax highlighting or version control is — not a productivity multiplier layered on top of existing work but part of the definition of the work itself.

{
"data": [
{
"type": "pie",
"labels": ["Daily", "Weekly", "Monthly or Infrequent", "No — but plan to", "No — no plans"],
"values": [47, 18, 14, 5, 16],
"hole": 0.4,
"marker": {
"colors": ["#1565c0", "#42a5f5", "#90caf9", "#bbdefb", "#e0e0e0"]
}
}
],
"layout": {
"title": "AI Tool Usage Frequency — 2025",
"annotations": [{"text": "2025", "x": 0.5, "y": 0.5, "font": {"size": 16}, "showarrow": false}]
}
}

Code writing dominates at 84.1% of AI tool users but the spread across the workflow is significant — from debugging to documentation to testing. The 13.6% using AI for commit and code review signals early emergence of autonomous review loops. Deployment and monitoring at 4.6% represents the frontier: AI-assisted operations is where the next wave of integration is forming.

{
"data": [
{
"type": "bar",
"orientation": "h",
"x": [84.1, 69.3, 58.2, 41.2, 35.7, 31.7, 27.9, 13.6, 12.5, 5.4, 4.6],
"y": [
"Writing code",
"Search for answers",
"Debugging and help",
"Documenting code",
"Generating content/data",
"Learning a codebase",
"Testing code",
"Commit and code review",
"Project planning",
"Predictive analytics",
"Deployment and monitoring"
],
"marker": {"color": "#6a1b9a"}
}
],
"layout": {
"title": "AI Tool Use Cases — 2024 (% of AI tool users)",
"xaxis": {"title": "% of AI tool users"},
"margin": {"l": 210}
}
}
flowchart TD
classDef compute fill:#cfe2ff,stroke:#084298
classDef storage fill:#d1e7dd,stroke:#0f5132
classDef network fill:#fff3cd,stroke:#664d03
classDef identity fill:#f8d7da,stroke:#842029
REQ["Requirements and<br>Planning (12.5%)"] -->|"AI-assisted spec drafting"| DESIGN["Design and<br>Architecture"]
DESIGN -->|"AI code generation (84.1%)"| CODE["Code Writing<br>and Review (13.6%)"]
CODE -->|"AI debugging (58.2%)"| DEBUG["Debug and<br>Test (27.9%)"]
DEBUG -->|"AI test generation"| TEST["Testing and<br>QA"]
TEST -->|"AI docs (41.2%)"| DOCS["Documentation"]
DOCS -->|"AI deployment monitoring (4.6%)"| DEPLOY["Deploy and<br>Monitor"]
DEPLOY -->|"feedback loop"| REQ
SEARCH["AI Search and<br>Answer (69.3%)"] -.->|"ambient assist"| CODE
SEARCH -.->|"ambient assist"| DEBUG
LEARN["Learning Codebase<br>(31.7%)"] -.->|"onboarding"| CODE
class REQ,DESIGN identity
class CODE,DEBUG,TEST compute
class DOCS,DEPLOY storage
class SEARCH,LEARN network

The pandemic-era remote spike has settled into a hybrid norm. Full remote is declining slightly while hybrid has become the dominant arrangement for professional developers. In-person remains steady at 19% across both survey editions, suggesting that the organizations that required office presence in 2024 have not meaningfully changed their position.

Work Arrangement20242025
Fully remote42%38%
Hybrid39%43%
In-person / office19%19%
{
"data": [
{
"type": "bar",
"name": "2024",
"x": ["Fully Remote", "Hybrid", "In-Person"],
"y": [42, 39, 19],
"marker": {"color": "#1565c0"}
},
{
"type": "bar",
"name": "2025",
"x": ["Fully Remote", "Hybrid", "In-Person"],
"y": [38, 43, 19],
"marker": {"color": "#42a5f5"}
}
],
"layout": {
"title": "Work Arrangement: 2024 vs 2025 (% of respondents)",
"barmode": "group",
"yaxis": {"title": "% of Respondents", "range": [0, 55]},
"legend": {"orientation": "h", "y": -0.2}
}
}

The survey consistently identifies the same friction sources year-over-year. Technical debt at 62% is the dominant drag — and it correlates strongly with the hybrid work transition, where legacy codebases surface more visibly when onboarding remote contributors. Meetings and unclear requirements together account for 90 percentage points of cited friction, pointing to a process and communication problem as much as a tooling one.

Friction Source% Citing It
Technical debt62%
Meetings and interruptions46%
Unclear requirements44%
Inadequate tooling32%
Slow CI/CD pipelines28%
{
"data": [
{
"type": "bar",
"x": ["Technical Debt", "Meetings and<br>Interruptions", "Unclear<br>Requirements", "Inadequate<br>Tooling", "Slow CI/CD"],
"y": [62, 46, 44, 32, 28],
"marker": {
"color": ["#b71c1c","#c62828","#e53935","#ef5350","#ef9a9a"]
}
}
],
"layout": {
"title": "Top Developer Friction Sources — 2025 (% citing)",
"yaxis": {"title": "% of Respondents", "range": [0, 75]},
"xaxis": {"title": "Friction Source"}
}
}

Systems languages command a consistent premium. Rust, Go, and Scala developers report the highest median compensation globally — validating the investment signal from the aspirational language data in Section 1.2. The compensation gradient from systems languages down to scripting languages is steeper than it was five years ago, reflecting that memory-safe, compiled language expertise is genuinely scarce relative to demand.

{
"data": [
{
"type": "bar",
"orientation": "h",
"x": [120, 118, 115, 112, 110, 105, 98, 94, 88, 82],
"y": ["Rust","Go","Scala","Kotlin","Swift","TypeScript","Python","Java","JavaScript","PHP"],
"marker": {"color": "#2e7d32"}
}
],
"layout": {
"title": "Median Global Developer Compensation by Language — 2025 (USD $K, author's modeled estimate)",
"xaxis": {"title": "Median Salary (USD $K)"},
"margin": {"l": 120}
}
}

Author’s modeled estimate. Figures above are directional estimates modeled from survey percentile ranges and should not be treated as primary sourced data. They are included to illustrate the relative ordering across languages, not as absolute benchmarks.


7. The Converging Architecture: A Unified View

Section titled “7. The Converging Architecture: A Unified View”

The six domains analyzed above do not operate independently. Language choices constrain framework choices; framework choices drive database patterns; database patterns inform caching strategy; and AI tooling overlays the entire workflow horizontally. The diagram below synthesizes the full modern stack as revealed by two consecutive survey editions.

flowchart TD
classDef compute fill:#cfe2ff,stroke:#084298
classDef storage fill:#d1e7dd,stroke:#0f5132
classDef network fill:#fff3cd,stroke:#664d03
classDef identity fill:#f8d7da,stroke:#842029
subgraph AI_LAYER["AI Tooling Layer"]
AICODE["Code Generation<br>(Copilot / Cursor)"]
AIDBG["Debugging and<br>Test Generation"]
AIDOC["Docs and<br>Review"]
end
subgraph DEV_LAYER["Developer Experience"]
IDE["IDE / Editor<br>(VS Code dominant)"]
GIT["Git / GitHub<br>(source of truth)"]
CICD["CI/CD<br>(GitHub Actions)"]
end
subgraph APP_LAYER["Application Layer"]
NEXT2["Next.js / React<br>(frontend 46%)"]
NODE2["Node.js / Express<br>(API 50%)"]
PY["Python<br>(ML / data 58%)"]
GO2["Go / Rust<br>(systems / perf)"]
end
subgraph DATA_LAYER["Data Layer"]
PG3["PostgreSQL<br>(57%)"]
RED3["Redis<br>(29%)"]
MONGO2["MongoDB<br>(25%)"]
end
subgraph INFRA_LAYER["Infrastructure Layer"]
DOCK["Docker<br>(71.8%)"]
KUBE2["Kubernetes<br>(28.8%)"]
CF["Cloudflare<br>(20.3%)"]
AWS2["AWS / Azure / GCP<br>(hyperscalers)"]
TF["Terraform<br>(IaC 17.9%)"]
end
AICODE -.->|"ambient assist"| IDE
AIDBG -.->|"ambient assist"| IDE
AIDOC -.->|"ambient assist"| GIT
IDE --> GIT
GIT --> CICD
CICD -->|"docker build"| DOCK
DOCK --> KUBE2
KUBE2 --> NEXT2
KUBE2 --> NODE2
KUBE2 --> PY
KUBE2 --> GO2
NODE2 --> PG3
NODE2 --> RED3
PY --> PG3
PY --> MONGO2
KUBE2 -->|"exposed via"| CF
TF -->|"provisions"| AWS2
AWS2 -.->|"managed infra"| KUBE2
class AICODE,AIDBG,AIDOC identity
class NEXT2,NODE2,PY,GO2 compute
class PG3,RED3,MONGO2 storage
class DOCK,KUBE2,CF,AWS2,TF network

Eight themes emerge from the data with enough consistency across both survey editions to treat as durable signals rather than noise.

#ThemeSignalImplication
1AI is ambient, not optional47% daily AI tool usage in 2025Invest in prompt engineering and AI-native workflows; teams not integrating AI assistance are accruing a productivity gap
2Docker is the universal baseline71.8% usage, number one platform across all categoriesContainerize everything; cloud is the runtime, not the product
3PostgreSQL won+6pp YoY, number one databaseDefault to Postgres unless document semantics or cache semantics mandate otherwise; the operational ecosystem around it is unmatched
4TypeScript is the enterprise JavaScript+5pp YoY to 44% usageAll greenfield JavaScript projects should default to TypeScript; the migration cost of retrofitting types onto a large JavaScript codebase is consistently underestimated
5Rust and Go are the aspirational systems layerRust most admired for ninth consecutive year; Go at 27.4% want-to-learnSystems rewrites in Rust and Go are de-risked; the ecosystem is mature enough for production workloads at scale
6Cloudflare is emerging as the fourth cloud+4.3pp YoY, now at 20.3%Edge-first architectures are viable; evaluate CDN as compute for latency-sensitive workloads before defaulting to a regional hyperscaler deployment
7Technical debt is the number one friction source62% of developers cite itRefactoring budgets need to sit alongside feature delivery as a first-class planning item, not a quarterly cleanup exercise
8Redis normalized+8pp YoY to 29%Caching and pub/sub are now first-class architectural concerns; designing a new service without a caching layer requires explicit justification

The through-line connecting all eight themes is the same: complexity is being absorbed at lower layers of the stack so that application developers can operate at higher abstraction levels. Docker absorbed deployment complexity. PostgreSQL absorbed the operational cost of running multiple specialized databases. TypeScript absorbed the runtime error surface of JavaScript. AI tooling is beginning to absorb the cognitive overhead of boilerplate, documentation, and search.

The practical implication for engineering organizations is that the decision surface has narrowed, not expanded. The right default stack in 2025 — TypeScript on Node.js and React, PostgreSQL with Redis, deployed via Docker on Kubernetes to a hyperscaler with Cloudflare in front — is not a controversial choice. The question is execution quality on top of that stable foundation: how well teams manage technical debt, how deeply AI tooling is integrated into the actual workflow rather than treated as a novelty, and whether they are investing in the systems language skills (Rust, Go) that the compensation data and aspiration data both signal will matter increasingly over the next three to five years.