How fair do you think time estimate within 30% is? Plus/minus 20% if over 3 days
Today our boss came up with a "reorganization" to "improve efficiency". He expects us to estimate time needed with max 30% deviation, and max 20% deviation if it's over 3 days. Software projects.
* * *
Background (SPOILERS)
boss is an old programmer, an American client is outsourcing its work to us. The work is two repos: a) IE-compatible Javascript without Babel or Node (ES5), b) Python 2.7 with no unit tests, no dev database, lots of "except: pass". Both repos are centered around a god class, functions often 100,200,300+ lines , no documentation, very few comments, superficial but nitpicky code reviews, one or maybe two questions answered per day.
16 comments
[ 3.6 ms ] story [ 47.8 ms ] threadIf your boss wants that level of certainty, you should ask him to teach you how to achieve it and see how he thinks such a thing is possible. I’m not suggesting he’s not delusional. Just that if you pick his brain and then ask how to deal with the types of uncertainty you’re concerned about, you’re more likely to get to a place where you and the boss are aligned. (This assumes your boss is an even vaguely reasonable human being, tho. YMMV.)
Two books help with methods of doing this.
Rapid Development: Taming Wild Software Schedules: https://www.amazon.com/Rapid-Development-Taming-Software-Sch...
Software Estimation: Demystifying the Black Art https://www.amazon.com/Software-Estimation-Demystifying-Deve...
This likely does mean you'll need to be allowed to deploy automated test cases, develop documentation and the entire nine yards, because it's going to be far harder to hit any reasonable deadline if you don't have a known development pipeline.
You'll need to reduce your uncertainty as much as you can to even have a chance - and even then, things will still blindside you and double (or more) the actual vs. the original estimate.
Who owns the codebase? Does it belong to the client or to your boss? Is it in anyone's interest that the quality of the code be improved over time?
There is a conflict between efficiency and accuracy of estimates. If accuracy is a goal, you can improve accuracy at the cost of efficiency by giving very high estimates, then working slowly if the task turns out to be relatively simple.
The codebase sounds like a bit of a tar pit. You may be interested in reading Feathers' book "working effectively with legacy code". This describes patterns and tactics to use to get automated regression tests in place around applications, so that you can start to refactor confidently and add unit tests. You need time and support to work on these if the existing code is bad. It can be very slow going and hard work. If you cannot convince your employer to support some changes to start gradually improving code quality over time, you should look at options for alternative employment.
Only the issue here is, strictly Jira-oriented programming. You only ever modify lines that fall into your ticket. You don't lint, don't remove trailing spaces, insert missing semicolons. You DO.NOT.CLEAN.UP. It's not enough to have IE-compatible code that follows naming conventions, README.md and .eslitrc (used very sparingly). You must use arbitrarily chosen existing functions, and on code review you're given very vague suggestions like "use the function we have for that", or "eh". Files commonly over 3000, 5000 lines.
The task could take 5 days but it's a lottery. A bugfix in a convoluted system.
I would go with the 5 days, but I don't trust the boss. He never takes responsibility for any setback.
Problem is, time is just _one_ variable. It's possible to hit every estimate spot-on, if you allow the other variables to change wildly (number of bugs, completeness of features etc). It's kind of like in quantum mechanics, where by knowing one property of a particle, you have to let go of all the others (maybe).
Anyway, I blogged about this a lot here, if it is any use: https://riskfirst.org/Estimates
It seems wrong-headed to be insisting on this, so maybe education is the answer?
One trick is to make them really small chunks of less than 4 hours. When you add up the chunks they tend to average out quite accurately.
Estimations are quite a pain though. I've spent days doing and negotiating estimations of things that take less than a day to do. And one downside is Parkinson's Law - if you overestimate, it slows down development, and if you underestimate, it's far worse.
While you can make your estimations more accurate, you can't do it without putting a heck lot of effort and manpower... which defeats the purpose of doing it for efficiency.
(We went from the same sad state to having things more or less corrected. Every bit of code we touched, we added sanity testing, automation, etc. It took about two years, however, with 10-20% of the time fixing code/process stink)
I wanted an outside perspective to see if I'm perhaps overreacting.
I do believe this code is really fixable with some months of effort, but management will have none of it. Refactoring provides no perceived shareholder value for them. And I did try to clean it up, and tried to build support in our team for doing so. It's mostly political/organizational roadblocks. They want code monkeys. Code cleanups are viewed with deep suspicion even by code reviewers.