Image: open source code for InvoicePlane, by Kovah, CC license

The overhaul of North Carolina’s Medicaid claims system started in 2008. It relied on custom programming and has so far cost the state $480 million. Since its launch earlier this year, no one has been happy. Doctors, hospitals, insurance companies and patients have heaped complaints and scorn on government officials.

All 50 states process Medicaid claims. Several software applications are available for medical claim processing, posing the question of why the state chose to build its own solution.

Understand what you are getting into with custom development. In The Mythical Man-Month, computer programming legend Frederick P. Brooks likens software development to the struggles of prehistoric beasts in the tar pits:

“Large system programming has over the past decade been such a tar pit, and many great and powerful beasts have thrashed violently in it. Most have emerged with running systems – few have met goals, schedules, and budgets. Large and small, massive or wiry, team after team has become entangled in the tar. No one thing seems to cause the difficulty – any particular paw can be pulled away. But the accumulation of simultaneous and interacting factors brings slower and slower motion. Everyone seems to have been surprised by the stickiness of the problem, and it is hard to discern the nature of it.”

Custom projects are especially hard to estimate and manage. Brooks argues that software development projects often fail to meet goals because:

  • Estimating techniques are poor, and reflect the pervasive optimism among programmers that everything will proceed according to plan.
  • Using estimated man-months to determine cost and length of a project is a “dangerous and deceptive myth, for it presumes that men and months are interchangeable.”
  • Project status monitoring is not rigorous enough to prevent slippage, and when projects miss milestones, the natural tendency is to add more people, which, counter-intuitively, will delay the project even more.

The commercial software industry is about 60 years old, yet we haven’t figured out how to convert human thought to computer instructions without spending months or years at it, along with horrific amounts of money. That the software industry has grown so much in spite of these hurdles is amazing in itself.

In the meantime we have to live with the shortcomings of custom programming, as deeply embedded as they seem. We can at least control our exposure to the risks of custom applications by not going there in the first place, at least on a large scale, and limiting the use of custom code to small discrete components such as integration or data capture.