Tôi đã sử dụng sự tương tự này ... rất nhiều dự án phần mềm bắt đầu bởi vì người cần một số phần mềm biết tương đương với "người siêng năng" và họ thuê người này xây dựng cho họ phần mềm tương đương với một khu vườn. Đây là một ứng dụng nhỏ, hữu ích, hoạt động rất tốt.
Sau đó, khách hàng quay lại với người siêng năng, hài lòng với công việc của họ và yêu cầu họ thay đổi phần mềm để làm thêm một việc nữa. Rất nhiều lần, tính năng mới này không liên quan nhiều đến yêu cầu ban đầu, vì vậy, gần giống như họ đang yêu cầu bạn xây một phòng khác ở phía sau khu vườn có một lối đi riêng.
Sau đó, họ muốn đặt một ánh sáng bên trong nhà kho, để họ có người siêng năng trở lại, và anh ta chạy một mạch từ bảng điều khiển chính trong nhà, lắp đặt một công tắc đèn kéo ở trần của mỗi phòng và kết nối chúng với mạch .
Sau đó, khách hàng quyết định họ muốn chạy một số công cụ điện, nhưng nó tiếp tục thổi bộ ngắt mạch, vì vậy họ gọi lại cho người đó và anh ta thực sự phải rút ra một mạch đơn mà anh ta chạy đến bảng điều khiển chính, và cài đặt một dây dẫn lớn hơn và một bảng phụ trong nhà kho. Ông đã phải chạy dây hai lần và trả tiền cho hai giấy phép điện, v.v ... Điều này không hiệu quả.
Sau đó, khách hàng yêu cầu một điều vô lý: bạn có thể biến khu vườn của tôi thành nhà để xe không? Tôi không muốn bạn làm lại bất cứ điều gì bạn đã làm ... Tôi chỉ muốn bạn làm cho nó lớn hơn để tôi có thể đỗ xe ở đó. Sau đó, trong rất nhiều trường hợp, người siêng năng nghĩ rằng "khách hàng luôn luôn đúng" và tiến hành xây dựng bổ sung vào 3 bên của nhà kho để làm cho nó lớn hơn, đánh sập bức tường giữa các vách ngăn, v.v ... Tất nhiên, mái nhà kết thúc lên xuống vì nó không được xây dựng đúng, v.v.
Vì vậy, khách hàng không còn ấn tượng nữa, nhưng họ vẫn muốn nhiều hơn nữa. Họ yêu cầu người siêng năng lặp đi lặp lại chỉ cần thêm một phòng, hoặc thay đổi căn phòng hiện có này để làm điều này, v.v. Bạn kết thúc với một cái gì đó trông giống như The Burrow và giống như âm thanh kiến trúc.
Bây giờ hầu hết mọi người không đủ ngớ ngẩn để thử điều này trong thế giới xây dựng, nhưng nó xảy ra mọi lúc trong thế giới phần mềm, bởi vì mọi người không tạo ra các kết nối này:
Một người đủ điều kiện để xây dựng một khu vườn thực sự tốt đẹp không nhất thiết phải đủ điều kiện để xây dựng một ngôi nhà.
Nếu bạn biết trước rằng bạn sẽ xây dựng một ngôi nhà theo từng giai đoạn, nhưng nó sẽ chỉ bắt đầu như một khu vườn, bạn sẽ làm những việc khác và nhà vườn sẽ tốn nhiều tiền hơn (bạn sẽ đổ miếng đệm thực sự dày, đảm bảo bạn chạy một dây dẫn đủ lớn cho toàn bộ tải trọng của một ngôi nhà đã hoàn thành, v.v.).
Trong rất nhiều trường hợp, việc nâng cấp từ giai đoạn này sang giai đoạn khác liên quan đến việc hoàn tác rất nhiều công việc đã được thực hiện trước đó, khiến nó trở nên đắt hơn so với nó có vẻ như nó phải như vậy.
Trong thế giới xây dựng, chúng tôi có thể cung cấp cho khách hàng một ý tưởng tốt về kết quả sẽ như thế nào trong giai đoạn thiết kế, nhưng chúng tôi không có khả năng đó trong thế giới phần mềm. Nếu bạn hiểu điều đó, về cơ bản bạn đã viết một phần đáng kể của phần mềm.
Tuyên ngôn Agile là kết quả của việc thừa nhận rằng sự tương tự phần mềm / xây dựng bị hỏng. Những thứ như kiểm tra đơn vị tự động và chu kỳ phát hành lặp không có song song trong xây dựng. Những điều này tận dụng chi phí gần như bằng không để đi từ thiết kế đến nguyên mẫu (chúng tôi gọi nó là biên dịch hoặc xây dựng).