Last June, we made a quick spreadsheet to estimate completion time for Goldenseal Pro. The math predicted completion in late May or June 2018, but it was very uncertain. Since we write construction estimating software, you’d think we could make highly accurate estimates for our own programming projects. Unfortunately, that has never happened. Software is less predictable than construction, and harder to specify.
Work on Goldenseal Pro has progressed enough that it’s a good time to recalculate a completion date. Unfortunately, updating last year’s spreadsheet did not go very well. Its category breakdowns just don’t line up with the actual work we’ve done. That estimate sliced things vertically, but progress has been more horizontal instead.
The calculation method we used was also inferior. It started with a guess of total work needed for each category, and a guess at the percent completed so far. Then, a formula to calculate work remaining. The problem is, multiply two guesses, and it just makes an even worse guess.
For what it’s worth, we did the best we could with that spreadsheet, and it calculated 7.9 months until completion. Probably plus or minus a few months.
Now that we are further along, the calculation will be more accurate if it starts with the time spent to date, then extrapolates from there. We just looked at source control comments, to get a general idea of how much time has been spent on each area, so far.
The MVC (model-view-controller) system is a reasonable way to slice the new code in Goldenseal Pro, horizontally.
At the bottom, the model layer includes business logic, database code, and basic stuff that connects to memory and the OS. Half of the model layer is the business logic that runs our estimating and accounting software: that does not need to change at all. It’s about the only thing that doesn’t. During 2015 and 2016 we did an extensive ‘gut rehab’, and replaced all of the other half (including a complete database rewrite). The model layer is pretty much finished now, but it probably still needs a few days, here and there.
At the top, the view layer handles what you see on the screen, and what happens when you click a mouse or type on the keyboard. For Goldenseal Pro, we need to replace 100% of that code on Mac, and about 75% on Windows. About 1/3 of the view layer programming is for basic windowing, and ‘mode shifting’ between data entry, find commands, layouts, printing and reports. That portion is mostly finished on Mac, and half-done on Windows. Another 1/3 is buttons, fields, and other small interface. Most of it works now, but there are many small details still unfinished. This portion is probably at 50%. The final 1/3 is tables and other complexities, which we are only just starting.
In the middle, the controller layer coordinates the model and view, and also links between C++ and Objective-C. It applies almost exclusively to the Mac version. The MFC library for Windows does not use MVC, possibly because the acronyms might interact and explode. Generally, the controller layer just makes life more complicated at every turn. It’s hard to itemize the effort it takes, but it’s a good place to throw in 2 or 3 months for forgotten complications and unexpected cruft.
Before using math on programming work to date, we really need to adjust for the learning curve. Productivity was close to zero when we started using Cocoa and MFC, and it ramped up from there. Smooshing the first 6 months into 2 productive months seems about right.
Throwing all that into a spreadsheet says 7.3 months to first release. It’s several months later than last year’s estimate: October instead of June. No surprise, given the many uncertainties, and the extra work we’ve added since then.
The estimate will grow more accurate, as we move further along.