The future of software development in the cloud

I think the future of the cloud is bright. I explain why and what can be improved.

The future of the cloud

Cloud is here to stayPermalink

Cloud is not the best choice for everybody but it’s here to stay. Why?

Because it allows you to get servers and related services & software (think DB etc.) with an API call or a click of a button. Yes it’s more expensive than running your own hardware. But for some (and maybe even most companies) it’s a tradeoff they’re willing to do.

Not everybody is a big enough company with steady demand that can buy a bunch of hardware and stick it to the colocation, hire infra/ops people and save a bunch. While it makes perfect sense in the right scenario, I don’t think this works for most companies.

It’s more expensive but…Permalink

Many companies value flexibility of the cloud more than the price. They pay extra for the cloud so they can focus on building their thing rather than dealing with infrastructure.

They might not want to or be able to hire specialist people for infrastructure. If their cloud bill is not in the hundreds of thousands or millions per year (depending on the company size/revenue) it simply might not be worth to deal with your own hardware/software stack.

And even if it’s a big number, if it’s relatively small part of their tech expenses, shaving that in half might not be worth the hassle (one time move and ongoing maintenance).

If cloud makes things easier/more convenient to you, then you might not want to leave it for your own thing even if you save reasonable money because it might be opportunity cost and distraction from your main business.

I consider this to be similar scenario as with payment processors, e.g. Stripe, PayPal etc. Even if you pay 3-5% (or more) to them from each transaction most companies still use them even though they could pay less if they built their own payment system.

They keep paying the fees because building their own thing would distract them from their main business and they’d have to split focus. In the end it might cost them more in lost revenue than they’d ever save on the fees.

It’s default because it’s better/faster/stronger/easierPermalink

For many of us, cloud is the default way to deploy our apps.

Let’s face it, whether you’re deploying your side or hobby project, or small to medium company is deploying their boring business app we don't prefer to order a bunch of machines which are then sent to a colocation company.

If you have monolith app like Django or Rails at least you get a VPS where you run everything. With some basic knowledge you can set it up and secure it.

Great. This is similar to ssh-ing to your rented hardware.

But then things can get more complicated if you want to have DB on separate server. And you also want to have backup DB in case something happens to the main one. Then you might want to setup backups on separate hardware etc.

Suddenly you might need more servers. Now you need to connect them, securely, because you don’t want to have your DB public right? Right?

And here, things start to be much easier in the cloud.

You can use something easier and simpler like Digital Ocean or Linode, or you can use one of the big clouds like AWS, GCP, Azure and get your VPS there if you plan to use some of their other services.

You can also go all-in with the cloud and start to build your app using serverless ideas with some functions/lambdas, etc.

Or go even further with something even simpler and use Heroku, Vercel or similar services which allows you to completely forget about servers, networks and all of that.

Point is, almost nobody thinks of hardware when building or even deploying apps these days.

And it is mostly a good thing.

Until it’s not.

When too easy is not goodPermalink

The more things we abstract away, the easier it is to do some things.

The problem is that sometimes it’s too easy to start, and the easier it is to start, the more expensive it is to continue. Up to the point where you start to question things…

Many cloud companies that simplify your deployment and infrastructure down to a few clicks of the button are the most expensive once your project gets some traction/usage and you need more infra/power. And that’s not the only problem.

There is a tension I see between the two worlds.

  1. The world when you get nice dashboard and you can set up everything with a click of a button and you feel like a god running your code across the globe within seconds.

  2. And the world where you have to deal with VPC, security groups, IAM, permissions and configurations, where you feel like a complete idiot that it took you 3 days to setup deployment of your todo app.

Wow, first scenario sounds great! Where’s the tension?

Too expensivePermalink

Well, your god-like feeling will stop once your project gets bigger and you surpass your free plan and now you start paying 2x, 3x, 5x times more with your click-click infra provider compared to more complicated cloud provider e.g. AWS/GCP/Azure. (or maybe 10x compared to running your own hardware).

If it still makes sense for your business, it’s fine. But what if it’s too much? Do you keep paying or stop your project? None of that is a good option because if you got some traction with your project you want to continue to get some profit, but that might be hard because of crazy infra costs. Maybe it’s software your business needs to operate. There's no way you can stop.

You say, now I can move to AWS (or GCP/Azure). Sure! But isn’t your software specifically developed, organized and setup for this specific provider? Do you or your engineers know anything about AWS, GCP, or Azure? Or are they only familiar with this simplified "click-click" provider?

Do you (or your engineers) know how to move off of it?

Too limitedPermalink

Another problem is that 'simple' usually means limited.

So even if you are willing to pay a lot because you’re so profitable you might end up in a situation where your provider doesn’t offer a feature you now require, forcing you to use another cloud.

Managing two clouds is not easier than one. It also creates other issues. So eventually you’ll probably want to move anyway.

DevelopersPermalink

And now we get to people problems.

It’s great you can build and deploy your project without being infra expert.
I’m happy that’s the case. It’s also great you don’t need full time infra expert engineer.

I fully support the notion that developers should be able to deploy projects (at least small to medium sized) without a need for infra expert.

But I don’t think it should be done by dumbing down to click-click interface. Or without learning and understanding some basics.

This then creates growing problems and lock-in situation for any project.

I’m not saying developers need to be developers AND infra experts in one. But they should have willingness and interest to learn basic stuff because honestly it’s not that hard.

I’m all for making things easier but we don’t have to take it to the extreme especially if it’ll get you once you get out of free tier.

Developers should strive to learn more and understand more about their craft, not try to know as little as possible to get a paycheck.

SolutionPermalink

I believe what we need is a way for developers to be able to manage a project's infrastructure easily from the beginning, and as it grows or project complexity increases they can learn along the way uncovering more options and grow with the project. All while you don’t have to pay a premium (dearly) for the infrastructure just so you can have click-click UI.

Easy and fast but without X-times inflated infra price. It’s okay to pay for DX and productivity but not in multiplies of your infra costs.

Make it easy, not stupidPermalink

How do we get devs to embrace infra, enjoy learning and make them productive at the same time? There are a few things:

  • give them god-like feeling with easy start
  • while explaining what’s going on
  • in their programming language - so they don’t have to switch context & learn a new thing
  • increased productivity
  • known environment/tools
  • give them options - allow them to write solutions where they can choose or change infra providers

So essentially dealing with infrastructure should just feel like using another library in your already familiar programming language.

How?Permalink

The way to do it is:

  1. Infrastructure as Code. Everything must be in IaC managed by devs.
  2. Read-only UI. UI is just for display (we could have UI to modify IaC but we don’t really want to).
  3. High-level (abstracted) setups but option to go as granular as needed.
  4. Documentation that explains concepts, lower level things and what’s going on next to high level abstractions.
  5. Easy setup.
  6. Tools integration - terminal, IDE, push to deploy etc.
  7. Easy local development & easy testing.
  8. Easy to spin up different environments/stages (with IaC).
  9. Help with observability - logs, errors etc. Connecting to existing platforms.

Note: I know there are solutions e.g. AWS CDK/Pulumi that allows you to define infrastructure using programming languages. But these are dev ops/infra people focused solutions. They approach the problem from infrastructure side (infra first approach) not from developer (or software development) side. They try to be complete representation of existing cloud infrastructure. Solution focused on developer can’t and should not try to achieve that. (It should still be able to coexist with these solutions).

CostsPermalink

We discussed pricing several times already but there’s a good reason why. Money is always important in business.

So I think a good solution needs to have a good way to deal with costs.

Understanding costs and cost predictability are important for all businesses. Most clouds don’t do a good job of helping you understand your bills so a good solution should include some form of cost management and help with understanding it.

And all of this should be approachable by developers. Because they create and use infra so if they understand cost implications easily they can make right decisions.

ConclusionPermalink

I think cloud will stay and will continue to grow.

I don’t want to go back 15 years; it wasn't more productive or better back then.

Hopefully we’ll have more big clouds so price is going down.

I’m not sure if super-easy, click-click clouds will survive though, due to pricing & limitations and the fact that they mostly use infra of existing big clouds.

While it’s not always easy with big clouds (AWS, Azure, GCP, Cloudflare?) they have a lot of good infrastructure (and accompanying software) around the world which everybody can use with some knowledge.

I think with right approach we can build software that will make it much easier to use cloud by developers (at least until project grows really big).

I have something in mind. And I started to build it. But I’ll write about it next time.

You might also like

Better Python apps in AWS with stelvio.dev

Deep dives and quick insights into cloud architecture.

    We won't send you spam. Unsubscribe at any time.