Totus, Protheus, and the ERP That Time Forgot
Every once in a while, a conversation veers into unexpected territory. In this case, it started with me venting about a ticket I’d opened with Bright Pattern over a missing API — the kind of basic CRUD endpoint that should have been trivial to implement. That was frustrating enough, but in the middle of the rant I caught myself saying: “Well, it could be worse. We could be dealing with Totus.”
That comment triggered a flood of memories, stories, and scars from my time working with Protheus (still Microsiga back then, before the rebrand). And the more I thought about it, the more I realized it deserved its own write-up — not just as a trip down memory lane, but as a cautionary tale of what happens when a company markets “modern technology” while relying on software architecture frozen in the Reagan era.
The Consultant and the Invoice
Back in the mid-2000s I was working at CCAA. Leadership had decided that instead of building a CRM in-house, we’d implement Protheus from Totus. Perfectly reasonable: many companies go that route to avoid putting too much strain on their internal IT departments.
We had a Totus consultant embedded with us for about six months. His sole mission: automate the synchronization of our invoice system with Protheus. After half a year, his proud achievement was being able to process one specific type of invoice… in about thirty minutes per invoice.
Now, here’s the kicker: CCAA generated around five thousand invoices per day.
You don’t need to be a mathematician to see the problem. At that speed, a single day’s invoices would have taken months to process. It wasn’t a system — it was a slow-motion disaster.
The Second Coming (Or So It Felt)
At the time I was still relatively new — maybe eight months into the company — working as a senior systems analyst. My boss, the IT director, was understandably furious with the Totus consultant’s “progress.”
One day I knocked on his office door and asked, almost sheepishly: “Boss, can I take a crack at the Protheus problem?” He looked at me as though I’d just walked in carrying stone tablets from Mount Sinai.
I spent a month mapping our database to the Protheus database (which, wonderfully, could “use any database, as long as it was a DBF”). Then I built a program that read the invoices we generated and imported them into Protheus.
Total development time: one month.
Total runtime for all 5,000 invoices per day: about five minutes.
After six months of consultant treadmill, the solution ended up being a one-man project finished in less time than it used to take to process a single invoice.
Under the Hood: ADVPL and the Ghosts of 1989
That was my first real taste of Protheus’s internal workings, but not my last. To extend or customize Protheus, you worked with ADVPL — “Advanced Protheus Language.” The name promised modernity; the reality was that ADVPL was basically Clipper in a new outfit.
At some point, Totus had bought a library from an Eastern European developer. It was a compatibility shim that allowed Clipper-derived languages to read DBF files through an ODBC bridge. This was how Protheus claimed “database independence.” In practice it meant:
-
Everything still revolved around DBF, a flat-file format from the 1980s.
-
Referential integrity didn’t exist unless you manually enforced it.
-
Transactions and concurrency were fragile at best.
-
Performance was throttled by layers of glue code.
When I peeked deeper under the hood, I found functions literally written in Clipper Summer ’87 — code dating back to 1989 — still running in production. This wasn’t legacy in the sense of “stable old COBOL routines still trusted by banks.” This was creaky, flat-file code duct-taped into something being sold as a modern ERP.
And yes, it was traumatizing.
Legacy vs. Fossilization
To be clear: I’m not against legacy systems. There’s a reason COBOL programmers still command good salaries today. Much of the global financial system runs on code that predates the Moon Landing. But those systems endure because they are stable, well-understood, and wrapped with modern layers that make them usable in today’s environment.
Totus was different. It wasn’t maintaining legacy where it made sense. It was fossilizing legacy and selling it as new. Customers were told they were buying a “modern ERP,” when in fact the core logic was still bound to flat-file databases and Clipper-era routines.
That meant no real relational integrity, fragile concurrency, and APIs that were either absent, archaic, or bolted on through shims. And of course, all of this created perverse outcomes like the consultant who could only process one invoice type at geological speed.
Why It Matters
You might think: “Okay, but that was 2008. Surely things have changed by now?” Maybe. It’s been a long time since I worked directly with Totus, so I can’t say for certain what their stack looks like today. But based on the scars left behind, I wouldn’t be surprised if much of that DNA remains.
The point is less about Totus specifically and more about the broader lesson: you can’t build a modern product on archaic foundations without eventually paying the price.
-
Integrity: A system without native referential integrity will always be a liability.
-
Scale: Workarounds may limp along for small workloads, but they collapse under real-world demand.
-
Maintainability: Every patch becomes archaeology, every integration a duct-tape bridge.
-
Credibility: If you’re selling innovation, don’t ship fossils.
Closing Thoughts
The conversation that sparked all this started with frustration about missing CRUD APIs in another system. And it made me realize: as irritating as it is to wait a year for a basic endpoint, it really could be worse. At least that platform isn’t secretly running code from 1989 under the hood.
Totus taught me that sometimes “enterprise software” is less about solving problems and more about embalming them. And while the scars from peeking inside Protheus are still with me, the experience left me with one lasting piece of wisdom:
If you want something done right, sometimes it’s faster to do it yourself than to wait six months for a consultant to process one invoice.
Comments
Post a Comment