Opsera Presents Flutter 2026 · The AI-SDLC Summit

Evaluate your code base for modernization.

Healthcare IT Modernization cover graphic showing hospital, clinical, and payer systems flowing into a modernization platform and out to modern healthcare systems with analytics dashboards

TL;DR

  • Healthcare IT modernization means upgrading the systems that run patient care: registration, clinical documentation, orders, and the interfaces connecting hospitals to labs and payers. Most of it happens on systems already in daily clinical use.
  • The defining constraint is that the system cannot stop. A hospital cannot pause admissions while engineers refactor code, which rules out the rewrite-and-switch approach that works in other industries.
  • Rewrites fail here for a specific reason: a decade of clinical rules lives inside the existing code, much of it undocumented. Rebuilding from a specification loses the rules nobody wrote down.
  • We assessed OpenMRS Core, an open-source medical record platform used by health systems worldwide. It scored 67/100, with one dimension far below the rest.
  • The weak spot was structural coupling, scoring 44/100 with a dependency balance of 0.32. In plain terms, a handful of components carry so much of the system that changing any one of them risks breaking things far away.
  • The approach that works is behavior-preserving change: write tests that capture what the system does today, improve the internals underneath those tests, and prove clinical behavior did not shift.

Hospitals run on software that has been accumulating since before most of the current staff arrived. The registration system knows which identifier formats are valid because someone encoded that rule in 2009. The lab interface handles a particular message quirk because a specific analyzer once sent malformed data, and the fix stuck.

None of this is bad engineering. It is what happens when software serves real clinical work for long enough. The difficulty comes when that system needs to change, because nobody can fully describe what it currently does. This post explains how healthcare IT modernization works under that constraint, using a real assessment of an open-source medical record platform as the worked example.

Understanding what healthcare IT modernization involves

Healthcare IT modernization is the work of improving clinical systems already in production use, without changing what those systems do for the people using them. It covers the core platforms that hospitals and payer organizations depend on daily.

The systems in scope typically include:

  • Electronic medical records, holding patient identity, encounters, diagnoses, and clinical notes.
  • Order management, covering medication orders, lab requests, and their approval and fulfillment lifecycle.
  • Terminology services, mapping local codes to standards such as SNOMED and LOINC so data means the same thing across systems.
  • Integration interfaces, exchanging messages with labs, pharmacies, imaging systems, and payers, usually over HL7 or increasingly FHIR.
  • Administrative tooling, managing users, roles, privileges, and configuration.

Modernization is not the same as replacement. Replacement means buying a new system and migrating to it, a multi-year program with its own substantial risk. Modernization means keeping the system and improving how it is built: reducing coupling, clarifying boundaries, hardening security, and making future change cheaper.

The distinction matters because the two carry very different risk profiles. Replacement risks a discontinuity at cutover. Modernization spreads risk across many small changes, each individually verifiable.

Why clinical systems resist the usual modernization playbook

Software teams outside healthcare have a well-worn approach: build the replacement alongside the original, gradually migrate traffic, and retire the old system. That approach runs into three obstacles in clinical settings.

Downtime carries clinical consequences: When a retail site goes down, sales pause. When a medical record system goes down, clinicians lose access to allergy lists and medication histories while patients are in front of them. Hospitals maintain paper fallback procedures precisely because this happens, and every hour on paper creates reconciliation work afterward.

The rules live in the code, not in documents: A patient identifier validation routine may encode a dozen institutional policies accumulated over years. A rewrite built from a written specification will implement the documented rules and silently drop the rest. The failure surfaces later as rejected registrations for patients whose identifiers were previously fine.

Extensions depend on internal structure: Platforms like OpenMRS support modules that health systems install to add local functionality. Those modules reach into the platform’s internals. Changing internal structure can break modules that a hospital depends on, and the platform team often has no visibility into which modules are deployed where.

ConstraintWhat it rules outWhat it permits
Continuous clinical availabilityBig-bang cutover, extended maintenance windowsIncremental change, phased rollout, per-site opt-in
Undocumented business rulesRewrite from specificationCharacterization tests capturing current behavior
Third-party module dependenciesFreely changing internal structureStable public contracts with internals refactored beneath
Regulatory audit requirementsUntracked changes to privileged operationsImmutable audit records for administrative actions

Reading the assessment of a real clinical platform

To ground this, we ran OpenMRS Core through Forge, which scans a codebase and scores it across eight dimensions of how difficult it is to change the system safely.

OpenMRS is a mature open-source medical record platform, widely used by health systems in many countries, particularly in low-resource settings. It is genuinely used for patient care, and it is large: 345 files analyzed, built in Java on Spring and Hibernate.

Forge platform ForgeScore assessment screen for OpenMRS Core showing a composite score of 67 out of 100 rated Established, an eight-dimension score radar, and improvement opportunities including rebalancing dependency gravity and dissolving circular dependency locks

The composite score was 67 out of 100, rated “Established.” The individual dimensions tell a more useful story than the composite.

DimensionScoreRatingWhat it measures
Hidden Gems82AdvancedReusable patterns worth extracting
Logic Narrative76AdvancedHow readably the code tells its story
Semantic Clarity72EstablishedWhether names match domain concepts
Future Proofing69EstablishedResilience to future change
Trust Boundaries68EstablishedWhere untrusted input crosses into the system
Data Weight64EstablishedHow efficiently data moves
Cognitive Load57DevelopingMental effort a change requires
System Gravity44FoundationHow concentrated the structural mass is

System Gravity at 44 stands well below everything else, and it is the finding that shaped the entire remediation plan.

What a low structural score reveals about change risk

System Gravity measures how evenly responsibility is distributed across a codebase. The scan reported a dependency balance of 0.32, where an even distribution would approach 1.0.

A useful analogy: imagine a hospital where every department routes requests through one coordinator. The arrangement works, and that person becomes extremely knowledgeable. But changing their process affects every department at once, and their absence halts everything.

The scan found this pattern concretely. One method, getCurrentSession, has a fan-in of 348, meaning 348 places in the code depend on it. Change how it behaves and the effect reaches into hundreds of call paths, many of them touching clinical data.

Two related findings compound this:

Circular dependencies exist when component A depends on B and B depends on A. Cycles make independent change difficult because the two components must be understood, tested, and often modified together.

2,434 layer violations were detected, meaning code at one architectural level reaches directly into another rather than going through the intended path. Some are benign inherited calls. Collectively, they signal that the intended boundaries are not enforced, so a developer cannot trust the architecture diagram to predict which changes will be affected.

Diagram comparing an evenly distributed dependency graph near 1.0 against OpenMRS Core's dependency balance of 0.32, showing the getCurrentSession method with a fan-in of 348 reaching across the entire codebase

A dependency balance of 0.32 against an even distribution near 1.0. The hub works, but every change to it reaches hundreds of call paths.

Cognitive Load at 57 follows from the same root. The scan noted that a meaningful change can require holding Maven module inheritance, Spring XML wiring, transaction proxies, AOP advice, Hibernate sessions, servlet configuration, and module classloading in mind simultaneously. Each is a reasonable choice. Together they impose a real tax on every contributor.

Turning findings into work that preserves clinical behavior

The assessment produced 72 work orders across 8 epics. Their ordering encodes the central discipline of clinical modernization: prove current behavior before changing anything.

The first epic establishes a baseline. WO-001 captures a dependency-gravity map so improvement can be measured rather than asserted. WO-002 adds characterization tests, which record what the system does today rather than what the documentation claims. If an undocumented rule exists in the code, the characterization test captures it and fails loudly when a refactor breaks it.

The second epic builds parity fixtures for six clinical areas before touching any of them:

Work orderClinical areaWhat it protects
WO-004Patient identityRegistration and identifier validation rules
WO-015Encounter documentationHow clinical visits are recorded
WO-016Observation versioningAmendment history for clinical readings
WO-017Order lifecycleMedication and lab order state transitions
WO-018Visit lifecycleAdmission through discharge
WO-019Terminology dictionaryLocal-to-standard code mappings
WO-020HL7 result processingInbound lab result handling

Only after those exist does WO-036 turn them into a CI gate, so any change breaking clinical parity fails the build automatically.

Forge Work Orders screen showing the Clinical Functionality Parity Regression Harness epic, including patient identity parity fixtures and encounter documentation parity slice work orders

The order is the safeguard. Nothing gets refactored until the tests that would catch a regression are already passing.

The decomposition work comes later and stays deliberately constrained. WO-042, for instance, breaks apart the encounter save pipeline, but it depends on WO-016’s observation parity suite already passing. Public service interfaces stay stable throughout so installed modules keep working; only internals move.

Timeline diagram showing an eight-month modernization plan split into roughly three months of core refactoring and five months of establishing safety and verifying results

Seventy-two work orders across eight epics. The parity fixtures come first, and the decomposition work depends on them.

Hardening administrative access without blocking operators

Two findings concerned security, and both illustrate a tension specific to platforms that hospitals self-administer.

Administrative SQL execution: OpenMRS exposes an executeSQL operation letting administrators run database statements directly. This is genuinely useful, because operators need it for data corrections and troubleshooting that no user interface anticipates. It is also a powerful capability crossing a sensitive trust boundary.

Removing it would break legitimate operational work. The plan instead constrains and records it: require an explicit privilege, separate select-only from mutating modes, emit an immutable audit record capturing actor, timestamp, operation, outcome, and affected resource, and redact sensitive values from failure messages. Operators keep the capability; compliance reviewers gain a trail.

Development credentials: The docker-compose.yml file includes default passwords for openmrs and Admin123, making local setup effortless for new contributors. The risk is reuse: compose files get copied into shared or staging environments, and the defaults travel with them.

The fix keeps local onboarding simple. Default credentials work in the local development profile, and the application refuses to start in any non-local environment unless credentials are explicitly overridden. Convenience where it is safe, failure where it is not.

A third area covers modules. Because modules are trusted extension code rather than sandboxed plugins, the plan makes visibility and provenance rules explicit and adds a certification harness, ensuring module authors receive documented rules rather than discovering behavior at runtime.

Sequencing a rollout that clinical operators can accept

The rollout runs through six phases from August 2026 to April 2027, and its structure reflects who must approve each step.

PhaseWindowFocus
0. Baseline and governanceAug 18 – Sep 14Agree scope, critical workflows, rollback policy
1. Quality gatesSep 15 – Oct 12Security scanning, audit criteria, credential guardrails
2. Core modernization buildOct 13 – Jan 19Decompose service internals, clarify persistence contracts
3. Parallel beta and certificationJan 20 – Feb 16Beta sites, module certification, parity validation
4. GA readinessFeb 17 – Mar 16Evidence review, compliance sign-off, controlled release
5. Post-GA monitoringMar 17 – Apr 14Incident tracking, burn-down of remaining findings

Phase 2 is the longest, at roughly three months, during which the actual refactoring happens. Phases 0 and 1 build the safety apparatus first, and phases 3 through 5 are almost entirely verification.

That ratio is the point. Most of the calendar goes to establishing and checking safety rather than to changing code.

Forge PRD-Spec screen showing the OpenMRS Core rollout plan phases 0 through 2, covering baseline and governance setup, quality gate and trust boundary foundation, and core service modernization beta build

Where the eight months actually go. A plan weighted the other way is usually underestimating clinical risk.

The gates are stated in terms operators recognize rather than engineering metrics: zero severity-one clinical regressions during beta, at least 95% of certified modules passing compatibility tests, every participating operator signing off before general availability, and a rehearsed rollback procedure. Engineering completion alone does not authorize release.

Forge PRD-Spec screen showing OpenMRS Core rollout plan phases 3 through 5 alongside a modernization rollout timeline gantt chart from baseline and governance through post-GA monitoring
Diagram showing characterization tests capturing current system behavior, protecting six clinical areas including patient identity and order lifecycle behind a clinical parity CI gate, before decomposing service internals and reducing dependency cycles

Roughly three months of refactoring inside eight months of plan. The rest establishes safety and verifies results.

Applying this to your own clinical systems

The specifics come from one open-source platform, but the method transfers to hospital and payer modernization generally.

  • Measure structural risk before scoping work. System Gravity at 44 against a 67 composite told us where change was dangerous. A task list written from intuition would likely have started elsewhere.
  • Write characterization tests before refactoring. They capture the undocumented rules that a specification-driven rewrite loses. In clinical software, those rules are frequently the ones that matter most.
  • Keep public contracts stable and move internals underneath. This is what allows a platform to improve without breaking the extensions that health systems have built on top of it.
  • Constrain privileged operations rather than removing them. Operators need administrative capability. Audit records and mode restrictions satisfy compliance without taking away the tools people use to keep systems running.
  • Define gates in operational terms. “Zero severity-one clinical regressions” and “operator sign-off” are conditions a hospital can evaluate. Code coverage percentages are not.

Healthcare IT modernization rarely produces a dramatic before-and-after. When done properly, clinicians notice nothing at all, and the engineering team can make the next change safely. That is the actual deliverable.

FAQs

How is modernization different from replacing a hospital system?

Replacement means selecting a new platform and migrating to it, typically a multi-year program with a cutover event that carries concentrated risk. Modernization preserves the existing system while improving its internal structure, security posture, and testability. Risk spreads across many small verifiable changes rather than concentrating at a single switchover. For systems that work clinically but are expensive to change, modernization usually offers a better return.

What are characterization tests and why do they matter clinically?

Characterization tests record what a system currently does, rather than what it is supposed to do. You run the existing code, capture its outputs, and assert that future versions produce the same results. This matters in healthcare because clinical systems accumulate rules that were never documented, encoded by developers responding to real institutional needs years ago. A test suite built from documentation would miss them; characterization tests catch them because they capture actual behavior.

How long should a healthcare modernization program take?

The plan for OpenMRS Core runs roughly eight months across six phases, for a single platform with a defined scope. Programs touching multiple integrated systems typically run longer. A useful signal is the ratio: in this plan, roughly three months go to refactoring and five to establishing safety measures and verifying results. A plan weighted heavily toward code changes, with little time for verification, usually underestimates clinical risk.

Will modernization break the modules and extensions we depend on?

It can, which is why module compatibility is treated as a release gate rather than an afterthought. The approach keeps public service interfaces stable so modules continue to compile and run, refactoring only the internals beneath them. A certification harness tests modules against the modernized platform and produces pass, warning, or fail results with remediation guidance. General availability requires at least 95% of certified modules passing.

How do we satisfy compliance requirements during modernization?

Through controls the system enforces rather than documents written afterward. For privileged administrative actions, that means immutable audit records capturing who did what, when, to which resource, with what outcome. For patient data, it means classification, masking identifiers in logs, and defined retention with enforced purge. Making these release gates means that compliance evidence exists for every version shipped, rather than being assembled retrospectively before an audit.

Evaluate your code base for modernization.

Recommended Content