Personal Tech Debt

This past week I have been able to traverse down the rabbit hole of personal tech debt. After a week’s work, I think I was able to get to the bottom and give everything an updated timestamp! All kidding aside, here were some of the projects I was able to revisit:

Kubernetes Cluster

My k8s cluster hosts websites, internal applications, and personal projects. While many choose to host their services on cloud services, I find it easier (and cheaper) to run it in a controlled home cluster. This week I was able to troubleshoot why some services were sluggish and crashing. After deploying prometheus and grafana a month ago, I was able to determine that my cluster was maxed out. I added another node to the cluster and performance improved. On a side note, I do not understand why people want to purchase barebone Intel NUCs when one can get everything included in a Dell Optiplex 5050 micro form factor.

Website redesign

My theme from 2015 was based on bootstrap 4 and had a few Admin UI bugs. The errors were only visible to me, so I have been putting it off for quite a while. This took me a morning to clean up with TailwindCSS. There are still a few UI features missing on the frontend due to a problem with my build and deployment process. I hope this new tech debt does not stay on the list for very long.

Personal Finances

I have been using GnuCash since 2014, and I have found that it is a perfect program for dual-entry accounting. However, it requires that I use a computer and the program to add or remove purchases. The reporting features are also lacking functionality; however, the program has been working flawlessly. It has been on my list to revisit how I do finances to see if a web-based solution would be better. Considering I now have multiple currencies, I need a program that could do both USD and Euro. GnuCash already has this feature and I found the new Alpha Vantage API to be quite buggy.

Considering I have been a longtime user of GnuCash, my file had some corrupted entries. GnuCash did not have any friendly warnings that would hint at the solution. I could not save the file in SQLite or in MySQL to use the Python library piecash.

I looked at Firefly-iii and considered migrating to that – it had multi-currency support as well. The rules feature meant I could create a webhook that updates transactions from USD to Euro against the public trading exchange rate for that day. At first, this program looked promising.

I was able to export my files to simple CSVs and attempt to import and map them to appropriate fields. However, account splits did not export very well. I had to spend 4 hours manually importing my splits into Firefly-iii. Then I tried importing new CSVs from my bank into Firefly-iii and I found that I would have to spend several minutes creating rules in Firefly-iii. At this point, I realized that these rules were already programmed into GnuCash. If Firefly-iii existed in 2014, I think I would have begun my personal finance with it, but the work required now to migrate to this solution is, in my opinion, not worth it for me.

In GnuCash, I can import CSV, QFX, and QIF. I can map the transactions quickly and easily. Since 2014, GnuCash has been training on my data to give me a personalized experience, which has kept me on this program. It has served my financial banking needs, but now I realized I had to figure out the corruption problem.

GnuCash Corruption problem

Tech dept often snowballs into bigger problems. I was facing the largest snowball in existence. How am I supposed to find this transaction_id that the GnuCash error was telling me? I cannot save the file as SQLite to use the piecash python library to find it. It seemed hopeless.

Then I realized I am a forgetful nerd.

In my attempt to create a clean, XML export to CSV of GnuCash, I came across a PHP GnuCash XML library. I then created a script which outputted all of the information I needed for exporting GnuCash XML to CSV. The odd transactions, which had errors, were searchable in the CSV my script created. I was able to find and fix my GnuCash transactions. Then, I was able to successfully save my GnuCash file in SQLite.

I still laugh at the GnuCash error: Transaction description cannot be null. My faulty transactions had the string “null” in them. Once I removed the string, saving worked.

New tech debt

The processing of my personal tech debt is down to two items: 1.) Fixing the CSS bugs in my new website theme. 2.) Creating scripts to extend GnuCash functionality through the SQL backend. I think I can work on some of these next month ๐Ÿ™‚