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