Another "domain-specific mail merge" that I built was a tool to pull summary data out of the client financial records and populate specific fields in some off-the-shelf income tax software.
That was a terrible tool to write and maintain. The tax software's import feature didn't actually work correctly. I reached out to the vendor and the response was basically "Works for us", so doing it the right way wasn't an option.
Instead, I used VBA to blindly enter data into the program using SendKeys[0]. Maintaining the program was a case of tabbing through and counting the number of times I had to tab. Enter first name, tab, enter last name, tab three times, enter address line 1, etc. Next year when the forms in the tax software changed I'd have to add/remove tabs in the appropriate places, sometimes input stuff in a different order, etc.
As a program, it was horrible, horrible code. As a useful tool for the business, it was incredible. It saved a ton of time and the staff that used to do this by hand, in addition to doing actual work on the more complex files, were incredibly happy.
Overall, it was completely worth it.
[0] https://docs.microsoft.com/en-us/office/vba/language/referen...
Holy cow why didn't I know about this 6 months ago =|
VBA is something I have had to reluctantly learn. It's a horrid/ancient language. Sorry if someone gets offended at that but to someone who uses a lot of modern development languages/tools it's just very very difficult with near-zero "nice to haves"... you just end up taking this huge lib of code around with you with functions like "inArray" etc.
> As a program, it was horrible, horrible code. As a useful tool for the business, it was incredible.
That's something that's rough for us engineers but can be hedged with great documentation, both inline and and otherwise =)
You have data in a database, you flatten it into a non structured document, send it, and then the other end uses data entry to add it to a database. What should be the realm of EDI/CrystalReports/Blockchain take your pick, instead everyone wants to interchange data in the pretty human readable format, as opposed to just rendering it that way for humans while also communicating the raw structured data.