Trong kỹ thuật hệ thống phân tán, có một nguyên tắc nền tảng mà bất kỳ kỹ sư nào cũng thuộc lòng trước khi dám đưa hệ thống lên production: không bao giờ thiết kế cho điều kiện lý tưởng. Một hệ thống tốt không phải hệ thống vận hành hoàn hảo khi mọi node đều khỏe. Một hệ thống tốt là hệ thống biết cách suy giảm có kiểm soát (graceful degradation) khi node bắt đầu hỏng - vì node sẽ hỏng, đó không phải giả thuyết, đó là điều chắc chắn.
Mọi đội nhóm bạn từng ở trong đó đều vi phạm nguyên tắc này.
Bức tranh thật của teamwork
Phần lớn những gì được gọi là “teamwork tốt” thực ra chỉ là một tập hợp người hoạt động ổn khi mọi thứ đang thuận. Deadline rõ ràng, tài nguyên đủ, không ai bệnh, không ai mất động lực, không ai gặp vấn đề cá nhân. Trong điều kiện đó, thậm chí một nhóm ngẫu nhiên cũng có thể deliver.
Vấn đề xảy ra khi một node trong hệ thống suy giảm. Và trong một đội nhóm làm việc thực tế, điều này không phải “nếu” - mà là “khi nào”. Người giỏi nhất của bạn bắt đầu mất tập trung vì áp lực gia đình. Người chịu trách nhiệm một khâu quan trọng bị block vì chưa có đủ thông tin. Hai người trong nhóm phát sinh mâu thuẫn ngầm làm chậm toàn bộ luồng giao tiếp.
Lúc đó, đội của bạn làm gì?
Trong phần lớn trường hợp, câu trả lời là: một người bắt đầu gánh. Họ làm thêm phần người khác, bù vào khoảng trống, giữ cho hệ thống không đổ. Và rồi người đó được ca ngợi như anh hùng.
Đây là nơi mà phần lớn các tổ chức phạm sai lầm nghiêm trọng.
Anh hùng là triệu chứng, không phải giải pháp
Trong thiết kế hệ thống, SPOF (Single Point of Failure) là thứ bạn muốn loại bỏ khỏi kiến trúc bằng mọi cách. Khi toàn bộ hệ thống phụ thuộc vào một component duy nhất, bạn không có hệ thống - bạn có một điểm chờ thất bại.
Văn hóa “gánh đội” tạo ra SPOF con người.
Khi một đội vận hành được chỉ vì có một người sẵn sàng làm hơn phần của mình, bạn đã tạo ra một kiến trúc mà sự tồn tại của nó phụ thuộc vào một biến số duy nhất: ý chí cá nhân của người đó. Người đó nghỉ việc? Hệ thống hỏng. Người đó kiệt sức? Hệ thống hỏng. Người đó được thăng chức và không còn ở vai trò cũ? Hệ thống hỏng.
Tệ hơn, văn hóa này có một vòng lặp phản hồi nguy hiểm: anh hùng gánh, vấn đề được giải quyết, không ai học được gì, lần sau vấn đề lại xảy ra, anh hùng lại gánh. Hệ thống không bao giờ buộc phải cải thiện kiến trúc vì luôn có người che hậu quả.
Mỗi lần bạn ca ngợi người gánh đội, bạn đang vô tình trả tiền để duy trì một thiết kế tồi.
Đội nhóm có fault tolerance trông như thế nào
Trong hệ thống phân tán, redundancy không có nghĩa là mọi node đều làm cùng một việc. Nó có nghĩa là hệ thống được thiết kế sao cho khi một node hỏng, tải có thể được phân phối lại mà không cần ai phải quyết định anh hùng trong lúc khủng hoảng.
Ứng dụng vào đội nhóm, điều này đòi hỏi ba thứ:
Một: Overlap năng lực có chủ đích. Không phải ai cũng cần biết làm mọi thứ, nhưng không được có kỹ năng nào chỉ nằm ở một người. Nếu một người ra đi và để lại một khoảng trắng không ai khác có thể bước vào, đó không phải là người quan trọng - đó là một điểm thiết kế thất bại.
Hai: Quy trình giảm tải tự động. Khi ai đó trong đội bị block hoặc suy giảm hiệu suất, hệ thống cần có cơ chế phát hiện sớm và phân phối lại tải mà không cần chờ người đó tự báo cáo hay một người khác tự nguyện nhảy vào. Đây là công việc của người lãnh đạo - không phải trông chờ anh hùng xuất hiện.
Ba: Bài học từ mỗi lần hỏng. Trong kỹ thuật, khi production gặp sự cố, quy trình bắt buộc là post-mortem: không phải để tìm người đổ lỗi, mà để tìm lỗ hổng trong thiết kế và vá lại. Mỗi lần đội của bạn sống sót nhờ một người gánh mà không có post-mortem, bạn đang tích lũy technical debt về mặt tổ chức.
Câu hỏi thật cho người lãnh đạo
Lần tới khi đội bạn hoàn thành một dự án khó nhờ một người làm việc đến 2 giờ sáng để bù phần người khác không làm được, hãy dừng lại trước khi mở tiệc ăn mừng.
Hỏi: Tại sao hệ thống cần điều đó xảy ra?
Câu trả lời sẽ dẫn bạn đến vấn đề thật: scope không được định nghĩa rõ, năng lực của một thành viên được đánh giá sai, không có cơ chế phát hiện blockers sớm, hay đơn giản là team size không đủ để hấp thụ biến động.
Anh hùng không phải điều bạn cần xây dựng. Anh hùng là thứ xuất hiện khi bạn không xây dựng được kiến trúc đúng.
Đội nhóm tốt nhất không sản sinh ra anh hùng - họ làm cho heroism trở nên không cần thiết.