TE
科技回声
首页24小时热榜最新最佳问答展示工作
GitHubTwitter
首页

科技回声

基于 Next.js 构建的科技新闻平台,提供全球科技新闻和讨论内容。

GitHubTwitter

首页

首页最新最佳问答展示工作

资源链接

HackerNews API原版 HackerNewsNext.js

© 2025 科技回声. 版权所有。

Software Development Estimates: Where Do I Start?

143 点作者 clarkm超过 11 年前

26 条评论

biot超过 11 年前
An analogy I like to use: &quot;Here&#x27;s a book of sudoku &#x2F; crossword puzzles. How long would it take you to solve all of them?&quot;<p>Estimating this is similar to estimating a software system. You&#x27;ve seen puzzles like them before, but you don&#x27;t know the difficulty level of each or which ones have tricky clues that cause you to rack your brain trying to find the solution. It also nicely illustrates the 10x effect: some puzzle solvers breeze through them while others take forever.<p>If you could break a software system down into a rigorous formal specification that could be precisely estimated, it would be possible to use that specification to build it automatically. Then that shifts the estimation up the ladder of abstraction to one where you estimate the time to create the rigorous formal specification.
评论 #6391934 未加载
评论 #6393545 未加载
swanson超过 11 年前
Most people would agree that practice makes perfect, right? I think a big issue with software estimation is that it is hard to get practice. I&#x27;d done full project estimates for 4-6 projects in 3 years of working professionally. Compared to the amount of practice I have writing code, this is nothing. How can I ever hope to get good at something if I only do it once every 3-6 months and it might take 2 years to get feedback on if my final number was close to the actual cost? And unlike other skills, I can&#x27;t practice on my own or take a course (I&#x27;ve never seen an open source project that did round-trip estimates, maybe that&#x27;s something to try out...)<p>Another issue is when you have an &quot;indirect estimate&quot; - basically I will estimate the work, but someone else is the one that ends up doing the project. If you aren&#x27;t careful to consider who will be doing the work, you might estimate too low (if you are an expert and the work is done by a bunch of new hires).<p>And none of this even touches on misinterpreting client demands, scope creep, dev team turn-over, or often neglected timesinks like documentation and meetings.
评论 #6391005 未加载
评论 #6392274 未加载
wpietri超过 11 年前
My main trick these days for this problem is to discourage estimation by pointing out the costs of it and putting the burden on the requesters.<p>One great way to do that is to release early and often, allowing stakeholders to change plans in response to what they&#x27;ve learned. Instead of doing the work of (re-)estimating a bunch of stuff every week, their focus on what&#x27;s actually going on lets them stop obsessing about arbitrary dates and semi-fictional plans.<p>People very rarely need estimates. They want a sense of control. They want to manage risk. They want to convince people that money is being well spent. They want to avoid looking like fools. If you solve those problems without using estimates, people generally stop caring.
评论 #6391587 未加载
评论 #6391404 未加载
评论 #6392303 未加载
评论 #6392275 未加载
annnnd超过 11 年前
Not sure where I first heard this (and it applies more to single developers), but I find this very true: when estimating the time needed to perform something, try imagining how much time ANOTHER person would need. In general we underestimate the amount of work when thinking in first person; we are much more accurate when assessing the ability of others.
brudgers超过 11 年前
Knowing a bit about estimating construction, and a bit more about the estimating of design which is more akin to software, there&#x27;s more to the ability to execute according to a time table than the author gives credit...and the fact that the process can be separated between design and construction gives a clue.<p>Mature processes for delivering construction start with a budget and something called a program - an architectural program being a design and implementation independent description of the project&#x27;s components and the relationships among and between those components.<p>Then there is the matter of age. Architects aren&#x27;t worth a shit until they hit about sixty. Those running big designs have decades of experience. In the US the median age for initial licensure is 33. It&#x27;s not twenty-something&#x27;s freshly out of college, or even parents with grade schoolers organizing the process.<p>Then, in the US, there tend to be standard contracts which describe industry standard milestones and acknowledge that nobody really knows how things will change over what is often a multi-year cycle. Buildings are delivered reasonably on time and within budget because the process of contracting for the work doesn&#x27;t require reinvention - even the plumber&#x27;s subcontract is a standard form and tied to CSI format specifications which are tied to industry standards and to ANSI materials standards and the building codes.<p>Nobody roles their own using the coolest new fad. It&#x27;s Java, not Haskell. If you read Hamurabi, you&#x27;ll see the source of those traditions.
评论 #6391752 未加载
philbarr超过 11 年前
One thing my Dad always told me about software estimates: &quot;Take the estimate, double it, and increase the time unit by one. So if they tell you it&#x27;s a couple of days effort, that&#x27;s really four weeks...&quot;
评论 #6390687 未加载
评论 #6390776 未加载
DanielRibeiro超过 11 年前
A gret book on that is <i>Agile Estimating and Planning</i> by Mike Cohn[1].<p>Having that said, there has been a lot of controversy on the value of estimates recently:<p><i>Estimation is Evil</i>[2]<p><i>Purpose of Estimation</i>[3]<p>I believe their TL;DR comes from the second one:<p><i>For me, estimation is valuable when it helps you make a significant decision</i><p>[1] <a href="http://www.amazon.com/Agile-Estimating-Planning-Mike-Cohn/dp/0131479415" rel="nofollow">http:&#x2F;&#x2F;www.amazon.com&#x2F;Agile-Estimating-Planning-Mike-Cohn&#x2F;dp...</a><p>[2] <a href="http://pragprog.com/magazines/2013-02/estimation-is-evil" rel="nofollow">http:&#x2F;&#x2F;pragprog.com&#x2F;magazines&#x2F;2013-02&#x2F;estimation-is-evil</a><p>[3] <a href="http://martinfowler.com/bliki/PurposeOfEstimation.html" rel="nofollow">http:&#x2F;&#x2F;martinfowler.com&#x2F;bliki&#x2F;PurposeOfEstimation.html</a>
jacques_chester超过 11 年前
&gt; <i>The gist of why estimates are hard: every new piece of software is a machine that has never been built before.</i><p>I am tired of the argument that we unique snowflakes amongst all professions and that consequently we deserve special treatment. We aren&#x27;t. <i>All</i> professions deal with uncertainty and most of them deal with it deliberately[1]. Throwing your hands in the air because a perfect prediction is impossible is just silly; an estimate is <i>by definition</i> an <i>uncertain</i> statement of an <i>unknown</i> variable.<p>Estimating software can be difficult because there are many points at which complexity can be multiplied (McConnell&#x27;s example of the requirement &quot;validate phone numbers&quot; shows a span of minutes to months)[2]. But when you see very wide ranges on an estimate, it&#x27;s a signal that the problem is poorly understood.<p>Outside of <i>genuinely novel research</i>, improving estimation accuracy is possible and valuable. And how often do we invent publishable new algorithms for graph traversal?<p>I have skin in the estimation game, as I am currently developing a tool for performing estimates[3]. I&#x27;ve also been researching the topic of estimations generally.<p>I&#x27;m mostly amazed at how people in my profession try it once, get an inaccurate result, and then decide -- &quot;That&#x27;s it! It&#x27;s impossible! I tried it one time and it didn&#x27;t work!&quot;. If you go into a gymnastics club and you can&#x27;t do a backflip, that doesn&#x27;t mean backflips are impossible in principle. It means <i>you</i> can&#x27;t do it. Estimation is a skill too.<p>[1] See Petroski&#x27;s <i>To Engineer is Human</i>, I reviewed it here: <a href="http://chester.id.au/2013/07/07/review-to-engineer-is-human-the-role-of-failure-in-successful-design/" rel="nofollow">http:&#x2F;&#x2F;chester.id.au&#x2F;2013&#x2F;07&#x2F;07&#x2F;review-to-engineer-is-human-...</a><p>[2] In <i>Software Estimation: Demystifying the Black Art</i>.<p>[3] <a href="http://confidest.com/" rel="nofollow">http:&#x2F;&#x2F;confidest.com&#x2F;</a>
评论 #6391238 未加载
评论 #6391017 未加载
评论 #6391512 未加载
jacques_chester超过 11 年前
My favourite book on software estimation is McConnell&#x27;s <i>Software Estimation: Demystifying the Black Art</i>.<p>As usual he takes a vast body of literature and boils it down into a chatty, usable book. The tables and checklists are worth the sticker price on their own.
评论 #6391031 未加载
zackbloom超过 11 年前
My key advice is to not pay attention to the minutia of the task, if you do you&#x27;ll always underestimate. A better method is to forget the specifics and ask yourself &#x27;If a buddy told me he was doing this, how long would I guess it would take?&#x27;. We have more experience hearing about projects and how long they took then we do really estimating the duration of creative tasks by reduction.
评论 #6392524 未加载
bcantrill超过 11 年前
Completely agreed -- and I hit on the same themes on a talk on software engineering management (and its pathologies) at Surge on Friday[1]. The date fetishization so common in software engineering management is a direct result of non-technical management, who do not understand that every piece of software is solving a heretofore unsolved problem (even if a teensy tiny one) -- and that the unknowns often cause software to take much longer to build than one would anticipate. This gives a kind of CAP analogue for software: schedule, quality, features -- pick only two.<p>[1] <a href="http://www.slideshare.net/bcantrill/surge2013" rel="nofollow">http:&#x2F;&#x2F;www.slideshare.net&#x2F;bcantrill&#x2F;surge2013</a>
jwilliams超过 11 年前
There is a way to get a perfect estimate - and that is to build it and see how long it takes.<p>Everything else is using an abridged model is short-cut the process. However, I think this is an important point. Estimating is somewhat akin to actually building the end-product.<p>The reason I find this important is that the most common spiral of death I see is re-estimation. You take on something unrealistic, plough on regardless, realise too late, then you re-estimate. The re-estimation causes a project stall and takes time. The end result being you have less time.. Few months later you&#x27;re in the same boat again (repeat).. Big organisations are really prone to this.
评论 #6391090 未加载
xarien超过 11 年前
&quot;The gist of why estimates are hard: every new piece of software is a machine that has never been built before.&quot;<p>This statement is simply not true. Every new piece of software can be broken down to pieces that are very similar to other software that had been done before. This is actually the secret to providing a good estimate.<p>What generally screws up estimates are complications that arise. Much of it actually has to do with pre-existing code as opposed to new code. If you were to build something from scratch and had a team of experienced engineers, I&#x27;d bet that you&#x27;d get a pretty damn accurate estimate.
评论 #6391489 未加载
评论 #6391869 未加载
DanielBMarkham超过 11 年前
&quot;...The gist of why estimates are hard: every new piece of software is a machine that has never been built before...&quot;<p>Yes, and that&#x27;s why a lightweight, repeatable estimation process beats every other way of doing it. As you continue to estimate, you create and refine a mental model of the project&#x27;s complexity. For some projects, you&#x27;re able to create a mental model that has high fidelity quite easily. For others, it takes a bit of work. The entire article here was an exposition on this fact.<p>Some folks figure that out and want to just give up. Estimation is impossible! Other folks, however, are going to figure it out if it kills them. What happens in these cases is they start to list every possible variable that could be involved in such a model in every scenario, and then create one uber, ultimate, super model that works in all situations.<p>Over time and through lots of trial and error, both approaches have been found to be bullshit. Instead of giving up, or creating more and more complex models that take more and more time to work, with each project you&#x27;re better off starting with the most ludicrously simple model you can and then adding complexity as needed. The trick is incremental complexity, repetition, and convergence. If you have that nailed, the details of your actual model, oddly enough, do not matter that much.<p>Obligatory link to previous comment: <a href="https://news.ycombinator.com/item?id=6389227" rel="nofollow">https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=6389227</a>
评论 #6391539 未加载
评论 #6390947 未加载
ollysb超过 11 年前
I think the problem is that developers(including myself) tend to make estimates assuming that they&#x27;re not going to find anything that makes them say WTF! Code is never perfect and it&#x27;s extremely difficult to know how much time it&#x27;s going to take to dissect and restructure code to accommodate your new feature.
评论 #6390939 未加载
alok-g超过 11 年前
&gt;&gt; &quot;The gist of why estimates are hard: every new piece of software is a machine that has never been built before.&quot;<p>What is not explicitly said here is that a good developer needs to know what would be a &quot;new&quot; piece of software. He should be at least vaguely aware of what has been built already, what is within the reach of the state of the art, etc. And just like in the stock market, it is impossibly hard to know all the needed information to come up with wise judgement, complicating the estimation process even more. Yet, this is an essential piece in estimation anyways. Just for example, for some projects you may simply declare them to be beyond the state of the art.
rogerbinns超过 11 年前
I address the problem by giving a range. Giving a single number is the real problem. For example I might estimate something as two weeks plus&#x2F;minus six weeks, or a month plus&#x2F;minus a week. That range is because of the usual factors (scope creep, things that have never been combined before, testing, meetings, holidays etc).<p>Sometimes the questioner picks up on the two weeks minus six weeks is a negative number. I then explain that existing functionality could be used, goals could be achieved in other ways, or maybe it just isn&#x27;t really needed.
gte910h超过 11 年前
<a href="http://www.amazon.com/Software-Estimation-Demystifying-Practices-Microsoft/dp/0735605351" rel="nofollow">http:&#x2F;&#x2F;www.amazon.com&#x2F;Software-Estimation-Demystifying-Pract...</a> is fantastic for giving many approaches to the topic, and counseling for non-technical stakeholders where it isn&#x27;t a negotiation, but math.
rrhyne超过 11 年前
Always provide two quotes, the &quot;shoot the moon&quot; and the budget quote. The client will always cherry pick segments from the more expensive quote to arrive right at their budget. You can still loose to the next guy, but if you are in the ballpark, it won&#x27;t be because you came in (a little) too high with this approach.
jasonhanley超过 11 年前
Simple 5-step methodology: <a href="http://blog.pmrobot.com/2011/09/5-steps-to-estimate-software.html" rel="nofollow">http:&#x2F;&#x2F;blog.pmrobot.com&#x2F;2011&#x2F;09&#x2F;5-steps-to-estimate-software...</a>
known超过 11 年前
Good judgement comes from experience. Experience comes from bad judgement.
jlebrech超过 11 年前
Minimum of 2 weeks for anything you think might take more than 4 days, if it&#x27;s a day then double it. etc.
molson8472超过 11 年前
I really like this statement: &quot;Every new piece of software is a machine that has never been built before. The process of describing how the machine works is the same as building the machine.&quot;<p>That&#x27;s probably the best way of relating the problem to non-engineers that I&#x27;ve heard.
grantph超过 11 年前
I ALWAYS quote fixed price projects regardless of scope. Some software engineers would say that&#x27;s highly risky. For me, it tends to be highly profitable because my estimates are usually accurate. If anything, I&#x27;ve learnt to over estimate and impress clients by delivering on promises.<p>I am amazed by the number of people who try to portray computer science as a pseudo science like voodoo, where estimates are impossible because the problems are unknown. Just because information is abstract doesn&#x27;t make it any more difficult to estimate than something physical. Computer science IS a science and software engineering IS engineering. Good engineering involves breaking problems down into small manageable pieces that are easily understood then planning how to implement them. This practice is called design. On more complex projects it&#x27;s architecture - a sexier form of design.<p>Let&#x27;s get back to basics. Who has heard of &quot;the software development life cycle&quot;? Everyone, I hope. It&#x27;s modeled off something from the early 19th century called the product development life cycle. It needs to be mentioned because IT people like to think they&#x27;re special and mysteriously invented SDLC. Feasibility, analysis, design, development, testing, deployment, etc. Agile methods are simply a minimal version of this repeated fast and frequently. Release the minimum viable product then iterate. Unfortunately, so called &quot;hacking culture&quot; has led people to jump straight to development without considering analysis or design. Real hackers design their attacks first. Successful hacks are well thought out and executed in small brilliant steps.<p>The analogies of sudoku in defining a problem and construction in defining a project are perfect, so I&#x27;ll borrow those.<p>If someone presents me with a 1000 sudoku puzzles of varying difficulty, the first step in estimating is to DESIGN a solution. Allocate time to categorize each puzzle by complexity. Then estimate times based on complexity based on past experience. Anyone who says they can&#x27;t do this because they have no experience with the problem should be immediately fired. You&#x27;ve obviously misrepresented your experience and&#x2F;or skills as an engineer of sudoku problem solving.<p>If a problem is truly unique and novel (and very few are nowadays), then simply factor in time during the analysis &amp; design to perform a few experiments that will more accurately help with estimation. Or training. OR HIRE SOMEONE WHO HAS DONE IT BEFORE to help with design and estimations. Then find the most effective resource to implement (solve) each puzzle.<p>As for construction, any idiot can slap a few lines down on a piece of paper and call it a design for a house or a building. That&#x27;s the way some people are building software. Real architects and engineers exist because construction can be broken down into hundreds of thousands of pieces and estimated accurately. They know exactly how many bolts it will take and what types of contingencies to allow for. Software, although abstract, is no different. The software industry has been around for 40+ years and it&#x27;s modeled off past industries like construction and manufacturing. It can be accurately designed and estimated.<p>Once a clear design exists, estimation is easy.<p>My preferred estimation method is function point analysis. It&#x27;s simple. Break each problem down into the smallest manageable piece. Any piece that takes longer than a couple of hours is too large and should be broken down further. That&#x27;s an excellent rule of thumb. Anything longer than a couple of hours also suggests the design was poor.<p>Of course, in some organizations this fails due to a lack of clear process. An analyst will be tasked at collecting business requirements to write a specification. That is often full of nonsense written by someone with no design experience. That specification is given directly to a developer for estimation and development. Where was the design? The nonsense works it&#x27;s way into the product. It becomes an estimation nightmare. Projects and budgets run over or worse, fail.<p>How do I know this works?<p>When I break a job down for a client into small manageable pieces I know the entire scope and can estimate accurately.<p>Clients love it because they can see every single piece of the puzzle in the design. The quantity and times for each piece look reasonable when broken down. The clients begin to appreciate the scope but ultimately don&#x27;t care how it&#x27;s built or what technology is used. They just want to know how much and when? If there is a deadline? Either add more resources or cut functionality. Let them make that choice. It&#x27;s not my concern.<p>The cream, and why this industry is so much better than construction and manufacturing, is to look at all the pieces and see the re-usable patterns. Design optimization. Copy, paste and re-use as much as possible. Clients don&#x27;t care about re-usability. I charge top of market rate and still manage to be cheaper than competitors because my estimates were realistic (as opposed to their crystal ball methodologies). Re-usability and working smarter then gives me 4-5x that hourly rate. Shh! Don&#x27;t tell the clients :)<p>If you can&#x27;t estimate software accurately, you&#x27;re clearly in the wrong business!
评论 #6393347 未加载
评论 #6393530 未加载
评论 #6402722 未加载
forgotAgain超过 11 年前
Does the customer understand what they are asking for?<p>Can they afford it?
airlinenut超过 11 年前
Some additional notes&#x2F;suggestions on estimation on Stackexchange: <a href="http://freelancing.stackexchange.com/q/495/67" rel="nofollow">http:&#x2F;&#x2F;freelancing.stackexchange.com&#x2F;q&#x2F;495&#x2F;67</a>