Thời lượng: 20 phút
Level: Beginner
Yêu cầu: Kiến thức REST API cơ bản
Mục tiêu bài học
Sau bài học này, bạn sẽ:
- Hiểu được định nghĩa chính xác của Backend Design System
- Biết 5 thành phần cốt lõi của một Backend DS
- Phân biệt được Design System với coding guidelines đơn thuần
Nội dung chính
1. Định nghĩa Backend Design System
Backend Design System là một tập hợp có cấu trúc các:
- Conventions: Coding standards, API patterns, naming rules
- Shared Libraries: Reusable packages cho các tasks phổ biến
- Templates: Boilerplate cho services mới
- Documentation: Living specs và examples
- Governance: Quy trình adoption và evolution
// Ví dụ: Một phần của Backend Design System
interface BackendDesignSystem {
conventions: {
naming: NamingRules;
errorHandling: ErrorStandards;
logging: LoggingFormat;
};
libraries: {
httpClient: StandardHttpClient;
validator: ValidationLibrary;
logger: LoggingLibrary;
};
templates: {
microservice: ServiceTemplate;
lambda: LambdaTemplate;
};
}Tip: Design System không phải là documentation - nó là hệ thống sống được enforce bằng code, tests, và CI/CD pipelines.
2. Tại sao cần Backend Design System?
Vấn đề thường gặp khi KHÔNG có Design System:
| Vấn đề | Hậu quả |
|---|---|
| Mỗi service return error khác nhau | Client phải handle nhiều formats |
| Không có logging standard | Debug khó khăn, traces bị mất |
| Mỗi dev setup project theo cách riêng | Onboarding chậm, code review khó |
| Không có shared libraries | Code duplicate, bugs lặp lại |
Lợi ích khi CÓ Design System:
┌─────────────────────────────────────────────────────────┐
│ TRƯỚC Design System │
│ Service A: { error: "Not found" } │
│ Service B: { message: "404", code: "ERR_404" } │
│ Service C: { status: "error", reason: "missing" } │
└─────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────┐
│ SAU Design System │
│ Tất cả services: │
│ { │
│ "success": false, │
│ "error": { │
│ "code": "RESOURCE_NOT_FOUND", │
│ "message": "The requested resource was not found" │
│ } │
│ } │
└─────────────────────────────────────────────────────────┘3. Năm thành phần cốt lõi
3.1. Conventions (Quy ước)
// ❌ Không có convention
function getUser(id) { ... }
function fetchUserById(userId) { ... }
function loadUserData(user_id) { ... }
// ✅ Có convention
function getUserById(userId: string): Promise<User> { ... }
function getOrderById(orderId: string): Promise<Order> { ... }
function getProductById(productId: string): Promise<Product> { ... }3.2. Shared Libraries (Thư viện dùng chung)
// Thay vì mỗi service tự implement
import { createLogger, httpClient, validateRequest } from '@company/backend-core';
const logger = createLogger('user-service');
const response = await httpClient.get('/api/users');
const validatedData = validateRequest(schema, request.body);3.3. Templates (Mẫu khởi tạo)
# Tạo service mới từ template chuẩn
npx create-service my-new-service
# Kết quả: Có sẵn folder structure, configs, health endpoint, logging, etc.3.4. Documentation (Tài liệu)
- API guidelines với examples
- Error code catalog
- Architecture Decision Records (ADRs)
- Runbooks cho operations
3.5. Governance (Quản trị)
- RFC process cho thay đổi lớn
- Code review checklist
- Automated linting và validation
- Migration guides
Nguyên tắc then chốt
"Nếu không thể enforce bằng code hoặc automated checks, đó không phải là standard - đó chỉ là suggestion."
Nguyên tắc này là litmus test quan trọng nhất:
| Loại | Ví dụ | Enforcement |
|---|---|---|
| Standard | "Tất cả APIs phải return JSON envelope" | Lint rule + CI check |
| Standard | "Logs phải theo format JSON" | Logger library enforce |
| Suggestion | "Nên viết tests" | Chỉ là lời khuyên |
| Suggestion | "Code nên clean" | Không đo lường được |
Thực hành
Bài tập 1: Audit codebase hiện tại
Mục tiêu: Tìm inconsistencies trong codebase hiện tại của bạn
Yêu cầu:
- List 5 pain points do thiếu chuẩn hóa
- List 5 cải tiến Design System có thể mang lại
- Ước tính thời gian tiết kiệm được
Template:
# Why We Need a Backend Design System
## 5 Pain Points hiện tại
1. [Pain point 1] - Ví dụ: "Mỗi service log theo format khác nhau"
2. [Pain point 2]
3. [Pain point 3]
4. [Pain point 4]
5. [Pain point 5]
## 5 Goals sau khi có Design System
1. [Goal 1] - Ví dụ: "Bất kỳ dev nào cũng có thể setup service mới trong 15 phút"
2. [Goal 2]
3. [Goal 3]
4. [Goal 4]
5. [Goal 5]
## ROI Estimate
- Thời gian onboarding hiện tại: ___ ngày
- Thời gian onboarding mục tiêu: ___ ngày
- Số lần duplicate code per month: ___Xem gợi ý
Pain points thường gặp:
- Error handling không nhất quán
- Logging format khác nhau
- Không có health check chuẩn
- Mỗi service có cách config khác
- Không có shared authentication middleware
Goals thường đặt:
- Onboarding < 1 ngày
- Zero duplicate code cho cross-cutting concerns
- Consistent error messages cho clients
- Unified logging cho debugging
- One-click service creation
Tình huống thực tế
Scenario 1: Startup đang scale
Bối cảnh: Bạn là Tech Lead tại một fintech startup. Team từ 3 người giờ đã lên 15 người. Mỗi microservice được viết bởi người khác nhau, theo style khác nhau.
Vấn đề cụ thể:
- Mỗi service return errors theo format riêng
- Developers mới mất 2 tuần để hiểu codebase
- Debug cross-service issues cực kỳ khó vì logs không consistent
Câu hỏi:
- Bạn sẽ bắt đầu chuẩn hóa từ đâu?
- Làm thế nào để thuyết phục team adopt chuẩn mới khi họ đã quen với cách cũ?
- Làm sao balance giữa "ship fast" và "build foundation"?
Xem phân tích
Câu 1 - Bắt đầu từ đâu:
- Error handling - Impact cao, scope nhỏ
- Logging format - Cần cho debugging ngay
- Service template - Cho services mới
Câu 2 - Thuyết phục team:
- Show pain: Demo một cross-service bug mất 4h debug
- Show gain: Demo service mới từ template chỉ 15 phút
- Gradual adoption: Không rewrite, chỉ apply cho code mới
Câu 3 - Balance:
- Sprint 1-2: Define standards (không code)
- Sprint 3-4: Build shared libraries
- Sprint 5+: Migrate gradually, new code follows standards
Câu hỏi phỏng vấn
Junior Level
Q1: Backend Design System là gì và tại sao startup nhỏ vẫn cần?
Xem đáp án
Đáp án mong đợi:
- Là tập hợp conventions, libraries, templates, docs, governance
- Startup cần vì: Onboarding nhanh, scale dễ, ít bugs
- Không cần full-blown DS, nhưng cần basic standards
Điểm cộng: Mention rằng investment sớm trả về khi team scale
Q2: Liệt kê 3 thành phần quan trọng nhất của Backend DS?
Xem đáp án
Đáp án: Conventions, Shared Libraries, Templates
- Conventions: Định nghĩa "đúng"
- Libraries: Enforce conventions bằng code
- Templates: Đảm bảo consistency từ đầu
Mid Level
Q1: Bạn sẽ introduce Backend Design System như thế nào vào một team đã có 10 microservices?
Xem đáp án
Approach:
- Audit: Tìm inconsistencies gây pain nhất
- RFC: Viết proposal, get buy-in từ team
- Start small: Một component (e.g., logging)
- New code first: Apply cho services mới trước
- Gradual migration: Migrate old services từng bước
- Automate: CI checks, linting rules
Senior Level
Q1: Design một governance process cho Backend Design System trong org 50+ engineers.
Xem đáp án
Key points:
-
RFC Process:
- Any change to DS needs RFC
- 72h review period
- 2+ approvals từ DS maintainers
-
Ownership:
- Platform team owns shared libraries
- Product teams can propose changes
- Rotating "DS champion" per team
-
Versioning:
- Semantic versioning cho libraries
- Breaking changes need major bump
- Deprecation policy: 2 months notice
-
Adoption metrics:
- % services using latest template
- Time to first deploy for new services
- Error format compliance rate
Tóm tắt
Những điều cần nhớ
| Concept | Giải thích |
|---|---|
| Backend Design System | Tập hợp conventions, libraries, templates, docs, governance |
| Litmus test | "Có thể enforce bằng code không?" |
| 5 Components | Conventions → Libraries → Templates → Docs → Governance |
| ROI chính | Onboarding nhanh, ít bugs, scale dễ |
Key Takeaways
- Design System ≠ Documentation: Nó phải được enforce bằng code
- Start small: Không cần full system ngay, bắt đầu từ pain point lớn nhất
- Gradual adoption: Apply cho code mới, migrate code cũ dần
Checklist hoàn thành
- Hiểu được 5 thành phần của Backend DS
- Hoàn thành bài tập audit codebase
- Có thể giải thích difference giữa DS và coding guidelines
- Trả lời được câu hỏi phỏng vấn Junior
Tài liệu tham khảo
Bước tiếp theo
Trong bài tiếp theo Lesson 1.2: Xác định phạm vi MVP, bạn sẽ học cách scope MVP đúng cách để không bị overwhelm khi build Design System.