Yeah a complete rewrite at this point, or more exactly a complete re-engineering, is almost a certainty.
I’ve had the rare pleasure during my career of building the same complex processing system 3 times for 3 different companies. In efforts 1 and 2 (both very successful), I inherited some baseline implementation but the third time’s apparently the charm as I inherited nothing. What I found is that I did not fully appreciate how hamstrung I was working around design decisions that had been made even for just a year or so before I came on. It isn’t as if the initial implementation was ugly or fundamentally flawed, yet … for example someone built a data intake system that loaded raw data to a .NET DataTable, not considering that eventually files too big to fit in memory would be the result. I think back in the day you hit that wall at around 1.5G of memory consumed by the DataTable – it’s better now but still I had to craft an adapter pattern that would “chunk” about 10K incoming records at a time and spool them out to a DB temp table … it worked transparently to the client code which could still talk to the DataTable but it was still a kludge around a fundamental lack of foresight. The temp table overhead, the extra reading and writing, the extra management code all took its toll – and it’s all gone in this iteration. Gone, too, is MDAC and OLEDB and .ini files, replaced by a fast-forward CSV reader of my own design, with OS buffering optimized accordingly.
The new system runs at least twice as fast (in some situations 3 and 4x faster), has less runtime load on the DB that’s serving up API responses, has a more flexible internal design. Even the DB itself is relentlessly and ruthlessly simple compared to the old one, partly just better foresight in the design, partly leveraging functionality and system resources not available in 2008.
Now if I extrapolate from that experience to a product like Xojo that isn’t just encumbered by a couple of design flaws but many, and by lack of investment in the right things … and smoke and mirrors to provide something resembling functionality that would require a lot of rewriting to do correctly … I am just about drop-dead certain that the existing design is hopeless crap. Significant chunks of code could probably be salvaged / reused, don’t get me wrong, but …
Consider just one aspect. I’ve mentioned another idiosyncratic / semi-retro product here before, Lianja. Lianja lets you choose from several languages (going by memory, JavaScript, PHP, FoxPro /Xbase, C#) on top of its abstration / framework / designers. We DO have development systems / IDEs married to a single language (e.g., Swift) but why limit yourself if you don’t have to? Lianja brings in the greybeards who know and love Xbase, but by supporting the other languages it’s sending the message that it’s not JUST about that. If there are 3 or 4 choices including at least a couple of major / popular ones, then it sweeps aside objections to having to learn a new language with possibly poor or flash-in-the-pan market uptake – or that you think will damage your brain to even use it.
But Xojo is tightly bound to a specific language – nay, a specific DIALECT of that language of its own design – and can’t take advantage of any 3rd party ecosystems out there (pricey captive library vendors don’t count here). If you really believe in that dialect, fine, go ahead and offer it …but providing other bindings to other major languages only makes sense. But right now that would be cumbersome (in practical terms impossible) for Xojo. The only extensibility mechanism is a C/C++ plugin. With that, sure, in theory you could put in shims/adapters for other language bindings but it would be inelegant at best and slow at worst. I’m talking, pick the language at the project level and provide first-class code completion and documentation right in the IDE. That, Xojo can’t currently even properly do for it’s own lonely little language dialect.