"จุดที่ซับซ้อนเกินกว่า" ถูกอ้างถึงเป็นภาษาอังกฤษว่า:
โอ้พระเจ้าของฉันปูนี้คืออะไร
ปัญหาคือสิ่งนี้สามารถนำไปใช้กับสิ่งที่ง่ายจริง ๆ แต่มีการใช้งานในลักษณะที่น่ากลัวที่คุณมีปฏิกิริยาแบบเดียวกัน
ดังนั้นการแยกบางสิ่งที่ซับซ้อนออกจากสิ่งที่น่ากลัวมากนั้นอาจเป็นเรื่องยาก
HOWEVER: สิ่งที่เกิดขึ้นจริงกับซอฟต์แวร์ทั้งหมดคือการประมวลผลแบบนี้:
ขั้นตอนที่ 1: มีสเป็คที่ดีทำการออกแบบที่ดีใช้สิ่งที่ดี ทุกคนมีความสุข
ในตอนท้ายของขั้นตอนที่ 1: นักพัฒนาแสดงความยินดีกับความสง่างามที่ยอดเยี่ยมของการออกแบบของพวกเขาและจากไปอย่างมีความสุขคิดว่า "ฉันมีมรดกที่ยอดเยี่ยมที่นี่สำหรับผู้อื่นเพื่อเพิ่มสิ่งต่าง ๆ ในอนาคตมันจะวิเศษและโลกจะเป็น ที่ที่ดีกว่า."
ขั้นตอนที่ 2: ทำการเปลี่ยนแปลงบางอย่างสิ่งต่าง ๆ เพิ่มฟังก์ชั่นใหม่รวมอยู่ด้วย สถาปัตยกรรมและโครงสร้างจากขั้นตอนที่ 1 ทำให้กระบวนการนี้ค่อนข้างเจ็บปวด [แต่โอ๊ะโอ "cruft factor" เพิ่มขึ้นเล็กน้อย]
ในตอนท้ายของขั้นตอนที่ 2: นักพัฒนาแสดงความยินดีกับความสง่างามของการออกแบบของพวกเขาและหายไปจากความคิดที่มีความสุข "Gee ฉันฉลาดมากที่ได้ทำเบี้ยเลี้ยงทั้งหมดในขั้นตอนที่ 1 นี่เป็นไปด้วยดีฉันมีมรดกที่ยอดเยี่ยม ที่นี่สำหรับผู้อื่นเพื่อเพิ่มสิ่งต่าง ๆ ในอนาคตมันจะวิเศษและโลกจะเป็นสถานที่ที่ดีกว่า "
ขั้นตอนที่ 3: ทำการเปลี่ยนแปลงเพิ่มเติมเพิ่มเติมสิ่งต่าง ๆ เพิ่มเติมฟังก์ชันใหม่เพิ่มเติมสิ่งต่าง ๆ ได้รับการเปลี่ยนแปลงความคิดเห็นของผู้ใช้จะถูกฟัง
ในตอนท้ายของขั้นตอนที่ 3: นักพัฒนาแสดงความยินดีกับความสง่างามที่ยอดเยี่ยมของการออกแบบของพวกเขาและหายไปจากความคิดที่ค่อนข้างมีความสุข "Gee สถาปัตยกรรมนี้ค่อนข้างดีที่จะอนุญาตให้มีการเปลี่ยนแปลงมากมาย เกี่ยวกับ X และ Y และ Z พวกเขาสามารถทำความสะอาดได้ในตอนนี้ แต่ !!! Ahhh !!! ฉันฉลาดที่ได้ทำเบี้ยเลี้ยงเหล่านั้นทั้งหมดในขั้นตอนที่ 1 มันดีมากฉันมีมรดกที่ยอดเยี่ยมที่นี่สำหรับ คนอื่นจะเพิ่มสิ่งต่าง ๆ ในอนาคตมันจะวิเศษและโลกจะเป็นสถานที่ที่ดีกว่า "
ขั้นตอนที่ 4: เช่นเดียวกับขั้นตอนที่ 3 ยกเว้น:
ในตอนท้ายของขั้นตอนที่ 4: นักพัฒนาคิดว่า: "สิ่งนี้เป็นสิ่งที่ดีเพื่อให้ UGLY รักษาไว้มันต้องการการเปลี่ยนแปลงที่จริงจังจริง ๆ ฉันไม่ชอบการทำงานนี้จริง ๆ แล้วมันต้องการ refactoring ฉันสงสัยว่าเจ้านายเป็นใคร จะบอกว่าเมื่อฉันบอกเขาว่าต้องใช้เวลา 6 สัปดาห์และจะไม่มีอะไรให้ผู้ใช้เห็นในตอนท้าย ... แต่ฉันจะมีขอบเขตการดัดแปลงในอนาคตอีก 5 ปีด้วยการทำเช่นนี้ .... hmmm .. เวลาที่จะไปผับเพื่อดื่มเบียร์.
ขั้นตอนที่ 5: ต้องทำการเปลี่ยนแปลงจำนวนมาก
และในระหว่างขั้นตอนที่ 5 นักพัฒนาพูดกัน: "รหัสนี้แย่มากใครเขียนสิ่งนี้พวกเขาควรถูกยิงมันน่ากลัวเราต้องเขียนซ้ำ"
ขั้นตอนที่ 5 เป็นอันตรายถึงชีวิต นี่คือสิ่งที่ปัจจัย cruft แย่มากจนโค้ดไม่สามารถเปลี่ยนแปลงได้อีกเพียงไม่กี่ครั้งมันต้องมีการเปลี่ยนแปลงครั้งใหญ่
ปัญหาในขั้นตอนที่ 5 คือความปรารถนาที่จะทิ้งมันและเริ่มต้นใหม่อีกครั้ง สาเหตุที่เป็นอันตรายถึงชีวิตคือ "ปัจจัย Netscape" ไปที่ google it บริษัท ตาย ณ จุดนี้เนื่องจากการเริ่มต้นอีกครั้งหมายความว่าคุณเริ่มต้นด้วยสมมติฐานประมาณ 50% แทนที่จะเป็นข้อเท็จจริงความกระตือรือร้น 150% แทนที่จะเป็นความรู้ความหยิ่ง 200% แทนที่จะเป็นความอ่อนน้อมถ่อมตน ("พวกนั้นโง่มาก!") และคุณแนะนำบั๊กใหม่ทั้งหมด
สิ่งที่ดีที่สุดที่จะทำคือการ refactor เปลี่ยนทีละน้อย หากสถาปัตยกรรมเริ่มอ่อนล้าแก้ไขได้ เพิ่มขยายปรับปรุง ค่อยๆ. ในแต่ละขั้นตอนทดสอบทดสอบและทดสอบเพิ่มเติม การเปลี่ยนแปลงที่เพิ่มขึ้นเช่นนี้หมายความว่า 10 ปีต่อมารหัสปัจจุบันและต้นฉบับเหมือนขวานปู่ ("มันมี 10 หัวใหม่และ 3 มือจับใหม่ แต่มันยังเป็นขวานปู่") ในคำอื่น ๆ มีไม่มากเหมือนกัน แต่คุณย้ายจากเก่าไปสู่ใหม่ค่อยๆและระมัดระวัง สิ่งนี้จะช่วยลดความเสี่ยงและสำหรับลูกค้าก็ช่วยลดความโกรธ