कैसे समझा जाए कि किसी बड़ी सॉफ्टवेयर परियोजना के लिए आवश्यक समय का अनुमान लगाना कठिन है?


37

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

मैं ऐसे व्यक्ति को कैसे समझाऊं जो सॉफ्टवेयर डेवलपर नहीं है ?


5
जिज्ञासु: नॉन-सॉफ्टवेयर डेवलपर्स को यह समझाते हुए एक जूनियर डेवलपर के रूप में आपका काम क्यों है? क्या आपके कार्य समूह या प्रबंधन श्रृंखला में कोई ऐसा व्यक्ति है जो आपको समझाने की प्रक्रिया में आपकी सहायता कर सकता है कि आपको इसे समझाने की आवश्यकता है?
एलेक्स फेइमैन

@ एलेक्स: नहीं, यह एक ही कंपनी का व्यक्ति नहीं है। स्टार्टअप करने के लिए विचारों वाला व्यक्ति। और मैं एकमात्र डेवलपर हूं जिसके साथ उसका संपर्क है।
जोनास



जवाबों:


48

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

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


अधिक अज्ञात का मतलब अधिक अनिश्चितता है।
सर्फास

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

8
@qes, मैं सार्वजनिक परिवहन का उपयोग, इसलिए मैं 10 के बारे में% सटीकता के साथ बता सकते हैं जब मैं घर आ जाएगा - मुझे लगता है कि सबसे दप परियोजना प्रबंधकों acccuracy की ;-) इस स्तर के साथ खुशी होगी
पीटर Török

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

18

क्या आपने उस व्यक्ति को समझाया है? आप पेशेवर सॉफ़्टवेयर इंजीनियर हैं, इसलिए जिस व्यक्ति के लिए आप सॉफ़्टवेयर का निर्माण कर रहे हैं, उसे आपके ज्ञान और प्रतिक्रिया पर विचार करना चाहिए जब यह सॉफ़्टवेयर सिस्टम के डिज़ाइन और कार्यान्वयन की बात आती है।

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

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

As a junior developer, start tracking estimates and actual time now. You might be interested in reading about the Personal Software Process developed at the Software Engineering Institute. The core PSP books are A Discipline for Software Engineering, PSP: A Self-Improvement Process for Software Engineers, and Introduction to the Personal Software Process. I believe that Introduction to the Personal Software Process would cover the topics that you would find most helpful. I think it's generally overkill for most developers, but it does have some good ideas and good practices that can be pulled out and used in order to improve personal productivity and hone various skills (including estimation) that you'll continually use over your career.

If you will be doing a lot more work in estimation, I would highly recommend two of Steve McConnell's books: Software Estimation: Demystifying the Black Art (focuses on estimation as an art and science) and Rapid Development: Taming Wild Software Schedules (general software engineering process and project management topics).


7

Refer to literature. There's a huge pile of complex and often contradictory material, which, as proven by practice (experiments), doesn't work as expected. At least academics are swayed by a pile of books.

Must-read: http://en.wikipedia.org/wiki/The_Mythical_Man-Month

The Mythical Man-Month: Essays on Software Engineering is a book on software engineering and project management by Fred Brooks, whose central theme is that "adding manpower to a late software project makes it later". This idea is known as Brooks' law, and is presented along with the second-system effect and advocacy of prototyping.

Brooks' observations are based on his experiences at IBM while managing the development of OS/360. He had added more programmers to a project falling behind schedule, a decision that he would later counter-intuitively conclude to have delayed the project even further. He also made the mistake of asserting that one project — writing an ALGOL compiler — would require six months, regardless of the number of workers involved (it required longer). The tendency for managers to repeat such errors in project development led Brooks to quip that his book is called "The Bible of Software Engineering", because "everybody quotes it, some people read it, and a few people go by it." The book is widely regarded as a classic on the human elements of software engineering...


2

Find out what they plan on doing with this estimate. In their mind they want to know if it will take months or years and you're trying to get the exact hours (Typical Engineer).

See if you can work on a piece of the project and then put together a better estimate if needed.

If they keep pushing, you're going to be forced to itemize as much of the tasks as you can an apply a time frame. Tell them you will let them know as soon as you see anything that may affect the estimate and make adjustments. People usually try to avoid surprises.


1

I've met people who claim they can estimate software, but I don't know how they do it. Neither have any of them been able to explain how they do it.

As a consultant, my clients often require me to work on a fixed-bid basis. Thus I need to estimate so that I can prepare a realistic bid. I have never once succeeded at this. One would think I would overbid as often as I underbid, but that is never the case. The result is that I often lose a lot of money on my contracts, and end up earning a lot less than I would if I were working for a company as a regular employee.

I've been searching for many years for a book that would teach me how to estimate software, but I have yet to find one.

As for explaining this to someone who is not a coder. You could point out that no one in the industry is consistently able to meet their estimates. It happens all the time that new software products are preannounced, only to ship months or years after the date that was originally announced.

If a big company like Microsoft can't figure out how to estimate the time that goes into producing its own products, how can I?

Whether I'm being paid by the hour or by the job, my clients always expect me to provide these estimates. I don't know how they expect me to produce them when such estimation is not taught anywhere, and I have no rational basis for my estimates.


1
Steve McConnell's book Software Estimation: Demystifying the Black Art is really good on explaining how software engineers estimate. You can learn techniques and tools, but the only way to become good at estimation is to continually estimate, learn from your estimates, and repeat. As for no one consistently being able to meet estimates, there are organizations that consistently come within a couple of percentage points on their estimates - McConnell's book talks about organizations (often CMMI Level 4 or 5, with continuous improvement and detailed tracking) that achieve this consistently.
Thomas Owens

As for your problem with bad estimates. Do you keep track of your estimate vs. the actual time to completion? If so, determine by what factor you underestimate and multiply all your estimates by that number.
kubi


0

Estimation of the entire project's time is usually performed by the project manager not the programmer.

You can build an argument based on the fact that the project manager has the full list of tasks required. Without this list, any estimation will be a 'bad' guess.

Also, time depends on many factors such as how many people are available and the scope of requirements, which you did not say you have. Architecture alone is not enough.


Depending on the project management methodology, the PM might not even have the full list of tasks. In something like rolling wave project management, there's often a nebulous bucket that describes a very high level of task that's generally too large to estimate with any decent confidence level. As previous tasks are finished, tasks part of ths bucket are more well defined and can be estimated. In agile methods, tasks are frequently added, removed, or reprioritized at various points, again making it more difficult to estimate long-term milestones beyond a couple of iterations.
Thomas Owens

0

Another point you could make is that software engineering is still in its infancy compared to other fields of engineering, and has not matured enough for estimable development techniques to have appeared.

Software engineering is also in a continuous state of flux. By the time a technology has been around enough to be considered mature, it is often abandoned in favor of some new technology. That prevents anyone from gaining enough experience with any one technology to be able to produce reliable estimates.

Contrast this with construction estimation. That's a very well-understood problem, not just because contracts are awarded based on bids, but because humanity has been building things since the dawn of civilization.


1
Software engineering is still younger (by far) than most other engineering disciplines at an age of 42 years. However, there are a number of mature estimation techniques and tools. Wideband delphi (developed in the 1970s, made popular by Barry Boehm's Software Engineering Economics in 1981), function points (1979), SEER-SEM (roots in the 1960s), proxy-based estimation (used in the PSP, developed in 1994 at the SEI), and COCOMO (1981) and COCOMO II (1997). In a field that's only 42 years, there are already nearly 40 years of work done in estimation of projects.
Thomas Owens
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.