A long-time user of our accounting software called in recently with a problem in their change order billing. There was a mystery retainage amount that showed up when they billed for the project.
It turned out to be a bug in the printed form. Goldenseal does not track retainage on change orders, but it’s on the printed bill layout. The amount comes from the main project: that works fine for regular project billing, but it is just confusing for change orders. The solution is to use Custom Layouts, and remove that field from the form. Here are instructions to remove it.
This bug has been around for almost 20 years. It’s only a problem for users who create change orders, and also do projects with retainage. Otherwise it just shows zero. That may be why nobody has reported it until now.
For some reason, Change Orders have always been difficult.
Our C++ source code uses object-oriented programming (OOP). Everything is an object, usually inheriting code from parent objects. Allowances, Change Orders, Sales and Rental Transactions all generate income, so they have the same parent. The problem is that some people want change orders to act like miniature projects. Those are job accounts, which have very different parents. There’s no good place to put code that both can use.
For a while, we addressed user requests by duplicating Project code into Change Orders. It became more and more difficult. We finally backed off and decided that Change Orders just need to be their own thing. If you withhold retainage on one, it’s complicated enough to be a separate project. Likewise, if you want a detailed change estimate, create an Estimate record. Those have fancier breakdowns that handle all sorts of estimating quirks. You can link the Change Order to it.
There are some deeper reasons for the bug.
Our estimating and accounting software started out as simple spreadsheets created to run Turtle Creek Carpentry. It was a small remodeling company that didn’t need much paperwork. After computerizing, we took on bigger projects that sometimes involved change orders, retainage, and other fancy stuff. But that only lasted a couple years before the software business took over from construction contracting.
Many of the features in Goldenseal come from user requests, rather than our own needs. Sometimes the programmers must guess how the code should be set up. Sometimes the guesses are wrong. Most programmers do not have in-depth knowledge of estimating, accounting or whatever. There’s a certain amount of faking involved.
We listen to tech calls and user feedback, then fix the bugs to get everything working properly in the next update. It’s something that every software company must do.
Even worse, there is a huge range of construction business types and sizes. They all have different needs. When we add new features, it’s important to not make things more confusing for the users who don’t need them. That takes some judgement and design skill. Sometimes we need to back-track or remove features that are too confusing.
Meanwhile, the past couple months I’ve been wrapped up in real estate selling and buying. It has been interesting, but it’s winding down. More details in the next post.