Mục lục

Lesson 1.1: Backend Design System là gì?

Hiểu định nghĩa, thành phần cốt lõi và lợi ích của Backend Design System

Design System
Backend
Architecture

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
typescript:
// 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 nhauClient phải handle nhiều formats
Không có logging standardDebug khó khăn, traces bị mất
Mỗi dev setup project theo cách riêngOnboarding chậm, code review khó
Không có shared librariesCode duplicate, bugs lặp lại

Lợi ích khi CÓ Design System:

Code:
┌─────────────────────────────────────────────────────────┐
│                    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)

typescript:
// ❌ 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)

typescript:
// 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)

bash:
# 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ạiVí 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:

markdown:
# 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:

  1. Bạn sẽ bắt đầu chuẩn hóa từ đâu?
  2. Làm thế nào để thuyết phục team adopt chuẩn mới khi họ đã quen với cách cũ?
  3. Làm sao balance giữa "ship fast" và "build foundation"?
Xem phân tích

Câu 1 - Bắt đầu từ đâu:

  1. Error handling - Impact cao, scope nhỏ
  2. Logging format - Cần cho debugging ngay
  3. 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:

  1. Audit: Tìm inconsistencies gây pain nhất
  2. RFC: Viết proposal, get buy-in từ team
  3. Start small: Một component (e.g., logging)
  4. New code first: Apply cho services mới trước
  5. Gradual migration: Migrate old services từng bước
  6. 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:

  1. RFC Process:

    • Any change to DS needs RFC
    • 72h review period
    • 2+ approvals từ DS maintainers
  2. Ownership:

    • Platform team owns shared libraries
    • Product teams can propose changes
    • Rotating "DS champion" per team
  3. Versioning:

    • Semantic versioning cho libraries
    • Breaking changes need major bump
    • Deprecation policy: 2 months notice
  4. 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ớ

ConceptGiải thích
Backend Design SystemTập hợp conventions, libraries, templates, docs, governance
Litmus test"Có thể enforce bằng code không?"
5 ComponentsConventions → Libraries → Templates → Docs → Governance
ROI chínhOnboarding nhanh, ít bugs, scale dễ

Key Takeaways

  1. Design System ≠ Documentation: Nó phải được enforce bằng code
  2. Start small: Không cần full system ngay, bắt đầu từ pain point lớn nhất
  3. 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.

Tiếp tục Lesson 1.2 →

Quảng cáo
mdhorizontal