Readit News logoReadit News
Posted by u/PawelDecowski 7 years ago
Ask HN: Developers, how do you estimate projects and write proposals?
I’m interested to know how fellow software developers (freelancers, small businesses) estimate projects for clients.

Do you use any tools to come up with a quote? Do you send a proposal document to clients? If so, do you use a tool to generate one, or do you just use a template in a word processor? What are your main pain points when quoting for work?

Cheers!

mozz100 · 7 years ago
(about estimating - I don't tend to write proposals) You could have a look at https://www.estigator.com

(NB it's a half-finished side project right now)

I'm no longer a contractor, although I have been, and I'm frequently asked by my new employers to provide estimates for dev tasks.

Trouble is, businesses/clients tend to see an estimate as a promise, or a target. From the developer's point of view it is hard to do anything other than guessing (at smaller and smaller granularities). Book recommendation: "The Clean Coder" by Robert C. Martin - esp. Chapter 10)

I started building https://www.estigator.com to see if I could learn React, and come up with something to help me illustrate just exactly who's taking a risk when we say something like "it'll probably take about 3.5 days"

I wasn't quite ready to "Show HN" with this one, but your question made me think of it straight away. Would love to know what people think

wpietri · 7 years ago
> Trouble is, businesses/clients tend to see an estimate as a promise, or a target

Even worse, they tend to treat the date/cost line as a promise, but the scope as infinitely flexible.

One other thing that makes me crazy is that a lot of places determine the date by a process that yields the first non-impossible date. (E.g., "Can this be done by Thanksgiving?" Developer yelps and says, "Well, maybe if everything goes right it could be done by Christmas." The PM responds, "Great! Christmas it is! I'll tell the CEO.") But if non-impossible means, say, 5% chance of success, then the developers look like goats 95% of the time.

These days, except with highly trusted partners, I basically refuse to estimate anything over 3 days without formal estimation and a self-calibrating process where any date is a function of product manager choices. (E.g., points, velocity, burndown.) But I find that less and less valuable, as interesting projects typically have requirements volatility too high to make dates actually predictable. Instead I prefer a release-early, release-often approach, hitting any non-artificial deadlines by being ready well in advance and iterating.

thomasmarcelis · 7 years ago
I like the idea and could see myself using this. After trying the tool a bit, I liked it and had some thoughts.

I think your landing page communicates well, it was pretty clear what it was going to do. The only thing I wasn't sure about is if the tool is also meant for teams larger than one. Then I would need to be able to enter different costs based on different roles, but I'm not sure if that's the target audience.

You said the project is half finished, so I assume you have tons of small UI improvement ideas already... But I would really prefer a different method of adding new lines/tasks over just adding every type on add :), for example a dropdown with an add button.

jek0 · 7 years ago
Adding to the list of ideas:

* A flat probability distribution for "will take between X and Y" is probably wrong, a bell curve would be more accurate (where X and Y are the 95% percentile).

Another question: is it open-source? I'm sure a few people around here would be glad to hack into the code ;-)

ThirdFoundation · 7 years ago
Just a heads up, I think there's an error in the description next to the graph estimating work time.

I'm seeing this message:

>>> Total is expected to be about 22.3 days.

>>> * likely to be greater than 15 days (p = 95%)

>>> * has a 50% chance of exceeding 20 days

>>> * unlikely to be less than 33 days (p = 95%)

Is the last bullet point correct? Shouldn't it be __likely__ to be less than 33 days?

mozz100 · 7 years ago
Thanks again for this. Now fixed.
mozz100 · 7 years ago
dur, yep - thank you for the catch. You are right: this is the worst kind of typo! Will fix
jek0 · 7 years ago
I used a similar software for quite a while: https://www.getguesstimate.com/

It's a spreadsheet where each cell is a probability distribution, quite well done and easy to use.

Note: I'm not related to this service in any ways.

markhalonen · 7 years ago
I wrote a similar tool to estigator! It's bare-basic, but aims to solve the same problem: https://uncertain.io/
mozz100 · 7 years ago
Excellent - thank you for sharing. I wanted to be able to allow custom probability distributions for the tasks/items in estigator.com - uncertain.io is a great way to capture them
randren1 · 7 years ago
Agreed on the Bob Martin book. For project estimates I have presented estimates this way and I find that executives understand it and it lets me present an estimate and a commitment separately in an understandable way. A summary of his explanation of estimates as probability distributions is here: https://codingjourneyman.com/2014/10/06/the-clean-coder-esti...
iM8t · 7 years ago
Nice tool!

It would be really nice to be able to save the estimate to send to clients. Don't necessarily need backend for that - we can store data in the querystring for a fast & easy hack.

BerislavLopac · 7 years ago
A CSV export of the graph data should be fine too.
Etheryte · 7 years ago
The concept behind this is great, especially since this very closely matches how I usually estimate things — lower bound and highest expected bound, currently the user experience is pretty meh since you need to add a line and remove two lines to get additional "between N & M units" lines, but I can totally see myself using it once it matures. Would also recommend to others once it matures.

Do you have a newsletter or something similar to subscribe to for releases?

mozz100 · 7 years ago
Totally agree with you about the need to click "+" and then remove two lines you don't want. I was planning a drop-down as you suggest.

Then I got a full-time job and have stopped working Estigator for now.

It's really nice and encouraging to hear the feedback and read the bug reports on HN. I think the most likely next step for Estigator is for it to become an open source hobby project. Still mulling things over.

So - no newsletter sign up (privacy policies, GDPR, bler) - but I will certainly announce at https://www.rmorrison.net (my personal homepage) if I ever move things along.

eecks · 7 years ago
I like the idea and I am trying to use it. On MacOS and using Firefox nightly.. if I click into the first time estimate box and hit my delete key... the whole app disappears.
sqln00b · 7 years ago
Great tool! One bug: As soon as I remove the last `div.item` the whole `div#root` becomes empty hiding the whole UI but the `nav.navbar` (Chrome 70)
mozz100 · 7 years ago
I love bug reports with CSS selectors in them. Thank you! Now fixed
amingilani · 7 years ago
Thank you for creating this! And please finish this, this will be the most prized tool in my arsenal :)

This is exactly like I do things!

cdsbarrera · 7 years ago
Hey, I like estigator! Congrats! I will use it.

Dead Comment

Dead Comment

jaggederest · 7 years ago
Somewhat heretical, but I generally don't.

I usually explain that development is an iterative process, and that I generally deliver work as soon as it's done.

We talk about the knobs that are available to tune the work to the goal, and how to measure goals. We talk about containing costs, and working together to deliver good value.

I find that in general, estimates are rarely, if ever, accurate to any significant degree, and thus are usually dishonest when presented as a way to assuage client anxiety over "when will it get done" or "how much will it cost".

crispyambulance · 7 years ago
Completion estimates may be dishonest but that's how things are done almost everywhere, yes, even shops that use Agile, complete with burn-down charts, stand-ups and sprints. I've seen "Agile" teams that go through all the motions of a modern sw development team BUT STILL have to give the completion date of the whole project! Before the work starts!

FWIW, it's not as bad as it sounds, it just means that the PM's see red in their charts and end up bugging people with "urgency attacks". Slippage is common and that's OK.

The vast majority of the time, an estimate is just an estimate. Passing a deadline isn't fatal, nor is it failure (regardless of whatever it says in the Project Management Book of Knowledge).

rossdavidh · 7 years ago
The only right answer. If they cannot accept a diplomatic, reasoned and carefully explained "we can't know, but I'll finish as quickly as I can" answer, then they probably won't be very understandable when things turn out to take longer than expected. Or if they change their mind about what they want and expect you to nonetheless finish on the original schedule because it's just a small change. Politely and gently refusing to provide an estimate for the unknowable, is a good way to avoid working with clients who will be not worth working with anyway.

Hard as this is up front, it's harder to explain afterwards why your estimate didn't work out, and it's harder to eat the cost difference yourself. Be gentle and polite, and accept that they may or may not be willing to work with you on trust that you will do your best to finish as quickly as you can.

novembermike · 7 years ago
I think you can usually say if something will take hours, days, weeks, months or years. Anything more detailed runs into problems.
ryan-allen · 7 years ago
I find estimating dishonest too. I tell clients that a project becomes late 'one day at a time' and that the higher clarity there is in the objective, the more creative we can be about trying to solve the problem. so there is less work to undertake to reach it.

I don't think a developer's salary is high enough to justify taking on any moral risk on the basis of estimation of any project.

In Australia, even the highest budget software projects have major cost and time blow-outs, often in years and often in 100s of millions of dollars. If this were a solved problem then this would not be the case.

I think the best thing you can do is retrospective analysis of work completed for a given individual and a team, and use that to project, but I am yet to find a client who is vaguely interested in such a thing, e.g. Joel on Software's Monte Carlo estimation solution [0].

I'm cynical because it's early!

[0] https://www.joelonsoftware.com/2007/10/26/evidence-based-sch...

shireboy · 7 years ago
This sounds great. How the hell do you get customers to buy into it though? I often wind up falling into this sort of situation with old customers once they're confident in my work and fairness. But for new customers, how do you tell them "don't worry about how much this will cost or how long it will take"? How do you build that in a contract?
jaggederest · 7 years ago
I personally guarantee my work. If they don't like the work, I'll refund their deposit, revert the merge(s), and be on my way. I never bill for work that doesn't satisfy the client.
shubb · 7 years ago
This is the best way, especially if you are freelance and might carry some of the risk or a drop dead deadline.

If you do this, some people will work with you,

some people will not.

If you work with those people, this will not work.

Sadly

ncphillips · 7 years ago
I don’t think this should be heretical. I’m pretty sure all the evidence is in favour of your view.
williamdclt · 7 years ago
> development is an iterative process, and that I generally deliver work as soon as it's done

You're kinda arguing against yourself. I agree that dev is an iterative process and that estimating is a lost cause, but "deliver work as soon as it's done"? The whole point is that a "done" project doesn't exist. Deliver all the time (every day, every week at worst), iterate and stop the project when the client is happy with what they have

mikekchar · 7 years ago
I think the key is that showing progress early and often lets the customer start to get a feel for how long the entire process is going to take. This is one of the reasons for XP's idea of trying to do "vertical" but narrow slices of the application. Each story you work on should work through as many layers of the application as you can manage.

It's easy to write stories that are "do the UI for X", and then "do the back end for X". But often the UI (at least the first cut) is easy to code and comes out quickly, giving the customer the impression that everything will be quick. Then you work on the back end and it goes a lot more slowly, leading to mistrust. Alternatively, working on really complicated things up front (while generally a good idea) can give the customer the impression that the project is stalled and that it's never going to finish.

When you are doing iterative development, I think the real art is in choosing your stories. It's difficult, but when done well it removes most of the political friction in development.

jaggederest · 7 years ago
I really mean done as in "creates any positive change for the customer". Obviously if a file has syntax errors you don't push that to production. I usually do CI/CD really aggressively. Deliver as soon as the PR is approved or equivalent, assuming you have enough assurance in the form of test or qa. I would consider daily to be a little slow for my tastes.
dragosmocrii · 7 years ago
I believe only a small niche of IT projects can qualify for "accurate" estimates, and that is tasks such as install Wordpress, swap image, etc, although even in these isolated cases there might still be factors that could easily throw you off with the estimate.

For real software development, where you develop a solution to a business problem, estimates are worthless. The thing is, solutions to business problems are very specific, which means you need to think it through from scratch starting with the idea, and ending with the implementation which is a large terrain where many things can go wrong.

If you're still required to make an estimate for the sake of having one, I recommend going with a range. Think of pessimistic and optimistic scenarios. Make sure to add a generous buffer to both ends, to account for the unknown issues that are guaranteed to appear. Also, add in the disclaimer that this is a rough estimate and that the final time requirements might differ. This kind of works for hourly/open contracts.

For fixed price contracts I'd say think of an amount that YOU feel comfortable with. Better to exaggerate than feel sorry. Remember, you have the solution, the client has the money.

I go by these rules, and I'm quite happy.

nostrademons · 7 years ago
Rule of thumb: if the estimate is >= 2 weeks, the estimate is worthless.
wpietri · 7 years ago
Exactly. An estimate is only reliable if you expect to learn nothing during the course of the work. But if we release early and often, we are almost certain to learn things as we go which changes scope.

Dead Comment

edoceo · 7 years ago
I don't estimate, I work the other direction.

How much is it worth to fix? That's a much easier value to discover.

From there work backwards to determine how much to spend and where to prioritize.

Eg: a bug generates 3 email and 3 phone support issues per day, at a cost of 1h or $33/day - $12k/yr. Easy to justify spending one dev-week on the issue ($6k).

Or missing feature that lost a sale of $50k easily justify $5k to make some progress.

lukasLansky · 7 years ago
Funny, I find measuring opportunity costs much much harder than measuring engineering effort.

Even in your example, are those phone calls the substantial costs, or is it customer confidence in your product being lost the main motivation you should do something with the bug? If so, what's the dollar value of this confidence? Also, do you have monitoring good enough in place to see how many customers are hitting the problem every day without telling you? Do you think these customers are less or more frustrated than the one they are calling you?

Can you attribute lost customer to a particular feature not present, to a particular bug the customer experienced just before they refused to deal with your software anymore?

edoceo · 7 years ago
A lot to respond to, I'll try.

I'm measuring stuff that is actually happening, whatever it is (phone, email, error log, metrics, etc) and have to assign a cost. I find that easier than guessing how long to discover the right answer to a (maybe) complex problem.

For phone and email support it's easy, directly measurable cost. One would decide for them selves how to factor those intangibles (ie: confidence).

Currently I do things like this-ish: - Phone and email at direct cost; but if the issue is a duplicate double cost. - Lost deal factor at 15% first year value - Logged errors at $10/first, $2/dupe - make values that match your company revenue/expense.

We try to exit interview clients but generally have a good feel for it - ours is a pretty high touch relationship

jwdunne · 7 years ago
I think in the first example it's easier to calculate based on the time spent vs the salary + overheads of the employee(s) dealing with the issue.

If something took up one hour of my day and I could spend a week one-off to reduce that to 0 hours a day, that's a no brainer.

Vanderson · 7 years ago
In my experience, it all depends on the client and the project size.

The larger the project, the more documentation, planning and budgeting. And no tools really help with this in general. But if it's big enough, I will do mockups, everything else is just a well formatted document.

For my regular clients I've worked with for years, a simple email/phone call > deliver product > invoice is enough of a work flow if the project is small.

A few large projects I've spent a few months documenting, planning and having client meetings before any work started. I suppose, some online collaboration tool could have been useful there.

But also I have large ongoing projects with long term clients where monthly work is done, and monthly meetings are held. But since most of my clients aren't technical, there's no need to involve them in anything other than front-end review, testing and publishing. So we get most of this done at a monthly face-to-face and a few emails.

I do have a nice formatted LibreOffice document template with header, footer, logo, etc... I tend to use this for new clients. (PDFs only though)

senseitit · 7 years ago
Start writing the brief/project charter with all the stakeholders to map out their expectations. Based on it, create the initial plan for the project by breaking it down into smaller tasks, grouped by task lists for better organization. What we do next is to analyze any similar projects we had in the past and how long it took to complete them, so we can estimate time budgets for new tasks.

Our clients use https://paymoapp.com, where we add the initial plan as a temporary project. Once all time budgets and costs are set up, we convert the project into an estimate and share it with the client.

The client then reviews the estimate and either accepts or rejects it. If accepted, we go into production.

brianpgordon · 7 years ago
Paymo looks amazing, and the price point is crazy low. I can't believe I haven't heard of this before.

You don't use the time-tracking capabilities for software development though, do you? While I could see myself loving to use the tool on my own, being on a team that's required to account for every minute of time (assisted by friendly tracking software no less!) sounds horrible.

senseitit · 7 years ago
In fact we do, but more as a diagnosis tool to see how much it took us to complete a task and how to prioritize it in the future. We're not expected to account for every minute, that wouldn't be human (and productive) at all.
KineticLensman · 7 years ago
Lots of great answers here - but something I wanted to focus on is doing a risk analysis alongside the estimates. Places where I have worked have generated corporate estimates for clients (usually in a competitive bidding situation). One of the sign-off decision points business enforces on the bid teams is to check that they have considered risks to the project, possible impacts in terms of time and cost (usually related), and a risk budget (e.g. for extra days for rework) which depends on the magnitude and probability of the risks. Risks are usually expected to be higher if the work involves any sort of novelty. If risks don't manifest, the business makes more profit, but if they do the PM has a basic safety reserve. The need to keep estimates competitive generally creates pressure to force the risk budget down, but the fact that the process is subject to business scrutiny and independent internal review can lead to mature debate about the issues.

The key to this process working is to have a tech assurance function that is independent of the bid team and their management, and that the overall company accepts the process. The assurer can say to the business "I think you are pricing this too low for the risks involved" but it is specifically not the reviewer's call as to whether the bid is submitted or not, so management can still submit the estimate if they want to. But, if things subsequently go south, the blame isn't immediately passed to the bid team or the delivery team.

Alternatively, generate an estimate, round it up to the next order of magnitude, and double it.

golergka · 7 years ago
Badly.

It is not a joke comment. I could go into a lot of detail about methods that I've used, but it's the most important and valuable piece of knowledge that I've gotten out of this experience: we're bad at this. No matter how we do it, that's the thing that we should never forget.

mrfredward · 7 years ago
I second this. I have made tons of mistakes estimating, but the fact is that for all the foolish mistakes I've made--forgetting things, not asking the right questions, and jumping the gun on making a prediction--I've probably never had enough information to make a good estimate.

Almost every project runs into an unforeseen roadblock. The less experience you have with a sort of project, the more true this becomes. You can't account for things you don't see coming, so the usual answer is to arbitrarily pad estimates, and of course arbitrary padding is usually wrong.

A project plan is more useful for finding bottlenecks than predicting an end date. So unfortunately, the best tip I can offer is to make sure people are aware of the uncertainty involved, and beware of people who expect it to be straightforward.