App có 1000 visitor / ngày mà kéo 200 dependency, chạy Kubernetes, Kafka, ai cứu team em đây?
Checklist: 9 dấu hiệu Over-engineering
- Dùng nhiều công nghệ hơn cần thiết: REST, GraphQL, gRPC cho app 100 user.
- Scale “tỷ user” khi chỉ có vài nghìn: Sharding DB cho 1.000 user.
- Framework tự chế: Build router, ORM riêng thay vì dùng Laravel, Spring.
- Config phức tạp: Tự build config tool thay vì
.env, Vault. - Logging, test quá đà: 1.000 dòng test cho 200 dòng code, log txt không trace_id.
- Microservice vụn: 24 service cho team 12 người.
- UI show-off: Dashboard 3D cho báo cáo đơn giản.
- Security quá mức: MFA, OTP cho app nội bộ 50 user.
- Tối ưu không cần thiết: One-liner tiết kiệm 5ms, nhưng không ai đọc được.
Ví dụ thực tế: Startup giáo dục, 1.000 user, dùng Kubernetes, Kafka, GraphQL, sharding DB. Kết quả? Cloud bill 30 triệu/tháng, deploy chậm, team ngập trong config, MVP delay 6 tháng.
Bài học: Keep it simple
- Đánh giá workload: Chỉ dùng công nghệ phù hợp với user/request hiện tại.
- PoC trước: Test công nghệ mới trên side project.
- Audit định kỳ: Kiểm tra dependency, config, test có over-engineering không.
Code mẫu: Hello world đơn giản (Express)
const express = require('express');
const app = express();
app.get('/', (req, res) => res.send('Hello World'));
app.listen(3000);Over-engineering là “tự làm khổ mình”. Dùng công nghệ đơn giản, scale khi cần, audit định kỳ, để app không thành “cỗ máy vô dụng” và team không “khóc thầm”!
Checklist audit over-engineering:
- Đánh giá workload (user, request/day).
- Dùng công nghệ đơn giản cho MVP (REST, MySQL).
- PoC công nghệ mới trước khi triển khai.
- Audit dependency, config, test định kỳ.
🎯 Tóm lại: “Hello world” mà dùng 200 dependency là “mua voi lấy ngà”. Keep it simple, audit over-engineering, để team không ngập trong config và ví không “cháy”!

Đăng nhận xét