ดูเหมือนว่าจะมีประสบการณ์ไม่บ่อยนัก แต่บ่อยครั้งที่บางครั้งคุณกำลังทำโปรเจ็กต์และมีบางอย่างเกิดขึ้นโดยไม่คาดคิดขว้างประแจขนาดใหญ่ในงานและเพิ่มความซับซ้อนให้มากขึ้น
ตัวอย่างเช่นฉันทำงานกับแอพพลิเคชั่นที่คุยกับบริการ SOAP ในเครื่องอื่น ๆ ฉันสร้างต้นแบบที่ใช้งานได้ดีจากนั้นก็พัฒนาส่วนหน้าเป็นประจำและโดยทั่วไปจะทำให้ทุกอย่างทำงานในแบบที่ดีค่อนข้างง่ายและง่ายต่อการติดตามแฟชั่น มันใช้งานได้ดีจนกระทั่งเราเริ่มทดสอบในเครือข่ายที่กว้างขึ้นและทันใดนั้นหน้าเว็บก็เริ่มหมดเวลาเนื่องจากเวลาแฝงของการเชื่อมต่อและเวลาที่ต้องใช้ในการคำนวณบนเครื่องระยะไกลส่งผลให้คำขอบริการสบู่หมดเวลา ปรากฎว่าเราจำเป็นต้องเปลี่ยนสถาปัตยกรรมเพื่อหมุนคำขอออกไปยังเธรดของตัวเองและแคชข้อมูลที่ส่งคืนเพื่อให้สามารถอัปเดตอย่างต่อเนื่องในพื้นหลังแทนที่จะทำการคำนวณตามคำขอตามคำขอ
รายละเอียดของสถานการณ์นั้นไม่สำคัญเกินไป - แน่นอนว่ามันไม่ใช่ตัวอย่างที่ดีเนื่องจากค่อนข้างมองเห็นได้และผู้ที่เขียนแอพประเภทนี้จำนวนมากสำหรับสภาพแวดล้อมประเภทนี้อาจคาดการณ์ไว้ - ยกเว้นว่ามันแสดงวิธีที่ หนึ่งสามารถเริ่มต้นด้วยหลักฐานที่เรียบง่ายและรูปแบบและทันใดนั้นมีการเพิ่มความซับซ้อนในการพัฒนาโครงการ
คุณมีกลยุทธ์อะไรในการจัดการกับการเปลี่ยนแปลงการทำงานประเภทนี้ซึ่งความต้องการเกิดขึ้นบ่อยครั้งซึ่งเป็นผลมาจากปัจจัยด้านสิ่งแวดล้อมมากกว่าการเปลี่ยนแปลงรายละเอียดในภายหลังในกระบวนการพัฒนาหรือจากการทดสอบ คุณจะทำอย่างไรความสมดุลระหว่างการหลีกเลี่ยงการเพิ่มประสิทธิภาพก่อนวัยอันควร / YAGNI / overengineering ความเสี่ยงของการออกแบบโซลูชันที่ช่วยลดผลกระทบกับความเป็นไปได้ แต่ไม่จำเป็นต้องน่าจะเป็นปัญหาที่ตรงข้ามกับการพัฒนาโซลูชั่นที่ง่ายและง่ายที่น่าจะเป็นที่มีประสิทธิภาพ แต่ไม่ได้รวมการเตรียมความพร้อมสำหรับ ทุกเหตุการณ์ที่เป็นไปได้?
แก้ไข: คำตอบของ Crazy Eddie รวมถึง "คุณดูดมันและหาวิธีที่แพงที่สุดในการใช้ความซับซ้อนใหม่" นั่นทำให้ฉันคิดถึงบางสิ่งที่แฝงอยู่ในคำถาม แต่ฉันไม่ได้เจาะจงเฉพาะ
เมื่อคุณกดปุ่มนั้นและคุณรวมการเปลี่ยนแปลงที่จำเป็น คุณทำสิ่งที่จะทำให้โครงการใกล้เคียงกับกำหนดเวลามากที่สุด แต่อาจส่งผลต่อการบำรุงรักษาหรือคุณกลับไปที่สถาปัตยกรรมของคุณและนำกลับมาทำใหม่ในระดับที่มีรายละเอียดมากขึ้นซึ่งอาจบำรุงรักษาได้มากกว่า