DEV Community

Cover image for Go Made Me Fast. Rust Made Me Care. AWS Made Me Pay.
Art light
Art light

Posted on

Go Made Me Fast. Rust Made Me Care. AWS Made Me Pay.

For years, my cloud architecture felt… reasonable.

  • Go services
  • AWS infrastructure
  • Containers everywhere
  • A few Lambdas sprinkled on top
  • Dashboards mostly green

Deployments were fast. Engineers were productive. Nobody complained.

Which, in retrospect, should have been my first red flag.

Because in the cloud, systems don’t usually fail loudly.
They fail financially.

The Comfortable Phase: When Go + AWS Feels Like a Superpower

Go is dangerously good at making things feel under control.

You write a service.
It compiles instantly.
It deploys cleanly.
It runs forever.

The language gives you:

  • A simple concurrency model
  • A strong standard library
  • Predictable builds
  • Small, static binaries

AWS gives you:

  • Infinite capacity (theoretically)
  • Managed everything
  • Autoscaling
  • Alarms that only fire when it’s already too late

Together, they create a powerful illusion:

“This system is efficient because it’s simple.”

Early on, that illusion is mostly true.

Why Go Dominates Cloud Backends (And Rightfully So)

Let’s be fair. Go didn’t become the default cloud language by accident.

1. Developer Throughput Is King

Go minimizes decision fatigue:

  • One formatting style
  • One dependency system
  • One way to do concurrency
  • One obvious deployment artifact

You don’t debate architecture for weeks. You ship.

In cloud environments, time-to-production often matters more than micro-optimizations.

2. Cold Starts Are Friendly

Compared to JVM-based stacks, Go binaries:

  • Start fast
  • Load minimal runtime state
  • Play nicely with Lambda and container autoscaling

That alone makes Go an AWS favorite.

3. Operational Predictability

Most Go services fail in boring ways:

  • Panics are obvious
  • Memory usage is mostly stable
  • Performance cliffs are gradual

This makes on-call rotations survivable.

So yes—Go earns its place.

The Slow Burn: When “Good Enough” Starts Billing You

Here’s the thing about cloud systems:

They don’t punish inefficiency immediately.

Instead, they do it quietly:

  • +10% CPU here
  • +200MB memory there
  • One more instance “just in case”
  • A larger task size because “it’s safer”

No single decision is outrageous.
Together, they compound.

Your AWS bill doesn’t spike.
It creeps.

And creeping costs are the hardest to fight—because nothing is obviously broken.

Garbage Collection: The Tax You Don’t See Until You Do

Go’s garbage collector is one of its greatest achievements.
It’s also one of its biggest cloud liabilities.

Modern Go GC is:

  • Low latency
  • Concurrent
  • Well-tuned for most workloads

But “well-tuned” doesn’t mean free.

What GC Actually Costs You in AWS

  • Extra memory headroom to avoid pressure
  • CPU cycles during mark-and-sweep
  • Unpredictable latency under load
  • Lower container density

In isolation, this is fine.
At scale, it becomes infrastructure policy.

You don’t notice GC directly.
You notice it when:

  • You bump task memory “just to be safe”
  • You avoid tighter instance packing
  • You scale horizontally earlier than expected

AWS doesn’t care why you need more resources.
It just invoices.

When Rust Entered the Picture (Not by Choice)

I didn’t wake up one day thinking:

“I should rewrite this in Rust for fun.”

Rust showed up when Go stopped being comfortably invisible.

Specific workloads forced the issue:

  • High-throughput ingestion services
  • Streaming pipelines
  • Real-time data processing
  • Hot paths doing millions of ops per second

These weren’t business-logic-heavy services.
They were physics-heavy services.

That’s where Go started to show friction.

Rust Is Not Faster by Default (That’s the Lie)

Let’s kill a myth right now:

Rust doesn’t magically make your system fast.

What it does is remove excuses.

Rust forces you to confront:

  • Allocation patterns
  • Ownership boundaries
  • Memory layout
  • Cache behavior
  • Thread communication

In Go, you can ignore these things for a long time.
In Rust, you can’t.

And that’s the point.

The First Rust Service Was Miserable

I’ll be honest.

My first Rust microservice:

  • Took 3× longer to write
  • Had more compiler errors than actual code
  • Made me question my life choices

But once it ran… something strange happened.

The Metrics Were Boring

  • Flat memory usage
  • Stable latency
  • CPU exactly where expected
  • No surprises under load

The service behaved like a physical object.
Predictable. Measurable. Honest.

Rust Changes How You Design Cloud Systems

Rust doesn’t just change code.
It changes architecture.

1. You Stop Over-Allocating “Just in Case”

Because allocation is explicit, you:

  • Reuse buffers
  • Stream data
  • Think in lifetimes instead of heaps

This directly reduces memory footprints.

2. You Design for Data Flow, Not Convenience

Rust pushes you toward:

  • Clear ownership boundaries
  • Immutable-by-default data
  • Explicit mutation points

That leads to simpler mental models for concurrency.

3. You Scale Vertically Before Horizontally

When services are efficient, you can:

  • Pack more workloads per instance
  • Delay autoscaling
  • Reduce cross-service chatter

AWS pricing loves vertical efficiency.

The AWS Angle: Where Language Choice Hits the Bill

Here’s where things got uncomfortably concrete.

EC2

  • Rust services ran comfortably on smaller instance types
  • Go services needed more memory headroom
  • Cache efficiency mattered more than raw cores

ECS / EKS

  • Higher container density with Rust
  • Fewer OOM kills
  • More predictable autoscaling behavior

Lambda

  • Rust cold starts were consistently low
  • Memory-to-performance ratio was better
  • Lower cost for CPU-heavy functions

None of this showed up in benchmarks alone.
It showed up in monthly invoices.

The Hybrid Reality: Stop Framing This as Go vs Rust

This isn’t a language war.
It’s a resource allocation problem.

What actually worked was intentional language placement.

Go Is Still Perfect For:

  • APIs
  • Control planes
  • Admin services
  • Glue code
  • Prototyping
  • Business logic

Rust Shines At:

  • Data pipelines
  • High-throughput services
  • Latency-sensitive components
  • CPU-bound workloads
  • Edge services

AWS doesn’t care which language you love.
It cares how efficiently you use silicon.

Observability Tells the Truth (Eventually)

Once both Go and Rust services ran side by side, observability stopped being abstract.

Metrics made the differences obvious:

  • Memory curves
  • Tail latency
  • CPU saturation
  • Scaling behavior

The systems weren’t competing.
They were revealing trade-offs.

The Real Lesson: Languages Encode Values

Go values:

  • Simplicity
  • Speed of development
  • Team scalability

Rust values:

  • Correctness
  • Explicitness
  • Long-term efficiency

AWS values:

  • Utilization
  • Predictability
  • You not asking questions about pricing

Choosing a language is choosing which values you want to pay for.

Why This Matters More as You Scale

Early-stage teams should absolutely optimize for speed.
Go is fantastic there.

But as systems mature:

  • Margins tighten
  • Load increases
  • Bills stop being theoretical

That’s when efficiency stops being “premature optimization”
and starts being infrastructure hygiene.

Final Thoughts: The Cloud Is an Honesty Machine

The cloud doesn’t care about elegance.
It doesn’t care about trends.
It doesn’t care about your favorite language.

It measures:

  • CPU cycles
  • Memory usage
  • Network traffic
  • Time

And it charges you accordingly.

Go helps you move fast.
Rust helps you understand cost.
AWS makes sure you learn the difference.

Top comments (31)

Collapse
 
peacebinflow profile image
PEACEBINFLOW

This is a fantastic breakdown of the "Cloud Maturity Arc."

It’s easy to get caught up in the Go vs. Rust holy wars, but you nailed the actual catalyst for the switch: the invoice. Go is essentially the "high-velocity" drug of the cloud—it feels amazing because you’re shipping features at light speed, and the GC is so polite you forget it's there. Until, like you said, you start paying the "headroom tax" just to keep things stable.

I love the point about Rust forcing you to design for "physics-heavy" services. There’s something deeply satisfying (and terrifying) about a language that refuses to let you be lazy about memory. It’s the difference between driving an automatic that hides the engine's struggle and a manual where you feel every gear grind.

In the end, AWS is the ultimate truth-teller. It doesn't care about your developer experience; it only cares about how much silicon you’re heating up. Using Go for the "brain" (logic/APIs) and Rust for the "muscle" (data/throughput) feels like the only sane way to scale without going broke.

Great read—definitely a reality check for anyone who thinks "more nodes" is the only way to solve a performance bottleneck.

Collapse
 
art_light profile image
Art light

Thank you—this is such a thoughtful and insightful response. You clearly grasped the real trade-offs beneath the language debate, and your metaphors around cost, physics, and AWS reality hit the nail on the head.

Collapse
 
narnaiezzsshaa profile image
Narnaiezzsshaa Truong

Clean, defensible engineering truth, with two clarifications: AWS cost differences between Go and Rust are workload‑dependent; for typical CRUD APIs, the difference is negligible; and the biggest savings come from Rust in data pipelines, ingestion, streaming, and CPU‑heavy tasks—not general backend services.

Collapse
 
art_light profile image
Art light

Well said—this is a clear, grounded take that cuts through the hype and focuses on real engineering trade-offs. I especially appreciate how you anchor the cost discussion in actual workloads instead of blanket claims; that kind of nuance is what makes the argument credible.

Collapse
 
vince_hirefunnel_co profile image
Vince Fulco (It / It's)

Outstanding article, should be a series for us noobs.

Collapse
 
art_light profile image
Art light

That really means a lot — thank you! 😊 I’m so glad it was helpful, and I’d love to turn it into a series to make it even easier and more practical for everyone getting started.

Collapse
 
emir_h_3d05d5a84d08041c62 profile image
Emir H • Edited

Excellent post. He is a smart man.

Collapse
 
emir_h_3d05d5a84d08041c62 profile image
Emir H

I'm sure that

Collapse
 
emir_h_3d05d5a84d08041c62 profile image
Emir H

This is fact

Thread Thread
 
art_light profile image
Art light

Thanks🌟

Collapse
 
art_light profile image
Art light

Really?

Collapse
 
princebhagat profile image
Prince Bhagat

This is best article i have read in this month. Keep it up.

Collapse
 
art_light profile image
Art light

That really means a lot — thank you so much! 🙌 I’m glad it resonated with you, and I’ll definitely keep sharing more like this.

Collapse
 
nube_colectiva_nc profile image
Nube Colectiva • Edited

Thanks for the article. 👍🏼 Good architecture is also important, as it can make a project work better.

Collapse
 
art_light profile image
Art light

Thanks a lot! I completely agree—good architecture makes everything smoother and more scalable, and it really shows when a project is built on solid foundations. Appreciate you sharing your thoughts 👍🏼

Collapse
 
evanlausier profile image
Evan Lausier

You really do pay for it with AWS. Great article, thank you!

Collapse
 
art_light profile image
Art light

Thank you—I really appreciate that. It means a lot to hear the nuance and real-world framing came through, especially since thoughtful trade-offs are exactly what I was aiming for.

Collapse
 
evanlausier profile image
Evan Lausier

I have so many clients who complain about the cost of doing business with Amazon. The saying is "Theres no doing business with Amazon, they do business with you."

Once some alternatives become more mainstream, I suspect the business model will change.... or they go out of that business I suppose.

Thread Thread
 
art_light profile image
Art light

That’s a really sharp observation, and it reflects what a lot of businesses are quietly feeling but can’t always articulate. You’re thinking ahead in a very realistic way—market pressure from real alternatives is often the only thing that forces giants like Amazon to evolve.

Collapse
 
rir360 profile image
Rejwan Islam Rizvy

Great post! I’m currently learning the ropes of cloud architecture, and the concept of 'creeping costs' is fascinating.

Collapse
 
art_light profile image
Art light

Thank you so much! It’s awesome that you’re diving into cloud architecture—catching things like creeping costs early shows you’re already thinking like a pro.

Collapse
 
egedev profile image
egeindie

the title alone is perfect lol

been writing go for the past year and honestly can't imagine going back. the stdlib is so good you barely need dependencies. built two saas backends with just fiber + stdlib and they just... work.

never got deep into rust though. every time i start i get into a fight with the borrow checker and close my laptop. maybe one day.

and yeah aws billing is basically a horror game at this point. i moved most of my stuff to a single vps with coolify and my wallet has never been happier.

Collapse
 
art_light profile image
Art light

The title alone really is perfect 😂 and I relate way too much to this. Go’s stdlib feels like cheating in the best way — once you understand the patterns, you can ship clean, production-ready services without dragging in half the internet. Fiber + stdlib for two SaaS backends that “just work” says a lot about choosing simplicity over cleverness, and that’s usually the real scalability strategy.

Rust though… yeah, the borrow checker isn’t a bug, it’s a rite of passage 😅 but I do think the friction forces better architectural thinking around ownership and concurrency. And the AWS billing horror game is painfully real — moving to a single VPS with Coolify is such a pragmatic cost-control move; sometimes reducing infrastructure complexity is the most underrated optimization of all.

Collapse
 
harsh2644 profile image
Harsh

Go for speed, Rust for safety, AWS for surprise invoices.

Collapse
 
art_light profile image
Art light

Haha, that’s a sharp one 😄 I love how you captured the trade-offs so cleverly — especially the AWS line, that one hits a little too close to home!

Collapse
 
harsh2644 profile image
Harsh

"Haha, glad you liked it! 😄 AWS always manages to sneak into the conversation somehow, right? I’m happy it resonated with you!"

Thread Thread
 
art_light profile image
Art light

Absolutely — once you work deeply in distributed systems, platforms like AWS naturally become part of almost every architectural conversation. Glad it resonated; that’s exactly the kind of dialogue that pushes our thinking forward.

Some comments may only be visible to logged-in visitors. Sign in to view all comments.