Maintainability

Định nghĩa

Maintainability là khả năng giúp nhiều người vận hành, hiểu và thay đổi hệ thống một cách hiệu quả trong thời gian dài. Nó gồm ba trụ cột: Operability, Simplicity và Evolvability.

Ba trụ cột

Operability

Giúp operations giữ hệ thống chạy ổn định: quan sát runtime behavior, tìm nguyên nhân failure, patch, capacity planning, deployment, configuration và lưu giữ organizational knowledge.

Một hệ có operability tốt cung cấp monitoring, automation, standard integration, documentation, default hợp lý, manual override, self-healing có kiểm soát và hành vi dễ dự đoán.

Simplicity

Giảm accidental complexity do triển khai tạo ra: state space quá lớn, tight coupling, dependency rối, naming không nhất quán, performance hack và special case.

Abstraction tốt che chi tiết triển khai phía sau interface dễ hiểu, giúp reasoning và reuse. Simplicity không đồng nghĩa cắt chức năng; nó loại phần phức tạp không thuộc bản chất bài toán.

Evolvability

Giúp hệ thích nghi với requirement, platform, luật, load và use case mới. Ở data-system level, evolvability có thể đòi hỏi thay đổi giữa nhiều service, data flow và guarantee chứ không chỉ refactor code cục bộ.

Quan hệ giữa ba trụ cột

Operability -> biết hệ đang làm gì và can thiệp an toàn
Simplicity  -> hiểu hệ và dự đoán tác động của thay đổi
Evolvability -> thay đổi hệ với effort và risk chấp nhận được

Simplicity và abstraction rõ thường là điều kiện cho evolvability. Operability cung cấp feedback để biết thay đổi có hoạt động đúng trong production hay không.

Dấu hiệu maintainability thấp

  • Chỉ một vài người biết cách vận hành hoặc sửa hệ thống.
  • Thay đổi nhỏ cần hiểu nhiều dependency ẩn.
  • Không thể dự đoán tác động của config hoặc deployment.
  • Monitoring không cho biết invariant nào bị vi phạm.
  • Workaround và special case tích tụ nhanh hơn khả năng loại bỏ.
  • Kiến trúc không còn phù hợp với requirement nhưng rất khó thay đổi.

Câu hỏi review

  • Operations có thể hiểu và khôi phục hệ khi người xây dựng ban đầu vắng mặt không?
  • Complexity nào là bản chất bài toán, complexity nào do triển khai?
  • Abstraction hiện tại che chi tiết hữu ích hay che mất failure mode quan trọng?
  • Một thay đổi requirement xuyên nhiều service sẽ cần sửa những guarantee nào?

Liên kết