---
title: "On full stack"
date: "2026-02"
category: "Essays"
tags: ["Essays"]
description: "There really is a view that full-stack engineers are fine, but the problem is their knowledge has breadth and no depth, not specialized enough..."
source: "https://enriquemark.com/en/posts/%E5%85%B3%E4%BA%8E%E5%85%A8%E6%A0%88"
---

There really is a view that full-stack engineers are fine, but the problem is their knowledge has breadth and no depth, not specialized enough. I agree with that to some extent, but on the other hand I think the view only looks at the surface and misses other core factors:

1. There's a job called architect, and it requires deep understanding of both frontend and backend by definition.

2. The underlying technical logic is shared:
   Frontend and backend connect at the level of low-level programming knowledge.
   (a) Programming languages: whether it's Java and C# on the backend or JavaScript and TypeScript on the frontend, their design principles tend to inherit layer by layer and develop off each other.
   (b) Performance tuning: take it back to its essence and it's all data structures and algorithms, with specific domain knowledge added on.

Frontend and backend divide along function and responsibility, but they share the same big general field called "programming". So a full-stack engineer can also learn deeply. The point is not getting fooled by the surface-level tools and frameworks, and going after the more essential things instead.

It's like the social sciences, which cover political science, economics, history and other disciplines, and some people feel that covering that much means you can't master any of it. But at a deeper level the social sciences have a shared methodology. Once you've digested those essentials, moving between disciplines is easy. Across disciplines and across fields you can even see problems that single-field knowledge holds you back from seeing. You don't get the drawback of over-specialization boxing in your knowledge framework and your whole structure, so you see the blind spots and make new things.

So my core argument is that a full-stack engineer can be highly proficient too. As long as you understand the essential principles deeply enough, the rest is just spending time getting familiar with the specific usage that sits on top of them.

That familiarization goes fast. For example:
1. Frontend: performance optimization when handling large volumes of data queries, essentially an algorithm problem.
2. Backend: scheduling when a lot of traffic comes in, essentially an algorithm problem too.

At bottom, as long as your grasp of the underlying principles is solid enough, the application-layer work above it won't beat you either.

On the learning side, full-stack development demands stronger learning ability and broader knowledge, and that in itself is a barrier, so becoming a senior full-stack engineer really is hard. That's why a lot of people lean toward specializing, since they know their specific field better and it goes more smoothly for them, and I understand that completely. I've been interested in every field anyway, across a wide range, so for me it doesn't matter. After all, I've always learned this way.

---

**Translation note.** I wrote this in Chinese. This English version is an LLM translation, so the wording is not mine even though the thinking is. Original: [关于全栈](</zh-hant/posts/关于全栈>).
