आप अंतरिम समाधान को हमेशा के लिए कैसे रोक सकते हैं?


79

कहते हैं कि किसी समस्या के दो संभावित समाधान होते हैं: पहला त्वरित है, लेकिन हैकी; दूसरा बेहतर है लेकिन लागू होने में अधिक समय लगेगा। आपको समस्या को तेजी से हल करने की आवश्यकता है, इसलिए आप हैक को जल्द से जल्द प्राप्त करने का निर्णय लेते हैं, इसके बाद से बेहतर समाधान पर काम शुरू करने की योजना बना रहे हैं। परेशानी यह है कि जैसे ही समस्या दूर हो जाती है, यह टू-डू सूची में गिर जाता है। आप अभी भी कुछ बिंदु पर बेहतर समाधान में डालने की योजना बना रहे हैं, लेकिन इसे अभी लागू करना उचित है। अचानक आपको लगता है कि आपने कम-से-सही समाधान का उपयोग करते हुए पांच साल बिताए हैं, जबकि यह समय को कोसता है।

क्या यह ध्वनि परिचित है? मुझे पता है कि यह एक से अधिक बार हुआ जहां मैं काम करता हूं। एक सहकर्मी ने जानबूझकर एक खराब जीयूआई बनाने का वर्णन किया है ताकि इसे गलती से दीर्घकालिक नहीं अपनाया जा सके। क्या आपके पास बेहतर रणनीति है?


महान प्रश्न - मुझे अभी इस प्रकार के बहुत सारे समाधानों के साथ एक परियोजना पर ले जाया गया है। मुझे बेसब्री से जवाबों का इंतजार है।
क्रिस मैराती-जॉर्ज

जल्दी लेकिन हैकी के पास स्थायी बनने के लिए एक बुरा प्रवृत्ति है। एक व्यक्तिगत परियोजना (छोटी वेब साइट) पर, एक "अस्थायी" समाधान जो मैंने 10 साल पहले लिखा था, आज भी उपयोग किया जा रहा है।
पॉवरलॉर्ड

जवाबों:


37

एक परीक्षण मामला लिखें जो हैक विफल रहता है।

यदि आप एक परीक्षण नहीं लिख सकते हैं जो हैक विफल रहता है, तो या तो हैक के बाद कुछ भी गलत नहीं है, या फिर आपका परीक्षण ढांचा अपर्याप्त है। यदि पूर्व, आप अनावश्यक अनुकूलन पर अपना जीवन बर्बाद करने से पहले जल्दी से भाग जाते हैं। यदि उत्तरार्द्ध, एक और दृष्टिकोण की तलाश करें (या तो हैक करने के लिए, या परीक्षण के लिए ...)


यह सबसे अच्छा समाधान संभव है। असफल परीक्षण अक्सर उच्च प्राथमिकता वाले होते हैं।
तून Krijthe

1
वास्तव में क्योंकि असफल परीक्षण उच्च प्राथमिकता है, यह समस्या का समाधान नहीं है, बल्कि आपकी टीम और / या प्रबंधक को विरोध करने का एक अच्छा तरीका है।
माइकल बोर्गवर्ड्ट

1
अगर यह मेरी टीम के खिलाफ है, तो जाहिर है कि वे मेरे "बेहतर समाधान पर शुरू करने की योजना" से असहमत हैं। यदि वे सही हैं, तो "त्वरित" संस्करण हैक नहीं है, यह एक वैध समाधान है। टेस्ट फेल डिजाइन करने की कोशिश यह काम करने का सबसे अच्छा तरीका है कि क्या मेरा कोड उतना अच्छा है या नहीं।
स्टीव जेसोप

1
... मेरा सामान्य बिंदु यह है कि यदि "त्वरित" फिक्स काफी अच्छा है, तो सवाल एक झूठी समस्या है, जिसे हल नहीं किया जाना चाहिए: "मुझे कैसे काम करना चाहिए जिसे करने की आवश्यकता नहीं है?"। यदि "त्वरित" फिक्स रिलीज के लिए पर्याप्त नहीं है, तो सहकर्मियों को एक परीक्षण द्वारा प्रतिरोध नहीं किया जाएगा जो ऐसा कहता है।
स्टीव जेसोप 14

1
कृपया यह भी ध्यान दें कि मैं 8 शब्दों में प्रस्ताव नहीं कर रहा हूं, एक चांदी की गोली विकास पद्धति प्रदान करने के लिए जो बेवकूफ लोग एक बार पढ़ सकते हैं और फिर नासमझी का अनुसरण कर सकते हैं और सभी संभावित कोड दोषों को ट्रैक कर सकते हैं और ठीक कर सकते हैं ;-) बस उस तंत्र का उपयोग करें (परीक्षण) ), बुद्धिमानी से, दोषों को मापने के लिए, जो कि आखिर वे क्या हैं। यदि आप वास्तव में एक परीक्षण नहीं लिख सकते हैं, ठीक है, यह निर्धारित करने के कुछ अन्य तरीके की तलाश करें कि क्या कोड में दोष है। यदि कोड दोष के साथ जहाज कर सकता है, तो "वैकल्पिक" परीक्षणों के बारे में सोचें। लेकिन इन सबसे ऊपर, समस्या को उद्देश्य से निर्धारित करें।
स्टीव जेसोप

17

रणनीति 1 (लगभग कभी चयनित नहीं): क्लेग को लागू न करें। लोगों को यह भी पता न दें कि यह एक संभावना है। बस इसे पहली बार सही तरीके से करें। जैसा मैंने कहा, समय की कमी के कारण यह लगभग कभी नहीं चुना गया है।

रणनीति 2 (बेईमान): झूठ और धोखा। प्रबंधन को बताएं कि हैक में कीड़े हैं, और वे बाद में बड़ी समस्याएं पैदा कर सकते हैं। दुर्भाग्य से, ज्यादातर समय, प्रबंधकों को बस इंतजार करना पड़ता है जब तक कि कीड़े एक समस्या नहीं बन जाते हैं, तब कीड़े को ठीक करें।

रणनीति 2a: रणनीति 2 के रूप में ही, सिवाय इसके कि वास्तव में बग हैं। एक ही समस्या, हालांकि।

रणनीति 3 (और मेरा व्यक्तिगत पसंदीदा): जब भी आप कर सकते हैं, तो समाधान को डिज़ाइन करें और इसे अच्छी तरह से करें जो एक इंटर्न या कोड-बंदर कर सकता है। कोड-मंकी राशि की छोटी राशि खर्च करने की तुलना में अपने स्वयं के वेतन को सही ठहराना आसान है, इसलिए यह बस हो सकता है।

रणनीति 4: एक पुनर्लेखन के लिए प्रतीक्षा करें। प्रतीक्षा करते रहो। जल्दी या बाद में (शायद बाद में), किसी को फिर से लिखना होगा। साथ ही साथ यह सही हो सकता है।


केवल रणनीति 4 के साथ समस्या - जब आप अंततः फिर से लिखना करने के लिए चारों ओर हो जाते हैं, तो प्रमुख समय और बजट की बाधाएं भी होती हैं - इसलिए हैक को कॉपी किया जाता है - या अन्य कूडली समाधान फिर से लिखना में डाल दिया जाता है।
केन रे

1
रणनीति 4 के साथ एक समस्या यह है कि 5 साल के काम-आस-पास और फिक्स होने के बाद, जब आप फिर से लिखने के लिए तैयार होंगे तो अनुवाद में कुछ खो जाएगा।
गियोवन्नी गाल्बो

बिल्कुल सही। कुछ भी नहीं व्यापार हितधारकों को 6 महीने के लिए भुगतान करने की तुलना में फिर से लिखना होगा कि मूल रूप से उन्हें वही आवेदन मिलता है जो उनके पास था, लेकिन अतिरिक्त बग के साथ। शुरुआत 5: धीरे-धीरे और ध्यान से चीजों को रिफ्लेक्टर करें जब यह ऐसा करने के लिए समझ में आता है।
एरिक जेड बियर्ड

16

यहाँ तकनीकी ऋण पर एक महान संबंधित लेख है ।

मूल रूप से, यह आपके द्वारा किए गए सभी तकनीकी निर्णयों के साथ ऋण का एक सादृश्य है। अच्छा ऋण और बुरा ऋण है ... और आपको उस ऋण को चुनना होगा जो आप कम से कम दीर्घकालिक लागत के साथ इच्छित लक्ष्यों को प्राप्त करने जा रहे हैं।

सबसे खराब तरह का ऋण छोटे छोटे संचित शॉर्टकट हैं जो क्रेडिट कार्ड ऋण के अनुरूप होते हैं ... हर एक को नुकसान नहीं होता है, लेकिन बहुत जल्द आप गरीब घर में हैं।


यह एक बढ़िया लेख है - धन्यवाद। जब मैंने प्रश्न पूछा, तो मैं II-A-2 (क्रेडिट कार्ड) के बजाय टाइप II-A-1 (कार ऋण सादृश्य) के ऋणों के बारे में सोच रहा था। मैं अब देखता हूं कि ऐसे ऋण अच्छे हो सकते हैं और संगठन स्पष्ट रूप से उनके लिए योजना बना सकता है।
टॉमी हर्बर्ट

14

डेडलाइन संचालित काम करते समय यह एक प्रमुख मुद्दा है। मुझे लगता है कि इस तरह से क्यों चुना गया और इस पर कुछ संकेत दिए गए हैं कि इसे किस प्रकार कोडित मदद की जानी चाहिए। इस तरह से कोड को देखने वाले लोग इसे देखते हैं और इसे ताजा रखते हैं।

एक अन्य विकल्प जो काम करेगा, वह है आपके ट्रैकिंग ढांचे में एक बग जोड़ें। (आप के पास एक है, ठीक है?) फिर से काम करना। इस तरह से यह दिखाई दे रहा है और कुछ बिंदु पर इस मुद्दे को मजबूर कर सकता है।


माना। ट्रैकिंग सिस्टम में एक आइटम जोड़ें। समस्या यह है कि आम तौर पर अंतरिम समाधान को संबोधित नहीं किया जाएगा जब तक कि कार्यक्षमता से संबंधित इसके साथ कोई महत्वपूर्ण समस्या न हो। शायद यह ठीक है, जब तक कि आप अपने आप को अचूक कोड बनाए नहीं रखते। आप उस मुद्दे को कैसे उठाते हैं?
s_t_e_v_e

हाँ। यदि आप जानते हैं कि कोड का एक टुकड़ा विफल हो रहा है, तो यह एक बग है, भले ही वह अभी तक विफल नहीं हुआ है, और इसे एक के रूप में ट्रैक किया जाना चाहिए। इसका एक और मनोवैज्ञानिक लाभ यह है कि जब आप मैला सुधार करते हैं, तो आपकी परियोजना की बग गिनती बढ़ जाती है।
रॉबर्ट रॉसनी

13

केवल समय आप कभी भी इन चीजों को ठीक करने का औचित्य साबित कर सकते हैं (क्योंकि वे वास्तव में टूटी नहीं हैं, सिर्फ बदसूरत हैं) जब आपके पास एक और विशेषता या बग फिक्स है जो कोड के समान अनुभाग को छूता है, और आप इसे फिर से लिख सकते हैं।

आपको एक डेवलपर के समय की लागत पर गणित करना होगा। यदि सॉफ़्टवेयर आवश्यकताओं को पूरा किया जा रहा है, और केवल एक चीज गलत है कि कोड हुड के नीचे शर्मनाक है, तो यह वास्तव में फिक्सिंग के लायक नहीं है।

संपूर्ण कंपनियां व्यवसाय से बाहर जा सकती हैं क्योंकि अति-उत्साही इंजीनियर हर साल या फिर जब वे चींटियों की चपेट में आते हैं, तो फिर से वास्तुकला पर जोर देते हैं।

यदि यह बग-रहित है और आवश्यकताओं को पूरा करता है, तो यह किया जाता है। इसे भेज दो। आगे बढ़ो।

[संपादित करें]

बेशक, मैं इस बात की वकालत नहीं कर रहा हूं कि हर समय सब कुछ हैक हो जाए। आपको विकास प्रक्रिया के सामान्य पाठ्यक्रम में ध्यान से कोड डिजाइन और लिखना होगा। लेकिन जब आप उस हैक को समाप्त कर लेते हैं, जिसे बस जल्दी से पूरा करना होता है, तो आपको कोड को साफ करने के लिए लागत-लाभ विश्लेषण करना होगा या नहीं। यदि आवेदन के जीवनकाल में आप एक गड़बड़ हैक के आसपास कोडिंग से अधिक समय बिताएंगे, तो आप इसे ठीक कर रहे होंगे, तो निश्चित रूप से इसे ठीक करें। लेकिन यदि ऐसा नहीं है, तो यह काम करने के लिए री-कोड करने के लिए बहुत महंगा और जोखिम भरा तरीका है , स्रोत को देखने के कारण बग मुक्त अनुप्रयोग सिर्फ आपको बीमार बनाता है।


1
"अगर यह बग-मुक्त है और आवश्यकताओं को पूरा करता है, तो यह हो चुका है। इसे शिप करें। आगे बढ़ें।" मैं असहमत हूं। मैं वर्तमान में एक कोडबेस के साथ काम कर रहा हूं जो इतना जटिल है कि कोई भी साधारण परिवर्तन घंटों के बजाय दिनों की बात करता है। इसमें "बग" नहीं है, लेकिन इसकी खराब संरचना एक निरंतर लागत लगाती है।
क्रिस्टोफर जॉनसन

ठीक है, तुम बस में सब कुछ हैक नहीं करना चाहते हैं , तो आप एक गड़बड़ के साथ खत्म करते हैं। यह सभी लागत-लाभ है: यदि यह आपको इतना धीमा कर रहा है, तो इसे फिर से कोडित करने की आवश्यकता है, यदि यह ऐप के जीवनकाल में समय की बचत करेगा, तो एक नया स्वरूप के बिना लम्बी बगफिक्स को पछाड़ने के लिए काम करता है।
एरिक जेड बियर्ड

मुझे लगता है कि आपकी टिप्पणी सही है, एरिक। हो सकता है कि आप इसे दर्शाने के लिए अपने उत्तर को संपादित कर सकें?
टॉमी हर्बर्ट

7

आप अंतरिम समाधान नहीं करते हैं।

कभी-कभी मुझे लगता है कि प्रोग्रामर को यह बताने की जरूरत है।

इसके बारे में क्षमा करें, लेकिन गंभीरता से - एक घिनौना समाधान बेकार है और यहां तक ​​कि पहली पुनरावृत्ति पर समाधान के एक हिस्से को सही ढंग से करने में अधिक समय लग सकता है।

कृपया मुझे बनाए रखने के लिए अपना बकवास कोड छोड़ दें। बस हमेशा कोड यह सही है। चाहे कितना समय लगे और आप पर कौन चिल्लाए।

जब आप वहाँ बैठे हुए अपने अंगूठे को जल्दी से पहुँचाने के बाद बैठते हैं, जबकि बाकी सभी लोग अपनी बेवकूफी भरी हैकिंग पर बहस कर रहे होते हैं, तो आप मुझे धन्यवाद देंगे।

यहां तक ​​कि अगर आपको नहीं लगता कि आप एक महान प्रोग्रामर हैं, तो हमेशा सबसे अच्छा करने का प्रयास करें, कभी शॉर्टकट न लें - इसे सही करने के लिए आपको किसी भी समय खर्च नहीं करना होगा। यदि आप मुझ पर विश्वास नहीं करते हैं तो मैं इस कथन को सही ठहरा सकता हूं।


कुछ दुर्लभ मामले हैं जहां एक हैक सही है - आमतौर पर जहां गैंट चार्ट कहता है कि जब आप इसे ठीक से करते हैं, तो 23 अन्य लोग कुछ भी नहीं करने के लिए बैठे होंगे। इसके अलावा, चर्चा आईएमओ को हैक करने के लिए प्रोटोटाइप पर लागू होती है।
स्टीव जेसप

प्रोटोटाइप जैसी कोई चीज नहीं है। प्रोटोटाइप उत्पादन कोड का दूसरा नाम है।
ग्रेग डी

विशेष रूप से ध्यान दें कि हालाँकि पहले आपको हैक करने में अधिक समय लगता है, फिर इसे सही करें, इससे प्रोजेक्ट समय कम हो सकता है। हर कोई कम से कम आपके हैक के खिलाफ अपने कोड का परीक्षण शुरू कर सकता है, जो उदाहरण के लिए कार्यात्मक रूप से पूरा हो सकता है लेकिन अस्वीकार्य प्रदर्शन के साथ।
स्टीव जेसोप

@Greg D: एक प्रोटोटाइप एक उत्पाद है, लेकिन यह उत्पाद नहीं है । जब तक कि आपके पास प्रश्नकर्ता को रोकने के लिए कोई उपाय नहीं है, तब तक IMO मुद्दे समान हैं।
स्टीव जेसप

एक प्रोटोटाइप मत बनाओ, एक स्पाइक बनाओ। स्पाइक उत्पादन कोड का एक ऊर्ध्वाधर टुकड़ा है जो एक फ़ंक्शन को लागू करता है, और इसे प्रोटोटाइप कोड की तुलना में कभी भी अधिक समय नहीं लेना चाहिए - हैकिंग तेज होना एक पूर्ण भ्रम है, यहां तक ​​कि अल्पावधि में भी।
बिल के

7

अचानक आपको लगता है कि आपने कम-से-सही समाधान का उपयोग करते हुए पांच साल बिताए हैं, जबकि यह समय को कोसता है।

यदि आप इसे कोस रहे हैं, तो यह TODO सूची में सबसे नीचे क्यों है?

  • यदि यह आपको प्रभावित नहीं कर रहा है, तो आप इसे क्यों कोस रहे हैं?
  • यदि यह आपको प्रभावित कर रहा है, तो यह एक समस्या है जिसे अब ठीक करने की आवश्यकता है।

अक्सर व्यवसाय की आवश्यकताएं आपके दर्द के साथ संरेखित नहीं होती हैं। आईटी व्यवसाय करता है। यदि हम उनके लक्ष्यों को आगे नहीं बढ़ा रहे हैं, तो हम एक खतरनाक डिस्कनेक्ट का जोखिम उठाते हैं। कभी-कभी हमें करने का मौका मिलता है, केवल-आईटी परियोजनाएं, लेकिन फिर भी ...

1
सहमत, प्रबंधन परवाह नहीं करता है अगर यह हमें प्रभावित कर रहा है, जब तक कि उनका व्यवसाय मॉडल कार्य करना जारी रखता है। आपको एक व्यवसाय के मामले के साथ आना होगा क्योंकि इसे अभी तय करने की आवश्यकता है या आपका दर्द कम करना बहरे कानों पर पड़ेगा।
एडम बेलाएरे

यदि व्यवसाय की आवश्यकताओं को आपके दर्द के साथ संरेखित नहीं किया गया है, तो आपको "उचित संस्करण के साथ हैक को प्रतिस्थापित नहीं करना चाहिए, और यह प्रश्न" मेरे नियोक्ता के अपने स्वयं के सेवा करने के लिए मेरे नियोक्ता के छोर को कैसे अलग कर सकता है? " उत्तर: एक संघ बनाएं।
स्टीव जेसप

5
  • मैं यह सुनिश्चित करता हूं कि मैं लंबी अवधि के फिक्स ईएसपीईसीआईएल की प्राथमिकता के बारे में मुखर हूं, क्योंकि शॉर्ट टर्म फिक्स में जाने के बाद।
  • मैं उन कारणों को विस्तार से बताता हूं कि यह हैक क्यों है और एक अच्छा दीर्घकालिक समाधान नहीं है और इसका उपयोग हितधारकों (प्रबंधकों, ग्राहकों, आदि) को समझने के लिए करें कि इसे ठीक करने की आवश्यकता क्यों है।
  • इस मामले के आधार पर, मैं वहाँ भी सबसे खराब स्थिति के डर को थोड़ा इंजेक्ट कर सकता हूँ। "अगर यह सुरक्षित रूप से लाइन में आती है, तो पूरा पुल ढह सकता है!"
  • मैं एक दीर्घकालिक समाधान के साथ आने की जिम्मेदारी लेता हूं और सुनिश्चित करता हूं कि यह तैनात हो जाए

4

यह एक कठिन कॉल है। मैं कभी कभी आपका काम पूरा हुआ हैक्स व्यक्तिगत रूप से कारण है, है दरवाज़े के बाहर और ग्राहकों के हाथों में है कि उत्पाद प्राप्त करने के लिए। हालांकि, जिस तरह से मैं इसका ध्यान रखता हूं वह सिर्फ इसे करना है।

प्रोजेक्ट लीड या अपने बॉस, या ग्राहक को बताएं: कुछ ऐसे स्पॉट हैं जिन्हें साफ करने की आवश्यकता है, और बेहतर कोडित किया गया है। मुझे इसे करने के लिए एक सप्ताह की आवश्यकता है, और इसे करने के लिए अब कम लागत लगने वाली है, फिर इसे अब से 6 महीने बाद करना होगा, जब हमें सबसिस्टम पर एक्सटेंशन लागू करने की आवश्यकता होगी।


आपके प्रोग्रामिंग अनुभव में आपको क्या विश्वास है कि खराब प्रोग्राम किए गए समाधान एक अच्छी तरह से प्रोग्राम किए गए समाधान की तुलना में लागू करने, परीक्षण और रिलीज करने के लिए तेज होंगे? गंभीरता से। मैंने देखा है कि लोग इसे कहते हैं, आमतौर पर जब वे नहीं जानते कि यह कैसे करना है।
बिल के

@ बिल के: खराब क्रमादेशित मेरे बयान में कभी नहीं था। कम वांछनीय समाधान शायद। इसके कर्ज के बारे में, आप कोई कर्ज नहीं लेते, मैं छोटे कर्ज लेता हूं जिसे मैं जल्दी चुका सकता हूं। मैं हमेशा बाद में रिफ्लेक्टर कर सकता हूं, ग्राहक परवाह नहीं करता है, लेकिन वे एक घंटे में बोर्ड के लिए आवश्यक रिपोर्ट की परवाह करते हैं।
मैजिककट

@ बिल K: तो इस मामले में, सुनिश्चित करें कि कोड आधार DRY नहीं है, लेकिन आप ग्राहक के लिए एक हीरो हैं। फिर एक बार ग्राहकों के हाथ में, आप आसानी से कोड को रीफैक्टर कर सकते हैं। एक लंबा, लेकिन एक खुश ग्राहक, या एक DRY कोड आधार और एक दुखी ग्राहक के लिए एक गैर-कोड कोड आधार लंबी अवधि में अधिक महत्वपूर्ण है।
मैजिककट

4

आमतौर पर इस तरह की समस्याएं प्रबंधन या ग्राहक के साथ खराब संचार से उत्पन्न होती हैं। यदि समाधान ग्राहक के लिए काम करता है तो वे इसे बदलने के लिए पूछने का कोई कारण नहीं देखते हैं। इसलिए उन्हें आपके द्वारा पहले किए गए ट्रेडऑफ के बारे में बताया जाना चाहिए ताकि वे त्वरित समाधान को लागू करने के बाद समस्याओं को ठीक करने के लिए अतिरिक्त समय की योजना बना सकें।

इसे कैसे हल किया जाए यह इस पर थोड़ा निर्भर करता है कि यह एक बुरा समाधान क्यों है। यदि आपका समाधान खराब है क्योंकि इसे बदलना या बनाए रखना कठिन है तो पहली बार आपको रखरखाव करना होगा और थोड़ा और समय देना होगा, फिर बेहतर समाधान के लिए उन्नयन करने का सही समय है। इस मामले में यह मदद करता है यदि आप ग्राहक या अपने बॉस को बताते हैं कि आपने पहले स्थान पर शॉर्टकट लिया है। इस तरह वे जानते हैं कि वे अगली बार तेजी से समाधान की उम्मीद नहीं कर सकते। UI को क्रिप्‍प्‍न करना एक अच्‍छा तरीका हो सकता है ताकि यह सुनिश्चित किया जा सके कि ग्राहक सामान वापस पाने के लिए वापस आए।

यदि समाधान बुरा है क्योंकि यह जोखिम भरा या अस्थिर है, तो आपको वास्तव में योजना बनाने वाले व्यक्ति से बात करने की आवश्यकता है और समस्या को ठीक करने के लिए कुछ समय की योजना बनाई है।


4

सौभाग्य। मेरे अनुभव में इसे हासिल करना लगभग असंभव है।

एक बार जब आप एक हैक को लागू करने की फिसलन ढलान पर चले जाते हैं क्योंकि आप दबाव में होते हैं तो आपको हर समय इसके साथ रहने की आदत हो सकती है। पहले से ही काम करने वाली किसी चीज को फिर से काम करने के लिए लगभग कभी भी पर्याप्त समय नहीं है, चाहे वह आंतरिक रूप से कितनी बुरी तरह लागू हो। क्या आपको लगता है कि हैक को ठीक करने के लिए आपको जादुई रूप से "कुछ बाद की तारीख में" अधिक समय मिलेगा?

इस नियम के बारे में मैं केवल एक ही अपवाद सोच सकता हूं कि क्या हैक पूरी तरह से आपको कार्यक्षमता का एक और टुकड़ा लागू करने से रोकता है जिसकी ग्राहक को जरूरत होती है। फिर आपके पास फिर से काम करने के अलावा कोई विकल्प नहीं है।


"आपको क्या लगता है कि आप हैक को ठीक करने के लिए जादुई रूप से कुछ बाद की तारीख में अधिक समय देंगे?" मुझे अब पता है कि इसका उत्तर कैसे देना है: व्यवसाय तकनीकी ऋण को रिटायर करने का निर्णय ले सकता है जब सर्विसिंग की लागत इसे ठीक करने की लागत से आगे निकल जाती है। माइक स्टोन से जुड़ा लेख देखें।
टॉमी हर्बर्ट

2

मैं हैकी समाधान का निर्माण करने की कोशिश करता हूं ताकि यह संभव के रूप में दर्द रहित रूप से दीर्घकालिक तरीके से माइग्रेट हो सके। मान लें कि आपको एक लड़का मिला है जो SQL Server cuz में एक डेटाबेस का निर्माण कर रहा है जो कि उसका सबसे मजबूत DB है, लेकिन आपका कॉर्पोरेट मानक Oracle है। संभव के रूप में कुछ गैर हस्तांतरणीय सुविधाओं (जैसे बिट डेटाैटिप्स) के साथ db बनाएँ। इस उदाहरण में, बिट प्रकारों से बचना कठिन नहीं है, लेकिन यह बाद में एक आसान प्रक्रिया के रूप में परिवर्तित हो जाता है।


2

जो कोई भी अंतिम निर्णय लेने के आरोप में है, उसे शिक्षित करना, क्योंकि लंबे समय में काम करने का तरीका खराब है।

  • समस्या का वर्णन उन शब्दों से करें जिनसे वे संबंधित हो सकते हैं।
  • लागत, उत्पादकता और राजस्व घटता का एक ग्राफ शामिल करें।
  • उन्हें तकनीकी ऋण के बारे में सिखाएं ।
  • नियमित रूप से परावर्तक यदि आपको आगे बढ़ाया जाए।
  • गैर-तकनीकी लोगों के सामने इसे कभी भी "रीफैक्टरिंग" या "वापस जाकर सफाई करना" न कहें। इसके बजाय, इसे "नई सुविधाओं" को संभालने के लिए सिस्टम को "एडैपिंग" कहें।

असल में, जो लोग सॉफ़्टवेयर को नहीं समझते हैं, उन्हें पहले से काम करने वाली चीज़ों को फिर से देखने की अवधारणा नहीं मिलती है। जिस तरह से वे इसे देखते हैं, डेवलपर्स यांत्रिकी के समान होते हैं जो हर बार किसी को पूरी तरह से कार को फिर से जोड़कर रखना चाहते हैं और किसी को एक फीचर जोड़ना चाहते हैं, जो उन्हें पागल लगता है।

यह रोजमर्रा की चीजों के अनुरूप बनाने में मदद करता है। उन्हें समझाएं कि जब आपने अंतरिम समाधान किया था, तो आपने विकल्प बनाए थे कि इसे जल्दी से अनुकूल बनाया जाए, जैसा कि स्थिर, बनाए रखने योग्य, आदि के विपरीत, यह स्टील के बजाय लकड़ी के साथ चुनना पसंद है क्योंकि लकड़ी काटने के लिए आसान है, और इस प्रकार, आप अंतरिम समाधान जल्दी बना सकते हैं। हालांकि, लकड़ी, केवल 20-मंजिला इमारत की नींव का समर्थन नहीं कर सकती है।


2

हम निरंतर एकीकरण के लिए जावा और हडसन का उपयोग करते हैं। 'अंतरिम समाधान' के साथ टिप्पणी की जानी चाहिए:

// TODO: Better solution required.

हर बार जब हडसन एक निर्माण करता है, तो यह प्रत्येक TODO आइटम की एक रिपोर्ट प्रदान करता है ताकि हमारे पास अद्यतित हो, किसी भी उत्कृष्ट वस्तुओं का अत्यधिक दृश्य रिकॉर्ड जो कि बेहतर हो।


1

बड़ा सवाल है। यह मुझे बहुत परेशान करता है, भी - और अधिकांश समय मैं अकेला व्यक्ति हूं जो अपने स्वयं के प्रोजेक्ट्स (yep, small business) में मुद्दों को प्राथमिकता देने के लिए जिम्मेदार हूं।

मुझे पता चला कि जिस समस्या को ठीक करने की आवश्यकता है वह आमतौर पर समस्या का एक सबसेट है। IOW, जिस ग्राहक को तत्काल फिक्स की जरूरत है, उसे हल करने के लिए पूरी समस्या की आवश्यकता नहीं है, बस इसका एक हिस्सा है - छोटा या बड़ा। यह कभी-कभी मुझे एक समस्या पैदा करने में सक्षम बनाता है जो पूरी समस्या का समाधान नहीं है, लेकिन सिर्फ ग्राहक के सबसेट के लिए है और इससे मुझे इश्यू ट्रैकर में बड़े मुद्दे को खुला छोड़ने की अनुमति मिलती है।

आपके काम के माहौल पर यह बिल्कुल लागू नहीं हो सकता है :(


1

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

कुछ लोग कह सकते हैं कि डॉन ने स्लिंग्स और तीरों को योग्य नहीं बनाया ताकि यह सही नहीं हो कि वह CTool को ठीक करें। मेरा केवल यही कहना है कि आपको कभी भी किसी समाधान को हैक नहीं करना चाहिए , यह वास्तविक दुनिया में अनुचित है। लेकिन अगर आप इसे करने वाले हैं, तो सावधानी से चलें।


1
  • इसे लिखित रूप में प्राप्त करें (एक ईमेल)। इसलिए जब यह एक समस्या बन जाती है तो बाद में प्रबंधन यह नहीं भूलता है कि यह अस्थायी माना जाता था।

  • इसे उपयोगकर्ताओं के लिए दृश्यमान बनाएं। यह जितना अधिक दिखाई देगा उतना ही कम होगा कि लोग संकट के समाप्त होने पर इसे वापस जाने और सही तरीके से करने की कोशिश कर रहे हैं।

  • वास्तविक समाधान प्राप्त करने के लिए एक परियोजना, संसाधनों और समय रेखाओं के लिए अस्थायी समाधान से पहले बातचीत होती है। वास्तविक समाधान के लिए कार्य संभवत: जैसे ही अस्थायी समाधान समाप्त होता है, शुरू करना चाहिए।


1

आप अपने स्वयं के "फिक्स" के खिलाफ दूसरा बहुत ही विवरणात्मक बग दर्ज करते हैं और प्रभावित क्षेत्रों में एक सही टिप्पणी करते हैं, जो कहता है, "इस क्षेत्र को बहुत काम करने की आवश्यकता है। दोष # 555 देखें" (पाठ्यक्रम की सही संख्या का उपयोग करें) । जो लोग कहते हैं कि "हैक में मत डालो" सवाल को समझने के लिए प्रतीत नहीं होता है। मान लें कि आपके पास एक ऐसी प्रणाली है जो अब उठने और चलने की जरूरत है, आपका नॉन-हैक समाधान 8 दिनों का काम है, आपका हैक 38 मिनट का काम है, वहीं हैक काम करने के लिए आपको खरीदने के लिए समय है और पैसा नहीं खोना है तुम कर रहे हो।

अब आपको अभी भी अपने ग्राहक या प्रबंधन को एन * 100 मिनट का समय निर्धारित करने के लिए सहमत होना है, इसे ठीक करने के लिए अब आवश्यक एन मिनट के अलावा वास्तविक फिक्स करने के लिए आवश्यक है। यदि आपको इस तरह का समझौता होने तक हैक को लागू करने से इनकार करना चाहिए, तो शायद यही आपको करना है, लेकिन मैंने उस संबंध में कुछ समझ रखने वाले लोगों के साथ काम किया है।


1

क्विक-फ़िक्स को शुरू करने की असली कीमत यह है कि जब किसी और को 2-फ़िक्स फ़िक्स को लागू करने की आवश्यकता होती है, तो वे इसे आपके क्विक-फ़िक्स के आधार पर पेश करेंगे। तो, अब एक त्वरित-फिक्स जगह है, जितना अधिक हो जाएगा उतने ही अधिक हो जाएगा। काफी बार, एक हैक केवल चीजों को सही करने की तुलना में थोड़ा अधिक समय लेता है, जब तक कि आप दूसरी हैक का सामना नहीं करते हैं जो पहले बनाता है।

तो, जाहिर है कि यह (या प्रतीत होता है) कभी-कभी एक त्वरित फिक्स शुरू करने के लिए आवश्यक होता है।

एक संभव समाधान, अपने संस्करण नियंत्रण को संभालने का समर्थन करता है, जब भी आप इस तरह की हैक बनाते हैं, तो स्रोत से एक कांटा पेश करना है। अगर लोगों को इन विशेष "गेट इट्स" फोर्क्स के भीतर नई सुविधाओं को कोडित करने से बचने के लिए प्रोत्साहित किया जाता है, तो यह अंततः हैक से छुटकारा पाने के लिए कांटा के साथ नई सुविधाओं को एकीकृत करने के लिए अधिक काम होगा। अधिक संभावना है, हालांकि, "अच्छा" कांटा खारिज हो जाएगा। और अगर आप रिलीज से काफी दूर हैं तो इस तरह का कांटा बनाना व्यावहारिक नहीं होगा (क्योंकि यह ऊपर बताए गए दोहरे एकीकरण करने के लायक नहीं है), तो आप शायद किसी भी तरह से हैक का उपयोग न करें।

एक बहुत आदर्शवादी दृष्टिकोण।

एक अधिक यथार्थवादी समाधान यह है कि अपने कार्यक्रम को यथासंभव अधिक से अधिक ऑर्थोगोनल घटकों में विभाजित किया जाए और कभी-कभी कुछ घटकों का पूर्ण पुनर्लेखन किया जाए।

एक बेहतर सवाल यह है कि हैकी समाधान खराब क्यों है। यदि यह खराब है क्योंकि यह लचीलापन कम करता है, तो इसे तब तक अनदेखा करें जब तक आपको लचीलेपन की आवश्यकता न हो। यदि यह खराब है क्योंकि यह कार्यक्रमों के व्यवहार को प्रभावित करता है, तो इसे अनदेखा करें और अंततः यह बग फिक्स हो जाएगा और इसे संबोधित किया जाएगा। यदि यह खराब है क्योंकि यह बदसूरत दिखता है, तो इसे अनदेखा करें, जब तक कि हैक स्थानीयकृत हो।


1

कुछ समाधान मैंने अतीत में देखे हैं:

  • HACKकोड में एक टिप्पणी के साथ इसे चिह्नित करें (या जैसी योजना XXX)
  • एक स्वचालित रिपोर्ट चलाएं और उन लोगों को साप्ताहिक ईमेल करें जो इस बात की परवाह करते हैं कि HACKटिप्पणियां कितनी बार दिखाई देती हैं
  • अपने बग ट्रैकिंग सिस्टम में लाइन नंबर और सही समाधान के विवरण के साथ एक नई प्रविष्टि जोड़ें (इसलिए हैक लिखने से पहले शोध से प्राप्त ज्ञान खो गया है)
  • एक परीक्षण मामला लिखें जो दर्शाता है कि हैक कैसे विफल हो जाता है (यदि संभव हो) और इसे उपयुक्त परीक्षण सूट में जांचें (यानी ताकि यह त्रुटियां फेंके कि कोई अंततः सफाई करना चाहेगा)
  • एक बार जब हैक स्थापित हो जाता है और दबाव बंद हो जाता है, तो तुरंत सही समाधान पर शुरू करें

यह एक अच्छा सवाल है। एक बात जिस पर मैंने ध्यान दिया है कि मुझे अधिक अनुभव प्राप्त होता है: हैक्स आपको बहुत कम समय में खरीदते हैं, और अक्सर आपको एक बड़ी राशि खर्च होती है। बारीकी से संबंधित 'क्विक फिक्स' है जो आपको लगता है कि समस्या का समाधान करता है - केवल तब खोजने के लिए जब यह उड़ता है कि यह समस्या बिल्कुल नहीं थी।


1

इस बारे में बहस सेट करना कि क्या आपको यह करना चाहिए, चलो मान लेते हैं कि आपको यह करना है। चाल अब इसे इस तरह से करना है कि लंबी दूरी को कम से कम प्रभावित करता है, यह आसानी से बाद में फट गया, और खुद को एक उपद्रव बनाता है ताकि आप इसे ठीक करने के लिए याद रखें।

उपद्रव भाग आसान है: हर बार जब आप कीचड़ को निष्पादित करते हैं, तो इसे एक चेतावनी जारी करें।

फटा हुआ भाग आसान हो सकता है: मुझे यह करना पसंद है कि एक उप-नाम के पीछे कीचड़ डालना। इससे आपको कोड को कंपाइल करने के बाद से अपडेट करना आसान हो जाता है। जब आप अपना स्थायी समाधान प्राप्त कर लेते हैं, तो आप सबरूटीन या तो इसे लागू कर सकते हैं या फिर नो-ऑप हो सकते हैं। कभी-कभी एक उपवर्ग इसके लिए भी अच्छा काम कर सकता है। हालांकि अन्य लोगों को इस बात पर निर्भर न होने दें कि आपका त्वरित सुधार क्या है। स्थिति को देखे बिना किसी विशेष तकनीक की सिफारिश करना मुश्किल है।

लंबी दूरी के प्रभाव को कम करना आसान होना चाहिए अगर बाकी कोड अच्छा है। हमेशा प्रकाशित इंटरफ़ेस के माध्यम से जाना, और इसी तरह।


1

व्यवसाय के लोगों को हैक की लागत को स्पष्ट करने की कोशिश करें। तब वे किसी भी तरह से एक सूचित निर्णय ले सकते हैं।


1

आप जानबूझकर इसे उस तरीके से लिख सकते हैं जो अत्यधिक प्रतिबंधात्मक और विलोपित है और इसे संशोधित करने के लिए फिर से लिखने की आवश्यकता होगी।


0

हमें एक बार ऐसा करना था - एक अल्पकालिक डेमो संस्करण बनाएं जिसे हम जानते थे कि हम नहीं रखना चाहते हैं। ग्राहक इसे एक winTel बॉक्स पर चाहता था, इसलिए हमने SGI / XWindows में प्रोटोटाइप विकसित किया। (हम दोनों में धाराप्रवाह थे, इसलिए यह कोई समस्या नहीं थी)।


0

इकबालिया बयान:

मैंने कुछ अन्य कोड लेयर से डेटा पढ़ने के लिए C ++ में '#define प्राइवेट पब्लिक' का उपयोग किया है। यह एक हैक के रूप में चला गया, लेकिन अच्छी तरह से काम करता है और इसे ठीक करना कभी प्राथमिकता नहीं रहा। यह अब 3 साल बाद है ...

हैक न करने के मुख्य कारणों में से एक है जोखिम वह है जो हैक को ठीक करते समय नए बग का परिचय देता है। (खासकर पूर्व-टीडीडी कोड आधारों से निपटने के दौरान।)


0

मेरा जवाब दूसरों से थोड़ा अलग है। मेरा अनुभव यह है कि निम्नलिखित अभ्यास आपको चुस्त रहने में मदद करते हैं और हैके पहले पुनरावृत्ति / अल्फा समाधान से बीटा / प्रोडक्शन के लिए तैयार हैं।

  1. परीक्षण संचालित विकास

  2. रीफैक्टरिंग की छोटी इकाइयाँ

  3. निरंतर एकता
  4. अच्छा विन्यास प्रबंधन
  5. चंचल डेटाबेस तकनीक / डेटाबेस रीफैक्टरिंग

और यह कहे बिना जाना चाहिए कि आपके पास इनमें से किसी को भी सही ढंग से करने के लिए हितधारक का समर्थन होना चाहिए। लेकिन इन उत्पादों के साथ आपके पास सही उपकरण और प्रक्रियाएं हैं जो आत्मविश्वास के साथ प्रमुख तरीकों से किसी उत्पाद को जल्दी से बदल सकते हैं। कभी-कभी आपकी परिवर्तन करने की क्षमता परिवर्तनों के जोखिम को प्रबंधित करने की आपकी क्षमता है और विकास के दृष्टिकोण से ये उपकरण / तकनीक आपको सर्फर फीलिंग देते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.