Get AI summaries of any video or article — Sign up free
How to OVER Engineer a Website // What is a Tech Stack? thumbnail

How to OVER Engineer a Website // What is a Tech Stack?

Fireship·
5 min read

Based on Fireship's video on YouTube. If you like this content, support the original creators by watching, liking and subscribing to their content.

TL;DR

A tech stack is best treated as three layers—front end, back end, and APIs/third-party services—rather than a single acronym.

Briefing

Choosing a tech stack early can make or break a startup build, because swapping it later is painful. A “tech stack” isn’t one thing—it’s a layered set of tools that together handle the user interface (front end), the server-side logic and data storage (back end), and the connections between them (APIs and third-party services). The core takeaway is that stack decisions should match real product needs, not acronym-chasing or “use everything” engineering.

The transcript starts with the classic LAMP stack—Linux, Apache, MySQL, and PHP—popularized in the late 1990s. In that era, building web apps often meant expensive commercial software, while LAMP offered a free, open-source alternative that later influenced frameworks like WordPress and Joomla. Today’s web development is easier in some ways, but modern stacks are far more complex because many vendors sell specialized “shovels” to startups.

To make the idea concrete, the transcript defines three layers. The front end includes tools for the user interface, typically a JavaScript framework for web (or iOS/Android/cross-platform tools like Flutter for mobile). The back end includes a server runtime (like Node.js or Python), a database for user-generated data, and often cloud infrastructure that can create vendor lock-in. The middle layer is APIs: communication mechanisms like REST or GraphQL plus essential third-party services such as Stripe (payments), Twilio (text messaging), and SendGrid (email). These services blur boundaries because they act like both backend and frontend dependencies.

Common stacks like MEAN (MongoDB, Express, Angular, Node) and variations such as MERN or “M”/“Mevan” are introduced largely as examples of how catchy acronyms drive adoption—even when the acronym doesn’t fully represent what a real project needs. A site like StackShare is suggested as a way to see what successful companies actually use.

Then comes the main exercise: over-engineer a hypothetical Myspace-like app. The front end starts with TypeScript on top of JavaScript, React for UI, Redux for state management, and Tailwind for styling (plus Sass and PostCSS for preprocessing and production cleanup). Webpack is added as the module bundler. The backend begins with MySQL for relational data, then adds Redis as an in-memory cache for speed. Node.js runs server code, Nest provides a TypeScript-friendly server framework, and TypeORM handles database access without raw SQL. An HTTP server like Nginx or Apache is included, then Docker standardizes the environment, Kubernetes orchestrates containers, and Amazon Web Services hosts the infrastructure. Terraform manages AWS provisioning, GitHub stores code, and GitHub Actions automates testing and redeployment.

For API and “don’t build it yourself” needs, GraphQL and Apollo are added, along with Stripe for payments, Auth0 for authentication, Amazon Rekognition for image moderation, and Twilio for messaging. The transcript’s punchline is that this stack is likely far more complex than necessary because end users only care about outcomes—performance, reliability, and usability—while infrastructure complexity becomes justified only after early product success.

The simplified “realistic” stack flips the approach: start with minimal tooling (even plain HTML), then add only what’s required. For a lightweight web app, it proposes Petite Vue instead of a heavy framework, Bootstrap instead of Tailwind, and Ionic for mobile packaging. For the backend, it recommends Firebase to handle a scalable document database and authentication, with optional Firebase Cloud Functions for server-side code. It also suggests skipping GraphQL unless the app truly needs complex multi-API composition, resulting in a “Petite Fire” stack aimed at speed and simplicity over maximum engineering overhead.

Cornell Notes

A tech stack is best understood as three layers: front end (UI tools), back end (server runtime, database, and often cloud infrastructure), and APIs (communication plus third-party services like Stripe, Twilio, and SendGrid). The transcript warns that stack changes later are costly, so early choices matter—but it also criticizes acronym-driven and over-engineered builds. A “maximal” Myspace-like example adds TypeScript, React, Redux, Tailwind, Webpack, MySQL, Redis, Node.js with Nest, TypeORM, Nginx/Apache, Docker, Kubernetes, AWS with Terraform, GitHub Actions, GraphQL/Apollo, and multiple third-party services. It then pivots to a leaner approach: start simple, add only what’s needed, and use Firebase (plus Cloud Functions) to avoid much of the infrastructure burden. The practical lesson is to optimize for product delivery first, complexity later.

What does “tech stack” mean in practical terms, beyond a catchy acronym?

It’s a layered set of tools: (1) a front end for the user interface (often JavaScript frameworks for web), (2) a back end for server-side runtime plus a database for user-generated data (and frequently cloud infrastructure), and (3) APIs that connect the front end to the back end. APIs include both communication styles like REST or GraphQL and third-party services such as Stripe for payments, Twilio for text messaging, and SendGrid for email. Some services blur layers because they provide capabilities used from both client and server.

Why do acronym stacks like LAMP or MEAN attract attention, and what’s the downside?

Acronyms make stacks memorable and signal competence, which can help teams recruit and align quickly. LAMP (Linux, Apache, MySQL, PHP) became influential because it was free and open source in the late 1990s, enabling web frameworks like WordPress and Joomla. The downside is that acronyms don’t capture the full reality of what a production app needs—state management, caching, deployment, CI/CD, security, and third-party integrations often matter more than the four letters suggest.

In the over-engineered Myspace-like build, what roles do the database and caching layers play?

The example uses MySQL as the relational database for handling relationships and evolving requirements, which is a common strength of SQL systems. It then adds Redis as a second database used as a cache, storing data in memory for much faster reads than disk-based storage. That pairing targets scalability: MySQL for durable relational data, Redis for performance under load.

How does the transcript justify adding infrastructure tools like Docker, Kubernetes, and Terraform?

Docker standardizes the environment by containerizing the app into a consistent Linux setup that can deploy across servers. As the app scales to multiple containers, Kubernetes orchestrates those containers. Terraform then provisions and versions infrastructure on AWS programmatically, aiming for reliability and repeatability instead of manual click-ops.

What is the simplified alternative stack, and what complexity does it intentionally avoid?

The simplified approach proposes Petite Vue for a lightweight front end, Bootstrap for quick styling, and Ionic for wrapping the app for iOS and Android. For the back end, it recommends Firebase to provide a scalable document database and authentication without running a dedicated server. Optional Firebase Cloud Functions handle server-side logic without managing Docker, Kubernetes, or Terraform. It also suggests skipping GraphQL unless the app needs complex multi-API composition.

Review Questions

  1. When does adding Kubernetes and CI/CD automation become justified in this framework of thinking?
  2. Compare the strengths of MySQL vs MongoDB/Firestore as described, and explain why caching with Redis is introduced.
  3. What criteria would make GraphQL worth keeping rather than removing in a simplified stack?

Key Points

  1. 1

    A tech stack is best treated as three layers—front end, back end, and APIs/third-party services—rather than a single acronym.

  2. 2

    Changing a stack later is costly, so early decisions should be driven by product needs, not popularity or memorability.

  3. 3

    Over-engineering a full production setup (Docker, Kubernetes, AWS, Terraform, CI/CD) can be premature before the app proves demand.

  4. 4

    Relational databases like MySQL fit relationship-heavy data, while Redis caching targets performance by storing frequently used data in memory.

  5. 5

    Third-party APIs (payments, messaging, authentication, moderation) often belong in the stack because they replace complex capabilities that teams would otherwise build from scratch.

  6. 6

    A lean approach—start simple, add only what’s required—can use Firebase and Cloud Functions to avoid managing servers and infrastructure early on.

  7. 7

    GraphQL should be kept for complex composition needs; it can be removed for simpler apps to reduce complexity.

Highlights

A “tech stack” is a layered system: UI tools, server/runtime + database, and API/third-party services that connect everything.
A maximal build for a Myspace-like app stacks everything from React/Redux and Tailwind to MySQL/Redis, Docker/Kubernetes, AWS/Terraform, and GraphQL/Apollo plus Stripe, Auth0, Amazon Rekognition, and Twilio.
The pivot is blunt: end users don’t care about the technology underneath, so infrastructure-heavy choices like Kubernetes should wait until the product earns them.
The simplified “Petite Fire” direction swaps much of the backend and deployment burden for Firebase and Firebase Cloud Functions, aiming for speed and reduced operational overhead.

Topics

  • Tech Stack Layers
  • Over Engineering
  • Full-Stack Architecture
  • Simplified Firebase Stack
  • Deployment Tooling

Mentioned

  • LAMP
  • MEAN
  • API
  • REST
  • GraphQL
  • CI/CD
  • SQL
  • NoSQL
  • AWS
  • CI
  • CD
  • IoT