The microservices craze was perhaps the purest example of a ZIRP
twitter.com
twitter.com
If you mean how Uber famously had like 8000 microservices, more than 1 for each engineer, then sure. But it’s mixing up cause and effect. Aligning deployment boundaries with domain boundaries is, all things equal, a good idea. ZIRP-gorged unicorns would have found makework one way or another.
I have seen microservices being used to decouple release management and deployment. To untie organizational dependencies. To separate cyber/dependency supply chain attack surface area. To reuse parts of the system in other projects. To take advantage of different platforms better suited for that specific job (e.g. most of backend in Typescript, ML/statistic parts in Python).
Never to borrow money, though. I participated in some talks with VCs and they never cared or knew they should care. Where do they give out money for using microservices?
VCs do care about these things, I remember hearing there was at least one well known VC that insisted that its startups all used AWS even for services that weren't cost competitive. They didn't want their startups to go viral and then not be able to scale, and if that meant some marginal businesses went from "profitable but unremarkable" to "unprofitable and dead" then so be it. This strategy worked because the sizes of the funds raised by the VCs were very large, and so investments were large, and so startups could afford to not think too hard about the costs of things.
So the path DHH is arguing goes:
1. ZIRP pushes investors into high risk assets like VC funds.
2. VC funds give out huge investments to software startups.
3. Startups do lots of expensive things without worrying about the cost.
4. Having lots of microservices is expensive and the cost isn't justified by the benefits.
5. Therefore, microservices are a ZIRP phenomenon.
Nothing stops you from just running an EC2 VM there, this has nothing to do with microservices. I never had a VC ask me about software system architecture, though yes they strongly suggested we use AWS, which we luckily did.
There are services on AWS that bring significant benefit even if your app is a monolith - managed DB, email service, queues, nowadays the ML things, and in the past DevOps pipelines and Git repos before that became free/available on GitHub.
Maybe it's one of those people who think that software engineers like to give themselves more work and headache just because, and can't imagine there's something other than his own experience?
But whenever I participated in this decision, it was under heavy scrutiny by multiple layers of tech and corporate leadership, and done only because it was the best way to solve our problems.
I also don't think he's arguing for carefulness at all - he's saying that if it wasn't for the free money, engineers would be forced to move faster and break more things to make quick cash. Understandable from business investor perspective, but has nothing to do with careful engineering. He's basically saying "you're so careful I am not making my money, fuck all that and deliver already".
Ensuring implementation details don't get mixed up is indeed nice in some ways, but cuts both ways: it makes upgrading core libraries harder in case of security issues and such.
Another time an unrelated change of another team created a security issue because they improperly used a singleton class from our team's code, and our code became vulnerable because of that. That one was caught during security approval, fortunately - we'd be fucked if it went from CI straight to prod, or if they tested only the changed parts.
It's not just about CI. It's about integration testing, user acceptance testing, security approval, etc. If your system goes from CI directly to production then yeah, maybe you don't need microservices that much - but there are still benefits.
Look at the amount of complexity that micro-services has gotten banks like Monzo into; over 2,000+ and they are happy with it. [0]
An example of bad practices in software engineering which is just only for engineers to persuade their managers around increasing complexity for a increase in salary.
[0] https://monzo.com/blog/2022/05/26/humans-who-can-rpc-securin...
Make the intuitive jumps yourself.
Not saying it's always the best approach - as I mentioned, where I worked it was always under heavy scrutiny and chosen only if it was the best approach, which wasn't always.
They will continue to be used, but their proliferation into contexts where they are not the best tool (MongoDB as a shining example) was very much a part of the ZIRP environment (the underlying reasons are numerous).
It is one of the many ways for a VC funded company to quickly run out of money.
Given that companies such as Uber and Monzo proudly report that they have thousands upon thousands of micro-services with other startups copying that due to the micro-services hype, I can only see that as a way to introduce more problems such as more operational costs and significant complexity to engineers.
Microservices was indeed a ZIRP idea taken to the extreme in many startups believing they could scale like Google, except that they could not afford to and most of them either bankrupted themselves or are still losing hundreds of thousands a month on this idea and are cutting down on the micro-services fad to save money.
https://books.google.com/ngrams/graph?content=microservices&...
We can debate what DHH really means when he says microservices. Distributed systems are obviously a lot older than the term microservices. But I think he's talking about systems that compromise many services that don't obviously map to hardware or organizational boundaries, which was the original reason you'd split a program up across multiple independent servers. I have to admit I don't recall encountering that trend before 2011 or so. If you take an app written in the 2000-2010 era e.g. Jira, they're all going to be either monoliths or apps loaded into Java app servers.
Software systems on mainframes were comparable to what we call serverless today - having more external interfaces (like HTTP servers) running on a computer would waste resources, there was one common external interface that invoked code on request based on configuration, and that code delegated heavily to specialized systems - since there wasn't even enough program memory and loading from disk was slow. Having multiple layers of backend systems was normal. Queues and batch job processing was usual too, and frontend systems usually provided precalculated data only, transactions were processed through the night.
Monoliths were actually the "cool new thing" started in late 90s and perpetuated by Java, PHP, Python and Ruby devs later on, they claimed it's easier to develop and deploy. Many people saw it as a conflict between corporate and startup software development practices - the boring engineers in suits always talking about service specifications and requirements for months VS the cool hackers that don't care and develop directly on prod server FTP to deliver a feature over the weekend. JIRA was one of these cool hacker startups.
I don't think the hackers were completely wrong and delivering quickly has value, but it's much more nuanced than "ZIRP bad because ZIRP made microservices", see also my other comment there: https://news.ycombinator.com/item?id=40334281
What have you experienced that led to your conclusion that ZIRP -> bad decisions?
A clear example is with any of the numerous "high profile" VC-funded ventures. You can spend a lot of time and money over-engineering things, because you are not (and neither your boss or his boss and so on) involved in a feedback loop that is tightly coupled with the making of "real" money.
Your actions have no real consequences on the business unit as a whole, and no one is holding you to it. What tends to happen is it gets filled with "dreamers" and "schemers." Both who, rather than contributing to the health of the business, erode it for their own ends. Without there being a "tether to reality" so-to-speak, their actions no longer have to face reality a la profitability.
Generally, the consequences of this are many and I do not wish to enumerate on them (but I will drop these without going into any painstaking depth: organizations that are built primarily around key players' career interests, products made to that end, and even day-to-day choices that in the grand scheme of things mean nothing, but something as simple as choosing Redis as a primary relational database, all reverberate).
This is just my very sloppy attempt at putting intuition into words, but this is a pattern of varying magnitude that always emerges whenever money is detached from merit.
This happens in all sorts of personal and business contexts. Whenever the fruits of whatever labor are detached from its process, the less likely the processes used to attain and maintain it are "sound," sustainable, and so on.
Think of a lottery winner: he has just received a large sum of liquid cash, but he most likely neither has the ability to hold onto it or the know-how to grow it (much less make the same amount again). His decision-making and skillset is utterly detached from his gains. That sort of thing is only honed through a tight feedback loop.
The same can be seen with engineers who have only resided in corporate behemoths: drop them into a startup and they will likely flounder.
There is a much larger discussion to be had about human incentives, but I hope that you are able to make the intuitive jump yourself.