Giải pháp “chắp vá” – Dự án thành kỹ nghệ vá lỗi

Dự án 8 năm, patch chồng patch, sửa 1 dòng code thì 10 bug mới xuất hiện!

Một dự án chính phủ Việt Nam, hệ thống quản lý hồ sơ 8 năm tuổi, codebase “chắp vá” từ 3 vendor. Mỗi thay đổi nhỏ kéo theo 10 regression bug, team mất 3 tháng fix một tính năng đơn giản. Hệ thống như “mớ spaghetti” không ai dám động vào.


Case thực tế: Codebase “spaghetti” chính phủ

  • Context: Hệ thống quản lý hồ sơ, 500k dòng code, hỗn hợp PHP, Java, Python. 
  • Quyết định sai: Patch code liên tục, không refactor, không document. 
  • Vấn đề
    • Code chồng chất, logic lặp, không có architecture rõ. 
    • Không unit test, mỗi change gây regression bug. 
    • Vendor thay đổi liên tục, không ai hiểu toàn bộ hệ thống.

Hậu quả

  • Chậm tiến độ: Tính năng mới delay 6 tháng. 
  • Chi phí: Fix bug tốn 1 tỷ đồng/năm. 
  • Danh tiếng: Người dùng phàn nàn vì lỗi lặp lại.

Phân tích: Tại sao lại sai?

  • Không refactor: Codebase tích lũy “nợ kỹ thuật” qua 8 năm. 
  • Thiếu architecture: Không có domain boundary, không dùng pattern (DDD, Clean Architecture). 
  • Không test: Không unit test, integration test, regression bug lọt lưới.

Bài học: Refactor định kỳ

  1. Refactor codebase: Áp dụng Clean Architecture, chia module rõ ràng. 
  2. Unit test: Viết test cho logic chính, coverage >70%. 
  3. Document architecture: Vẽ diagram, định nghĩa domain boundary.

Code mẫu: Clean Architecture (Node.js)

// domain/order.js
class Order {
    createOrder(userId, items) {
        return { id: 123, userId, items };
    }
}

Góc nhìn CTO

Codebase “chắp vá” là “mớ spaghetti” chờ sập. Refactor định kỳ, dùng Clean Architecture, viết test, để hệ thống không thành “kỹ nghệ vá lỗi” và team không “khóc thầm”!

Checklist tránh chắp vá

  • Refactor codebase định kỳ (6–12 tháng). 
  • Áp dụng Clean Architecture, chia module. 
  • Viết unit test, coverage >70%. 
  • Document architecture và domain boundary.

🎯 Tóm lại: Code chắp vá là “tự xây nhà trên cát”. Refactor, test, document, để dự án không thành “spaghetti” và team không debug đến “hóa điên”!

Post a Comment

Mới hơn Cũ hơn