ฉันเคยใช้การเปรียบเทียบนี้ ... หลายโครงการซอฟต์แวร์เริ่มต้นเพราะคนที่ต้องการซอฟต์แวร์บางคนรู้เทียบเท่า "ช่างซ่อมบำรุง" และพวกเขาจ้างคนนี้เพื่อสร้างซอฟต์แวร์ให้เทียบเท่ากับโรงเก็บของในสวน มันเป็นแอปพลิเคชั่นเล็ก ๆ ที่มีประโยชน์และทำงานได้ดีมาก
จากนั้นลูกค้าจะกลับไปที่ช่างซ่อมบำรุงมีความสุขกับงานของพวกเขาและขอให้พวกเขาเปลี่ยนซอฟต์แวร์เพื่อทำอีกสิ่งหนึ่ง หลายครั้งที่คุณสมบัติใหม่นี้ไม่ได้มีอะไรเกี่ยวข้องกับคำขอเดิมมากนักดังนั้นมันเกือบจะเหมือนกับว่าพวกเขาขอให้คุณสร้างห้องอื่นที่ด้านหลังของสวนและมีทางเข้าแยกต่างหาก
จากนั้นพวกเขาต้องการใส่แสงเข้าไปในโรงเก็บดังนั้นพวกเขาจึงได้ซ่อมบำรุงและเขาก็วิ่งวงจรเดียวจากแผงหลักในบ้านติดตั้งสวิตช์ไฟแบบโซ่ดึงในเพดานของแต่ละห้องและเชื่อมต่อกับวงจร .
จากนั้นลูกค้าตัดสินใจว่าพวกเขาต้องการเรียกใช้เครื่องมือไฟฟ้าบางอย่าง แต่มันก็ทำให้เครื่องตัดวงจรหยุดทำงานดังนั้นพวกเขาจึงโทรหาบุคคลนั้นและเขาก็ต้องตัดวงจรเดียวที่เขาวิ่งไปที่แผงหลักและติดตั้งตัวนำขนาดใหญ่และ แผงย่อยในโรงเก็บของ เขาต้องวิ่งลวดสองครั้งและจ่ายค่าใบอนุญาตไฟฟ้าสองใบ ฯลฯ ซึ่งไม่มีประสิทธิภาพ
จากนั้นลูกค้าขอสิ่งที่ไร้สาระ: คุณสามารถเปลี่ยนสวนของฉันให้เป็นโรงรถได้หรือไม่? ฉันไม่ต้องการให้คุณทำสิ่งที่คุณทำซ้ำ ... ฉันแค่อยากให้คุณทำให้มันใหญ่ขึ้นเพื่อที่ฉันจะได้จอดรถไว้ที่นั่น จากนั้นในหลาย ๆ กรณีช่างซ่อมบำรุงคิดว่า "ลูกค้าถูกเสมอ" และดำเนินการต่อเติมอาคารสามด้านเพื่อให้ใหญ่ขึ้นเคาะลงผนังระหว่างฉากกั้น ฯลฯ แน่นอนหลังคาสิ้นสุด ลดลงเพราะมันไม่ได้ถูกสร้างขึ้น ฯลฯ
ดังนั้นลูกค้าจะไม่ประทับใจอีกต่อไป แต่พวกเขายังต้องการมากกว่านี้ พวกเขาขอให้ช่างซ่อมบำรุงซ้ำแล้วซ้ำอีกเพียงเพิ่มห้องอีกหนึ่งห้องหรือเปลี่ยนห้องที่มีอยู่นี้เพื่อทำเช่นนี้ ฯลฯ คุณจบลงด้วยบางสิ่งที่ดูเหมือนThe Burrowและเป็นเสียงที่เกี่ยวกับสถาปัตยกรรม
ตอนนี้คนส่วนใหญ่ยังไม่โง่พอที่จะลองสิ่งนี้ในโลกการก่อสร้าง แต่มันเกิดขึ้นตลอดเวลาในโลกของซอฟต์แวร์เพราะผู้คนไม่ได้เชื่อมต่อเหล่านี้:
คนที่มีคุณสมบัติในการสร้างโรงสวนที่ดีจริงๆไม่จำเป็นต้องมีคุณสมบัติในการสร้างบ้าน
ถ้าคุณรู้ล่วงหน้าว่าคุณกำลังจะสร้างบ้านเป็นระยะ แต่มันก็แค่จะเริ่มเป็นโรงเก็บของในสวนคุณจะทำสิ่งที่แตกต่างและโรงเก็บของในสวนจะมีค่าใช้จ่ายมากขึ้น แผ่นหนาจริง ๆ ตรวจสอบให้แน่ใจว่าคุณมีตัวนำที่ใหญ่พอสำหรับบ้านที่เต็มแล้ว ฯลฯ )
ในหลายกรณีการอัปเกรดจากเวทีหนึ่งไปอีกเวทีหนึ่งนั้นเกี่ยวข้องกับการเลิกงานจำนวนมากที่ทำไปก่อนหน้านี้ทำให้มีราคาแพงกว่าที่ควรจะเป็น
ในโลกของการก่อสร้างเราสามารถให้ความคิดที่ดีแก่ลูกค้าว่าผลลัพธ์จะเป็นอย่างไรในระหว่างขั้นตอนการออกแบบ แต่เราไม่มีความสามารถนั้นในโลกของซอฟต์แวร์ หากคุณไปถึงจุดนั้นโดยทั่วไปคุณเขียนส่วนสำคัญของซอฟต์แวร์
ประกาศ Agile เป็นผลมาจากการยอมรับว่าการเปรียบเทียบซอฟต์แวร์ / การก่อสร้างเสียหาย การทดสอบหน่วยอัตโนมัติและรอบการเปิดตัวซ้ำ ๆ ไม่มีการสร้างขนานกัน สิ่งเหล่านี้ใช้ประโยชน์จากค่าใช้จ่ายที่ใกล้เป็นศูนย์ตั้งแต่การออกแบบไปจนถึงต้นแบบ (เราเรียกมันว่าการคอมไพล์หรือการสร้าง)