Templates & Software Marketing (Jan 26)

Templates are a nifty feature in our construction estimating software. They are blank estimates already set up with dimensions and specs, so you get a running start on a project bid. In Goldenseal, click a little button to the right of the New button to see them. It shows a popup menu of available templates (some are already included in the starter files).

Sadly, many new users never click the template button, and lose out.

The new accounting/estimating software also has a New button, but it’s different. It shows a popup with New, Duplicate, and a list of templates. More obvious. It’s one extra step to make a new blank record, but worthwhile if it gives users an easier way to start records.

While testing templates in our own company file, Other Costs showed a long list of weird names: Accounting411, Ask Jeeves, BuilderSpace, Business.com, Capterra, ePilot, etc. It was a reminder of our phase 2 software marketing during the early 2000s.

Phase 1 started in 1987, with a $50 classified ad in Fine Homebuilding. It listed MacNail (our first estimating app) for $145. About 25 users bought it that year: a good return on investment. TurtleSoft soon upgraded to larger ads in every magazine aimed at builders, plus trade show booths and many bulk mailings.

When Goldenseal launched in 2000, we repeated phase 1, and got very poor results. Most people already had switched from paper to Internet. Next try was listings in every possible search engine and software directory. Hence the many templates for their monthly charges.

Those did better, but still not great. What worked best was SEO (search engine optimization). Our staff spent many hours tuning text, links and website pages to get on the first page for “construction estimating software” and the like. Also, many hours analyzing web traffic to see how buyers found us. Phase 2 was quite successful for 6 or 7 years.

Getting sales with a minimum of advertising expense was great, but SEO has a built-in problem. It’s best explained by the Red Queen to Alice:

“Now, here, you see, it takes all the running you can do, to keep in the same place.” — Lewis Carroll

If it’s successful, SEO gets your page high in search results. But search engines want to capture users, then have them click on ads. Different goals. SEO can out-smart Google for a while, but they soon adjust pagerank to bypass the tricks. Different SEO approach, different counter-measures. Rinse and repeat.

The result is a constant struggle, with no way to win in the long run. With AI entering the scene, it will only move faster.

Phase 3 marketing for our new accounting software will not be raw SEO. It has gone the way of magazine ads printed on glossy paper. Instead, I think we’ll revert to the advertising that worked best for Turtle Creek Carpentry in the 70s and 80s: word of mouth.

I’ll talk more about the details as the new app gets closer to first release.

Dennis Kolva
Programming Director
TurtleSoft.com

Bank Transactions, Name & Website (Jan 19)

This past week, testing the new accounting software gave all sorts of weird error messages. It turned out to be something stupid: the code for deleting records wasn’t finished. It screwed up the database and caused mystery errors in other places.

Fixing that still didn’t help for deleted bank transactions. That was a whole ‘nother problem. The new app made a big change from Goldenseal, and all details are still not shaken out.

Goldenseal uses 7 different data classes for bank transactions. All checking transactions are lumped together. Ditto for cash, credit cards, escrows, etc. To show records for just one bank account, the code pretty much does a Find. For various reasons, there’s no way to see windows for two different checking accounts at the same time. Sometimes it’s awkward.

The new accounting app lumps all non-escrow bank transactions together. Then each account keeps track of its own transactions. You can view transactions for as many bank accounts as you want, all at the same time. The interface is better, but it makes some things more complex.

One example: tabs and window titles show the bank account name, but the data is bank transactions. Everything else only needs one class ID for both, so a lot of code assumed that. I think we switched back and forth several times, fixing one bug for banking and making a new one. Now everything uses two separate classes, and things work OK.

There are more oddities, but our staff is tracking them down.

Meanwhile, the new accounting software is down to 3 possible names. We will register domains for all three, just in case the trademark registration falls through. We learned to be cautious after the 1990s rewind from BidWorks to BidMagic.

Also, the TurtleSoft website is switching to a different hosting service. There may be brief outages over the next week.

Dennis Kolva
Programming Director
TurtleSoft.com

Anatomy of a Crash (Jan 10)

Goldenseal accounting software rarely crashes, thanks to lots and lots of sanity-checking code. If something isn’t kosher, it gives an error message with the exact source code line that failed. That makes it easy for us to find and fix the bug. Then it exits to the event loop, so you can keep working.

The approach works well, but it does have a cost. Of the 26 megabytes in the Goldenseal app, almost half is just text for error messages. 99% of them will never be triggered, but it’s worth the weight to get quick fixes for the naughty 1%.

Programming the new accounting software works the same way. We rarely see crashes: just error messages and things that don’t work right. However, this week there was an actual crash. It happened after using the Link button to see the bank transaction that pays for a purchase. The dialog worked OK, but the app crashed later.

The bug turned out to be a dangling pointer in the bank transaction. We can’t test for those, so we must never let them dangle.

The accounting app has to keep track of which records are visible, so the screen will update if one is changed remotely. For example, changing payment status also changes the purchase status. In Goldenseal, each record keeps a pointer to the viewer it’s in (or null if not visible). When we post to the record, its viewer is also reloaded (if it exists).

The code is efficient, but a design flaw. A risky way to do the job. This wasn’t the first time the app has crashed there. Rather than slap on a quick fix, we decided to scrub it clean. The new app now checks every tab and window to see if the record is showing. No need for a pointer at all. It’s slower, but only by microseconds.

During the rewrite, a couple other possible bugs turned up, deep in the guts. To fix those, we need to understand the old code better. That means running current Goldenseal in the debugger, to make sure the new app does the same things at the same times. Linking records to the screen is complicated.

Setting up an old machine to run version 4.96 was a challenge. Because of the tough real estate market, TurtleSoft was in two temporary offices in 2023, plus the original and the new. Many chances for important stuff to be tucked away in a miscellaneous box. Some are still unopened.

We finally found an older Mac Mini with proper setup, plus all the wiring and converters it needs. Weather sucks, so app development is moving right along.

Dennis Kolva
Programming Director
TurtleSoft.com

Payroll Precision (Jan 1)

Thanks to readers who emailed! It’s very helpful to get feedback.

To save programmer time, updates for our payroll software will change this year. We’ll make new withholding tables only if they will be used, or if they are easy. We just uploaded the 7 US states with no income tax, plus user requests so far. Users from other states will need to contact us to get 2024 tables. Ditto for Canada. Click here for more info.

Turn-around time won’t be long for custom tables: it takes 20 to 30 minutes to fetch data, enter new numbers, double-check, and update the website. Even quicker if nothing changed this year.

Full-size annual updates for our payroll software are a real chore, and there are three reasons for it. One is just simple math: multiply that prep time by 50 US states + DC + 10 Canada provinces + 3 territories.

Secondly, every year one or two states make big changes that take hours to figure out. Maybe longer. Some tax departments invent amazingly bad ways to calculate withholding. Utah is so weird, it takes a special spreadsheet to convert their numbers. Connecticut added so many tables that we had to skip some of them.

Finally, many states are precise when they should just aim to be accurate.

An example of too much precision: California withholds exactly $115,488.06 per year for a single person making $1 million. Round it to $115,500, and nobody will even notice on their pay stub. Withholding is just an estimate of next year’s payment, anyhow. Our staff must type in and double-check hundreds of numbers each year. Futzing with pennies per million makes it harder. More chance of error by us, tax agencies and users.

Flat taxes are often pushed as a simpler tax system, and every year another state or two switch to them. They are precise and easy: same tax rate for everyone. Problem is, they increase inequality. It’s mostly because of marginal utility. Take 10% of income from a poor person, and they need to give up food, clothing, shelter or health care. Take 10% from a rich person and they can only buy 9 Picassos instead of 10.

Some people who make tax policy and tax tables don’t seem to understand math very well. Seems like a good topic for a future post.

Dennis Kolva
Programming Director
TurtleSoft.com