Today, I was asked to provide an estimate of effort required to rip out a few entities in the subsystem I am generally responsible for. I thought that I really did not have any basis to provide any meaningful estimate due to the lack of, nor necessity of, “requirements”; this was a moderate refactoring job for the most part. My initial thought was to fire off an email, containing a number of hours of effort pulled out of the clouds. Then reality set in and I knew I really wanted that basis or some other metrics to provide an estimate to some degree of accuracy. So I started thinking: the refactoring job was purely code based; why not use the code a metric.
When I think of code, the first thing that comes to mind is Resharper. I started by writing out all the entities which needed “touching”; either removal, alteration, or replacement. I then used Resharper to easily get a count of “usages” of each entity which will be used as the metric for the estimate. If you think about it, a usage of a type/member/etc. is a natural point in which to determine level of effort. Any changes needed to bring a specific usage in line with the proposed refactoring are efforts needing accounting for.
Clearly, each usage which needs a changes will take effort different from another usage; that is okay, I decided to that for a single usage, an average level of effort in hours would suffice of this estimate. So, looking over a few usages ranging in difficulty, I came to an estimated average level of effort of 0.25 hours (15 minutes) per usage. There were a total of 171 usages of all the affected entities, thus:
(171 usages†) * (0.25‡ hours per usage) = (42.75 hours) + (4.275†† hours) = 47.025 hours total
Note the added 10% buffer for the unknown.
In a nutshell, I was able to play an estimating game at the source code usage level, with the help of trusty ole Resharper.
1 comments:
Resharper is my favorite VS tool. I am waiting eagerly for 4.0 to be released so I can use it with VS2008 and .NET 3.5 features. Thanks for the good ideas -- I am constantly asked to do time estimates on refactoring changes, and knowing Resharper can help me do that is pure developer gold!
Post a Comment