I have witnessed companies aligning themselves to scale to Infinity, and never gain traction. They built this complicated infrastructure that wasn't needed at first, and afterward neither.
The issue is that each additional step in performance also adds complexity. Which translated into overheads to deploy, debug, and understand the application. If requirements change, it also becomes more expensive to turn the infrastructure around.
So instead, let's start with the most simple possible architecture, and align ourselves to make it easy to change as new requirements come in. Boring is good!
When there are zero customers, the application doesn't need high-availability, auto-scaling, and auto-healing properties. This will come later.
Align for change
Services like Heroku or Vercel are brilliant. They allow to deploy applications with almost zero infrastructure setup. Create an account, run a few commands and you are good to go.
Quite quickly, the application is going to need an S3 bucket, a Redis cache, ... Or the developers might want to split the application into multiple services. At that point, it's a good time to invest in creating a minimal infrastructure.
This is where you would like to invest in a tool like Terraform to declare and control infrastructure changes on AWS, Azure or Google Cloud, and hundreds of other services. With that in place, it becomes possible to evolve the architecture as needed and doesn't require to start with the full solution.
Focus on building the product
DevOps and infrastructure design is a (necessary) distraction. The hard part of the startup is to create a product that people want to use. And keep that traction up.
So let's keep the infrastructure as simple as possible. Teach the developers how to interact with it so they can understand and debug it themselves. And expand as needed.
Thanks for reading,
PS: Kubernetes is also a distraction and should be addressed in another article. This is how to write flutter
We hired NumTide to help setup our cloud infrastructure. After 1 week they set up a scalable & future proof infrastructure that is easy to maintain and develop. At the same time they setup a CI/CD workflow that has allowed all our developers to focus on what they do best: write code. The people at NumTide are very humble and honest - the ideal support for a startup.
-- Ronal Smith - ModelDrive