Most startups think of the engineering stack as if it is a single cohesive thing. However, I believe that there are three different engineering stacks that are loosely coupled to each other.
Backend compute stackThe backend computes stack consists of backend infrastructure, which could range from serverless (Lambda functions, Cloud Functions) to Docker on AWS Fargate/Google Cloud Run to Kubernetes. More obsolete or specialized stacks would consist of Virtual Machines or bare metal deployments as well.The questions to ask while deploying this stack are
- Where to host the code? AWS vs Google Cloud vs Azure vs Layer 2 providers (render.com, vercel.dev) vs private datacenter
- Which language to use for building backend services? Go vs Python vs Rust. A more obsolete stack might even use Node.js.
- Which CDN to use? This is relevant only for media-heavy applications
- What guardrails to apply and when to ensure reliability and observability.
Backend storage stackThe backend storage stack consists of the storage layer. A most basic storage layer might consist of a relational Database (MySQL/Postgres) or NoSQL (Amazon DynamoDB/Google Spanner/Mongo DB). For storing anything larger than 1MB, file/object storage is recommended. Google Cloud Storage, AWS S3 is a prominent example of this type of storage. Lastly, if there are Machine Learning loads involved, the question would the decision around vector databases would be relevant as well.
Frontend stackThe frontend stack consists of user-facing components. The most common example of that is the website. The second most common example of that is mobile apps (Android & iOS). However, some companies might be building their core applications that are more embedded in different workflows. E.g. Shopify Apps for eCommerce plugins, GitHub Apps for developer plugins, web browser extensions, etc.The questions to ask for the frontend stack are
- What’s the primary mode of user interaction - website, mobile app, voice, or some other industry-specific workflow?
- Go conservative or exotic? - For example, ReactJS+Next is a pretty conservative choice for building websites. VueJS, I believe is superior but is less popular. And then there is a long tail of frameworks with limited support.
- Does code sharing matter? - Apache Cordova, Xamarin, React Native, and Flutter, all support code sharing across Android & iOS platforms, and to some extent even with the Web. The question is whether and how much code sharing matters. For a small startup with a small userbase, probably a lot but for a company with a large (~1M users or more), the benefits are diminishing and might even be negative.