आप उन कार्यों के लिए समय का अनुमान कैसे लगा सकते हैं जिनमें मुख्य रूप से किसी समस्या का पता लगाना शामिल है?


56

हालांकि एक अनुभवी डेवलपर के लिए यह अनुमान लगाना अपेक्षाकृत संभव है कि कोड को लागू करने में कितना समय लगेगा जब पैटर्न और समस्या को हल करने वाला कोड अच्छी तरह से समझ में आता है, तो आप एक अच्छा अनुमान कैसे लगा सकते हैं, जब अंतिम लक्ष्य अच्छी तरह से समझा जाता है, कार्यान्वयन 95% सैद्धांतिक / समस्या समाधान है और कार्यान्वयन की बहुत कम मात्रा है?

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

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


आप किस प्रकार के अनुमान दे रहे हैं? अगर मैं आपसे पूछता हूं "मुझे एक सुविधा चाहिए जो क्लाइंट एबीसी के लिए XYZ करता है" तो आप किस प्रकार का उत्तर देते हैं? ध्यान दें कि मैं जो भी उत्तर देता हूं, वह सॉफ़्टवेयर आकलन

मैं विशेष रूप से कार्य को पूरा करने में लगने वाले समय की मात्रा का अनुमान लगाने की कोशिश कर रहा हूं। तो यह कुछ ऐसा होगा जैसे "सभी कुछ विशेष प्रकार के कोड निकालें" या "सभी कोड बदलें जो एबीसी की तरह व्यवहार करने के लिए एक्सवाईजेड की तरह कुछ करता है।"
एजे हेंडरसन

ठीक है ... तो अगर मैं आपसे पूछता हूं "XYZ की कार्यक्षमता बदलें ताकि यह एबीसी करता है" ... आप किस प्रकार का उत्तर देते हैं? क्या आप कहते हैं "शायद एक सप्ताह" या क्या आप "5 दिन" कहते हैं या क्या आप कहते हैं "1 दिन और 10 दिनों के बीच, मैं जो कुछ भी पाता हूं, उसके आधार पर?"

मैं आमतौर पर 4 दिनों और 8 दिनों (सटीक वांछित की तरह) के बीच का अनुमान देने की कोशिश करता हूं, हालांकि अक्सर यह 4 दिन और 3 सप्ताह की तरह कुछ कहना अधिक यथार्थवादी होगा। मैं सीमा को कम करने के तरीकों का पता लगाने की कोशिश कर रहा हूं।
एजे हेंडरसन

1
@gnat स्पष्टीकरण के लिए धन्यवाद, हालांकि मेरा मानना ​​है कि मेरा प्रश्न पहले से ही स्पष्ट है क्योंकि अन्य उत्तर यह समझने के लिए प्रतीत होते हैं कि क्या पूछा जा रहा है और मैं ईमानदारी से किसी भी तरह से प्रश्न को नहीं देख सकता हूं कि प्रश्न को चिह्नित प्रश्न का एक ठिकाना माना जा सकता है। इस प्रकार मुझे लगता है कि एक टिप्पणी पर्याप्त है और आगे परिवर्तन से प्रश्न का लाभ नहीं होगा।
एजे हेंडरसन

जवाबों:


41

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

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

पहली बात एक अनुमान देना है। एक अनुमान ही एक संख्या नहीं है - एक प्रतिबद्धता है। "एबीसी को कितना समय लगेगा" -> "लगभग 5 दिन" का अर्थ है कि इसका लगभग 5 दिन। हालांकि, एक अच्छा अनुमान एक सीमा है जहां आप 90% आश्वस्त हैं कि आपके पास उस सीमा में होगा। यदि आपके कहने का अर्थ है "मुझे 90% विश्वास है कि यह 1 और 5 दिन दांव लगाएगा" तो कहें कि। "मुझे नहीं लगता कि यह 1 से 10 दिनों के बीच काम करेगा, इसलिए 5 दिन शायद औसत के बारे में हैं" - एक अनुमान नहीं है और आप समय का 50% गलत होंगे।

खैर, समय का 50% या अधिक, प्रोग्रामर कार्य समय के लिए कुख्यात अंडरस्टीमेटर्स हैं।

अनिश्चितता के शंकु पर विचार करें:

से छवि http://www.construx.com पर पूरा लेख - http://www.construx.com/Thought_Leadership/Books/The_Cone_of_Uncertainty/

एहसास है कि उस रेंज में पहला अनुमान 16x है। यह कहने के लिए कि "मुझे लगता है कि यह एक दोपहर और दो सप्ताह के बीच ले जाएगा" - लेकिन आप अभी तक नहीं जानते हैं। जैसा कि आप डिजाइन के साथ थोड़ा आगे बढ़ते हैं, रेंज 4x तक नीचे आ जाती है। इसका मतलब यह नहीं है कि इसमें एक सप्ताह लगेगा, इसका मतलब है कि आप इसके बजाय "थोड़ा सा देखने के बाद, यह तीन सप्ताह के बीच ले जाएगा" - हाँ, अनुमान ऊपर चला गया, लेकिन अनुमान की सीमा भी गई नीचे।

आपके द्वारा दिए गए प्रत्येक अनुमान के साथ, आपको 90% सुनिश्चित करने की आवश्यकता है कि अनुमान उस सीमा के भीतर है। आप गलत हो सकते हैं - उस सीमा से 10% नीचे गिर जाएगा।

रहे हैं कई परियोजनाओं के आकार का अनुमान तरीके। पिछली परियोजनाओं की तुलना में, एक प्रॉक्सी का उपयोग करके (मुझे लगता है कि यह कोड की 1000 लाइनें लेगा जो लिखने में लंबा समय लेगा), फ़ंक्शन बिंदुओं का उपयोग करके (LOC में बदलने के लिए ...), कई लोगों से अनुमान प्राप्त करना और फिर। इसे पुन: परिष्कृत करते हुए ... कुछ परियोजनाओं के लिए काम करते हैं, कुछ अन्य परियोजनाओं के लिए काम करते हैं।

इस पुस्तक का एक बहुत महत्वपूर्ण अध्याय जिसका मैंने शीर्ष # 23 पर उल्लेख किया है, जो अनुमान की राजनीति और प्रबंधकों और अधिकारियों के साथ व्यवहार करता है।

एक अनुमान के लिए महत्वपूर्ण है कि इसे थोड़ा काम करने के बाद इसे परिष्कृत करने की पुनरावृत्ति प्रक्रिया।

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


अनुमानों में कुछ विचार की आवश्यकता होती है - कफ अनुमानों को न दें। जब आप इसके बारे में थोड़ा सोचते हैं, तो इसकी तुलना में इनमें अक्सर भारी त्रुटियां होती हैं ।

से कैसे प्रतिक्रिया करने के लिए जब आप एक अनुमान के लिए कहा जाता है?

क्या कहना है जब एक अनुमान के लिए पूछा

आप कहते हैं "मैं तुम्हारे पास वापस आऊंगा।"

आप लगभग हमेशा बेहतर परिणाम प्राप्त करते हैं यदि आप इस प्रक्रिया को धीमा करते हैं और इस खंड में वर्णित चरणों से गुजरने में कुछ समय बिताते हैं। कॉफी मशीन पर दिए गए अनुमान (जैसे कॉफी) आपको परेशान करने के लिए वापस आएंगे।

सॉफ्टवेयर अनुमान के अध्याय 4 से:

चित्रा 4-8 कफ अनुमानों से औसत त्रुटि

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


1
यह उत्तर दिलचस्प है और इसमें बहुत सारी योग्यता है, लेकिन संभवतः अधिक कार्यान्वयन आधारित कार्यों का अनुमान लगाने के बारे में एक प्रश्न का उत्तर दे रहा है, बजाय इसके कि ब्रेनवेव होने में कितना समय लगने वाला है, इस सवाल के बजाय ....
माइकल शॉ

@Ptolemy किसी भी तरह से - यह कार्यान्वयन या अवधारणा हो, इसका एक अनुमान है। मैं अनुमान लगा सकता हूं कि यह कितना समय लेगा कि मुझे 90% विश्वास है कि सीमा कवर करती है कि अंतिम परिणाम क्या होगा। यह एक बहुत ही विस्तृत श्रृंखला हो सकती है, लेकिन एक अनुमान भी बहुत अधिक है - अब तक बहुत से लोग "6-8 सप्ताह" का अनुमान देते हैं और फिर उस अनुमान को याद करते हैं क्योंकि यह बहुत संकीर्ण था - उन्होंने 90% आत्मविश्वास के बजाय 30% आत्मविश्वास दिया। यह किसी भी कार्य का अनुमान लगाने के साथ अनुमान लगाने, पुनरावृत्ति शोधन और सामान्य नुकसान पर कौशल के साथ काम करता है क्योंकि वे समस्या को हल करने के लिए काम करने के लिए आवश्यक पहला कौशल हैं।

15

बॉस : एजे, हमारे पास 3 कुत्ते, 2 खरगोश, एक गुलेल और एक नन है। हमें 20 फीट की दीवार पर और दूसरी तरफ झील में सभी 7 (हाँ, गुलेल भी) पाने के लिए एक रास्ता खोजने की आवश्यकता है, बिना कुत्तों को खाए और नन को डुबोए बिना। समाधान के साथ आने में आपको कितना समय लगेगा?

देखिए, किसी समस्या को हल करने में कितना समय लगेगा, यह अनुमान लगाना अलग-अलग लोगों को अलग-अलग समय लगता है। यदि आपके पास समान समस्याओं को हल करने का इतिहास है, तो आप अनुमान लगा सकते हैं कि इससे पहले आपने कितने समय में इसे लिया है। यदि आप नहीं करते हैं, तो आप अनुमान नहीं लगा रहे हैं, आप सिर्फ अनुमान लगा रहे हैं।

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

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

जब मैं ग्राहक के लिए एक समाधान डिजाइन कर रहा हूं, तो मैं तब तक अनुबंध पर हस्ताक्षर नहीं करूंगा जब तक कि मेरे पास सामान्य डिजाइन के लिए पर्याप्त नहीं है कि मुझे पता है कि समाधान कैसा दिखेगा और परियोजना को कितना समय लगेगा। इसका मतलब यह है कि मुझे प्रारंभिक डिजाइन कार्य करने का जोखिम है जो मुझे भुगतान नहीं मिलता है (यदि परियोजना नहीं गुजरती है), लेकिन यह काम किए जाने के लिए काफी कम बिलिंग के जोखिम से बेहतर है ।


9
हालांकि इस मामले में, डिजाइन 90% काम का लगता है। और यह कहते हुए कि "90% काम पूरा होने के बाद मैं आपको एक अनुमान दूंगा" शायद ही कोई खुश हो।
मोआ

1
कैसे के बारे में "डिजाइन काम का 90% है और मुझे नहीं पता कि डिज़ाइन के पूरा होने तक कितना समय लगेगा। अब आप एक अनुमानित सीमा दे सकते हैं, डिज़ाइन शुरू कर सकते हैं और आपको अनुमानों में परिवर्तन पर अद्यतित रख सकते हैं।" जैसा कि मैंने समाधान के बारे में अधिक सीखा है? "
रोब बैली

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

4

मैं आपको निम्नलिखित के साथ टायलर और माइकलटी के जवाबों के बीच में कुछ करने की कोशिश करने का सुझाव दूंगा :

  • 3 या 4 चरणों में किए जाने वाले कार्य को विभाजित करें। चरण होना चाहिए:
    1. समस्या विश्लेषण
    2. समाधान प्रोटोटाइप
    3. वास्तविक विश्व समाधान
    4. आउटपुट मूल्यांकन (परीक्षण)
  • केवल चरण 1 (विश्लेषण) के लिए अपने अनुभव के आधार पर या आपके प्रबंधन के लिए चरण 1 + 2 (विश्लेषण + प्रोटोटाइप) पर एक अनुमान प्रदान करें। फिर, उन्हें चरण 3 + 4 के लिए एक अनुमान प्रदान करें जब समस्या 1 और 2 चरण में हो जाती है (या कम से कम इतना उन्नत हो कि आप अपने अनुमान पर विश्वास कर सकें)।

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

यह वही नहीं हो सकता है जो प्रबंधन चाहता है, लेकिन मेरा मानना ​​है कि अनुमानों के साथ आने के लिए हमेशा बेहतर होता है कि आप वास्तव में मिलेंगे।


+1 आपको पता नहीं है कि अभी तक कितना समय लगेगा, लेकिन आप कह सकते हैं कि "मेरे एक्स के बारे में सोचने के लिए समय की मात्रा दें और मैं आपको वापस मिलूंगा" - एक घंटा, एक दिन, एक सप्ताह, जो भी हो।
रोरी हंटर

1

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

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

दूसरा प्रश्न मैं पूछूंगा कि समाधान के बारे में सोचने में और क्या जानना उपयोगी होगा? यह वास्तव में दोहरी जाँच का एक तरीका है जिसे हम वास्तव में एक समाधान के साथ आने के लिए पर्याप्त जानते हैं जो स्वीकार्य होगा। यह वास्तव में खोजने वाले कार्यों की एक श्रृंखला उत्पन्न कर सकता है जो समाधान को बेहतर ढंग से परिभाषित करने में मदद करते हैं, जिनमें से प्रत्येक को आमतौर पर परिभाषित करना और अनुमान लगाना काफी आसान होता है।

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

फिर, वास्तविक कार्य संभव समाधानों, कार्यान्वयन और दृष्टिकोणों के बारे में सोचना होगा, और एक निश्चित समयमान रखना होगा जिसमें उन्हें वापस रिपोर्ट करने की आवश्यकता हो।

जब वे वापस रिपोर्ट करते हैं, तो आपके पास संभावित समाधानों का एक व्यापक सेट प्राप्त करने के बारे में एक विकल्प होता है, किसी समाधान को लागू करने पर आगे बढ़ना, या प्रतिबिंबित करना, क्योंकि समाधान अभी भी स्पष्ट रूप से पर्याप्त रूप से परिभाषित नहीं है।


1

शोध के सवालों के साथ जहां यह स्पष्ट नहीं है कि सभी में एक उत्तर है, अकेले स्पष्ट विचार करें कि क्या करने की आवश्यकता है, मैं आमतौर पर शुरुआत के रूप में उस पर एक्स राशि खर्च करने का प्रस्ताव करता हूं।

"मुझे पता नहीं है कि क्या यह संभव है, लेकिन मैं इसे शोध करने में दो दिन बिता सकता हूं। यह शायद हमें कोई समाधान नहीं देगा, लेकिन शायद मैं कुछ चीजों को नियंत्रित करने में सक्षम होऊंगा और मुझे शायद एक विचार मिलेगा। अगले कुछ ठोस कदम क्या हो सकते हैं और किस तरह के समय के निवेश का उनका मतलब होगा। तब हम तय कर सकते हैं कि क्या यह एक और कदम उठाने के लिए समझ में आता है। "

इसलिए अनिश्चितता को दूसरी दिशा में रखें - अनुमान बिल्कुल सटीक है (मैं दो दिन बिताऊंगा), यह अभी बहुत अनिर्दिष्ट है कि तब तक क्या हासिल होगा।

टाइमबॉक्सिंग, मूल रूप से।

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