लागत और लाभों के संदर्भ में लगभग कुछ भी विश्लेषण किया जा सकता है, और मुझे लगता है कि यह यहां लागू होता है।
पहले विकल्प के स्पष्ट लाभ यह हैं कि यह अल्पावधि में काम को कम करता है, और कार्य कोड को फिर से लिखने से किसी चीज को तोड़ने की संभावना को कम करता है। स्पष्ट लागत यह है कि यह कोड आधार में असंगति का परिचय देता है। जब आप कुछ ऑपरेशन एक्स कर रहे होते हैं, तो यह कोड के कुछ हिस्सों में एक तरह से किया जाता है, और कोड के एक अलग हिस्से में एक अलग तरीका होता है।
दूसरे दृष्टिकोण के लिए, आपने पहले ही स्पष्ट लाभ नोट कर लिया है: संगति। स्पष्ट लागत यह है कि आपको अपने दिमाग को उन तरीकों से काम करने के लिए झुकना होगा जिन्हें आपने वर्षों पहले छोड़ दिया था, और कोड लगातार अपठनीय बना हुआ है।
तीसरे दृष्टिकोण के लिए, स्पष्ट लागत बस एक बहुत अधिक काम करने के लिए है। एक कम स्पष्ट लागत यह है कि आप उन चीजों को तोड़ सकते हैं जो काम कर रहे थे। यह विशेष रूप से संभावना है अगर (जैसा कि अक्सर होता है) पुराने कोड में यह सुनिश्चित करने के लिए अपर्याप्त परीक्षण हैं कि यह सही ढंग से काम करना जारी रखे। स्पष्ट लाभ यह है कि (यह मानते हुए कि आप इसे सफलतापूर्वक करते हैं) आपके पास अच्छा, चमकदार नया कोड है। नई भाषा निर्माणों का उपयोग करने के साथ, आपके पास कोड आधार को फिर से भरने का एक मौका है, जो लगभग हमेशा अपने आप में सुधार देगा, भले ही आपने अभी भी भाषा का उपयोग ठीक उसी तरह किया हो जैसे कि जब लिखा गया था - नए निर्माणों में जोड़ें जो इसे बनाते हैं आसान काम है, और यह एक बड़ी जीत हो सकती है।
एक अन्य प्रमुख बिंदु हालांकि: अभी, यह प्रतीत होता है कि इस मॉड्यूल में लंबे समय तक न्यूनतम रखरखाव रहा है (भले ही एक पूरे के रूप में परियोजना को बनाए रखा जा रहा है)। यह इंगित करता है कि यह बहुत अच्छी तरह से लिखा गया है और अपेक्षाकृत बग मुक्त है - अन्यथा, यह शायद अंतरिम में अधिक रखरखाव से गुजरा होगा।
यह एक और सवाल की ओर जाता है: अब आप जो बदलाव कर रहे हैं उसका स्रोत क्या है? यदि आप एक ऐसे मॉड्यूल में एक छोटा बग ठीक कर रहे हैं, जो कुल मिलाकर अभी भी अपनी आवश्यकताओं को अच्छी तरह से पूरा करता है, तो यह दर्शाता है कि पूरे मॉड्यूल को फिर से चालू करने का समय और प्रयास काफी हद तक बर्बाद होने की संभावना है - उस समय तक जब किसी को गड़बड़ करने की आवश्यकता होती है यह फिर से, वे अच्छी तरह से उसी स्थिति में हो सकते हैं जो अब आप हैं, कोड बनाए रखना जो "आधुनिक" अपेक्षाओं को पूरा नहीं करता है।
हालांकि, यह भी संभव है कि आवश्यकताएं बदल गई हैं, और आप उन नई आवश्यकताओं को पूरा करने के लिए कोड पर काम कर रहे हैं। इस मामले में, संभावना अच्छी है कि आपके पहले प्रयास वास्तव में वर्तमान आवश्यकताओं को पूरा नहीं करेंगे। वहाँ भी एक बड़ा मौका है कि आवश्यकताओं को फिर से स्थिर करने से पहले संशोधन के कुछ दौर से गुजरना होगा। इसका मतलब है कि आप इस मॉड्यूल में (अपेक्षाकृत) निकट अवधि में महत्वपूर्ण काम कर रहे हैं, और बाकी सभी मॉड्यूल में बदलाव करने की बहुत अधिक संभावना है, न कि केवल उस एक क्षेत्र के बारे में जिसे आप सही जानते हैं। अभी। इस मामले में, पूरे मॉड्यूल को रिफलेक्ट करने से अतिरिक्त काम के औचित्य को मूर्त, निकटवर्ती लाभ होने की अधिक संभावना है।
यदि आवश्यकताएं बदल गई हैं, तो आपको यह देखने की भी आवश्यकता हो सकती है कि किस प्रकार का परिवर्तन शामिल है, और उस परिवर्तन को क्या चलाया जा रहा है। उदाहरण के लिए, मान लें कि आप SHA-256 के साथ SHA-1 के उपयोग को बदलने के लिए Git को संशोधित कर रहे थे। यह आवश्यकताओं में बदलाव है, लेकिन गुंजाइश स्पष्ट रूप से परिभाषित और काफी संकीर्ण है। एक बार जब आप इसे स्टोर कर लेते हैं और SHA-256 का सही तरीके से उपयोग करते हैं, तो आप अन्य परिवर्तनों को सामना करने की संभावना नहीं रखते हैं जो बाकी कोड बेस को प्रभावित करते हैं।
दूसरी दिशा में, यहां तक कि जब यह छोटा और असतत शुरू होता है, तो उपयोगकर्ता इंटरफ़ेस में बदलाव से गुब्बारे की प्रवृत्ति होती है, इसलिए "स्क्रीन पर एक नए चेक बॉक्स को जोड़ने" के रूप में जो शुरू हुआ वह "अधिक समाप्त होता है:" इस निश्चित यूआई को बदलें उपयोगकर्ता-परिभाषित टेम्प्लेट, कस्टम फ़ील्ड, अनुकूलित रंग योजना आदि का समर्थन करने के लिए "
पूर्व उदाहरण के लिए, यह संभवतया परिवर्तनों को कम करने और संगतता के पक्ष में गलत करने के लिए सबसे अधिक समझ में आता है। उत्तरार्द्ध के लिए, पूर्ण रीफैक्टरिंग बहुत अधिक भुगतान करने की संभावना है।