Skip to content
All posts
Architecture

Just Fucking Use Monolith

December 21, 2025·Read on Medium·

Unless you are Google but you are not

You probably think you need microservices. You’re over here reading blog posts about “independent deployability” and “team autonomy.” You’re evaluating Kubernetes clusters because some FAANG engineer said it’s the future. You’re planning service meshes and event buses for your MVP because you can’t be bothered to just ship code.

Well guess what, asshole:

You just need a monolith. That’s it. That’s the fucking answer.

Stop Googling “monolith vs microservices” for like 100 time. Stop asking on Facebook if your blog needs distributed tracing. Stop pretending you have Netflix-scale problems when your app has 27 daily users and a dream.

Here’s why, dipshit:

  • It’s simpler than your over-engineered bullshit
  • Deploys in one go without 47 CI/CD pipelines
  • No network latency between “services”
  • Easier to debug when everything’s in one place
  • Transactions actually work without saga patterns
  • Scales further than your todo app will ever need
  • Cheaper to run, you broke bastard

“But I need independent scaling!”

No you fucking don’t. You know what scales? A well-tuned monolith behind a load balancer. You know what doesn’t? Your clusterfuck of 19 services that can’t talk to each other without timeouts. Shopify runs a massive monolith handling billions in transactions. Plenty of companies stay monolithic for years and crush it. But sure, your side project needs per-service autoscaling.

“But microservices let teams work independently!”

Independent from what? Shipping features? In a monolith, your team isn’t blocked waiting for another team’s API contract to stabilize. You just change the code and deploy. Microservices “independence” is just another word for “constant coordination meetings and blame-shifting when shit breaks across boundaries.”

“But microservices are more resilient!”

Resilient my ass. One bad deploy in a monolith affects everything – sure. But in microservices? One flaky service brings down half your app because of cascading failures you forgot to handle. “Eventual consistency” means “your users see wrong data sometimes.” Enjoy explaining that.

What a Monolith Actually Does Better:

  • ACID transactions: Your data doesn’t get corrupted across “services.” Just fucking use a database transaction.
  • Simple deployments: One artifact, one command. Just fucking deploy it.
  • Local calls: No RPC overhead or network failures. Just fucking call the function.
  • Easier testing: End-to-end tests run fast. Just fucking run them.
  • Shared code: Reuse logic without gRPC hell. Just fucking import the module.
  • Faster development: Change frontend and backend in one PR. Just fucking commit.
  • Lower costs: One server, one database. Just fucking pay less.
  • Real performance: No serialization/deserialization bullshit. Just fucking execute.

How to Deal with the Microservices Zealot

Oh, here he comes – the microservices faggot with his Kubernetes tattoo and his “domain-driven design” bible. He’s got a conference talk slide deck ready to explain why your CRUD app needs 12 services, event sourcing, and a service mesh.

Listen up, champ: Shut the fuck up. Nobody cares about your “organizational alignment” bullshit when the product isn’t even launched yet. Your “independent deployability” is code for “I want to deploy breaking changes without telling anyone.” Your “polyglot persistence” means “good luck querying data across five databases.”

When he starts yapping about how Amazon does it: Point out that you’re not Amazon. You’re a startup with 5 engineers and a dog. Amazon has thousands of devs and infinite money to throw at complexity. You have ramen noodles and dreams.

If he won’t stop: Ask him how many production outages he’s debugged at 3 AM across service boundaries. Ask him about the last time his “resilient” system had a network partition and served stale data for hours. Watch him squirm.

Real talk: Build modular code in your monolith. Use packages, layers, clean architecture. Make it easy to extract later if you ever need to. But don’t prematurely split because some influencer said so.

Tell the zealot: Come back when you have actual scale problems, not imaginary ones from a blog post.

Stop Over-Engineering Your Shit

You don’t need Kubernetes for caching queues, service discovery for messaging, Istio for observability, and 12 databases for your CRUD app. You need one fucking codebase. One deployment. One team owning it all.

Learn modular design. Use packages, domains, clean boundaries inside your monolith. Make it refactorable. Then, if you ever hit actual pain points that require splitting, you can extract services later.

But for 95% of apps? Monolith is the right choice. It’s the sensible default.

Start with a monolith. Only split when you have a SPECIFIC, MEASURED reason. Not because it’s trendy. Not because you watched a conference talk. Because your monolith is actually slowing you down.

Until then:

Just. Fucking. Use. Monolith.

“Just use a monolith.”
- Every engineer who’s shipped real client products for more than 7 years

Yes, This is Satire (Kind Of)

Look, there ARE legitimate use cases for microservices. If you’re at org scale with hundreds of engineers, independent release cycles that save millions, or domains that genuinely need different tech stacks – go for it.

But for most startups, SaaS products, internal tools, and everything that isn’t hyperscale? Microservices are premature optimization wrapped in complexity.

You’re not Google. You’re not Amazon.

Just fucking use monolith.

Found this helpful?

If this article saved you time or solved a problem, consider supporting — it helps keep the writing going.

Originally published on Medium.

View on Medium
Just Fucking Use Monolith — Hafiq Iqmal — Hafiq Iqmal