Phát triển Phần mềm Tinh gọn (Lean Software Development)
Last updated: December 31, 2023 Xem trên toàn màn hình
- 04 Mar 2020 Kinh nghiệm lập dự toán chi phí dự án phần mềm theo phương pháp Man-Month
- 14 Jun 2021 8 loại lãng phí doanh nghiệp phải tìm cách loại bỏ
- 04 Jan 2023 Phát triển phần mềm linh hoạt theo mô hình Big Bang
- 12 May 2020 Quy trình sản xuất Tinh Gọn và áp dụng mô hình 5S của Nhật Bản
- 18 Mar 2021 Kỹ thuật ước lượng dự án phần mềm linh hoạt dựa vào Story Point - phương pháp T-Shirt Sizing
Hiện nay, trong quá trình phát triển phần mềm, một trong số những nguyên nhân thường xuyên khiến cho các dự án thất bại đó là nguyên nhân về thời gian. Vậy điều gì khiến các dự án thường thất bại trong việc bàn giao sản phẩm đúng thời hạn? Lý do chính của vấn đề này là thời hạn bàn giao sản phẩm thường được định ra trước khi dự án bắt đầu và ít có thay đổi còn yêu cầu về sản phẩm, quy trình làm việc thường xuyên bị thay đổi trong quá trình phát triển khiến thời gian bị trễ hơn so với khi dự tính. Chính vì vậy, để giải quyết vấn đề này, chúng ta cần hạn chế sự thay đổi trong quá trình phát triển. Vì vậy chúng ta cần tìm hiểu nguyên nhân chính của những thay đổi là gì? Có rất nhiều nguyên nhân nhưng phần lớn các thay đổi thường đến từ phía khách hàng. Cách dễ nhất để hạn chế điều này là đưa đến cho khách hàng những gì họ cần một cách nhanh nhất, khiến họ không có thời gian để thay đổi. Một ví dụ đơn giản như khi bạn mua hàng online, bởi vì thời gian giao hàng khá nhanh nên bạn chỉ có thời gian để suy nghĩ mình cần gì trước khi thực hiện việc mua bán, sau khi đặt hàng xong, bạn có rất ít thời gian để thay đổi. Đó chính là cốt lõi của quy trình phát triển phần mềm tinh gọn. Vậy quy trình phát triển tinh gọn là gì?
1. Khái niệm về quy trình phát triển tinh gọn
a. Nguồn gốc, xuất xứ
Quy trình phát triển tinh gọn (Lean) là quy trình được đưa ra bởi Toyota vào đầu những năm 1940. Và mục đích chính của nó là hướng đến công đoạn sản xuất. Tuy nhiên, điểm chung giữa quy trình sản xuất và quy trình phát triển phần mềm là đều hướng đến tính bền vững và đạt được lợi nhuận.
b. Khái niệm về quy trình phát triển tinh gọn
Cốt lõi của quá trình phát triển tinh gọn là hạn chế tối đa lãng phí- những yếu tố sẽ khiến chúng ta khó đạt được lợi nhuận tối đa từ khách hàng. Ví dụ như:
-
Hợp lý hóa chuỗi giá trị
-
Hạn chế lãng phí từ tiến trình
-
Xây dựng quy tắc cho thời điểm đưa ra quyết định
Một số ví dụ về những công ty đã áp dụng quy trình phát triển tinh gọn và thành công đó là IBM khi ra mắt DB2, salesforce.com đã thay đổi 1 tổ chức hơn 500 nhân viên thành mô hình phát triển agile, là Microsoft với việc thay đổi quy trình phát triển hệ điều hành và những công cụ phát triển phần mềm theo tiến trình phát triển tinh gọn.
2. Bảy nguyên tắc của quy trình phát triển tinh gọn
Để thực hiện đúng quy trình phát triển tinh gọn chúng ta cần tuân thủ 7 nguyên tắc dưới đây:
a. Hạn chế lãng phí (Eliminate waste)
-
Mọi quy trình tinh gọn đều bắt đầu từ việc xem xét và xác định lãng phí là gì và nó xuất hiện do đâu. Nói một cách đơn giản hơn thì tất cả những gì chúng ta thực hiện mà không mang lại giá trị thỏa mãn yêu cầu, mong muốn của khách hang thì đó chính là lãng phí.
-
Có 7 nguyên nhân thường gây lãng phí trong quá trình phát triển phần mềm như sau:
- Những phần việc chưa hoàn chỉnh ( Có thể là những quy trình chưa thực hiện hoàn chỉnh trong quá trình phát triển phần mềm. VD: tạo tài liệu, tạo testcase…)
- Những quy trình mở rộng
- Những chức năng mở rộng
- Thời gian chuyển giữa các phần công việc ( + Khi một người được giao quá nhiều nhiệm vụ trong dự án trong 1 thời điểm)
- Thời gian chờ ( Chờ bản thiết kế, chờ bản phân tích yêu cầu…)
- Thời gian chuyển giao sản phẩm
- Defect ( Những lỗi không được phát hiện trong quá trình kiểm thử…)
Mọi mục tiêu mà quy trình này hướng đến đó là tập trung vào tiến trình thực hiện từ lúc nhận được yêu cầu cho tới khi bàn giao sản phẩm. để thực hiện được điều đó, khi nhận được yêu cầu từ khách hàng, chúng ta cần đặt ra các câu hỏi: cần phải thực hiện những gì với yêu cầu đó để tiến hành bàn giao sản phẩm đúng thời hạn. Làm thế nào để tiến trình thực hiện yêu cầu là nhanh nhất có thể?
Một ví dụ nhỏ như sau: Trong trường hợp khách hàng yêu cầu chờ để xác nhận yêu cầu, chờ bản thiết kế, chờ để phát triển, chờ để kiểm thử… thì tiến trình công việc không thể nhanh và thực hiện liên tiếp được. Giải pháp ở đây là xây dựng một nhóm nòng cốt để biến những yêu cầu lớn thành những yêu cầu chi tiết hơn và thực hiện chúng một cách liên tiếp.
b. Nâng cao kiến thức (Create Knowledge)
Khuếch trương việc học (Amplify learning) hoặc Mở rộng tri thức (Create Knowledge).
Nguyên tắc cơ bản thứ 2 của quy trình phát triển tinh gọn là về kiến thức. Mỗi thành viên cần phải học hỏi nhiều nhất có thể để biết được mình làm gì là đúng với yêu cầu khách hàng đưa ra.
-
Tuy nhiên, môi trường phát triển phần mềm không yêu cầu mọi thứ phải hoàn hảo, không yêu cầu chúng ta phải lên kế hoạch và chỉ làm việc theo kế hoạch, không yêu cầu phải thực hiện đúng ngay từ lần đầu tiên…
-
Quy trình phát triển phần mềm tinh gọn tập trung vào việc tăng các phản hồi và rút ra bài học từ đó.
c. Trì hoãn quyết định (Defer commitment)
Quyết định càng muộn càng tốt.
-
Trì hoãn quyết định là nguyên tắc giúp cho các quyết định trở nên linh hoạt hết mức có thể trong thời gian cho phép trong các trường hợp chưa chắc chắn về yêu cầu khách hàng đưa ra. Ví dụ như khi được khách hàng đưa ra một yêu cầu mà chưa rõ cách giải quyết, chúng ta có thể thực hiện prototype bàn giao trước cho khách hàng, sau đó nhận phản hồi và thực hiện đúng với yêu cầu.
-
Có rất nhiều cách để thực hiện nguyên tắc trên. Ví dụ như:
Chia sẻ từng phần thiết kế hoàn chỉnh Tổ chức, hợp tác trực tiếp giữa các thành viên cùng mục đích Xây dựng các yếu tố phát hiện ra thời điểm chính xác để đưa ra các quyết định Xây dựng các yếu tố hạn chế thay đổi Sử dụng các bộ kiểm thử tự động
d. Chuyển giao càng nhanh càng tốt (Deliver fast)
Chuyển giao sản phẩm nhanh hết mức có thể. điều này giúp hạn chế được các công việc tồn đọng trong mỗi chu trình, đưa lại cho chúng ta những phản hồi nhanh nhất và cho phép chúng ta thực hiện những điều đúng đắn trong chu trình tiếp theo.
e. Trao quyền quyết định cho đội phát triển (Empowerthe team)
Trong quy trình phát triển tinh gọn, mọi việc đều diễn biến rất nhanh, và việc quyết định cần làm gì, làm gì mới đúng cần phải được quyết định bởi những người trực tiếp thực hiện điều đó. Tiến trình trong tổ chức tinh gọn được dựa trên những thành viên của tổ chức, không phải dựa trên chỉ thị từ phía quản lý.
f. Cải tiến liên tục về chất (Build quality in)
Nếu chúng ta muốn của bàn giao sản phẩm nhanh điều đó phụ thuộc vào việc phản hồi của khách hàng, nếu chúng ta muốn thỏa mãn yêu cầu của khách hàng một cách tối đa thì không thể coi nhẹ chất lượng sản phẩm.
g. Có cái nhìn bao quát (Optimize the whole)
Trong quá trình phát triển phần mềm, để tránh việc xung đột giữa các tính năng trong một sản phẩm, cần phải chú ý đến nguyên nhân của từng xung đột và giải quyết chúng triệt để.