A rare but nasty bug has been lurking in Goldenseal for years: one that can erase the data in a record. It happens in our own TurtleSoft accounting file, maybe once every 2 or 3 years.
Last week our staff experienced it while reconciling bank accounts. There were clues to the cause. We started a find for Material Purchases, then switched to Other Costs and posted a payment. It seemed to zap the purchase record that was active before the find. All fields were blanked out.
Later testing could not duplicate the problem. We tried all sorts of things. It must need very specific conditions. There’s still a missing piece to the puzzle.
Rare bugs are always the hardest to fix. For now, the best advice is to not do a Find and then leave it dangling while you do something else.
Yep, even after 20+ years of polishing, Goldenseal is not perfect. The root of the problem: accounting software is complicated. Probably more so than a house or a car. There are thousands of moving parts inside. Sometimes they interact in strange ways. Houses have evolved for a few thousand years, and cars for 150. They still have problems. So, perfection probably is impossible for our accounting software. The best we can do is make it as reliable as we can.
One thing that helps is refactoring. It’s the software equivalent of remodeling: tidying up, modernizing, improving the design.
Whatever causes the Find bug, the new accounting app probably won’t do it. We rebuilt its interface. Goldenseal uses the data entry layout for Finds, and switches everything into find mode. The record is still there, and vulnerable. The new app has a separate Find panel, instead. It’s totally separated, and safer. We couldn’t do that in the original app. Memory was too tight. But now we can throw around an extra 100K of RAM, and get a better design.
Goldenseal is an old app, started back when Macs used 680×0 chips, and Windows ran on 386 and 486s. Screens were small. Hard drives and RAM were tiny. Processors were slow. In house years, it was about 1885. The software equivalent of lead plumbing, knob-and-tube wiring, and 8×8 sill beams rotted to sawdust.
On top of all that, the C++ language was only 5 years old when we started to use it for Goldenseal. Object-oriented programming was very new. We made plenty of design mistakes. Now the language has matured, and our staff is more experienced. The tools and the workers are better, this time around.
Meanwhile, our staff spent most of the past week refactoring code in Custom Layouts. We want to make the new data format 100% reliable. It was a major overhaul. For example, Goldenseal has about 20 different classes for the things you drag around in Custom Layouts. The new app uses one class for everything. It’s simpler code that is easier to debug.
Updating has sure taken a lot of time, but the next generation is more solid.
Dennis Kolva
Programming Director
TurtleSoft.com