इस प्रश्न में वास्तव में दो प्रश्न हैं, जिन्हें अलग से संबोधित करने की आवश्यकता है:
कुछ टीमों के पास विकास की सख्त प्रक्रिया क्यों है?
सरल जवाब है क्योंकि अगर वे नहीं करते हैं, तो गलतियाँ होती हैं। महंगी गलतियाँ। यह विकास के लिए सच है और यह आईटी क्षेत्र के बाकी हिस्सों के लिए भी सच है (sysadmins, DBAs, आदि)।
बहुत सारे डेवलपर्स और आईटी कर्मचारियों के लिए यह समझना बहुत कठिन है क्योंकि हम में से ज्यादातर ने कभी "चरम सीमा" पर काम किया है - या तो बड़ी, फॉर्च्यून-शैली की कंपनियों में कम से कम एक दर्जन डेवलपर्स और सख्त प्रक्रियाओं का पालन करने के लिए, या छोटे, माइक्रो-आईएसवी या यहां तक कि फ्रीलांस काम जहां लोग केवल बुरी तरह से पेंच नहीं करते हैं, या स्क्रू-अप की लागत कम है।
लेकिन अगर आपने कभी इन चरणों के बीच में एक कंपनी देखी है - यहां तक कि उज्ज्वल, प्रतिभाशाली आईटी कर्मचारियों वाली एक कंपनी - तो आप कोई प्रक्रिया नहीं होने या अर्ध-assed प्रक्रिया होने के खतरों को समझेंगे। आप देखते हैं, कर्मचारियों के बीच संचार एक Combinatorial धमाका समस्या से ग्रस्त है; एक बार जब आप किसी एकल टीम पर लगभग 6-10 डेवलपर्स के स्तर तक पहुंच जाते हैं, तो प्रमुख या महत्वपूर्ण दोषों का प्राथमिक कारण प्रतिभा की कमी या पता नहीं है, बल्कि संचार की कमी है।
ऐलिस सोमवार की सुबह के आसपास पूछता है और ट्रंक में पुनर्निर्माण सर्जरी करने के लिए यह ठीक है क्योंकि उस हिस्से पर कोई और काम नहीं कर रहा है। बॉब एक घंटे बाद वापस आता है, अपनी छुट्टी से वापस और ऊर्जा से भरा हुआ और फैसला करता है कि वह उसी क्षेत्र में एक नई प्रमुख विशेषता को लागू करने जा रहा है, और एक शाखा से परेशान क्यों है क्योंकि कोई भी कभी भी उस कोड को नहीं छूता है? इसलिए ऐलिस उस "तकनीकी ऋण" का भुगतान करता है, बॉब अपने हत्यारे की सुविधा को लागू करता है जो 6 महीने तक बैक-बर्नर पर रहा है, और जब वे दोनों अपने कोड में जांच करते हैं (ठीक शुक्रवार को समय बंद करने से पहले!), संपूर्ण! टीम को पीछे रहना है और संघर्षों के बुरे सपने के माध्यम से काम करने की कोशिश करनी है जो अगले कुछ हफ्तों में बग और प्रतिगमन के रूप में जारी है।
ऐलिस और बॉब दोनों ने कोडिंग कार्यों पर बहुत अच्छा काम किया, लेकिन वे दोनों एक बुरे निर्णय के साथ शुरू हुए ("ऐसा क्या हो सकता है?")। टीम लीड या प्रोजेक्ट मैनेजर उन्हें पोस्टमार्टम के माध्यम से ले जाता है, और फिर से ऐसा करने से रोकने के लिए एक जाँच सूची तैयार करता है:
- संघर्षों के प्रभाव को कम करने के लिए चेक-इन दैनिक होना चाहिए;
- परिवर्तन जो शाखाओं पर 1 दिन से अधिक समय लगेंगे;
- बग ट्रैकर में सभी महत्वपूर्ण कार्य (गैर-फीचर कार्य जैसे कि रिफैक्टरिंग) को ठीक से ट्रैक और सौंपा जाना चाहिए।
मैं शर्त लगाता हूँ कि, हम में से, यह "प्रक्रिया" सिर्फ सामान्य ज्ञान की तरह लगता है। यह पुरानी टोपी है। लेकिन क्या आप जानते हैं कि बहुत सी छोटी टीमें ऐसा नहीं करती हैं। एक दो सदस्यीय टीम भी स्रोत नियंत्रण के साथ बिल्कुल भी परेशान नहीं हो सकती है। किसे पड़ी है? यह ईमानदारी से आवश्यक नहीं है। टीम के बढ़ने पर ही समस्याएँ होने लगती हैं, लेकिन प्रक्रिया नहीं होती है।
बेशक, प्रक्रिया अनुकूलन प्रदर्शन अनुकूलन की तरह है; यह एक व्युत्क्रम घातीय वक्र का अनुसरण करता है। ऊपर दी गई चेकलिस्ट 80% दोषों को समाप्त कर सकती है, लेकिन जब आप इसे लागू करते हैं, तो आप पाते हैं कि कुछ अन्य चीज़ों में शेष 80% दोष होते हैं। हमारे काल्पनिक-लेकिन-परिचित उदाहरण में विभिन्न बिल्ड वातावरण होने के कारण त्रुटि हो सकती है, जो इस तथ्य के कारण है कि कोई मानक हार्डवेयर नहीं है और डेवलपर्स ओपन-सोर्स लाइब्रेरी का उपयोग कर रहे हैं जो हर 2 सप्ताह में अपडेट हो जाते हैं।
तो आपके पास तीन विकल्प हैं: या तो (ए) हार्डवेयर को मानकीकृत करें और 3-पार्टी लाइब्रेरी के उपयोग को गंभीर रूप से प्रतिबंधित करें, जो कि महंगा है और उत्पादकता में काफी नुकसान पहुंचा सकता है, या (बी) एक बिल्ड सर्वर सेट कर सकता है, जिसे sysadmin समूह और एक से सहयोग की आवश्यकता होती है पूर्णकालिक डेवलपर इसे बनाए रखने के लिए, या (ग) डेवलपर्स को एक मानक वर्चुअल मशीन वितरित करके और डेवलपर्स को उस पर निर्माण करने के लिए कहकर ऐसा करने दें। स्पष्ट रूप से (बी) सबसे अच्छा दीर्घकालिक समाधान है लेकिन (सी) में विश्वसनीयता और तेजी का एक बेहतर अल्पकालिक संतुलन है।
चक्र तो चलता ही रहता है। आपके द्वारा देखी गई प्रत्येक "नीति" को आम तौर पर एक वास्तविक समस्या को हल करने के लिए स्थापित किया गया है। जैसा कि जोएल स्पोल्स्की ने २००० में वापस लिखा था (बिल्कुल अलग विषय पर आप, लेकिन प्रासंगिक फिर भी):
जब आप एक रेस्तरां में जाते हैं और आपको एक संकेत दिखाई देता है जो कहता है कि "नो डॉग्स अलायड", तो आप सोच सकते हैं कि साइन पूरी तरह से वैध है: मिस्टर रेस्त्रां को कुत्तों के आसपास पसंद नहीं है, इसलिए जब उसने रेस्त्रां बनाया तो उसने वह साइन लगाया।
यदि वह सब कुछ चल रहा था, तो "नो स्नेक" संकेत भी होगा; आखिरकार, सांपों को कोई भी पसंद नहीं करता है। और "नो एलीफेंट" साइन, क्योंकि वे बैठने पर कुर्सियों को तोड़ते हैं।
असली कारण यह है कि संकेत नहीं है ऐतिहासिक है: यह एक ऐतिहासिक मार्कर इंगित करता है कि लोगों को रेस्तरां में अपने कुत्तों को लाने के लिए प्रयास करने के लिए प्रयोग किया जाता है।
यह सबसे अधिक है (मैं सभी को नहीं कहूंगा) सॉफ्टवेयर टीम: नीतियां जैसे कि "आपको प्रत्येक बग फिक्स के लिए एक परीक्षण मामला जोड़ने की आवश्यकता है" लगभग हमेशा इंगित करता है कि टीम को ऐतिहासिक रूप से प्रतिगमन के साथ समस्या थी। रेजिमेन्स उन समस्याओं में से एक हैं जो अक्सर अक्षमता के बजाय संचार टूटने के कारण होती हैं। जब तक आप नीति को समझते हैं, आप वैध शॉर्टकट लेने में सक्षम हो सकते हैं (जैसे मुझे 6 छोटे बग्स को ठीक करना था लेकिन वे सभी एक ही विशेषता में थे, इसलिए मैं वास्तव में उन सभी 9 के लिए एक परीक्षण मामला लिख सकता हूं)।
यह बताता है कि प्रक्रियाएँ क्यों हैं, लेकिन यह पूरी कहानी नहीं है। अन्य आधा है:
प्रक्रिया का पालन करना इतना कठिन क्यों है?
यह वास्तव में जवाब देने के लिए सबसे सरल प्रश्न है: यह इसलिए है क्योंकि टीम (या इसका प्रबंधन) दोहराए जाने वाले परिणामों और कम करने वाले दोषों (ऊपर के रूप में) पर केंद्रित है लेकिन उस प्रक्रिया के अनुकूलन और स्वचालन पर पर्याप्त ध्यान नहीं दिया है।
उदाहरण के लिए, मूल प्रश्न में, मुझे कई समस्याएं दिखाई देती हैं:
संशोधन नियंत्रण प्रणाली (सीवीएस) आज के मानकों से विरासत है। के लिए नई परियोजनाओं, यह तोड़फोड़ (SVN), है जो अपने आप जल्दी से इस तरह के मर्क्युरियल (Hg) के रूप में वितरण प्रणाली द्वारा ग्रहण बनकर लगभग पूरी तरह से ले लिया है। एचजी पर स्विच करना ब्रांचिंग और विलय को बहुत सरल बना देगा, और यहां तक कि मेरे काल्पनिक उदाहरण में, दैनिक प्रतिबद्ध आवश्यकता बहुत कम दर्दनाक हो जाएगी। कोड को संकलित करने की भी आवश्यकता नहीं है, क्योंकि भंडार स्थानीय है; - वास्तव में, यदि वे चाहते थे तो लेज़ियर डेवलपर्स भी इस कदम को स्वचालित कर सकते थे, स्वचालित रूप से स्थानीय रिपॉजिटरी में परिवर्तन करने के लिए एक लॉगऑफ़ स्क्रिप्ट सेट कर रहे थे।
वर्चुअल मशीन प्रक्रिया को स्वचालित करने में कोई समय नहीं लगाया गया है। वर्चुअल मशीन पर स्रोत / लाइब्रेरी को प्राप्त करने, कॉन्फ़िगर करने और डाउनलोड करने की पूरी प्रक्रिया 100% स्वचालित हो सकती है। यह एक अप्राप्य प्रक्रिया हो सकती है जिसे आप केंद्रीय सर्वर पर चलाते हैं, जबकि आप अपने स्थानीय मशीन पर बग फिक्स पर काम करते हैं (और केवल स्वच्छ निर्माण का आश्वासन देने के लिए वीएम का उपयोग करते हैं)।
दूसरी ओर, एक निश्चित पैमाने पर वीएम-प्रति-डेवलपर समाधान मूर्खतापूर्ण होने लगता है और आपके पास बस एक कंटीन्यूअस इंटीग्रेशन सर्वर होना चाहिए। यही कारण है कि वास्तविक उत्पादकता लाभ इसमें आते हैं, क्योंकि यह (ज्यादातर) व्यक्तिगत डेवलपर्स को बिलकुल चिंता करने से रोकता है। क्लीन वर्चुअल मशीन स्थापित करने के बारे में चिंता करने की आवश्यकता नहीं है क्योंकि बिल्ड सर्वर हमेशा साफ रहता है।
प्रश्न का शीर्षक ("सभी चरणों के साथ परीक्षण मामला") का अर्थ है कि कुछ मैनुअल परीक्षण चल रहा है। यह, फिर से, अपेक्षाकृत कम काम के भार वाली छोटी टीमों के लिए काम कर सकता है, लेकिन बड़े पैमाने पर इसका कोई मतलब नहीं है। प्रतिगमन परीक्षण स्वचालित हो सकते हैं और होने चाहिए; कोई "चरण" नहीं हैं, बस एक वर्ग या विधि इकाई / एकीकरण परीक्षण सूट में जोड़ा गया है।
कहने की जरूरत नहीं है कि बुगज़िला से एक नए (बेहतर) बग ट्रैकिंग सिस्टम पर जाने से अनुभव का वह हिस्सा बहुत कम दर्दनाक होगा।
कंपनियों को सिर्फ इसलिए सस्ता या बेवकूफ नहीं बनाया जाता क्योंकि उन्होंने इन समस्याओं को हल नहीं किया है। वे सभी जानते हैं कि वर्तमान प्रक्रिया काम करती है , और कुछ मामलों में वे इसके बारे में कुछ भी बदलने के लिए जोखिम-से-प्रभावित और अनिच्छुक हैं। लेकिन वास्तव में उन्हें केवल लाभों के बारे में आश्वस्त होने की आवश्यकता है ।
यदि डेवलपर्स एक सप्ताह तक सभी गैर-कोडिंग कार्यों पर अपना समय ट्रैकिंग करते हैं, तो आप इसे आसानी से जोड़ सकते हैं, प्रबंधन को दिखा सकते हैं कि (उदाहरण के लिए) मर्क्यूरियल के उन्नयन में एक शून्य-पूंजी, 100-मानव-घंटे का निवेश होगा। मर्ज संघर्षों को हल करने पर प्रति सप्ताह 10 आदमी-घंटे तक समाप्त हो जाते हैं, फिर वह 10 सप्ताह का भुगतान होता है और वे लगभग निश्चित रूप से इसके लिए सहमत होंगे। बिल्ड सर्वर (CI) या बेहतर बग ट्रैकिंग के साथ एक ही विचार।
पुनरावृत्ति करने के लिए: टीमों ने अभी तक इन कामों को नहीं किया है क्योंकि किसी ने भी प्रबंधन को आश्वस्त नहीं किया है कि यह आज करना पर्याप्त है । इसलिए पहल करें और इसे लागत-लाभ समीकरण में बदल दें; यह पता लगाएं कि उन कार्यों पर कितना समय व्यतीत किया जाता है जिन्हें न्यूनतम जोखिम के साथ सरल / स्वचालित किया जा सकता है, और एक नए टूल या तकनीक के ब्रेक-ईवन पॉइंट और अंतिम भुगतान की गणना करता है। यदि वे अभी भी नहीं सुनते हैं, तो आप पहले से ही जानते हैं कि आपके शेष विकल्प क्या हैं।
यदि डेवलपर्स ने एक सप्ताह का समय सभी गैर-कोडिंग कार्यों पर अपने समय को ट्रैक करने में बिताया, तो आप इसे आसानी से जोड़ सकते हैं, प्रबंधन दिखा सकते हैं ... और इसे लागत-लाभ समीकरण आदि में बदल सकते हैं ...
ऊपर का हिस्सा आगे विस्तार के लायक दिखता है।
मैं पुष्टि कर सकता हूं कि यह काम करता है। प्रोग्रामर्स ने मेरे द्वारा काम की गई परियोजनाओं में से कुछ में इसका इस्तेमाल किया और हर बार इसे वांछित बदलावों के लिए प्रेरित किया।
मेरी समग्र धारणा थी कि अगर सही किया जाता है, तो यह चाल प्रबंधन की अज्ञानता और जड़ता की काफी भारी मात्रा को खत्म कर सकती है ।
मैं नोट करना चाहते कि हालांकि कंपनी जहां हम (डेवलपर्स) इस तरह का सहारा लेना पड़ा होगा DIY दृष्टिकोण बहुत अपरिपक्व आईटी के लिहाज से किया गया था। अधिक अनुभवी सॉफ्टवेयर विक्रेताओं में मैंने ऐसा सामान देखा, जो ज्यादातर खुद प्रबंधकों द्वारा किया जाता था। और एक नियम के रूप में वे प्रोग्रामर की तुलना में उस पर अधिक उत्पादक थे। बहुत अधिक उत्पादक।