मैं एकल परियोजना पर फीचर रेंगने से कैसे बचूँ?


12

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

खराब हिस्सा यह है कि जैसे ही मैं एक फीचर लागू करता हूं, एक नया रेंगता है। मैं भविष्य में फीचर रेंगने से बचने के लिए क्या कर सकता हूं ताकि मैं वास्तव में एक साल में रिलीज कर सकूं ?

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


8
क्या आप अपने प्रश्न wrt में अधिक विशिष्ट हो सकते हैं, जहाँ सुविधाएँ आती हैं? फीचर रेंगना के लिए कौन जिम्मेदार है? आप? व्यापार विश्लेषकों? कंपनी के अध्यक्ष? उपयोगकर्ताओं की मांग? स्रोत क्या है, यह जाने बगैर कि फीचर रेंगना कैसे प्रबंधित किया जाए, इस बारे में सलाह देना कठिन है। इसके अलावा, क्योंकि मुझे दिलबर पसंद है: search.dilbert.com/comic/Feature%20Creep ;)
FrustratedWithFormsDesigner

1
क्या आप इस परियोजना के एकमात्र डेवलपर हैं? बड़ी टीम परियोजनाओं को वितरण कार्यक्रम को प्रबंधनीय बनाने के लिए मील के पत्थर का होना अपरिहार्य लगता है, लेकिन हम में से जो एकल उड़ान भरते हैं, वे सुविधा-संचालित विकास जैसी कार्यप्रणाली से भी लाभान्वित हो सकते हैं ।
हार्डमैथ

@FrustratedWithFormsDesigner मैं एकमात्र डेवलपर हूं
कोल जॉनसन

1
@FrustratedWithFormsDesigner सं। मैं अकेला हूं। जब तक आप स्रोत फोर्ज को एक व्यक्ति के रूप में गिनते हैं जो प्रोजेक्ट पर काम करता है , मैं केवल एक ही हूं।
कोल जॉनसन

4
शिपिंग एक विशेषता भी है ... कभी-कभी यह ध्यान में रखने में मदद करता है कि किसी अन्य सुविधा पर विचार (अभी तक) किया जाए।
मार्जन वेनमा

जवाबों:


21

मेरे अनुभव में, यह आसान है अगर आप एक विकास और रिलीज ताल हो सकते हैं जो कि आप जो करना चाहते हैं उसके रास्ते में नहीं आते हैं। यहाँ मैंने यह कैसे किया है:

  1. सुविधाओं को नीचे लिखें, और उन्हें एक रेटिंग दें जो यह दर्शाता है कि आप उस पर कितना काम करना चाहते हैं और आपको कितना लगता है कि यह उपयोगकर्ता को लाभ देगा (इसके लिए वास्तविक उपयोगकर्ताओं को संलग्न करना संभव हो सकता है)। फिर उन्हें उसी क्रम में लिखें।
  2. इससे पहले कि आप किसी सुविधा को चेक / पुश करें, सुनिश्चित करें कि आपके पास एक स्थिर, परिनियोजित निर्माण (दृढ़ता से उस सुविधा के लिए CI सिस्टम पर विचार करें) है।

इस तरह, आप प्रत्येक सुविधा के बाद एक रिलीज़ को पुश कर सकते हैं यदि आप चाहें ... या एक रोलअप की प्रतीक्षा करें जो उस मूल्य की पेशकश करता है जिसे आप जारी करना चाहते हैं।

ध्यान दें:

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

बहुत मददगार! मुझे इसकी थोड़ी सख्ती पसंद है।
कोल जॉनसन

मैं जोड़ूंगा: एक नई शुरुआत करने से पहले एक नई सुविधा शुरू न करें। अन्यथा आप ढीले सिरों के कोड बेस के साथ समाप्त होते हैं जो कुछ भी नहीं कर सकते हैं।
त्यान

@ त्य्ना: यही मेरा मतलब है "एक फीचर को आप जिस पर काम कर रहे हैं, उससे अधिक प्राथमिकता कभी नहीं दी जा सकती ... यह आपके द्वारा काम करने वाले को बाधित नहीं कर सकता है ..."
स्टीवन एवर्स

7

उत्तर ट्राइट है और अक्सर असंभव है: अतिरिक्त सुविधाओं को जोड़ने से इनकार करते हैं।

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

एक परियोजना प्रबंधन के दृष्टिकोण से, जवाब तुलनीय है। तय करें कि आप अगली रिलीज़ के लिए कितना समय देने के लिए तैयार हैं और एक समय सीमा तय करें। सुविधाओं का अनुमान लगाएं और समय सीमा बनाने के लिए पर्याप्त कटौती करें। यदि स्वयं के अलावा अन्य हितधारक शामिल हैं, तो उन्हें चुनें कि उनके लिए क्या मायने रखता है।

सॉफ्टवेयर पर जोएल पर निर्धारण का एक अच्छा अवलोकन पाया जा सकता है:

http://www.joelonsoftware.com/articles/fog0000000245.html


9
चूंकि वह परियोजना पर पूरी तरह से अकेला है, इसलिए उसे फीचर रिक्वायरमेंट को थप्पड़ मारने के काम को आउटसोर्स करना पड़ सकता है।
फिलिप

2

विकास के सबसे महत्वपूर्ण पाठों में से एक यह जानना है कि कब रुकना है।

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

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

व्यावहारिक पक्ष पर, आप क्या कर सकते हैं, बैठ जाओ और अपनी अगली रिलीज की कल्पना करो। यह पूरी तरह से होने की जरूरत नहीं है। आपके द्वारा की गई कार्यक्षमता के 3-5 नए प्रमुख टुकड़े अगले रिलीज के लिए आवश्यक हैं। ( वास्तविक संख्या ऐप के प्रकार के आधार पर अलग-अलग हो सकती है, बग फिक्स या मामूली गिनी परिवर्तन नहीं गिन सकती ) उन पर काम करें। यदि आप अन्य विचारों के साथ आते हैं, तो ठीक है ... बस नोट्स बनाएं और उन्हें निम्नलिखित रिलीज में लागू करें। जब आप उन 3-5 वस्तुओं को प्राप्त कर लेते हैं, तो आपकी रिहाई बीटा के लिए तैयार है।

जब मैं एक नया एप्लिकेशन शुरू करता हूं, तो मैं आमतौर पर ऐप के लिए अंतिम 'विज़न' के बारे में सोचता हूं। मेरे लिए, वही है जो मुझे ऐप के संस्करण 3 में चाहिए। उस बेंचमार्क के साथ, मुझे इस बात का अंदाजा है कि 1 का मूल संस्करण क्या होगा।

सारांश:

प्रत्येक रिलीज को परियोजना की समाप्त 'दृष्टि' नहीं होना चाहिए। बस उस दृष्टि के प्रति एक मील का पत्थर।


2

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

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

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

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

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