Khi xây dựng một dịch vụ mới, có những lúc chúng ta muốn phác thảo ngay từ đầu một hệ thống hoàn hảo với đầy đủ mọi chức năng. Bởi việc thiết kế rồi hoàn thiện cùng lúc tất cả, từ quản lý thành viên, thanh toán, đề xuất cho đến thống kê, có vẻ sẽ hiệu quả hơn nhiều. Thế nhưng, những dự án khởi đầu càng lớn như vậy lại càng thường không thể vận hành ổn thỏa đến cuối cùng. Quy tắc đúc kết từ kinh nghiệm tóm gọn hiện tượng này trong một câu chính là “định luật Gall (Gall's Law)”.
Nói một cách dễ hiểu, định luật Gall là nguyên tắc cho rằng “một hệ thống phức tạp vận hành tốt luôn phát triển từ một hệ thống đơn giản từng vận hành tốt”. Đây là nhận định mà John Gall, bác sĩ nhi khoa kiêm tác giả người Mỹ, đưa ra khi nghiên cứu cách các hệ thống thất bại, và ngày nay thường được trích dẫn trong thiết kế phần mềm và phát triển sản phẩm.
Trong tài liệu này, chúng ta sẽ lần lượt tìm hiểu bối cảnh ra đời của định luật Gall, ý nghĩa của ba câu tạo nên định luật, các ví dụ thực tế và cách áp dụng định luật này trong công việc.

Nguyên lý hệ thống phát triển từ đơn giản đến phức tạp
Câu chuyện về hệ thống do một bác sĩ nhi khoa viết

John Gall là bác sĩ nhi khoa đã khám chữa bệnh cho trẻ em trong hơn 40 năm tại Ann Arbor, bang Michigan, Hoa Kỳ, đồng thời từng làm phó giáo sư lâm sàng nhi khoa tại Đại học Michigan. Công việc chính của ông liên quan đến các vấn đề phát triển và hành vi của trẻ em, nhưng ông còn dành thời gian riêng để thu thập những trường hợp cho thấy vì sao các hệ thống lớn nhỏ không vận hành như kỳ vọng.
- Cuốn sách đầu tiên (General Systemantics): Năm 1975, ông xuất bản các trường hợp thất bại và bài học đã thu thập được trong cuốn sách mang tên “Hệ thống học tổng quát”.
- Tái xuất bản (Systemantics): 2 năm sau, vào năm 1977, cuốn sách được xuất bản lại với tựa đề “Hệ thống học: Các hệ thống vận hành ra sao và đặc biệt là thất bại như thế nào”, rồi được đông đảo độc giả đón đọc.
- Bản sửa đổi (The Systems Bible): Năm 1986, ấn bản thứ 2 ra mắt với dung lượng tăng gần gấp đôi, và đến năm 2002, ấn bản thứ 3 được xuất bản dưới tựa đề “Kinh thánh về hệ thống”.
Cuốn sách giải thích các đặc tính của hệ thống bằng những câu ngắn gọn, dí dỏm, tương tự định luật Murphy hay nguyên lý Peter. Câu nổi tiếng nhất trong số đó về sau được mọi người gọi là “định luật Gall”. Thực ra, trong sách, câu ấy không được đặt tên như vậy.
Ba câu tạo nên định luật

Định luật Gall thường được trình bày như một phát biểu thống nhất, nhưng nguyên văn có cấu trúc gồm ba câu nối tiếp nhau.
(1) Hệ phức tạp thành công có điểm khởi đầu đơn giản
Nếu lần ngược quá trình hình thành của một hệ thống phức tạp đang vận hành tốt, chúng ta luôn tìm thấy một hệ thống đơn giản từng vận hành tốt. Điều này có nghĩa là sự phức tạp không được thiết kế ngay từ đầu, mà là kết quả tích lũy từng chút một trong khi hệ thống vẫn duy trì hoạt động.
(2) Hệ thống được xây dựng phức tạp ngay từ đầu thậm chí không thể sửa để dùng được
Gall khẳng định rằng một hệ thống phức tạp được thiết kế toàn bộ từ con số không sẽ không hoạt động, và dù chắp vá cũng không thể cứu vãn. Đó là vì không thể biết trước đầy đủ các bộ phận sẽ đan xen và vận hành với nhau như thế nào. Ngay cả một bản thiết kế trông hoàn hảo trên giấy cũng sẽ phát sinh hàng loạt xung đột ngoài dự kiến ở khắp nơi khi các bộ phận thực sự bắt đầu phối hợp hoạt động.
(3) Phải bắt đầu lại từ những gì đơn giản
Vậy thì chỉ có một giải pháp: xây dựng mới một hệ thống đơn giản có thể hoạt động, rồi phát triển lại từ đó. Điều này có nghĩa là dù tiếc công sức đã bỏ ra, cuối cùng việc bắt đầu lại từ quy mô nhỏ vẫn nhanh hơn việc cố bám lấy một bản thiết kế đồ sộ không thể vận hành.
Tuy nhiên, trước những câu này, Gall đã kèm theo lưu ý rằng một hệ thống đơn giản cũng có thể hoạt động hoặc không hoạt động. Ông không nói rằng sự đơn giản bảo đảm thành công, mà muốn nói rằng các hệ phức tạp thành công đều có điểm xuất phát đơn giản.
Những ví dụ minh họa định luật

Định luật Gall lan sang lĩnh vực công nghệ thông tin khi được các nhà thiết kế hệ thống trích dẫn. Nhà thiết kế hệ thống Ken Orr đã sớm giới thiệu câu này vào năm 1981, và từ năm 1991, Grady Booch, một bậc thầy về thiết kế hướng đối tượng, đã nhiều lần trích dẫn nó trong các cuốn sách.
World Wide Web lớn lên từ khởi đầu nhỏ
World Wide Web khởi đầu từ một cấu trúc rất đơn giản, nối các tài liệu với nhau bằng liên kết. Ban đầu, đó là công cụ để các nhà nghiên cứu chia sẻ tài liệu, nhưng hình ảnh, tìm kiếm, mua sắm và video lần lượt được bổ sung trên bộ khung đang hoạt động, tạo nên hệ thống khổng lồ ngày nay. Chính nhờ không xác định sẵn mọi mục đích sử dụng ngay từ đầu mà các chức năng mới có thể hình thành một cách tự nhiên.
Tiêu chuẩn được thiết kế đồ sộ ngay từ đầu
Ngược lại, nhiều đặc tả kỹ thuật phức tạp cố gắng bao quát mọi trường hợp ngay từ đầu đã không thể tìm được chỗ đứng trong thực tiễn. CORBA, tiêu chuẩn đối tượng phân tán kết nối các chương trình khác nhau, thường được nhắc đến như một trường hợp khởi đầu với bộ đặc tả đồ sộ nhưng không được sử dụng rộng rãi.
Cách tuân thủ định luật Gall trong thực tiễn

Định luật Gall rất phù hợp với phát triển phần mềm linh hoạt (Agile Software Development), trong đó việc phát triển được thực hiện theo các chu kỳ ngắn và điều chỉnh thường xuyên. Đặc biệt, lập trình cực hạn (Extreme Programming) khuyến nghị xây dựng những gì đơn giản nhất trước, rồi mới bổ sung chức năng sau.
(1) Tạo ra sản phẩm hoàn chỉnh nhỏ nhất trước
Trước tiên, hãy đưa ra một sản phẩm tối thiểu thực sự vận hành được từ đầu đến cuối, dù có ít chức năng. Quan sát phản hồi của người dùng rồi chỉ bổ sung những gì cần thiết sẽ giúp giảm công sức dành cho những thiết kế vô ích.
(2) Luôn duy trì trạng thái hoạt động
Mỗi lần thêm chức năng, hãy kiểm tra xem hệ thống có còn vận hành ổn thỏa hay không. Thay đổi từng chút rồi kiểm thử ngay cũng giúp tìm nguyên nhân vấn đề dễ hơn so với thay đổi lớn trong một lần.
(3) Cảnh giác với sự đồ sộ được tạo ra quá nhanh
Ngày nay, các công cụ lập trình bằng trí tuệ nhân tạo đã cho phép tạo ra hệ thống lớn chỉ trong chớp mắt, nhưng việc lắp ráp nhanh không có nghĩa là có thể tránh được những thất bại mà Gall đề cập. Tốc độ càng tăng thì nguyên tắc bắt đầu từ nhỏ càng trở nên quan trọng.
Định luật Gall không khuyên chúng ta đừng xây dựng hệ thống phức tạp, mà nhắc rằng có một con đường riêng để đi đến sự phức tạp. Một hệ thống nhỏ vận hành ổn thỏa hôm nay sẽ đưa chúng ta đi xa hơn một bản thiết kế lớn lao, đẹp đẽ.
Xây dựng ở quy mô nhỏ, làm cho hệ thống vận hành ổn thỏa rồi phát triển từng bước: đó là bước khởi đầu để tạo nên một hệ thống vững chắc.