← All posts

LinkedIn Uses 2.4GB of RAM and Other Signs the Web is Broken

Modern web apps consume absurd resources for trivial tasks. It's time engineers remembered that efficiency isn't optional.

Pablo Hernandez
Pablo Hernandez
Founder & Principal Engineer
6 min read
Share

LinkedIn consumed 2.4GB of RAM across two browser tabs this week.

Not a video editor. Not a 3D modeling suite. A social media site that displays text and images.

The web is broken. And we did this to ourselves.


The Bloat Explosion

Remember when entire operating systems fit on floppy disks? Windows 95 shipped on 13 floppies — roughly 18MB total.

Today's web pages routinely exceed that. A single LinkedIn session eats more memory than 133 copies of Windows 95.

This isn't progress. It's engineering malpractice.

The symptoms are everywhere:

  • News sites that take 30 seconds to load three paragraphs
  • Chat apps that consume more CPU than video games
  • Simple forms that require hundreds of JavaScript dependencies
  • Email clients that crash on 4GB machines
  • Marketing sites shipping 2MB of unused CSS

Meanwhile, someone built a 2.7KB globe visualization showing real-time data from 300 edge locations. Same browser. Same hardware. 1,000x smaller.

The performance gap isn't technical limitation. It's engineering choice.


How We Got Here

The web development industry made three catastrophic decisions:

We Abandoned Constraints

Faster networks and more powerful devices became excuses for sloppy code. Why optimize when users can just upgrade their hardware?

This thinking created a performance ratchet. Each generation of developers inherited slower baselines and normalized them further.

javascript
// 2010: 100KB JavaScript bundle was concerning
// 2015: 500KB became acceptable  
// 2020: 2MB bundles ship without second thought
// 2025: "It's only 5MB, users have good internet now"

We Normalized Framework Obesity

React applications routinely ship 200KB+ of JavaScript before displaying "Hello World". Vue, Angular, Svelte — they all enable the same wasteful patterns.

The framework isn't the problem. The ecosystem is:

  • Component libraries that import entire icon sets for two icons
  • Utility frameworks shipping thousands of unused classes
  • Build tools that default to development-friendly, production-hostile configurations
  • Package managers that treat dependencies like free resources
bash
# Typical React app dependency graph
$ npm ls | wc -l
2,847 packages

# For a todo list
# With three features
# That could be 200 lines of vanilla JavaScript

We Forgot Software Runs on Real Machines

Every abstraction layer adds overhead. Every dependency pulls in more dependencies. The bundle grows, memory usage explodes, and users pay the price.

Modern web development treats computers like magic boxes with infinite resources. They're not.


The Real Cost

Resource waste isn't just annoying — it's exclusionary.

Your 2.4GB LinkedIn experience assumes:

  • High-end laptop or desktop
  • Fast internet connection
  • Unlimited data plan
  • Recent browser version
  • Reliable power supply
  • Modern operating system

Billions of users don't have those luxuries.

The Global Reality Check

  • 4 billion people use phones with 2GB RAM or less
  • 3 billion people pay for internet by the megabyte
  • 2 billion people rely on intermittent connectivity
  • 1 billion people use devices 5+ years old

The developers building these applications live in a different universe. They test on MacBook Pros with 32GB RAM and gigabit internet. The disconnect is complete.

Meanwhile, the fastest-growing internet populations are in regions where efficiency matters most:

India: 700M+ mobile users, avg 3GB RAM
Indonesia: 200M+ users, avg 2GB RAM  
Nigeria: 150M+ users, avg 1GB RAM
Brazil: 170M+ users, spotty 4G coverage

Our bloated web applications aren't just slow for these users. They're completely unusable.


Engineering for Constraints

Efficient software isn't accident. It requires intentional design decisions:

Set Hard Limits

Every feature should justify its resource cost. No 200KB libraries for date formatting. No client-side routing for five-page sites.

Performance budgets should be non-negotiable:

  • JavaScript bundle: 100KB compressed
  • CSS bundle: 20KB compressed
  • Memory usage: 50MB peak
  • Time to interactive: 3 seconds on 3G

Break the budget? Cut features or find better solutions.

Measure Relentlessly

Bundle analyzers, memory profilers, performance budgets. Make resource usage a first-class metric.

bash
# This should be in every CI pipeline
$ npm run bundle-size-check
Bundle size: 247KB (limit: 100KB) ❌
Memory usage: 180MB (limit: 50MB) ❌
Build failed.

# Deploy blocked until fixed

Track these metrics like you track uptime:

  • Real User Monitoring for actual device performance
  • Lighthouse CI for regression detection
  • Bundle analysis for dependency bloat
  • Memory profiling for leak detection

Default to Minimal

Start with plain HTML and CSS. Add JavaScript only when necessary. Each dependency should solve a real problem.

The progressive enhancement approach works:

  1. Build with HTML/CSS only
  2. Add minimal JavaScript for interactions
  3. Enhance with frameworks if complexity justifies cost

Most sites never reach step 3. That's fine.

html
<!-- This handles 90% of web use cases -->
<!DOCTYPE html>
<html>
<head>
  <title>Fast Site</title>
  <style>/* 5KB of CSS */</style>
</head>
<body>
  <main><!-- Content here --></main>
  <script>/* 10KB of JavaScript */</script>
</body>
</html>

<!-- Total: 15KB, renders instantly -->

Question Every Abstraction

That React component library might be convenient. It's also 500KB and includes features you'll never use.

Before adding any dependency, ask:

  • What problem does this solve?
  • Can I solve it with 20 lines of code instead?
  • What's the total cost including transitive dependencies?
  • How will this affect users on slow devices?

Most dependencies fail these tests.


The Path Forward

The solution isn't abandoning modern development. It's remembering that efficiency is a feature.

Great engineers optimize not because they have to, but because wasteful software is bad software.

Encouraging Signs

  • Svelte and SolidJS challenging React's bundle size
  • Web Components enabling framework-free development
  • Progressive enhancement making a comeback
  • Edge computing pushing constraints back to the forefront
  • Core Web Vitals making performance a business metric

The Cultural Shift

The biggest change needed isn't technical. It's cultural.

We need to stop celebrating engineering complexity and start celebrating engineering efficiency.

Stop bragging about how many packages your project uses. Start bragging about how few.

Stop optimizing for developer experience at user expense. Start optimizing for user experience despite developer inconvenience.

Stop assuming users can handle whatever you ship. Start assuming they can't.

Practical Steps

For individuals:

  • Audit your applications' resource usage weekly
  • Set performance budgets and stick to them
  • Choose tools based on output size, not input convenience
  • Test on actual user devices, not development machines

For teams:

  • Make performance a deployment requirement
  • Include resource costs in code review discussions
  • Celebrate efficiency improvements like feature releases
  • Hire engineers who understand constraints

For companies:

  • Include performance metrics in engineering KPIs
  • Test products on representative user hardware
  • Budget for performance optimization like security patches
  • Market efficiency as a competitive advantage

The web doesn't have to be slow. We chose to make it slow.

We can choose differently.

Don't ask "Can users handle our bloated applications?"

Ask "Why are we building bloated applications in the first place?"

The answer might surprise you. And embarrass you.

Good.

Share

Need a system that doesn't fall apart in production?

Let's talk.

Clean architecture. Honest timelines. Software that ships on time and stays running. No fluff.

Get a Free Consultation