Full disclosure, my ideal stack is constantly changing. Every time I start a new project I do a deep dive on the latest and greatest technologies that I might want to try. When building technology for startups, I tend to pick tools that optimize for developer productivity and modularity. Developer productivity allows me to move quickly with the understanding that we might scrap things that aren't working. Modularity allows me to replace parts of the stack with more scalable/performant technologies as the startup grows.

Every project will have unique considerations so you'll need to do your research and make sure you're using the right tools for the job. But this is generally where I like to start.

So, here we go. My ideal startup tech stack (as of Oct 2020):

  1. React (Web) & Next.js
  2. React Native (Mobile: iOS & Android)
  3. Apollo
  4. GraphQL
  5. Node.js
  6. Prisma
  7. PostGres

The best stack for a startup that has limited resources and is trying to move quickly? An all Javascript stack. Why? Javascript developers are easy to come by and a Javascript codebase allows your engineers to write code across the entire stack.

Frontend

React (Web)

Obvious choice if we’re building a website from scratch - it's an industry standard at this point.

Create-react-app is a great place to start to play around with React. Next.js is a React framework that I like to use to make my apps/websites more performant.

React Native (Mobile: iOS & Android)

If you want a mobile app, the question is often "do we build native apps or do we build our app with React Native?". For startups who want to move quickly, launch on both Android and iOS and don’t have complex app designs, React Native is most likely the way to go. Huge perk, your engineers don't need to learn two new programming languages. React Native is written with Javascript!

Additional resources: React Native Pros and Cons, When Does It Make Sense To Use React Native, Shopify's Choice To Use React Native

Apollo

Apollo is the industry standard GraphQL implementation. We'll use it on the front-end to talk to our GraphQL API. We'll also use Apollo to create our API on the backend. More on that soon!

One fun fact: in the past we’d also need a “local store” on our front-end to store data about our app's state, such as Redux or MobX. With the release of Apollo Client 2.0 we can use apollo-link-state to maintain a single source of truth. It gives us a common language to refer to all forms of data, whether it be app state or data that comes from a GraphQL API.

Additional resources: The Future Of State Management

Backend

Node.js

Node.js allows us to use Javascript on the server. Node.js is incredibly fast because it promotes non-blocking programming -- it puts time-consuming tasks off to the side, usually by specifying what should be done when these tasks are complete, and allowing the processor to handle other requests in the meantime.

Additional resources: Why Node.js Is Totally Awesome

GraphQL

I’ve used both REST and GraphQL in production code bases and I LOVE GraphQL. I could write a whole other post about my love of GraphQL but most high-caliber engineering teams starting new code bases seem to be using it. The major improvement with GraphQL is that it alleviates the issues with over-fetching and under-fetching data. It also makes front-end development significantly easier.

"It helps clients fetch the right amount of data needed to render the view. GraphQL lets clients define the shape of the response for each request. In addition to this, it removes the complexity of API Endpoint management on these clients, as it exposes a single HTTP Endpoint (and is usually /graphql) to fetch the required data." - Source

Additional resources: When And Why To Use GraphQL

Prisma

Prisma is an API to your database. It replaces traditional ORMs and makes database access easy with an auto-generated query builder for Node.js. (Trust me, this saves significant time and avoids a ton of repetitive code). You can use any relationship database and you never have to write a line of SQL!

Additional resources: How Prisma and GraphQL Fit Together

Postgres (Database)

PostgreSQL is a good choice for a database because it’s free, open-source, and highly customizable. It has never let me down.

Additional resources: Which Companies Use Postgres And Why

Conclusion

At the end of the day, your tech stack must be built to maximize the value you provide to your customers. Do they want speed? Do they want beautiful animations? Do they want to be able to log in and securely store their personal data? Each of these considerations will help you make the call on what tools you'll need to use.