👏 more 👏 developers 👏 need 👏 to 👏 hear 👏 this
I can count on one hand the number of my clients over the past couple of years who haven't either over-architected for scale or were unnecessarily concerned about it (prior to coming to me for strategic advice, of course 😉).
You don't need to understand Distributional Little's Law to figure this out, it's obvious with primary school level math.
(screenshot excerpt from https://tailscale.com/blog/new-internet)
commentary/addition on blogpost
@ryantownsend I think their answer to "how did we get here" is missing a crucial bit of nuance: the influence of tech company blogs.
I've noticed a pretty clear pattern over the years where some tech company has to solve a problem at scale, blogs about how they've done it, and then there's a horde of developers who excitedly reads that blogpost and declares it the new best practice, elevating it to the level of "you are not a serious developer if you don't do this", often egged on by the tech company in question.
When prodded as to why, given that they are not a big tech company themselves, the answer has always been the same: a *belief*, not merely a hope, that they will be soon. Many of them outright reasoning along the lines of "if I do the same thing as this big tech company, I *will* grow as big as them and get rich, because clearly it worked for them".
This is, IMO, a much stronger effect than that article implies; this kind of technical writing actually drives entire hype cycles and steers entire developer communities in specific directions (as opposed to individual developers just being a bit optimistic), and I've seen it happen first-hand many times.
commentary/addition on blogpost
@joepie91 @ryantownsend on the other hand I've talked with an admin who very much prefers to deploy to kubernetes rather than bare metal, because k8s makes deploying and managing things and keeping services running much easier and more uniform. Yes, even if it's a single python script running on a single low powered machine.
commentary/addition on blogpost
@viq @ryantownsend I've seen this motivation quite a few times, and I strongly suspect it's similar to the whole thing with microservices and how it supposedly allows for decoupling code, when that benefit actually comes from code modularization and that's only a tangential side effect of microservices. It's not that microservices don't *also* have this benefit, it's that you could have had that same benefit without all the complexity of microservices.
Same thing with deploying to kubernetes; the actual benefit here is a consistent deployment environment (which is a valid thing to want!). You don't *need* an ultra-scalable system (with all of the associated complexity) for that, you just need a consistent environment, and there are many other options for that that aren't kubernetes-shaped, often with a significantly lower complexity cost.
commentary/addition on blogpost
@joepie91 @ryantownsend I don't think I went exploring that space before, could you please name some for my collection of tools?
commentary/addition on blogpost
@viq @ryantownsend Two options that immediately come to mind, with different philosophies behind them, would be NixOS and Dokku. Or, if you're willing to compromise a bit on environment consistency, the many deployment tools like Chef and Puppet (their main problem is that they can only *add* to the environment).
Dokku is essentially a single-machine self-hostable Heroku-like environment, that AIUI provides a consistent environment much like Heroku does. I'm personally not a fan of the Heroku model so I haven't used it, but from what I've heard from others, it works pretty much exactly as promised.
NixOS is a declarative Linux distribution that works kind of like a deployment system like Chef/Puppet, but implemented as a local package/system manager first and foremost, and with much stronger guarantees about environment consistency/determinism (also stronger than containers).
It can pretty trivially be extended to multiple systems with third-party tools if wanted, but it's system-local in its core; using it across systems basically just entails pre-building the other systems (which is just a build product, from its perspective) and pushing your build to them.
NixOS' documentation still needs a lot of work so its apparent complexity is higher than what's strictly needed to work with it, and Dokku is probably more immediately accessible, but I bring it up because it is a good example of what *can* be achieved without 'hyperscale' systems today.
commentary/addition on blogpost
@viq (Of course there are also many PaaS options, as @ryantownsend alluded to, but as those generally come with some form of vendor lock-in, I did not include them here)
commentary/addition on blogpost
@joepie91 @ryantownsend like OpenShift, or what would some examples be?
commentary/addition on blogpost
@viq @ryantownsend I'm more thinking of platforms like Heroku (ironically) and the smattering of other "we will host your app for you [with various degrees of add-on services]" providers. They kind of by definition provide a standardized environment, at least within the confines of their own service.
But I find them uninteresting due to the vendor lock-in, so I don't track very closely which ones are currently alive :)
commentary/addition on blogpost
@viq @ryantownsend I would count them as one such platform, yeah. Though again with the same vendor lock-in caveat :)
(And they do piecemeal billing, like AWS, which is a very good way to get a surprise bill at the end of the month IME)