views:

197

answers:

6

In looking for practices that will make me a better developer (code reading, TDD, pet projects during spare time, for example), I recently got the Steve McConnell book about Software Estimation.

I am asked at work to produce estimates of tasks and I know it is a good skill to have as my responsibilities increase.

But my question is: is estimation as a skill as important as other technical and problem solving skills? Should I give it as high as priority as becoming a Hibernate/Spring/coding expert?

Should estimation be part of every developer's skill set?

Thanks in advance,

Lucas

+3  A: 

Estimation is important for developers. If you know how good (or not) you are at something, and you have a clear set of requirements, you should be able to tell your team lead / manager how long a task will take. This is important to the project manager because they may use these estimates for budgets and scheduling which may feed into the budgets/schedules of larger enclosing projects. Of course, "stuff" happens and estimates may turn out to be wrong. This is expected, to a certain degree, so whoever's managing the project might build some padding into your estimates to handle the "stuff" that happens. Of course, if your estimates are wildly off base from your actuals, make sure you can justify it!

As well as helping the overall project, being good at estimating will help you in your day-to-day tasks. You'll know what tasks you can finish before lunch, between meetings, what tasks not to start at 3 pm because they'll take you well past 5, etc... so YES, it's a good skill to have.

It takes time to get good at it, and some are better than others. A lot of that comes down to the skills you have and the task assigned - you'll probably have more accurate estimates for a skill you've been using for years on a clear and simple requirement than a new skill with a vague and murky requirements.

FrustratedWithFormsDesigner
+5  A: 

Absolutely. Estimation is key if you ever do any facet of team/project leading or any freelance work. It's also very useful as a code grunt. But what most people don't know is how to over estimate.

A good estimate can mean the difference between a project's success & a project flopping. It also helps you get the resources you need to do the job you're hired for. *(Resources being Time, Money, Workers [i.e. fellow code-monkeys], assets [servers/time borrowed from IT for setting stuff up], etc...)

Is it more important than being able to program? Probably not. But I'd argue it's pretty close.

Aren
Maybe for freelance. But I don't agree that it is SO important. There are a lot of more valuable skills for a _developer_. For example if you choose between clean and clear code and good estimation skill, I guess being a teamlead you'll stick to the first option.
Juriy
@Juriy well yes, in group situations you usually will have others to bounce your estimations off of and shape them into something reasonable. Of course `code-clarity` is going to be more important, but I think estimation is up there with things like `code-clarity` and `testing` and `being-able-to-program`. Probably not as important but in the top 5-10.
Aren
Thanks, Aren B. I'll get my book out and start reading/practising.
Lucas T
+1  A: 

It is certainly a good skill. But it is much more important to a teamleader than to a developer. It also highly depends on the development process. Often you will not have a chance to do the estimation since the deadline is "already there" and it was estimated by someone else.

In contrast agile processes like SCRUM give the estimation part to the developers. In this case you'll use your skill at a full.

I had a developer who completely lacked the skill to estimate anything. It wasn't like he was always wrong: he was just afraid to give the incorrect number and he refused to give any. Awful team player.

Juriy
A: 

To add another perspective, I see estimation as a form of judgment as part of giving an estimate is determining how big or bad something is. Is that bug worth stopping everything else to fix it ASAP or is it something to resolve later as it isn't breaking major functionality? Those kinds of calls go hand in hand with giving estimates as if you think about it, would you rather work with some freedom or have everything pre-allocated for you? I like having some freedom but this comes with the challenge of being responsible about it.

JB King
+3  A: 

Yes, estimation very is important. But what's maybe more important is defending your estimations. Since you're reading McConnell's "Software Estimation", you understand that estimates are ranges that can vary greatly at the beginning of a project when there are many unknowns, and gradually narrow as the project continues. It is important to be able to defend the range, and resist the urge give a specific number. Once this happens, the estimate can be interpreted as a target and the ability to update the estimate as more information becomes available is difficult.

Being good at estimation implies that the midpoint of each successive estimate is fairly stable, and the ranges converge. This is a good thing, and something every developer should strive for. Being an average programmer with great estimation skill is probably more valuable to an organization than a great programmer with poor estimation skills.

Dan Shield
That's brilliant. Thanks.
Lucas T
+1  A: 

I'd just add that it would be great to add more formal approach to the estimation process to your skill set. You'll see that Steve mentions Functional Point Analysis, which in my experience, can give you much more confidence in defending your estimates.

More so if those estimates are based on history data within your organization.

vanja

related questions