एकल चुस्त काम आइटम के भीतर "संबंधित" काम को संभालना


12

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

यह अतिरिक्त काम आमतौर पर ऐसी चीजें हैं जो कार्य से थोड़ा संबंधित हैं, लेकिन हमेशा आइटम के लक्ष्य को पूरा करने के लिए आवश्यक नहीं है (यह एक राय हो सकती है)। उदाहरणों में शामिल हैं, लेकिन इन तक सीमित नहीं हैं:

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

जब यह अतिरिक्त काम छोटा होता है तो हमें कोई आपत्ति नहीं होती। समस्या तब होती है जब यह अतिरिक्त कार्य मूल सुविधा बिंदु अनुमान से परे वस्तु के पर्याप्त विस्तार का कारण बनता है। कभी-कभी 5 बिंदु वाली वस्तु वास्तव में 13 बिंदुओं का समय लेगी। एक मामले में हमारे पास एक 13 अंक था जो कि रेट्रोस्पेक्ट में 80 अंक या उससे अधिक हो सकता है।

इसे कैसे संभाला जाए, इस बारे में हमारी चर्चा के दो विकल्प हैं।

  1. हम एक ही कार्य मद में अतिरिक्त कार्य को स्वीकार कर सकते हैं, और इसे गलत अनुमान के रूप में लिख सकते हैं। इसके लिए तर्क शामिल हैं:

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

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

हम में से कुछ अब कह रहे हैं कि हमें कुछ कट ऑफ तय करना चाहिए, जैसे कि यदि अतिरिक्त सामान 2 एफपी से कम है, तो यह उसी टिकट में जाता है, यदि यह अधिक है, तो इसे नया टिकट बनाएं।

चूँकि हम Agile का उपयोग करने में केवल कुछ ही महीने हैं, इस बारे में यहाँ के सभी अधिक अनुभवी Agile दिग्गजों की राय क्या है इसे कैसे संभालें?

जवाबों:


5

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

चंचल उत्तरार्द्ध अच्छी तरह से नहीं करता है क्योंकि यह इन ज्यादातर तकनीकी समस्याओं और मुद्दों के जवाब के रूप में इरादा नहीं था।

यह जानकर कि मैं अत्यधिक असहमत हूं कि कार्य, तकनीकी ऋण से निपटने और डिजाइन का काम एक दिए गए स्प्रिंट में अलग-अलग उपयोगकर्ता कहानियों के लिए होना चाहिए। ये केवल ऐसे कार्य हैं जो एक डेवलपर उस स्प्रिंट के लिए उपयोगकर्ता की कहानी को पूरा करने में मदद करने के लिए कर सकता है।

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

यही कारण है कि घंटे का अनुमान कार्यों पर होना चाहिए न कि उपयोगकर्ता कहानियों पर। यह इसलिए भी है क्योंकि कुछ कार्य कई उपयोगकर्ता कहानियों के पूरा होने के लिए महत्वपूर्ण हैं।


4

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

इस परिभाषा को देखते हुए, और इसका पालन किया गया, एक 5-पॉइंटर जो 13-पॉइंटर निकला, एक गलत अनुमान था। आप जिस चीज पर विचार करने का काम करेंगे, वह शायद पुनर्गठन जैसा था; नई कार्यक्षमता को समझने योग्य, बनाए रखने योग्य तरीके से शामिल करने के लिए आपको कोडबेस के एक बहुत महत्वपूर्ण क्षेत्र को पुनर्गठित करना था। यह आमतौर पर विकास के सामान्य भविष्य के मार्ग को समझने में टीम की विफलता को इंगित करता है, जिसके परिणामस्वरूप कुछ को पिछले पुनरावृत्ति में बहुत सरलता से लागू किया जाता है जब अंततः बहुत ही ठोस होने की आवश्यकता होती है। बीए और पीएम के बीच बेहतर संवाद, जो जानते हैं कि बैकलॉग में और क्या गिरावट है, और विकास टीम जो आमतौर पर वर्तमान स्प्रिंट पर ध्यान केंद्रित कर रहे हैं, इसे कम कर सकते हैं। वैकल्पिक रूप से, इस कहानी ने पिछले विकास में बड़ी मात्रा में तकनीकी ऋण को उजागर किया, और यह बस टीम के साथ पकड़ा गया। डिजाइन पैटर्न और परियोजना के सामान्य भविष्य के मार्ग के बेहतर वैचारिक ज्ञान के अलावा बेहतर कोड समीक्षा प्रक्रियाएं, ऐसी घटनाओं को कम करने में मदद कर सकती हैं।

एक बात का ध्यान रखें कि रिफैक्टरिंग "गैर-आदर्श" काम है। चुस्त SCRUM में, कार्यों को "आदर्श घंटे" में अनुमानित किया जाता है; वह है, घंटों की संख्या में हेड-डाउन राइटिंग ब्रांड-न्यू कोड जो कभी अस्तित्व में नहीं था और प्रोजेक्ट के फीचर बेस को पंख लगाता है। 8-घंटे का डेवलपर-दिन वास्तविक रूप से केवल 5 आदर्श घंटे हो सकता है; कभी-कभी आप 6 पर भरोसा कर सकते हैं, विशेष रूप से एक परियोजना के "खिंचाव" में जहां टीम वास्तव में गुनगुनाती है। योजना बनाना, या वापस जाना और परिवर्तन करना जो परियोजना की कार्यक्षमता को प्रभावित नहीं करते हैं लेकिन जो कोडबेस को अन्य तरीकों से बेहतर बनाते हैं, गैर-आदर्श कार्य है, जैसा कि नियोजन, डिजाइन, संचार, समीक्षा, विराम या तकनीकी डाउनटाइम है। तकनीकी डाउनटाइम के अलावा, गैर-आदर्श काम महत्वपूर्ण है, लेकिन उत्पाद के मालिक की दृष्टि में प्रगति नहीं करता है।

इसलिए, बशर्ते कि रिफैक्टरिंग खर्च किए गए वास्तविक घंटों को दोगुना नहीं करता है, जब आप आदर्श घंटों में अनुमान लगाते हैं तो एक निश्चित मात्रा में रिफैक्टरिंग कार्य की उम्मीद की जाती है। मान लीजिए, क्योंकि मुझे नहीं पता कि आपकी टीम का पॉइंट स्केल कैसे कैलिब्रेट किया गया है, कि 5-पॉइंटर एक आदर्श डेवलपर-सप्ताह या लगभग 25 आदर्श घंटों के बराबर है। वह 5, जो 13 में बदल गया (एक ही पैमाने से दो से अधिक डेवलपर-सप्ताह), कुछ जटिलता के कारण होता है जो गुब्बारे की जटिलता के कारण होता है। शायद कोडबेस को वास्तव में किए गए रीफैक्टरिंग की उतनी आवश्यकता नहीं थी, शायद बड़ी मात्रा में तकनीकी ऋण ने टीम को अनजाने में ढेर कर दिया था जिसे नई सुविधाओं को काम करने के लिए हल किया जाना था,

एक वैकल्पिक ब्रह्मांड में, आइए कल्पना करें कि आदर्श घंटे में अनुमानित 5 वास्तविक घंटों के आधार पर 7 (~ 35 घंटे) बन गया है, क्योंकि आपको नए कोड और कुछ पिछले बिट्स को ठीक से पैटर्न में डालने के लिए 10 घंटे अतिरिक्त रिफैक्टिंग की आवश्यकता है। डिजाइन वास्तुकला। उस मामले में, अतिरिक्त आदर्श और कुल घंटों के बीच "गैप" के भीतर होता है, डेवलपर-दिनों की संख्या के दौरान कहानी को लेना चाहिए था। इसलिए, एक परियोजना प्रबंधक के रूप में, मैं एक ५ कहता हूं जो manager का एक उचित अनुमान बन गया है और आगे बढ़ना है।


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

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

1

कहानी अंक किसी दिए गए उपयोगकर्ता कहानी की सापेक्ष जटिलता का अनुमान है। ऐसा लगता है कि आप कहानी के बिंदुओं का उपयोग कर रहे हैं यह कहने के लिए कि यह X आदमी दिन / घंटे लेगा। इसके बजाय, दो लक्ष्यों के लिए प्रयास करें

  1. जब तक वे एक सुसंगत सीमा (3, 5, या 8 अंक) में न हों, कहानियों को तोड़ दें
  2. मान लें कि कहानी में कोई आवश्यक रीफैक्टरिंग शामिल है

समय के साथ यह आपको वेग के लिए आधार रेखा प्रदान करेगा। प्रत्येक 5 अंक की कहानी में दूसरों के समान समय नहीं होगा, लेकिन प्रति स्प्रिंट औसत वेग (टीम कितनी कहानी पूरी कर सकती है) सुसंगत होगी।

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


0

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

ऐसा समय हो सकता है जहां स्प्रिंट प्लानिंग में "स्कोप रेंगना" से बचने के प्रयास में कहानी में अतिरिक्त मापदंड जोड़े जा सकते हैं, जो ऐसा हो सकता है जहां कोई उपयोगकर्ता एक नया रूप चाहता है और फिर उस रूप में 101 परिवर्तन जो यथार्थवादी नहीं है 2 सप्ताह में कभी-कभी स्प्रिंट करवाएं।

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

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