State Payroll Withholding (Jan 6)

Yesterday, TurtleSoft released 2021 payroll tax tables for our accounting software. It’s our 31st year of doing so.

We kinda got into the payroll software business without meaning to. Its origins are similar to our estimating and accounting software. Turtle Creek Construction never had actual payroll: back then it was easier to pay under the table, especially for short-term workers. But as the software biz ramped up, suddenly there were actual white-collar employees who needed withholding, FICA and the whole nine yards.

Eventually, the early cobbed-together payroll spreadsheets were good enough to include in MacNail Accounting. It started with just New York and California, but expanded to the whole US a year later. The whole system improved vastly in Goldenseal, and we even added Canada.

Updating US payroll is quite the PITA. 50 states is a lot to wade through. Even worse, many states have found odd-ball ways to calculate withholding, and most years there’s at least one state that finds a new, even wackier way to do it. I think creating tax formulas is probably one of those low-status jobs that gets pawned off on some lowly official, or maybe the brother-in-law of the Governor.

A couple years ago, Utah changed their payroll withholding formulas to something complicated that Goldenseal couldn’t handle. Rather than write new code for just one state, we decided to graph their numbers, and figure how to match them. It turned out to be a straight line. So we now have a simple one-step table that gives the exact same results.

Connecticut is even worse. I think they must have disliked some part of their “tax curve”. Rather than tweak it, they added another table to correct it. Then that caused new problems, so they added another table. Then that still wasn’t right, so they added a couple more: including the Table C 3% Tax Rate Phase-Out Add-Back table. Dave Barry would consider it a bad name for a rock band. Someone with basic math skills could simplify the whole mess in a day or so, but I’m sure the political and bureaucratic process would drag out for months or years.

There’s a similar problem happening with the response to Covid-19. States and local health departments and governments are kind of on their own. Everyone is guessing and improvising.

The good news is that it will provide interesting data. Maybe we’ll learn from the mistakes.

Dennis Kolva
Programming Director
TurtleSoft.com

Goldenseal Pro Progress (Dec 31)

Our staff made some progress on Goldenseal Pro, then the holidays hit. This week we are futzing with payroll tax tables for 2021. Next week it’s back to working with QT. The big question is, how fast will it go?

Since the pandemic started, I have done a lot of of construction work. As a result, I’m now almost as lean as during Turtle Creek Carpentry, 30+ years ago.

The other day I carried a bucket of joint compound upstairs. About 60 pounds, the difference between my current weight (195) and my maximum during programming spurts (255). I imagined carrying that kind of load around, every single day. Nope. I really, really don’t want to go back there again. The mass piles on gradually so you don’t notice it right away, but I sure notice the lack of it now.

From 1987 to 1992, I was the main programmer for Turtlesoft: writing Excel spreadsheets and a HyperCard app. It meant many days sitting at the computer full-time. I gained 60 pounds. Then I switched to supervising real programmers, bought a fixer-upper house, and did a major rehab evenings and weekends. By the end of that I was lean again.

After the year when Apple almost died, I ended up finishing Goldenseal myself. It was six years of C++ frenzy, and back up to 255. That seems to be the usual max. Some combination of burning more calories because of the extra burden, and feeling unhealthy enough to do something about it.

Since then, my weight has correlated pretty closely to the amount of time spent sitting at a computer. Usually it’s somewhere between the two extremes.

Programming work is intense. It requires that you hold a huge mass of stuff in your brain’s RAM. The big picture is necessary so new code fits in well. Remembering many hundreds of names is necessary, so you can whip out code without looking up functions and classes. C++ syntax and good programming rules need to be in the brain’s best Level-3 cache, on call constantly.

Loading it all is a big mental effort. But once it’s in, you can get into a productive groove and really fly. Write a few lines and boop, something works when you run it. The process is very satisfying. I can’t think of anything in construction that gives such amazing results so quickly. But it requires sitting still, only moving fingers and eyeballs, and living in a fantasy world of CNextRecordButton and ShowBreakdownTable(const SInt32 tableID) for hours at a time.

Losing it is like a blown engine. Bye-bye forward motion. Programmers are often surly, because a single interruption can pop the whole mental picture like a balloon. It may take hours to restore it.

Because of all that, when not programming, it’s hard to start. Then once you’re in, it’s hard to stop. If it were a drug, a programming buzz would have the unpleasant start of mescaline, followed by the addictive rush of cocaine.

Some types of programming don’t require all the intensity. Fixing small bugs is possible to do in shorts spurts. Adding a small feature to familiar code is easy. Problem is, building a whole new QT interface for Goldenseal will require full-on high-impact frenzy. I’ll need to be in the zone for quite a while. Maybe 100 days of it? It’s still just a guess now.

I still haven’t figured out the right balance, to be both code-productive and healthy. The next few weeks I’ll try scheduling two-day spurts, and see how that works out. Then tweak it if needed.

The goal for 2021 is to finish Goldenseal Pro on a reasonable schedule, but not get fat. And not get Covid-19 before a vaccine is in my arm.

Dennis Kolva
Programming Director
TurtleSoft.com

Goldenseal Pro Progress (Dec 14)

Our staff is back to cruising on Goldenseal Pro. Productivity really went up once desks, equipment, wiring and amenities were all settled in at the new office.

These days, we are reinventing the wheel for the third time. Our staff built the original Goldenseal interface in the late 1990s and early 2000s. After that, we worked on improvements to the accounting and estimating code. From 2016 until Sept 2019, we tried rewriting the entire interface using the Cocoa framework: a necessity to run on 64-bit Macs. Then we started over, and repeated with MFC for Windows, until the pandemic hit. After neither of those frameworks worked out, we started over yet again with QT (cross-platform) this summer.

All that previous work wasn’t completely wasted. TCS_FOR_COCOA marks the places where our code connects with the Cocoa version. We are going through all 258 of them one by one, and writing a QT branch to do the same thing. It saves a lot of thinking and testing.

So far, QT seems pretty decent. However, it does have its oddities. For example, we will need to use four different QT classes to replace our current text fields. Cocoa and MFC only needed one, as did the original Goldenseal.

QDateEdit is pretty neat, because it pops up a calendar to enter dates. A bit nicer than just typing in text. QTimeEdit provides a similar pop-up tool for times (which we don’t use very often). For regular text, there’s QLineEdit for single-line fields, and QTextEdit for multi-lines. Splitting them is a minor nuisance, but QTextEdit does show scroll bars if multi-line text gets too big. To do that in the original Goldenseal would have required too much extra code.

The real test will be breakdown tables. We wasted almost a year on them in Cocoa, and still never got them working right. MFC was even worse. There’s other stuff to do first, but I think we’ll be able to move on to tables within a month or two.

QT just released a major update. Up until now, QT has been a weird mix of a commercial version, and one that is free and open-source. The bad news is that QT 6.0 won’t have a free option. The good news is that they dropped the license fee to something much more reasonable for small developers like us.

This may be a good thing in the long run. We wrote the original Goldenseal using a paid app (CodeWarrior). It cost something like $300 a year, but the software was a joy to use. Their support was great. These days most desktop programming happens with either Xcode (free from Apple) or Visual Studio (free from Microsoft). They and their frameworks have been a constant struggle.

Paid-but-great definitely beats out free-but-mediocre, especially when you’re using it for hundreds or thousands of hours.

Dennis Kolva
Programming Director
TurtleSoft.com

Covid-19 Update (Nov 22)

Our staff is back to working on Goldenseal Pro, though no major progress to report yet.

Meanwhile, here’s a chart for new weekly Covid-19 infections in each region in the US:

The numbers are from Johns Hopkins University. I multiplied counts for the first few weeks by 5x, because testing was so sparse back then. There’s still lack of testing now, but not nearly as bad.

50 million people are predicted to travel for Thanksgiving, so the curves probably will get steeper.

Covid-19 is now worse than the first surge 7 months ago, but the US reaction is very different. Here’s a chart of restaurant activity from OpenTable. It covers the entire pandemic from Feb 18 until yesterday.

Between March 10 and March 20, every state dropped rapidly from normal to 0% or close. Starting in May, seatings inched back to 50% or 60% of usual in most places (Rhode Island went crazy with restaurant dining, while Hawaii and DC mostly stayed closed). Attendance has dropped off a little in the past month, but many people are still eating out like it’s 2019. Presumably they are doing other things that spread virus, also.

I don’t know what to say. It’s like watching two trains on the same track, headed towards each other. The Coronavirus train is much, much bigger.

Dennis Kolva
Programming Director
TurtleSoft.com

Goldenseal Pro Progress (Nov 2)

TurtleSoft is mostly done moving into the new office. It’s bigger, which was a bit of a gamble given the uncertain economy.

Next on the agenda is to finish interior work on my house in town, then sell it and buy another fixer-upper. Right now the local real estate market is still pretty good, and hopefully it will stay that way for a few more months.

Programming requires intense focus, which (for me at least) requires a calm environment. I was making good progress on Goldenseal Pro before the move, but still haven’t shifted back into programmer mode. It may take another week or two to really get settled in and productive again. Long nights and crappy weather also help.

The rate of progress this winter will depend on the pandemic, politics and the economy. Personally, I’m calmer when experiencing positive cash flow. Some of the ways to make that happen consume a lot of time.

The Goldenseal Pro project has dragged on much, much longer than ever expected. First there were a few subcontractors who tried it and failed. Then our staff took over, and failed with two different frameworks (Cocoa for Mac, MFC for Windows). QT is looking like it may be a winner, but that is not guaranteed. We will know better in a few months.

If it’s clear that we can’t finish Goldenseal Pro, I’ll fall back on the original retirement plan from before Turtlesoft started: buy, live in, rehab and sell fixer-upper houses on a 3 to 5 year cycle. Selling my current house in April +/- should provide enough extra cash to pay back folks who prepaid for Goldenseal Pro. That is a bit dependent on where the pandemic and the economy go. If there is a major financial crash, I’m pretty much screwed.

If QT works out, we probably will have something to ship by late 2021. Possibly earlier if sailing is very smooth. I’m sure the early releases will have some gaps and rough spots, but at least the core estimating and accounting functions are well-tested. They won’t be affected by the new interface code.

Meanwhile, please vote. Please wear a mask. Stay safe. Covid-19 is not a hoax:

Dennis Kolva
Programming Director
TurtleSoft.com

Goldenseal Pro Progress (Oct 5)

Our staff has made some progress on Goldenseal Pro: text fields now fill in values, and popup fields get menus. QT is still working well, and I’m very optimistic that we’ll be successful with it.

However, our staff has mostly been busy with other things, the past couple weeks. The rest of October will be similar, before we get back on track.

First of all, TurtleSoft is moving to a less Covid-risky office. At the moment everything is boxes and disassembled shelving. The chaos will get worse before it gets better.

I also finished re-roofing my house last week. It was a big project that started in late May: removing 3 layers of ancient asphalt shingle from a 12:12 pitch, then installing new metal panels. I also added a couple of skylights in the attic. There’s still a small shed roof to finish on the rear, but that should only take a few days. It’s the first roofing project I’ve done with scaffolding rather than ladders, and the process was so much safer and more pleasant. Well worth the extra setup and take-down time.

Getting back into major construction work was satisfying. 20 to 25 hours a week of physical work seems like the sweet spot: enough to get very fit, but not enough for serious back and joint pains. So, I’m planning to finish some interior work over the next few months, then sell the place and buy another fixer-upper. Then repeat the process every five years or so.

For most of its lifetime, TurtleSoft has been a part-time operation. This really isn’t a change from how it’s always been here. Sometimes there are spurts, and sometimes gaps. Goldenseal Pro will be spurting again soon enough.

Dennis Kolva
Programming Director
TurtleSoft.com

Goldenseal Pro Progress (Sept 14)

Our staff is gradually getting Goldenseal Pro to run, using the QT framework. Right now the app launches, opens files, and fills in a list of accounts and transaction types on the left side of the main window. Next step is to get it to load layouts into tabs on the right. That’s the most important part of the interface for Goldenseal Pro.

Back when we attempted to use Apple’s Cocoa framework, it took two or three months to get this far. So far, progress seems faster with QT, despite spending fewer hours per week. Some of speed increase is because we can reuse previous programming, or at least the logic behind it. Some is because we don’t have to futz with two different programming languages.

We currently are working mostly on Macs, but the same code also runs on Windows. Most likely we will alternate between them.

People warned us that QT is bloated, and they weren’t kidding. I found a list of all the QT classes: there are 1,718 of them. In comparison, Apple’s Cocoa has 654 classes, and Microsoft’s MFC has 475. I put all the QT stuff into a spreadsheet and narrowed it down to things that we might actually use. That gets it to a couple hundred.

In the past few years we used both Cocoa and MFC to build Goldenseal Pro, and failed completely. Not the first time we’ve had to toss months or years of work. Since 1987, our staff has tried about 20 different frameworks for building desktop apps. Only three resulted in actual apps: Microsoft Excel (MacNail), Apple HyperCard (BidMagic), and Metrowerks PowerPlant (the current Goldenseal). All three of them were productive right from the start. So far, QT feels the same way. Despite the bloat, it works. It’s not painful to use. Success is not guaranteed, but I’m more optimistic that we will finish this time.

The real test will be breakdown tables. If necessary we can use the work-arounds already developed for Cocoa, but it would be better if we can have something closer to the current interface. It probably will be 2 or 3 months until we get that far.

Dennis Kolva
Programming Director
TurtleSoft.com

Goldenseal Pro: QT Creator (Aug 24)

In the movies, programmers type hundreds of code lines at a furious pace. Then they hit a button, and it saves the world/hacks into the FBI/some other dramatic theme.

There may be non-movie programmers who can program like that, but I’m not one of them. I’ve never met anyone who can do it in real life, either. We mortals spend 10% of our time writing a few lines of code (slowly). Then 90% figuring out why it doesn’t work. To help with that, we use an IDE (Integrated Development Environment). It’s a text editor that also runs the software, with tools for debugging.

A productive day of programming might have 100 cycles of write/run/debug. Multiply that by 100s or 1000s of programmer-days, and it’s almost like being married to the IDE. It’s as big a choice as which programming language to use.

For Macintosh, almost everyone uses Xcode: free software from Apple. For Windows, the main IDE is Visual Studio: free software from Microsoft. Both are OK but not great. I think a competitive environment would produce better quality IDEs, but nobody can compete against big-company and free.

QT comes with its own IDE: QT Creator. This past couple weeks, our staff has been migrating Goldenseal Pro into it. I have been cautiously skeptical about QT Creator, mostly because QT itself is a confused mishmash. There is a free, open source project, and also a company making a living from a commercial version. It’s an odd combination that could end up better then having huge corporate overlords, or it could be worse. Still too early to tell which it is.

Running code in an IDE is a three step process. First there’s a compiler, which checks everything for errors, and gives warnings for code that is suspicious but not deadly. If no fatal errors turn up in the compile step, the IDE then links everything into an app, and runs it. For step three you use the app, and see if it works right. If not, the debugger will step through the code bit by bit, so you can see if it’s working as expected. A fix might take minutes, or days.

Today we just finished getting Goldenseal Pro to compile. It meant eliminating about a thousand errors, mostly caused by old, obsolete code. Some could simply be tossed. Some could be rewritten immediately, with minor changes. The rest is just bypassed for now, until we see whether it’s needed or not.

The next step is pretty quick: fixing link errors probably won’t take more than a day or two. Then we start the long process of getting it all to run properly. For MFC my first guess was a year for that. It’s also a reasonable guess for the QT version.

Overall, QT Creator has its quirks, but it seems to function OK. I think our staff will get used to it.

Dennis Kolva
Programming Director
TurtleSoft.com

Goldenseal Pro & QT (Aug 10)

Our staff planned to spend the summer learning QT, but we soon discovered that it is very similar to other GUI frameworks we’ve already used. Much less to learn than expected. It’s time to jump right in.

To make the first steps easier, we cheated. Last week a subcontractor coded up the basic windows, using screen shots from the Cocoa version that we abandoned last year. He is a QT expert, so it only took a few days. The app runs on both Mac and Windows, and it looks pretty decent.

It’s nice to work with a framework that is based on modern C++. Apple’s Cocoa and Objective-C were just too quirky and weird. Microsoft’s MFC was far too old, and their new WinUI is still just vapor.

Right now we are checking the code, and deciding how to link in our existing accounting and estimating. The biggest challenge is figuring when & where to work on Goldenseal Pro. We definitely can’t subcontract the whole thing. Tried that once and it went nowhere. We know our own business software better than anyone, so it makes sense for our own programmers to do the work.

Problem is, Cornell and Ithaca College both decided to open in-person this Fall. Students are already starting to move in. Many are walking around without masks. Their parents are even worse. Some have come from states with many active infections. It makes life challenging for those of us over 60.

Even worse, the TurtleSoft office is in the densest part of town, sharing a four-story wooden stairway with nine other offices. Everyone shut down in March, but most are reopening gradually. People walk the halls and use the shared bathrooms without masks. The building dates from about 1890, so there is zero ventilation inside. I’m still trying to figure how to cope.

Personally, I maintain work/life balance by not having computers or Internet at home. That may need to change.

Meanwhile, I’m in a re-roofing groove. Just moved the scaffolding to finish the last bit on the east side of my house. The west side is more complicated because it has pipe flashings, rusted-out gutters, plus plans to add a couple skylights. The construction project will finish some time in September.

This early phase of software development requires plenty of head-scratching, design thought and planning. It probably won’t suffer much if it gets limited attention over the next month or so. As days get shorter and the weather grows worse, it will be easier to slither into a coding frenzy. Somewhere or another.

It’s still far too early to even guess at how long this software project will take. It’s the third attempt. Maybe we are getting better at it.

Dennis Kolva
Programming Director
TurtleSoft.com

Goldenseal Pro & QT: First Look (July 20)

Over the past few weeks, our staff has been learning the QT framework. It’s still too early to tell for sure if it will work for the new Goldenseal Pro accounting software, but at least it hasn’t been a disaster like Microsoft’s WinUI 2.4.

In 2015 we hired a contractor to build Goldenseal Pro with QT. He started with the C++ source code for the current Goldenseal, and gradually added QT interface code. With hindsight, that approach probably was a mistake. The project became too complicated, and I think he was soon overwhelmed. We paid him for the first draw, but the project stalled out soon after that.

What we will do instead is ignore our current code, and build the new interface completely in QT. If and when that looks good and works well, then it’s time to link in our existing code.

With that approach, we’ll waste less time if QT turns out to be a total dud. And we’ll have a better idea of its limitations, before we design the links between our code and the GUI human interface. I suspect that if we had done that with Apple’s Cocoa framework, we would have discovered its fatal flaws six months or a year more quickly.

QT does some weird stuff with the C++ language: that is one reason we decided not to continue with it, back in 2015. But since then we’ve dealt with even worse stuff in Apple’s Cocoa framework, and Microsoft’s MFC. Now the programming quirks in QT seem downright tame. We can get used to them. Five years of upgrades also helps.

I’m cautiously excited about the prospects of actually getting QT to work. It creates versions for both Mac and Windows, which is a big improvement from where we were ten months ago.

Of course, it will take at least another month or two before we’ve mastered QT enough to actually start using it. There are a couple more books to work through first.

********************************

There was a spell in the 1990s when TurtleSoft seriously considered selling out to a bigger competitor, and moving on to something new. One possibility was Timberline Software (the biggest construction software at the time). Discussions with them went in circles, and ended up nowhere. A couple years later I talked with one of their ex-salesmen at a trade show. He described them like this: “Timberline grew too fast. It created a vacuum in the middle, which sucked in layers upon layers of assholes.”

I suspect that same history may apply to Apple and Microsoft. They were young and feisty underdogs in the late 1980s. Our first products used their tools, which were productive and sometimes even fun to use. Now both companies are fat and arrogant monopolies, with too many layers in the middle.

QT is much smaller. We’ll soon find out if that helps.

Dennis Kolva
Programming Director
TurtleSoft.com