Mary và Tom Poppendieck khuyến khích các nhà phát triển phần mềm nghĩ về phần mềm như là một hệ thống hơn là một chương trình máy tính đơn thuần. Đó phải là hệ thống của bản thân phần mềm, phần cứng mà nó được cắm vào, cái tính chất kết nối của những phần cứng ấy, và  tính chất của con người vận hành cả cái hệ thống ấy để thực thi những công việc theo nhu cầu.

Như vậy tức là khi phát triển phần mềm, ta không chỉ phát triển phần mềm. Mà ta đang đi tìm một cách thức làm việc mới có sự tham gia của [những] chiếc máy có cài phần mềm ấy.

Theo cách hiểu như thế, có nhiều “truyền thống” có thể bị phá bỏ.

Xin lấy một ví dụ nhỏ về tính “đầy đủ” của phần mềm.

Hơn năm trước tôi làm Product Owner của một dự án nhỏ cho trung tâm. Bản alpha mà tôi yêu cầu chỉ gồm rất ít chức năng, định nghĩa dữ liệu đầu vào được quy định chặt chẽ do người dùng tạo ra, không có authorization theo role, chỉ dùng một role duy nhất. Phần mềm làm ra chứa đầy lỗi, thiếu cả đống chức năng. Thế nhưng trong suốt quá trình sử dụng bản alpha đó để làm việc, mọi quá trình nghiệp vụ không hề gặp phải vấn đề gì. Điều gì đã xảy ra với những lỗi vẫn còn trong hệ thống? Và những chức năng bị thiếu thì sao đây? Câu trả lời rất đơn giản: người dùng được chỉ cho những chỗ không nên động vào, tránh và xử lí các lỗi khi gặp phải. Thực ra chỉ có một lần duy nhất người dùng thao tác sai sót dẫn đến phải khởi tạo lại dữ liệu, còn trong các trường hợp khác không hề hấn gì.

Cho đến bây giờ khi chúng tôi gắn version cho sản phẩm là 1.01 thì hệ thống “có vẻ” vẫn thiếu đầy chức năng. Một phân hệ authorization đầy đủ chẳng hạn, tới giờ vẫn như lúc alpha.

Chúng tôi đã cắt đi được phần lớn (>50) lãng phí nhờ vào việc nhận biết những feature nào không được dùng, và quan trọng hơn là đã vận hành xây dựng một hệ thống phần mềm với sự tham dự của yếu tố con người chứ không phải là chỉ làm ra một phần mềm hoàn chỉnh nhưng cô lập.

Bạn có thể cười chê rằng chúng tôi là những tay mơ, không theo chuẩn mực. Nhưng thực tế là chúng tôi cũng chỉ cần đến thế, sao phải làm hơn? Nhất lại là chúng tôi hoàn toàn kiểm soát được hệ thống. Sau hơn một năm vận hành, chúng tôi chưa gặp phải technical debt đáng kể nào, tất cả là nhờ cách vận dụng chữ “hệ thống”.

software_system

Phần mềm như là một hệ thống