Live data from Hacker News

Back to the '70s with Serverless

evrl.com

261–270 of 310 posts

Re: Back to the '70s with Serverless

#261

Earlier quoted context omitted.

I find your quote here and the follow up seriously unconvincing. You know what a miserable workflow is? Preparing all my build scripts according to the half baked build tool that our in-house Deployment team cooked up to use fabric to spray my deployment onto a bunch of nodes in our data center, all the tests and script linting pass, so then I go push it through our CI/CD pipeline (which can’t do the above tests for…

I'm sure you will be able to setup proper pipelines on new projects within a 24h time frame and be brilliant at finding root causes by reading the stack trace and associated sources in the blink of an eye when you will be a senior hacker, I'm not worried about that! Anyway, I think your comment proves that once we decide to invest in something, our brain does everything it can to justify that choice, Human nature rea…

I don’t understand your comment. It seems like you think it carries a rhetorical punch to (I guess) suggest that in the cloud version we’d still be slow and make mistakes? The writing is so unclear it’s hard to tell. But if that is what you’re saying, I think you deeply missed the point.

Yes of course my team won’t solve bugs instantly just because of cloud tools and of course we will make mistakes implementing bad infra designs, especially early on as we are still gaining experience with efficient and cheap cloud patterns. Nobody said otherwise and my comment before has no connection to anything like that.

Rather, if we have control over our own infra, we can adaptively fix those issues for ourselves without getting delays and philosophical or gatekeeper arguments from central data center admins. We would have autonomy to change our own deployment system, provision more compute resources, generalize something to work with GPUs, test out different delivery and runtime frameworks, create our own ingress failure robustness patterns, all without blockages and mandated central infra bottle necks.

To create such a configurable and adaptable API-driven portal into bare metal or a data center yourself is way too slow and costly, only the largest companies can do it, and then they turned it around and made it into cloud vendor options.

When medium sized companies try to do it, the most common outcome is a ton of exceedingly arrogant SRE types will create piss poor tooling that barely works for maybe the top 2-3 use cases and then will whine and complain that they can’t support generalizing it for the long tail of other use cases, and because they have political power as the gorilla in the room sitting on top of the only interface to the data center, nobody can argue with them, and you get a burnout mill with constant turnover on all the other teams who have to do SRE’s job for them while listening to the arrogance about what a rip off cloud tools are.

Re: Back to the '70s with Serverless

#262
post #119

Earlier quoted context omitted.

This is the type of cultural accuracy I've been looking for. Are all the commenters in this thread just cynical engineers who really can't see past their own narrow world view? I get snake oil is snake oil, but there is such a strong brand of "anything new must be snake oil" that runs through the HN community it boggles my mind. The world is actually full of complex systems. And only once these systems are in place d…

People on this site act as if they have all the understanding and knowledgeable necessary to decry something like cloud vendors because clearly these same people know better than everyone else and these are actually simple problems if only we had their perspective and knowledge. A 1000 times this. These are solved problems. Anything new has to be better to be taken seriously.

Exactly, which points out how much better cloud tools are (given the level of seriousness most organizations are applying to them).

Re: Back to the '70s with Serverless

#263
post #196

Earlier quoted context omitted.

Judging by the occasional post on HN, even a lot of experienced software engineers (the "experienced" being my take) seem to have no good handle on what a single thread and a single machine should be capable of handling, what the latency should look like and what it should cost as a result. The posts that I mean are about "look how we handled the load for a moderately active web-app which is 90% cacheable with only f…

I think you're right on the money with people having gotten used to it. Once I truly started harnessing the power of Vim combined with shell scripts and terminal multiplexers, my patience for many other programs and tasks decreased even further. We have the computing power to run complex physical simulations or AI training sequences on a normal home computer, but for some reason use programs that take 100 times longe…

Once I get our current product in a good spot WRT maintainability and sales pipeline, I am planning to spend some time (~6 months) looking at developing ultra-low latency developer tooling. I feel like I can deliver these experiences through a browser using some clever tricks.

Going through my current project has really worn me out with regard to tolerating UX slowdowns in developer tools. I am getting so incredibly tired of how shitty visual studio performs on a threadripper with effectively infinity ram. I've had to turn off all of the nice features to get our codebase to be even remotely tolerable. And, dont get me wrong. This is not a plea to Microsoft to fix VS. I think everyone involved can agree that fundamentally VS will be unfixable WRT delivering what I would consider an "ultra-low" latency user experience (mouse/keyboard inputs show on display in Current developer experiences are like bad ergonomics for your brain. This madness needs to end. Our computers are more than capable. If you don't believe me, go play Overwatch or CS:GO. At least 2 independently-wealthy development organizations have figured it out. Why stop there?

Re: Back to the '70s with Serverless

#264
post #190

Earlier quoted context omitted.

Problem with investors is that they pay third parties to do audits and third parties are filled with box tickers who ask a load of questions. You can strategically answer any question. So the game becomes how to answer the audit questions effectively rather than an honest appraisal of the situation. Also it's not really fun. It's a frustration ridden shit show. You spend all day solving complex problems instead of bu…

> You can strategically answer any question. Good luck with that. We do exactly that for a living here, we're essentially 5 people who are all CTO grade and have run our own companies. If you can fool us for a whole day you've deserved your investment, but I highly doubt anybody ever got away with that.

There’s at least two layers of indirection and yes I probably could fool you or just blatantly lie.

Re: Back to the '70s with Serverless

#265

I stopped reading, frankly, at... > I’ve now worked with “The Cloud” for long enough to see that there’s still a long way to go before it becomes materially better than, say, the oldschool method of renting a couple of servers Lol, it takes a lot of hubris to assume you're the only person, or one of few persons, who understands how the rest of us have been conned. I'm not getting into a debate about the hundreds of w…

34 million adults in the U.S. still smoke.

Re: Back to the '70s with Serverless

#266
This is a rare article in that while I disagreed with its conclusions and most of its reasoning (yes, serverless is stupid if you believe the economics of software companies haven't changed since the days software was distributed on floppy disks), I still walked away appreciating it for some reason. I guess that it's interesting to consider the similarities between mainframe computing and serverless even if they are largely superficial.

> These systems took ages to compile, hours to run all the unit tests, and clearly interactivity went down the drain. So “split it all up” was not a bad idea. It was an unnecessary idea, mostly driven by the shortfalls of mainstream programming languages, but necessity is the mother of invention - even though your average Java business app was much simpler than the Smalltalk IDE before you added a single line of code to write your app, it was already too complex to maintain and “divide and conquer” was the answer. Service Oriented Architecture, and later microservices, was born. Split your codebase, split your teams, create a lot of opportunities for mediocre coders to grow into mediocre engineering managers, everybody was happy.

Maybe I'm misunderstanding, but it seems like the author misunderstands the raison d'etre of microservices. He seems to posit that they exist because of performance or complexity limitations in the host language, so we break them up, and because we break them up we also break up teams to work on them. Or something like that.

In truth, microservices are really just about embracing Conway's Law--your architecture will resemble your organization structure eventually whether you like it or not. So we empower teams to deploy and operate their own services instead of coordinating deployments with other teams and throwing issues back and forth over the dev|ops team wall. Notably, Go microservices are common, and like the author's SmallTalk example, Go services can compile and run tests in roughly a second.

We don't run microservices because of compile and/or test times, but rather because we're optimizing for the realities of organizations--the overhead of synchronization and communication--in a world where software isn't shipped annually in a shrink-wrapped box of CDs or DVDs but on every load of the webpage.

> The return of the Job Control Language this time was in the form of, again, configuration data on how to run your microservice. Microservices were somewhat fatter than the very fine-grained objects of the old days, so there was less of it, but still - it was there. The feedback cycle became worse as well: in the monolith-with-XML days, your XML editor would get you mostly there and a quick local compile and run would leave you all but certain that your configuration was working. XML, however, was universally rejected in favour of things like JSON, Yaml, HCL, Toml - all free of structure, with zero indication whether a computer would find your prose gibberish or the next Shakespeare play until you actually pushed your code to some test cluster. It suddenly felt a lot like being back at that university interacting with a mainframe, but at least you still owned the hardware and could introspect all the way down, especially if you were doing “DevOps” meaning mostly that you had administrative access to your hardware.

I'm confused on a few points. First of all, XML has structure but JSON/YAML/etc doesn't? Is the idea that Spring or whatever statically type-checks XML but that Terraform/CloudFormation/etc don't type check their configuration? I'll be the first to acknowledge that we would be better off with better type checking in infra-as-code, but there is some type checking. And certainly the ergonomics of these tools is rough and it will get better when we stop pretending that infra-as-code can be "as easy as a few lines of YAML!" and embrace the realities that we need to DRY this stuff up exactly like we need to DRY up our application code (and thus we shouldn't waste time poorly reinventing the abstraction wheel--looking at you Terraform and CloudFormation).

That said, is the idea that Job Control Language is analogous to an infra-as-code tool like Terraform or CloudFormation? Does it allow the user to declare the ideal state of the world and then reconcile it against the current state? I've never worked with JCL, but I'm skeptical. Maybe I'm missing the point here.

> Microservices have trouble scaling, and they are very complex. Most companies that employ them have no need for them, but the systems and programming languages they employ are sufficiently lacking that this stacking of complexity on top of complexity becomes a necessity.

Microservices certainly can be a lot of complexity, but I still don't buy that this is a limitation of programming languages. Again, you're trading technical complexity for the ability to spend less time coordinating with other teams, and the return on investment for this tradeoff will vary from organization to organization. This complexity will improve as the best practices become more firmly established and the tooling ecosystem improves.

> pparently, Worse Is Better and you can do worse than Virtual Private Servers, so through a short-lived detour through containerizing microservices and deploying them on a distributed scheduler like Mesos, Nomad, or Kubernetes, we have arrived at “Serverless”. You deploy individual stateless functions. But not inside a Java monolith, that is old, but on top of a distributed system. You would have been laughed out of the door if you had proposed that in 2000, and you should be laughed out of the door right now, but such is the power of marketing.

Again, the author doesn't seem to understand the rationale for microservices / devops / serverless. Even if his conclusion is right, he's not rebutting the actual premises for microservices. Virtual Private Servers, pets, don't scale. You can't get a big organization to maintain stateful servers well, so in the 2000s we had smaller Ops teams who would maintain the servers and any change had to go through them. Businesses don't like paying to build features and not being able to ship those features to customers for months. Further, debugging issues that arise from a massive monthly or quarterly integration of features is much more effort than the collective effort of debugging issues that arise from incrementally delivering features, especially when the stateful production environment is inevitably different than the stateful staging and dev environments. It's weird that the author clearly values fast feedback loops but can't appreciate how a daily or hourly feedback loop is better than a months- or quarter-long feedback loop, (especially for startups, where iterating to product-market-fit is paramount).

Yeah, you could have each team operating its own pet VPS running its own service, but that's pretty close to microservices. And you'll also realize that each team configuring its own process management, SSH configuration, firewall rules, monitoring, alerting, etc is kind of a lot of wasted effort and most developers aren't very good at or interested in that kind of work anyway, so it would be nice if we could have a pool of hosts that an ops-like team could manage which the development teams could deploy to and operate as they like. Congratulations, you're halfway to Kubernetes. If you can buy into the immutable/GitOps philosophy then you're pretty much all the way to Kubernetes.

Re: Back to the '70s with Serverless

#267
> So what have we now? A “mono repo” codebase, because clearly a Git repository per function in your system would be too much, a large deployment descriptor per fine-grained component, which Spring maybe called “Controller” but is now called “Function”, and instead of combining them all on your desktop, you send them off to someone else’s mega-mainframe. You deploy, get an error message, and login to CloudWatch to see what actually happened - it’s all batch-driven, just like the bad old days, so progress is slow.

You could have a repo per function, but if you have functions with common dependencies (whether libraries or build tooling or whatever) then you need to deal with keeping those dependencies up-to-date and notifying upstream when a change breaks downstream. "Monorepo" is just one solution to that problem, and it's exactly the same as what monoliths do today. You can have the same problem in a company with many monoliths, but with some amount of code reuse--"monorepo vs multirepo" is orthogonal to "microservice vs monolith". Note that monolithic monorepos tend to work well because "monolith" typically implies that all dependencies are using the same language, and most languages have decent incremental build tools; however, we don't have good polyglot/general-purpose build tools--instead we have Bazel/etc and Nix which each suck for entirely tractable reasons. As good leadership and investment coalesce, this class of tooling will improve, but for now building and deploying a polyglot environment is painful (but there are other kinds of pain to consider, and the microservices people argue that this pain is less than e.g. organizationally-derived pain points).

> Conceptually, hiding a lot of the scaling and coordination machinery is not a bad idea; programming systems like Erlang and OTP have shown for decades how well that can work and Elixir is giving the platform a well-deserved surge in popularity. But there’s a big difference here: a platform like OTP handles pretty much everything that a platform like AWS Lambda handles, but it does it in a single programming language.

The author is really close here. What remains is a more careful analysis of why single-language programming systems feel better than multi-language programming systems and vice-versa. For example, Erlang (like any language) isn't good at all things (e.g., you might have data-science subsystems that you'd ideally write in Python or Julia or whatever, but you might also have other parts of the system where performance and quality matter [Pythonistas, this is your cue to downvote me]), so mandating that all components be implemented in Erlang might cost more than making heterogeneous systems talk to each other. Or perhaps procuring Erlang programmers is costlier than programmers in other languages? Ultimately it's hard for a single-language environment to beat out a multi-language environment, especially at scale (i.e. "as the diversity of problems grows" not "as the performance demands increase"). I think Erlang actually is a very cool platform, and I wish it well, but it doesn't mean that it's optimal for many/most businesses today.

Re: Back to the '70s with Serverless

#268
post #27

Wow, great post! I have the same complaints: (1) Languages have gotten worse as distributed back ends have gotten more powerful. The IBM JCL and XML references in this post were good! (2) Workloads that currently run on such back ends could run on a single computer, or at least with many fewer resources. This is one reason I got into shell in the first place! I wrote some shell scripts that saturated 32 cores instead…

Yes, it is one of the most entertaining and insightful articles I have read on computing and programming language for a long time. All the best for your new Oil shell, and I agree that we need to have similar to POSIX standard for distributed systems but it must put local-first software as the first class citizen [1]. Personally I think the local-first software cannot happen soon enough given that what we have endure…

Here's my recent comment about sdlang:

https://news.ycombinator.com/item?id=24945449

So I think Oil will be very familiar to SDLang users, BUT it has programmability, which you need in cluster configuration and build configuration, e.g. to express duplication.

So I would divide the space into a few categories:

(1) Stringly typed: .ini, YAML

(2) Typed Data: JSON, XML to some extent, SDLang

(3) Programmable configuration: HCL, Cue, Jsonnet, Nix expressions, BCL, Starlark, Oil

SDLang looks really similar to HCL too, except HCL is programmable:

https://www.terraform.io/docs/configuration/expressions/dyna...

Very important: With categories 1 and 2, people add template languages like Go templates on top to solve the programmability problem, which we don't want!!! We don't want to move typed data back to the stringly typed realm!

Also, I don't think the "expression style" of HCL, Nix, and BCL is great. It's good for small things, but it starts to get hard to read for large configs. I'd prefer simple for loops and if statements, basically like the Starlark language (a subset of Python used in Bazel).

---

Thanks for the paper reference, I bookmarked it!

Re: Back to the '70s with Serverless

#269

Earlier quoted context omitted.

> Investors need to start asking more probing questions about how organizations develop and deploy applications. Does this even matter though? Shitty technology choices don't always translate to poor business outcomes.

This is absolutely true. But shitty technology tends to have hard upper limits to scalability and shitty security tends to put hard upper limits on the company life span. It's interesting how established companies can have one security issue after another but the customers are so locked in they can't leave and so those companies are not nearly as affected as they should be (Equifax anybody?). But your run-of-the-mill…

What company has been harmed by shitty security on any sort of worrying timescale?

Re: Back to the '70s with Serverless

#270
post #182

Earlier quoted context omitted.

> a technology for which you can get people that are proficient and comfortable is better than one you can't, Hence why PHP is still the leading language for eCommerce, where fashion gives way to tight margins and hiring talent for a decade long lived piece of software is a major concern. When cost is the driving factor for most decisions, and ROI is a very real and measured metric, convincing someome to rewrite thei…

> Hence why PHP is still the leading language for eCommerce, where fashion gives way to tight margins and hiring talent for a decade long lived piece of software is a major concern. I don't think the forces that resemble fashion are any less applicable to e-commerce. > When cost is the driving factor for most decisions, and ROI is a very real and measured metric, convincing someome to rewrite their money making machi…

> The shifting preferences in development that look like fashion are evident, even in those domains where there is lots of established software that is sticky, in greenfield development.

Definitely agree, greenfields projects are where you get an opportunity to suggest new technology.

What I find in eCommerce though is the people who make the decisions on this stuff move around from company to company like pollinating bees, and they always want what they had before, which is often WooCommerce. It's a matter of user interface and ecosystem. They don't care about the merits of the technology underneath, it's truly not a concern for them, what they want is to be able to load up the Yoast SEO plugin and check their copywriters work, or have their in house guy make popups with whatever popup maker they had last time.

I think that's why it's so hard to kill it off.

Post reply on HN