Hacker News new | ask | show | jobs
by taylodl 706 days ago
Serverless enforces good architectural practices and is just fine for at least 80% of systems. By "just fine" I mean it leaves room for growth, puts you on a good architecture, and will have reasonable cost.

There are times though when serverless may not be a good idea:

- Atypical technology stack. If the stack you need, and actually need, isn't accounted for then you're on your own.

- Continuous, 24x7 application load. You'll have to do the cost analysis, but you may find you're better off provisioning a server.

- You want to "lift and shift" existing assets into the cloud.

Brand-new, greenfield project? Consider serverless first.

2 comments

> Serverless enforces good architectural practices

I'd argue it's the opposite. Since everything gets "thrown away" per request you neglect on caching, memory leaks, subtle bugs etc.

You also need to make trade offs like focusing on cold start as opposed to peak performance etc.

Since everything gets "thrown away" as you say (though it's not per request), you actually have to focus more on caching in order to maintain any kind of session state (if required by your application).

Memory leaks are an interesting matter because, you're right: you really don't care. All the pieces parts comprising your system are continually restarting without impacting the overall resiliency of the system. In fact, quite the opposite is happening - the system is more resilient due to all the mini restarts.

You will have to learn techniques for handling cold starts, there's a few different ways to go about it and which one is appropriate, including not worrying about it at all, is dependent on your application and the cold load ramp-up experienced.

> you actually have to focus more on caching

You lose a lot of layers of caching since there's no point in it. You focus on rather poor caching, i.e. you have to use an external cache. You can't store this as part of the current session and access it for the next request, e.g. by the same user.

> you really don't care

That's on the surface. It's like having a hidden illness that only gets you when something else breaks and suddenly 100s of errors pile up.

> the system is more resilient

It pretends to be. You often get bugs that aren't so obvious and never get fixed because it's now hidden so deep.

> You will have to learn techniques for handling cold starts

The nuance here is you're learning to prefer faster cold starts at all costs including trading for warm start performance. It's making the world worse.

> External caches are resilient to total failure and the need to failover to another environment.

> Memory leaks are a non-issue - seriously, you're processing the transaction and durably storing the result and going away. I've seen systems written this way that have been running for over 20 years.

> The system is more resilient, there's no pretense to it. I have anecdotal data from many projects developed by many teams in multiple companies now that show the business disruptions have decreased and decreased considerably.

> Not all systems are affected the same way by cold starts, some aren't affected at all. You do have to plan for it and understand how cold starts affect your system and whether any remediation is required.

> It's making the world worse - that's a subjective opinion. I call faster time to delivery with fewer business disruptions better. We're currently delivering capabilities the business thought would take far longer to develop and would cost a lot more in operations costs. I call that making the world better.

> I've seen systems written this way that have been running for over 20 years.

So? History and same mistakes have repeated for centuries in many areas. Does that make it good?

> I have anecdotal data from many projects developed by many teams in multiple companies now that show the business disruptions have decreased and decreased considerably.

And so? Someone else likely has anecdotal data otherwise. How do you even show this? Was everything else the same except this "server" vs "serverless" change? That in itself is impossible unless you know how to freeze time. Lots of variables in your company are likely different every week or month. People come and go. The market changes. Etc.

> some aren't affected at all.

Like if you close your eyes and pretend it doesn't exist? Sure. If you don't care it definitely doesn't exist otherwise cold starts are always slower, the end. It's not just about the programming language, jit, VMs or anything. It's a worse outcome.

> that's a subjective opinion

It's objective based on your measures of objectiveness - as seen above.

> I call faster time to delivery with fewer business disruptions better.

Is that a given? How did you jump to this? Either approach has its complexities. I've seen "serverless" take longer to deliver.

> I call that making the world better.

How does that make it better? What does doing better than an estimate have to do with serverless? You can do that regardless.

We're here just going over the straw man. Where's your actual argument? About server vs serverless. Not something else.

Where's your actual argument? All you're doing is arguing with straw men. I'm just telling you what I've seen across multiple teams and multiple companies.

Faster, cheaper, better.

That's been my experience.

Can you expand more on what these practices are, in your view?