What you’re about to read is an excerpt from Go Time #114. You should read the original transcript or listen to the entire conversation for more context. To set the stage, this is the 2nd of Kelsey Hightower’s unpopular opinions (our new segment which people seem to be enjoying.)
Monoliths are the future because the problem people are trying to solve with microservices doesn’t really line up with reality. Just to be honest - and I’ve done this before, gone from microservices to monoliths and back again. Both directions.
Most people say,
“Look, we lost all of our discipline in the monolith. We just started creating classes, this person went and bought the Gang of Four book, came back and started doing design patterns and then QUIT, so half our codebase is doing this thing over here…”
So now it’s a nightmare. Now the codebase is so bad, and you say,
“You know what we should do? We should break it up. We’re gonna break it up and somehow find the engineering discipline we never had in the first place.”
And then what they end up doing is creating 50 deployables, but it’s really a distributed monolith. So it’s actually the same thing, but instead of function calls and class instantiation, they’re initiating things and throwing it over a network and hoping that it comes back. And since they can’t reliably make it come back, they introduce things like Prometheus, OpenTracing, all of this stuff. I’m like, “What are you doing?!”
Now you went from writing bad code to building bad infrastructure that you deploy the bad code on top of. There are reasons that you do a microservice. So, to me a microservice makes sense in the context of…
You’re a bank, and you have this big monolith that does everything. Then mobile comes out. You wanna do mobile banking, but it requires a different set of APIs. You don’t have to add that to the monolith. You can go create a new application that handles most of the mobile concerns, and then connect back to the existing infrastructure to do its work. That makes sense to me. But this idea of “microservices are a best practice” - it seems to be unpopular with most people’s initiatives.
“Oh, we’re bringing in Kubernetes, so we can do microservices. We are going to rearchitect everything.”
Because it drives a lot of new spend, it drives a lot of new hiring…
So a lot of people get addicted to all the flourishment of money, and marketing, and it’s just a lot of buzz that people are attaching their assignment to, when honestly it’s not gonna necessarily solve their problem.
Hear Kelsey’s expert opinion on where Kubernetes is headed (and more) 👇