चंचल - हम क्या गलत कर रहे हैं?


22

मैं एक चुस्त टीम में एक डेवलपर हूं, और हम स्क्रैम का उपयोग करने की कोशिश करते हैं।

तो मैं यहाँ एक काल्पनिक समस्या को स्पष्ट करूँगा।

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

जब हम नियोजन करते हैं, हम हमेशा विकास के समय के संदर्भ में आसान समाधान के लिए जाते हैं, इसलिए उदाहरण के लिए यदि हम एक नया संवाद या कुछ बना रहे हैं, तो हम पुराने JQuery का उपयोग करते हैं क्योंकि इसका तेज है, और हम कहते हैं कि हम वापस जा रहे हैं बाद में रिएक्ट में तब्दील होने और बदलने के लिए, लेकिन ऐसा शायद ही कभी होता है।

उपयोगकर्ता की कहानियों से हमें जो करना है, उसकी आवश्यकताएं प्राप्त होती हैं (जो कि अच्छी तरह से IMO की जाती हैं, वे पतली होती हैं, लेकिन वे समझाती हैं कि हम क्या कर रहे हैं, और हम क्यों कर रहे हैं)।

कभी-कभी, नई सुविधाओं की आवश्यकताएं बहुत पतली होती हैं, इसलिए उदाहरण के लिए यदि कोई आवश्यकता कहती है "एक ऐसा संवाद बनाएं जो सामग्री के टन को लोड करता है" लेकिन लोडिंग सुविधा को लागू करने के लिए नहीं कहता है, हम, ज्यादातर मामलों में, इसे लागू नहीं करेंगे। भले ही हम सभी जानते हैं कि यह ग्राहकों के लिए बेहतर होगा, इस कारण से कि यह हमारे स्प्रिंट लक्ष्य से समझौता कर सकता है (भले ही मुझे व्यक्तिगत रूप से विश्वास है कि यह नहीं होगा)।

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

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


21
"परिणाम यह है कि हमारा कोडबेस एक बहुत बड़ी गड़बड़ी है जिसमें बहुत खराब रख-रखाव है, मुख्यतः इस विकास रणनीति के कारण, बस तेजी से आगे बढ़ें, कम से कम करें।" - ऐसा लगता है कि आप पहले से ही समस्या का एक अच्छा विचार है, लेकिन मुझे यकीन नहीं है कि यह वास्तव में एजाइल के साथ बहुत कुछ करना है। आप नलिका कोडिंग प्राप्त कर सकते हैं कोई फर्क नहीं पड़ता कि आप किस पद्धति का उपयोग करते हैं।
नतनएल

उस चंचलता में कैसे जीओगे? लोग वृद्धिशील को बतख टैपिंग के रूप में समझते हैं फिर फिक्सिंग।
गेब्रियल स्लोमका

7
"लोग वृद्धिशील समझ के रूप में बतख टेप तो फिक्सिंग।" - यह निश्चित रूप से नहीं है कि घोटाला क्या है। यदि "लोगों" को लगता है कि, वे गलतफहमी को समझते हैं।
ब्रायन ओकले

9
एरिक लिपर्ट का हवाला देते हुए: यदि आपने खुद को एक छेद में खोदा है, तो बाहर निकलने के लिए पहली चीज है: खुदाई बंद करो।
डॉक्टर ब्राउन

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

जवाबों:


56

इससे एजाइल या स्क्रैम का कोई लेना-देना नहीं है।

"अब यह डक्ट टेप और हम इसे बाद में ठीक कर देंगे" के साथ समस्या यह है कि बाद में कभी नहीं आती है और इस समय में आप बहुत सारे तकनीकी ऋण जमा कर रहे हैं ।

वसूली का पहला कदम समस्या को पहचानना और इसे बदतर बनाना बंद करना है।

हर नई उपयोगकर्ता कहानी के लिए, टीम को "इस कोड को सही करने का तरीका क्या है?" पर विचार करना चाहिए, न कि "यह हैक करने का सबसे तेज़ तरीका क्या है?" और तदनुसार स्प्रिंट की योजना बनाएं।

मौजूदा समस्या को साफ करने के लिए, मैंने स्पेगेटी कोड की 200K लाइनों को विरासत में मिला है, इसके उत्कृष्ट उत्तर देखें - अब क्या है?


इसके अलावा, मुझे लगता है कि इस तरह की अधिकांश समस्याएं एक अनुभवी प्रबंधक के न होने के कारण होती हैं, जो जानता है कि इन समस्याओं को कैसे हल किया जाए और इसके बजाय, प्रबंधक को नामित कार्यप्रणाली से प्रतिस्थापित करें, जो ऑनलाइन के बारे में पढ़ता है। इसका एक फायदा यह है कि अब प्रबंधक की बजाय विधि को दोष मिलता है।
रोब

1
जवाब बस यह है। अच्छी तरह से और बहुत सटीक। SCRUM काम करने का एक तरीका है, यदि आप टेप को खत्म करने के बजाय डक्ट टेप के साथ काम करने का फैसला करते हैं, तो यह आप पर है।
coteyr

आपको वही मिलता है जिसके लिए आप प्रोत्साहन देते हैं। यदि आप लोगों को निरंतर समय सीमा के दबाव (स्क्रम के स्प्रिंट) के तहत रखते हैं, तो आप लोगों को शॉर्टकट लेने के लिए प्रोत्साहित कर रहे हैं। इस प्रकार टेक ऋण जमा होता है।
माइकल बी

22

आपके पास क्या है जो मार्टिन फॉलर "फ्लैसिड स्क्रैम" कहता है।

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

कम समय के लिए वरीयता के साथ, कुछ हफ़्ते के लिए कुछ हफ़्ते के लिए, अक्सर काम करने वाले सॉफ़्टवेयर वितरित करें।

क्या आप कह सकते हैं कि आप वास्तव में काम कर रहे सॉफ्टवेयर को वितरित करेंगे? या सिर्फ सॉफ्टवेयर जो मुश्किल से काम करता है?

चंचल प्रक्रियाएं सतत विकास को बढ़ावा देती हैं। प्रायोजकों, डेवलपर्स और उपयोगकर्ताओं को अनिश्चित काल तक निरंतर गति बनाए रखने में सक्षम होना चाहिए।

क्या आप कह सकते हैं कि आपकी प्रक्रिया स्थायी है? क्या आप मन में स्थिरता के साथ निर्णय लेते हैं? या क्या आप ऐसे समाधान चुनते हैं जो दीर्घकालिक समस्या को ध्यान में रखे बिना वर्तमान समस्या को हल करते हैं?

तकनीकी उत्कृष्टता और अच्छे डिजाइन के लिए निरंतर ध्यान चपलता को बढ़ाता है।

वास्तव में प्रमुख सिद्धांत। मेरा मानना ​​है कि यह पृष्ठ पर विशाल लाल अक्षरों में रखा जाना चाहिए। यह वह जगह है जहाँ आप सबसे अधिक असफल हो जाते हैं।

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

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

अपनी टिप्पणी से

उस चंचलता में कैसे जीओगे?

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


6
"कुछ लोग कहेंगे कि स्क्रैम ... आपकी सटीक स्थिति तक पहुंचना बहुत आसान है।" । मुझे नहीं लगता कि यह बिल्कुल सच है। गलत तरीके से करना इस सटीक स्थिति को जन्म दे सकता है, लेकिन जब तक ग्राहक वास्तव में यही चाहता है, तब तक घोटाले ही सबसे सस्ते संभव समाधान का समर्थन नहीं करता है।
ब्रायन ओकले

1
@BryanOakley मैं जो कहना चाहता हूं वह यह है कि यदि प्रक्रिया एक्स को करने में निर्धारित नहीं करती है, तो लोग एक्स नहीं करेंगे। और स्क्रैम किसी भी अभ्यास को नहीं लिखते हैं जो तकनीकी ऋण को कम करेगा। इसके विपरीत, जैसे कि केवल काम करने के लिए पीओ द्वारा परिभाषित किया गया है, तो कोई तकनीकी ऋण नहीं हटाया जाएगा। चूंकि पीओ के पास इसकी परवाह करने का कोई कारण नहीं है। तकनीकी ऋण केवल टीम की जिम्मेदारी है।
युफोरिक

2
"स्क्रम किसी भी अभ्यास को निर्धारित नहीं करता है जो तकनीकी ऋण को कम करेगा।" - और न ही यह किसी भी अभ्यास को निर्धारित करता है जो तकनीकी ऋण को बढ़ाता है
ब्रायन ओकली

2
@BryanOakley तकनीकी ऋण की बात यह है कि यह स्वाभाविक स्थिति है कि यह बढ़ जाती है। और इसे कम करने के लिए काम करना होगा। अकेले छोड़ दिया, यह अनियंत्रित रूप से बढ़ेगा।
व्यंग्यात्मक

4
यदि PO केवल एक है जो स्प्रिंट में जाने पर इनपुट प्राप्त करता है, तो PO अपनी भूमिका खराब तरीके से निभा रहा है। यह तय करना उनका काम है कि उत्पादन प्रक्रिया में शामिल सभी लोगों के साथ बात करके सबसे महत्वपूर्ण क्या है, और इसमें उनकी बाकी टीम भी शामिल है।
एरिक

9

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

कर रहे हैं दो अलग-अलग पहलुओं कि तुम क्या वर्णन करने के लिए:

  • आम समझ / दृष्टि गुम होना और इसलिए कुशल नहीं होना
  • सफलता / प्रगति और कुल लागत को कैसे मापें

गलत रास्ते पर जाना या हलकों में दौड़ना

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

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

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

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

मापने की सफलता

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

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

यहाँ मेरी सलाह है:

  1. अपने टिकट सिस्टम में टिकट के रूप में सब कुछ, यहां तक ​​कि छोटे कीड़े रखें । एक सक्रिय निर्णय लें कि परियोजना के दायरे में क्या है और क्या नहीं। मील का पत्थर बनाएं या अन्यथा अपने बैकलॉग को फ़िल्टर करें ताकि आपके पास हमेशा उन सभी की "पूर्ण" सूची हो जो अभी भी करने की आवश्यकता है।
  2. महत्व का एक सख्त क्रम रखें और स्पष्ट कट ऑफ प्वाइंट जहां परियोजना को सफल माना जा सकता है। अंतिम उत्पाद वास्तव में किस स्तर की स्थिरता / कोड गुणवत्ता / प्रलेखन की आवश्यकता है? शीर्ष से चुनकर यथासंभव हर दिन काम करने की कोशिश करें। एक टिकट पर काम करते समय, नए टिकटों को पेश किए बिना इसे पूरी तरह से हल करने की कोशिश करें (जब तक कि यह कम प्राथमिकता के कारण चीजों को पोस्ट-पॉइन करने के लिए समझ में न आए)। प्रत्येक कमिट आपको अपने अंतिम लक्ष्य की ओर अग्रसर होना चाहिए, न कि साइडवे या पीछे की ओर। लेकिन इसे फिर से जोर देने के लिए: कभी-कभी एक हैक जो बाद में अतिरिक्त काम पैदा करता है, फिर भी परियोजना के लिए शुद्ध सकारात्मक हो सकता है!
  3. उपयोगकर्ता मूल्य का पता लगाने के लिए अपने PO / उपयोगकर्ताओं का उपयोग करें, लेकिन तकनीकी लागत के हिसाब से आपके देवताओं का भी पता लगाना होगा । गैर-देवता आमतौर पर सही दीर्घकालिक लागत (केवल कार्यान्वयन लागत नहीं!) का न्याय नहीं कर सकते, इसलिए उनकी सहायता करें। उबलते-मेंढक समस्या से अवगत रहें: समय के साथ बहुत कम, अप्रासंगिक समस्याएं एक टीम को पकड़ में ला सकती हैं। यह निर्धारित करने का प्रयास करें कि आपकी टीम कितनी कारगर हो सकती है।
  4. समग्र लक्ष्य / लागत पर नजर रखें। स्प्रिंट से स्प्रिंट के बारे में सोचने के बजाय, "क्या हम एक टीम के रूप में प्रोजेक्ट के अंत तक आवश्यक हर चीज कर सकते हैं" की मानसिकता रखते हैं । स्प्रिंट सिर्फ चीजों को तोड़ने का एक तरीका है और चेक-पॉइंट है।
  5. कुछ जल्दी दिखाने की इच्छा के बजाय, सबसे तेज़ पथ पर अपने पाठ्यक्रम को न्यूनतम व्यवहार्य उत्पाद पर प्लॉट करें जो उपयोगकर्ता को दिया जा सकता है। फिर भी, आपकी समग्र रणनीति को बीच में सत्यापन योग्य परिणामों की अनुमति देनी चाहिए।

इसलिए जब कोई ऐसा कुछ करता है जो आपके अंतिम कार्यान्वयन लक्ष्य में फिट नहीं होता है, तो आदर्श रूप से की गई कहानी पर विचार न करें। यदि यह कहानी को बंद करने के लिए फायदेमंद है (जैसे ग्राहकों से प्रतिक्रिया प्राप्त करने के लिए), तो लघु कॉमिंग को संबोधित करने के लिए तुरंत एक नई कहानी / बग खोलें। इसे पारदर्शी बनाएं कि शॉर्टकट लेने से लागत कम नहीं होती है, यह सिर्फ उन्हें छुपाता है या देरी करता है!

यहाँ चाल परियोजना की कुल लागत के साथ बहस करने के लिए है: यदि उदाहरण के लिए पीओ एक समय सीमा बनाने के लिए शॉर्टकट लेने के लिए धक्का देता है, तो उस परियोजना की मात्रा पर काम करने के लिए मात्रा निर्धारित करें जिसे बाद में किया जाना है!

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

सारांश

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

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

उम्मीद है की वो मदद करदे!


"इसके बारे में इस तरह से सोचें: 10-20 साल पहले, लोगों ने विशाल चश्मा लिखने की कोशिश की और सब कुछ पहले से सोच लिया और अक्सर असफल रहे।": नब्बे के दशक के बाद से व्यापार में रहे और, ठीक है, नहीं, हमने ऐसा काम नहीं किया। । कहने के लिए यह एक पौराणिक अतीत के विपरीत फुर्तीले के लिए एक विपणन आम बात है जिसमें लोग बहुत अधिक योजना बनाकर गलत हो रहे थे। बहुत अधिक योजना बनाने और एक प्रारंभिक प्रोटोटाइप का निर्माण करने के लिए पहले पाठों में से जो मैंने 1998 या उसके आसपास सीखा था। चंचल आंदोलन आंशिक रूप से अच्छी तरह से ज्ञात प्रथाओं के लिए नए शब्दों का उपयोग कर रहा है और उन्हें नए रूप में विपणन कर रहा है।
जियोर्जियो

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

7

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

यदि वे कहते हैं कि यह पूर्व है, तो आप कुछ भी गलत नहीं कर रहे हैं - यह मानते हुए कि आप स्प्रिंट समीक्षाओं में उन्हें समझा रहे हैं कि आप अपने लक्ष्यों को पूरा करने के लिए इंजीनियरिंग कोनों को काट रहे हैं।

यदि वे कहते हैं कि यह बाद की बात है, तो आप जो गलत कर रहे हैं वह यह है कि आप उन्हें वह नहीं दे रहे हैं जो वे चाहते हैं।

Scrum के कोनेस्टोन में से एक पारदर्शिता है। यदि आप घोटाले कर रहे हैं, तो आपको ग्राहक के साथ स्प्रिंट समीक्षा करनी चाहिए। उन समीक्षाओं में, क्या आप ग्राहक को बता रहे हैं कि आप सॉफ़्टवेयर को तेज़ी से वितरित करने के लिए कोनों को काट रहे हैं? अगर नहीं, तो भी आपको करना चाहिए। आपको अपने ग्राहकों के साथ अपने डिज़ाइन विकल्पों के प्रभावों के बारे में 100% स्पष्ट होने की आवश्यकता है, ताकि उन्हें सूचित निर्णय लेने का मौका मिल सके कि क्या आप अपने सॉफ़्टवेयर को गुणवत्ता के उचित स्तर के साथ वितरित कर रहे हैं।


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

1
@ एरिक: उत्कृष्ट टिप्पणी। इसलिए मैंने मूल रूप से _ "लिखा था ..." ... वे चाहते हैं "के बजाय" उन्हें क्या चाहिए "की समझ में आने के लिए। हालांकि, मैं देख सकता हूं कि इस पर ज्यादा जोर नहीं दिया गया है। मैं थोड़ा और जोर और स्पष्टीकरण जोड़ दूँगा। टिप्पणी के लिए धन्यवाद।
ब्रायन ओकले

5

इवान सही है। कारण प्रबंधन को स्क्रैम पसंद है क्योंकि वे स्टैकाटो शैली में सुविधाओं की मांग करते हैं और जल्दी परिणाम प्राप्त करते हैं। जब तक परिणामी गंदगी किसी की समस्या है।

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

आपको अपने डेवलपर की योजना बनाने के लिए तैयार किया जाता है। कोई आपको एक्स दिनों में कुछ सुविधा देने के लिए नहीं कह रहा है। यदि कोई आपसे x दिनों में देने के लिए कह रहा है, तो आप Scrum नहीं कर रहे हैं।

जो भी समस्या है उसे ठीक करने की आवश्यकता है, अपने समय का दावा करें। क्या आपको लगता है कि आपको पहले किसी चीज़ को दोबारा बनाने के लिए समय चाहिए? इसे अपने अनुमान में शामिल करें। क्या आप ऐसा कर सकते हैं?


3

आइए जांच करें कि आप क्या कर रहे हैं, एक पल के लिए चंचल को अलग करना।

जब हम नियोजन करते हैं, तो हम विकास के समय के आसान समाधान के लिए जाते हैं, इसलिए उदाहरण के लिए यदि हम एक नया संवाद या कुछ बना रहे हैं, तो हम पुराने jquery का उपयोग करते हैं, क्योंकि यह जल्दी है, और हम कहते हैं कि हम बाद में वापस जाने वाले हैं साफ और प्रतिक्रिया में बदल, लेकिन ऐसा शायद ही कभी होता है।

इसे "टेकिंग टेक्निकल डेट" कहा जाता है। मार्टिन फाउलर ने दो अक्षों के साथ अपने ब्लॉगपोस्ट में "तकनीकी ऋण का चतुर्थांश" का वर्णन किया : "रेकलेस बनाम प्रूडेंट" और "डेलीबेट बनाम अनजाने"।

आप स्पष्ट रूप से ज्ञात पुरानी प्रौद्योगिकी jquery का उपयोग करने का निर्णय लेते हैं जो आपको अपने एक एक्सप्रेस लक्ष्य (अर्थात् एकल-पृष्ठ ऐप) से और अधिक दूर ले जाती है । आप इसे "जल्दी" देने के लिए करते हैं। यह डेलीब्रेट है।

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

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

आप जो कर रहे हैं वह बहुत बुनियादी स्तर पर गलत है। यह खराब इंजीनियरिंग है !

आपने तकनीकी ऋण लिया, यह देखते हुए कि इस ऋण को चुकाना होगा और ब्याज वसूलना होगा । और आप यह करते रहे कि जब तक आपके ऋण पर ब्याज दर आपके स्प्रिंट के दौरान आपके उपलब्ध काम पर बंद नहीं हो जाती।

आपको जो करना चाहिए वह ऋण के स्तर को कम कर रहा है । अपने बॉस से बात करें, अपने क्लाइंट से बात करें। आपको कल स्थिरता पर काम करने की आवश्यकता है।


2

बस चुस्त का उपयोग बंद करो ...

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

आपके प्रोजेक्ट का कारण, और दुनिया की लगभग हर दूसरी परियोजना, कोड और डाइवर्जेंट दृष्टिकोणों की गड़बड़ी है, यह केंद्रीकृत, सर्वज्ञ वास्तुकला डिजाइन (वहाँ, मैंने कहा था) की कमी के कारण है।

इसके अभाव के कारण निम्न हो सकते हैं:

  • आर्किटेक्ट के पास विशेषज्ञता नहीं है (जैसे आपकी पहली दस हॉबी प्रोजेक्ट्स)
  • आर्किटेक्ट के पास समय नहीं है
  • आर्किटेक्ट के पास शक्ति नहीं है (प्रबंधक कहते हैं कि नहीं, या हाँ, लेकिन केवल कुछ भागों के लिए)
  • टीम को कुछ वूडू पद्धति में विश्वास है जो उन्हें बचाएगा (यह सभी लोहे को खुद ही बाहर कर देगा क्योंकि हम फुर्तीले का उपयोग कर रहे हैं)

सरल उपाय इन सभी जादू शब्दों को छोड़ना है, और स्थिति की वास्तविकता को देखना है, जिसे संक्षेप में प्रस्तुत किया जा सकता है:

  1. कोड की स्थिति समय और बग मुक्त करने के लिए टीम की क्षमता को बाधित कर रही है।
  2. हम जितनी अधिक सुविधाएँ जोड़ते हैं, वह उतनी ही खराब होती जाएगी।
  3. इसलिए यह वास्तव में ठहराव, आश्वस्त करने के लिए समझ में आता है, और (शायद बेहद) रीडिज़ाइन भागों को।

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

कहा गया है कि, बहुत सी चीजें हैं जो प्रबंधक चीजों को तेज करने के लिए कर सकते हैं:

  1. अपने भक्तों को समय सीमा के लिए मृत्युंजय करना।
  2. यह कहते हुए कि देवता केवल "सोच, समेकन और गुणवत्ता को बनाए रखने" और उन पर एक उदार समय भत्ता के लिए टिकट होने के बिना टिकटों के खिलाफ समय लॉग कर सकते हैं।
  3. लंबे समय से किसी एक व्यक्ति को आर्किटेक्चर का स्वामित्व नहीं देना, इस पर एक हैंडल पाने के लिए
  4. उस व्यक्ति को उन परिवर्तनों को करने की अनुमति नहीं देता है जो वे सोचते हैं कि जरूरत है

इसे इस तरह से देखते हुए, यह देखना आसान है कि चुस्त और घबराहट की कुछ व्याख्याएं वास्तव में आपको इस मार्ग को और भी तेज कर देंगी!

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

एक और तरीका यह है कि अपनी टीम की क्षमता का केवल 25-50% उपयोग करने के लिए स्प्रिंट की योजना बनाएं। देवता तब अपना समय असली टिकटों पर लगाते हैं (जिस समय को बिना रिफलेक्ट किए लेना चाहिए) और रिफैक्टरिंग समय (सप्ताह के लिए एक बड़ा टिकट, कोई अनुमोदन नहीं है, केवल देवों के बीच चर्चा)। यदि कोई रिफैक्टिंग नहीं है, तो आप अगले सप्ताह के स्प्रिंट से टिकट खींच सकते हैं। आप आने वाले हफ्तों के लिए प्रतिशत स्लाइडर को समायोजित करते हैं क्योंकि परियोजना के अंतर्निहित कोड में सुधार होता है।

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


-1

आप कुछ गलत नहीं कर रहे हैं। इस तरह की कार्यप्रणाली को सुविधाओं को कल्पना के रूप में और जितनी जल्दी हो सके वितरित करने के लिए डिज़ाइन किया गया है।

यदि आपके पास द्वितीयक लक्ष्य हैं जो आप की ओर काम कर रहे हैं तो उन्हें 'गैर-कार्यात्मक आवश्यकताओं' या 'किए गए की परिभाषा' के रूप में व्यक्त करने के लिए सर्वोत्तम है।

उदाहरण के लिए, आपके पास एक गैर-कार्यात्मक आवश्यकता हो सकती है:

"सभी नई सुविधाओं को रिएक्ट में लिखा जाना चाहिए"

तथा

"सभी अतुल्यकालिक कॉल को एक लोडिंग स्पिनर और त्रुटि हैंडलिंग को लागू करना चाहिए"

आपको केवल अपने उत्पाद का स्वामी (या समकक्ष) प्राप्त करने के लिए सहमत होना होगा कि ये ऐसी चीजें हैं जो करने योग्य हैं, बजाय उन्हें चुपके से क्योंकि डेवलपर्स उन्हें पसंद करते हैं।


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

क्षमा करें, मुझे लगता है कि इंजीनियर और देर से सुविधाओं को वितरित करने के बारे में इसकी?
इवान

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

2
अगर आप मुझे माफ़ करते हैं तो आपको लगता है कि आप इस बारे में बहुत दृढ़ विचार रखते हैं कि किस घोटाले के बारे में है। लेकिन अगर मैं आज मार्गदर्शक और अन्य 'आधिकारिक' बयानों की जाँच करूँ तो यह सब बहुत ही शुभकारी है। मुझे लगता है कि आप इस मामले पर स्पष्ट बयान देने वाले बयान को खोजने के लिए कठोर होंगे
इवान

1
@ एरिक वे इसकी गड़बड़ी समझते हैं क्योंकि वे प्रतिक्रिया का उपयोग करना चाहते हैं। देव टीम कैंट बस अपने दम पर सब कुछ रिफैक्ट करने का फैसला करती है। ग्राहक स्प्रिंट के लिए भुगतान करने से इंकार कर देगा।
इवान
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.