In 2010, Node.js v0.4 came out and the internet was busy arguing about whether JavaScript on the server was a joke. Meanwhile, I was 22 years old, writing MUMPS routines for the pharmacy dispensing module of a national EHR system that would be deployed to hospitals across Jordan.
Most engineers my age were building CRUD apps. I was working on healthcare infrastructure.
That was HAKEEM — the national EHR project run by Electronic Health Solutions (EHS), a public-private partnership between the Jordanian government and a consortium of healthcare providers. My role: Developer and System Analyst, 2010 to 2013. Three years. Four hospitals. One national-scale system.
What HAKEEM was built on
HAKEEM was built on VistA — the Veterans Information Systems and Technology Architecture developed by the U.S. Department of Veterans Affairs. If you’ve never heard of it: VistA is one of the longest-running EHR systems on the planet, deployed across American veterans’ hospitals since the 1980s. It runs on MUMPS (later called M), a hierarchical database and language combination that looks like nothing else you’ve ever written.
The decision to base a national EHR on VistA was not a weird one. VistA is battle-tested in a way that commercial EHRs struggle to compete with — it has pharmacy modules, clinical decision support, scheduling, billing, all integrated under one coherent data model. The fact that it’s open-source meant Jordan didn’t need to license proprietary software for a national deployment. The fact that it runs on GT.M, a hierarchical NoSQL database, meant you needed engineers who could read MUMPS and weren’t afraid of a forty-year-old technology stack.
I was one of those engineers.
What “system analyst” actually meant on the ground
The title was Developer/System Analyst. What that meant in practice: I wrote C# GUI applications that communicated with the VistA backend via its Remote Procedure Call (RPC) Broker protocol. Two of the main ones were the Patient Information Management GUI and the Scheduling GUI.
These sound boring. They were not. Patient information management in a national EHR means your GUI is the interface through which a registration nurse enters data that flows into every downstream system — pharmacy, labs, billing, reporting. Get the data model wrong, or build the GUI in a way that lets garbage in, and you’re debugging patient ID mismatches at Prince Hamza Hospital six months after go-live.
The Scheduling GUI was similarly load-bearing. Outpatient clinic scheduling at the Amman Comprehensive Clinic means managing appointment slots across multiple departments, handling cancellations and reschedules, and producing reports that the clinic administration uses for staffing decisions. It’s boring software that matters enormously when it breaks.
MUMPS on a Linux server in 2011
The GT.M database ran on Linux servers. My job included maintaining bash scripts for backups and task management — the kind of operational work that doesn’t make a resume sound impressive but absolutely makes hospitals not lose data.
I also wrote MUMPS routines in three packages: Pharmacy, Billing, and HL7 Messaging.
MUMPS is a language that will offend your aesthetic sensibilities and then work correctly for forty years. Variables are global by default. The database is the language — globals (the MUMPS term for persistent variables) map directly to the hierarchical database structure. A routine is a file. There are no functions in the modern sense; there are labels and GOTO equivalents that make structured-programming people uncomfortable.
And yet: the pharmacy dispensing logic I wrote in MUMPS for HAKEEM is almost certainly still running in some form in Jordanian hospitals today. That is not a thing you get to say about most of the JavaScript frameworks that were popular in 2011.
Four hospitals, four different problems
HAKEEM was rolled out to four facilities, and each one was its own deployment story.
Prince Hamza Hospital was the large general hospital — high volume, multiple specialties, the full breadth of the EHR’s capabilities. This is where you find out whether your patient registration and scheduling scale when you have hundreds of outpatient visits per day.
Amman Comprehensive Clinic was the outpatient model. Lighter on inpatient care, heavier on appointment management and chronic disease follow-up. The scheduling GUI earned its keep here.
Prince Hussein Hospital had its own clinical workflow requirements that didn’t map cleanly to the default VistA configuration. Customization at the MUMPS layer. Fun times.
King Hussein Cancer Centre was the integration project — and it deserves its own explanation, which I’ll give in a separate post about HL7. But the short version: KHCC had its own EHR, its own patient records, and its own workflows. HAKEEM needed to consume and contribute data through a shared standard. That standard was HL7 v2. I built the integration.
Mobile GUIs in 2012
The other thing that doesn’t show up in the bullet points unless you look: I wrote mobile GUIs for HAKEEM components in Java and Objective-C, targeting Android and iOS respectively.
Mobile healthcare in 2012 was not a mature space. Android was on version 4.0. iOS 6 was months away. The concept of a clinician using a mobile device to access patient records was new enough that the UX patterns didn’t have established conventions. We were figuring it out as we went, under the constraint that a misread patient record on a mobile device has patient-safety implications that a misread tweet does not.
What this taught me about national-scale infrastructure
Three years on HAKEEM taught me something that I’ve carried into every project since: the gap between “working software” and “infrastructure that a country depends on” is a organizational problem, not a technical one.
The code was hard. MUMPS is hard. HL7 is hard. Writing a mobile EHR GUI in 2012 before anyone had a playbook for it was hard.
But the harder problems were the ones that didn’t have a debugger. Which hospital gets the next customization sprint? Who owns the decision when two hospitals need conflicting modifications to the same MUMPS routine? What does rollback mean when you’re mid-deployment at a hospital that’s seeing patients tomorrow morning?
I was 22-25 during those three years. The technical skills I picked up were valuable. The understanding of how complex systems fail at the organizational layer was more valuable. Turns out writing pharmacy logic in MUMPS was a pretty good way to learn both at once.
The Node.js ecosystem was still figuring itself out when I finished at EHS. The HAKEEM pharmacy module was already in production at four hospitals. I’m happy with how I spent those years.