Simplicity

Định nghĩa

Simplicity là khả năng làm hệ thống dễ hiểu và dễ reasoning bằng cách loại accidental complexity, không phải bằng cách cắt bỏ chức năng hoặc giả vờ essential complexity không tồn tại.

Hai loại complexity

  • Essential complexity: độ phức tạp vốn có của bài toán người dùng.
  • Accidental complexity: độ phức tạp phát sinh từ implementation và organization của system.

Triệu chứng accidental complexity

  • State space quá lớn.
  • Tight coupling và tangled dependency.
  • Naming hoặc terminology không nhất quán.
  • Performance hack và workaround tích tụ.
  • Special case ở module này để bù lỗi thiết kế của module khác.
  • Hidden assumption khiến thay đổi có unintended consequence.

Abstraction là công cụ chính

Implementation detail phức tạp
-> abstraction có boundary và contract rõ
-> phần còn lại của system dùng interface đơn giản hơn
-> giảm lượng detail phải giữ trong đầu cùng lúc

High-level language che machine code và syscall; SQL che storage structure, concurrent request và nhiều chi tiết recovery. Detail vẫn tồn tại, nhưng được quản lý ở boundary phù hợp.

Abstraction kém có thể che mất failure mode hoặc leak detail ra mọi caller. Với distributed system, tìm abstraction vừa dễ dùng vừa trung thực về fault và latency đặc biệt khó.

Câu hỏi review

  • Complexity này đến từ bài toán hay từ cách triển khai?
  • Boundary có che detail đúng chỗ không?
  • Caller cần biết failure mode nào dù đã có abstraction?
  • Thay đổi một module có buộc sửa nhiều module không liên quan không?

Liên kết