यदि किसी विशेषता को विकास में विलय कर दिया जाता है तो प्रबंधन द्वारा स्थगित कर दिया जाता है?


53

हमारे पास हाल ही में एक समस्या थी जिससे हमारे वेबएप (स्वचालित साइनअप) के लिए एक सुविधा प्रबंधन द्वारा स्थगित कर दी गई थी क्योंकि उन्हें लगा कि शुरुआत बहुत "ठंडी" थी, लेकिन वे सभी अन्य सुविधाओं को चाहते थे जो हम लाइव होने के लिए काम कर रहे थे।

समस्या यह है कि इस कार्यक्षमता को तब विकसित किया गया था, जब इसे अन्य सभी विशेषताओं के साथ समाप्त कर दिया गया था, जिसे हम अगली रिलीज़ पर लाइव पुश करने की उम्मीद कर रहे थे ताकि हम बस देव -> परीक्षण -> मास्टर को मर्ज न कर सकें जैसे हम आमतौर पर करते हैं।

हम इस मुद्दे को कैसे टाल सकते थे?


आप इसे कैसे हल करना चाहते हैं, इस पर निर्भर करते हुए, यह प्रश्न कार्यस्थल के लिए बेहतर फिटिंग है, यदि आप तकनीकी समाधान की तलाश में नहीं हैं।
मालवस

जवाबों:


74

एक दृष्टिकोण इसे झंडी दिखाने की सुविधा है। यह कोड बेस में रह सकता है लेकिन कॉन्फ़िगरेशन द्वारा अक्षम किया जा सकता है।

एक और विकल्प यह है कि वह एक ऐसा कमिट करे जो फीचर मर्ज को वापस लाए ताकि यह और विकसित न हो। एक नई शाखा बनाई जा सकती है जो वापस लौटती है, और बाद में विलय करने के लिए लंबित रह जाती है। यदि आप गिथब पुल अनुरोधों का उपयोग कर रहे हैं, तो आप मर्ज किए गए पुल अनुरोध पर "रिवर्ट मर्ज" बटन के साथ आसानी से कर सकते हैं।


9
क्या उस कोड के लिए परीक्षण के प्रयास को दोगुना करने के लिए कॉन्फ़िगरेशन को ध्वजांकित नहीं किया जाता है? आपको दोनों रास्तों का परीक्षण करना है।

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

4
सामान्य शब्द फ़ीचर टॉगल है । यदि एक छोटा "फीचर एंट्री पॉइंट" है, तो यह संभवतः प्रबंधन के फैसले के बाद किया जा सकता है। यदि नहीं, तो किसी को इस पद्धति के साथ-साथ किसी भी विधि के साथ भी समस्याएं मिलेंगी।
डॉक ब्राउन

3
हमारे पास ऐसी विशेषताएं हैं जो 6+ महीनों के लिए विकास में हैं जो कि छिपी हुई हैं Feature Toggling, जैसा कि डॉक ब्राउन ने कहा है। यह हमें गैर-उत्पादन वातावरण में सुविधा (या इसके अभाव) का परीक्षण करने की अनुमति देता है। कभी-कभी ये सुविधाएँ मौजूदा सुविधाओं में जुड़ जाती हैं, ऐसे में हमारे पास पुराने और नए दोनों प्रकार के सेट के लिए इकाई परीक्षण होना चाहिए। प्रत्येक इकाई परीक्षण बस ध्वज को निर्धारित करेगा जो उसे वर्तमान परीक्षण करने की आवश्यकता है।
ps2goat

25

हम इस मुद्दे को कैसे टाल सकते थे?

एक प्रक्रिया के दृष्टिकोण से, यह पता लगाएँ:

  • इस काम को शुरू करने वाला निर्णय निर्माता कौन था?
  • इस सुविधा को जारी करने का निर्णय क्यों बदला?
    • छूट गई उम्मीदें?
    • ग़लतफ़हमी?
    • अपर्याप्त व्यापार समर्थन?
    • कोई ग्राहक भागीदारी नहीं?

संभावना से अधिक रास्ते में संचार में बूँदें थे। यह महत्वपूर्ण है क्योंकि जब यह काम नहीं करता है, तो आपकी विकास प्रक्रिया (तों) व्यावसायिक आवश्यकताओं की गलत और गलत समझ पर आधारित होगी।


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

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

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

2
मैं पूरी तरह सहमत हूं, यह एक प्रबंधन पेच है, न कि एक डेवलपर।
डुर्रोन 597 16

3
@ेंडरलैंड मेरा कहना है कि आप कुछ समस्याओं से बच नहीं सकते हैं, इसलिए आपको विचार करना होगा कि स्थिति को कैसे ठीक किया जाए। उम्मीद है कि आपको वह बहुत बार नहीं मिलेगा, लेकिन जल्द ही या बाद में उसी के अनुसार इसकी योजना बनेगी।
gbjbaanb

19

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

मुझे लगता है कि आप "कॉन्फ़िगरेशन द्वारा स्वचालित साइनअप को अक्षम करने" को केवल एक अतिरिक्त सुविधा के रूप में घोषित करेंगे (यह सिर्फ फीचर टॉगल का एक रूप है ), इसलिए इसे आपके वर्कफ़्लो में आसानी से एकीकृत किया जाना चाहिए। आप प्रयास का अनुमान लगा सकते हैं, यदि आप चाहें तो आप इसके लिए एक सुविधा शाखा का उपयोग कर सकते हैं (या नहीं, यदि आप ऐसे मुद्दों के लिए सुविधा शाखाओं का उपयोग नहीं करते हैं)। और आप निश्चित रूप से usal "मर्ज देव -> परीक्षण -> मास्टर" प्रवाह का उपयोग कर सकते हैं जिसे आपने वर्णित किया है।

और यह वास्तव में जिस तरह से आप अपनी मौजूदा स्थिति में इसे संभाल सकते हैं। गिट वर्कफ़्लो के दृष्टिकोण से, यह कोई फर्क नहीं पड़ता कि परिवर्तन अनुरोध प्रबंधन से रिलीज़ 1.0 के लिए आता है, या यदि परिवर्तन अनुरोध रिलीज़ 2.0 के लिए एक नया ग्राहक इच्छा है।


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

@Gusdor: मेरा संपादन देखें।
डॉक्टर ब्राउन

1

यह सटीक मुद्दा है जो मेरे पास gitflow और GitHub प्रवाह के साथ है, और ऐसा लगता है कि वेब अनुप्रयोगों के साथ यह अक्सर होता है - या अधिक आदर्श की तरह। ऐसा लगता है कि आप या तो इस मुद्दे को रेट्रोएक्टली (ऊपर उल्लेखित) या प्रैक्टिकली (उदाहरण के लिए नीचे) हल करेंगे।

मैंने मानक gitflow शाखाओं के अलावा 'बंडल शाखाएँ' बनाई हैं। बंडल में उन सभी विशेषताओं को शामिल किया गया है जो uat / qa के लिए तैयार हैं। Uat / qa सुविधाओं की एक सूची बनाई जाती है। इन्हें अस्थाई बंडल में मिला दिया जाता है, और यह बंडल ऊट / क्यूए में तैनात हो जाता है। मूल सुविधा शाखा पर कोई बग फिक्सिंग होती है, और जो बंडल में वापस आ जाती है और तैनात हो जाती है। यह आने वाली रिलीज़ को अलग करता है और साथ ही उन विशेषताओं को एक साथ परीक्षण करने की अनुमति देता है, जिससे उन्हें विकसित शाखा में अपना रास्ता मिल सके। जिन शाखाओं को मंजूरी दी जाती है उन्हें विकास में एक पुल अनुरोध मिलता है - गिटफ्लो प्रक्रिया के बाद। टेस्ट तैयार सुविधाओं को अस्थायी बंडल शाखा से जोड़ा या हटाया जा सकता है।

  • यह मास्टर को हमेशा उत्पादन के लिए तैयार स्थिति को दर्शाता है (हुक के साथ स्वचालित कर सकता है)
  • विकास हमेशा नवीनतम रिलीज (और परीक्षण) अगले रिलीज उम्मीदवार को दर्शाता है

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

GUI एडऑन के साथ, यह बंडल तैनाती के प्रति सुविधा शाखाओं को टिक करने के लिए इष्टतम हो सकता है - ऑटोमेशन को ध्यान में रखते हुए।

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