5 ms·
The database contains 18,000 tables. The same underlying data might be represented in multiple different ways in each of these tables. I say "might" because the
by astazangasta 8y ago
The database contains 18,000 tables. The same underlying data might be represented in multiple different ways in each of these tables. I say "might" because there is really no way to know - imagine how hard it is to search that vast schema space to find the data you are looking for. The problem results in proliferation of new types whenever a new person shows up.
But most of the useful data is in "patient notes" anyway. These are mostly unstructured, because constructing good medical ontologies is hard, and medical professionals hate using them because the interfaces are bad and the ontologies limit their ability to describe what they need to for patient care. This effectively means it is impossible to search. There is a half-hearted attempt to work around this with "structured notes" which allow you to enter some parseable fields into the note, you can imagine what a mess that is.
It's not written in anything you've ever heard of - it uses a custom database language called MUMPS invented in the 60s. The database is not relational - although every night, the data is ported from the actual Epic database into a relational DB ironically named Clarity. You can get access to Clarity by attending a 5-day training session at Epic headquarters.
Finally, it's a huge monolith - one company runs the systems for hospitals all over the country. You can imagine how responsive they are to requests for change.
- briandear 8y agoTo be fair MUMPS isn’t the problem; it’s actually a very interesting programming language, but it’s so far removed from modern programming languages and syntax that is is a pretty big pain to work with.
- roywiggins 8y agoWell, the other language you can work in at Epic is Visual Basic 6, which powers the backend of the patient portal. Newer features are in C#, but anything developed before a few years ago (which are the core features) is all in VB6. Not VB.NET (unless it's changed since I worked there), actual honest to god VB6 plugged into IIS. It's a lot like PHP, in that everything is performed by string concatenation, except that unlike PHP the language was EOLed in 2003.
- goda90 8y agoMyChart is VB.NET. The main client is still VB6, which is why there has been a big push to a web based client. A few more years and VB6 can be fully retired.
- olooney 8y agoMUMPS is definitely part of the problem. Easy access to B+ tree globals don't make up for dynamic scoping, loose typing, no namespaces, no 3rd party libraries (and an embarrassingly small standard library,) a terrible console-only debugger, a godawful error handling system, etc.
- roywiggins 8y agoEpic has its own 1st party libraries! but you're still dealing with MUMPS so a lot of code looks just like this stuff in VistA: https://code.osehra.org/gitweb/?p=VistA-M.git;a=blob;f=Packages/E+Claims+Management+Engine/Routines/BPSBCKJ.m;h=e1125e8eb41a6fc303915b09b573cfdcc5355e9a;hb=b28fe897863536fa77dc32bf7da450d467ff6580 https://code.osehra.org/gitweb/?p=VistA-M.git;a=blob;f=Packa... and lines like this (from VistA) which is, I believe, doing some sort of string parsing. S PSRT=$S($P($P(BPSORT,U,1),":")="N":PATNAME,$P($P(BPSORT,U,1),":")="P":PINS,$P($P(BPSORT,U,1),":")="S":$S('BPCRON:-DOS,1:DOS),1:BPDIV(BPDIV)) I remember stumbling across code for implementing SHA1. Of course, MUMPS has no builtin code for bitwise operations so there was some code built for it that looked like switch(operation, operandA, operandB) { case 1: //AND {{AND A and B}} case 2: // OR {{OR A and B}} ... } which manually implemented bitwise operations using integer arithmetic
- goda90 8y agoEpic has coded around most of these issues internally. So it'll be a problem for anyone trying to pick up MUMPS out of the box, but not really for Epic.
- Fins 8y agoAt least MUMPS gets the "noSQL" thing better than any noSQL tool invented by people who weren't even born when MUMPS came out. But coding anything sufficiently complicated in MUMPS is not the most pleasant task.
- deleted 8y ago[deleted]
- roywiggins 8y agoPart of the reason why change requests are so hard at Epic is because most of the system doesn't have automated regression testing at all, so any change that isn't a totally new feature requires laborious manual testing just to convince yourself that you haven't broken anything.
- ChoGGi 8y agoSome people browse thedailywtf on occasion, so MUMPS isn't unheard of: https://thedailywtf.com/articles/isn-t-there-a-vaccine-for-mumps https://thedailywtf.com/articles/isn-t-there-a-vaccine-for-m...
- scottlocklin 8y agoI wondered when someone would bring up MUMPS. Imagine an industry where everything was written in Fortran-66.