Một ví dụ về “hệ thống” trong phát triển phần mềm

software_system

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

2 Comments

  1. Rất chính xác, đó là hai khái niệm Phần mềm hoàn hảo và Phần mềm hiệu quả. Phần mềm hoàn hảo là mục tiêu hướng đến của loại phần mềm thương mại, càng ngày càng phình to với vô số chức năng dư thừa hoặc vô cùng hiếm hoi được sử dụng, nó phù hợp với số lượng lớn người dùng (phần mềm đóng gói), tuy nhiên nó không phải lúc nào cũng hiệu quả. Phần mềm hiệu quả thường được thiết kế riêng cho từng đối tượng người dùng cụ thể với từng bài toán cụ thể, chỉ gồm chính xác những chức năng được yêu cầu, không dư thừa, nó rất hiệu quả ở khía cạnh chi phí phát triển phần mềm. Tuy nhiên nhược điểm là nó chỉ hiệu quả với đúng người dùng đó và đúng bài toán đó, chỉ cần sai khác là nó không còn hiệu quả nữa. Cả hai loại phần mềm đều có đất sống và sự lựa chọn hoàn toàn do người sử dụng.

    1. Định nghĩa về “Phần mềm hoàn hảo” của Hoa Viên Viên trùng với “Phần mềm thương mại” kiểu cũ. Còn “Phầm mềm hiệu quả” lại khớp với cách hiểu thông thường về “phần mềm may đo”.
      Theo khuyến nghị của Lean, cả “phần mềm thương mại” hay “phần mềm may đo” như trên đều cần được tiếp cận như là những hệ thống. Phần mềm không đứng ngoài hệ thống.
      Trong ví dụ được nhắc đến trong bài của mình, bọn mình “may đo”. Nhưng kể cả các hệ thống phần mềm khác, đặc trưng cũng không khác mấy.

Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s