
EHR development is inherently complex, but five patterns cut avoidable complexity substantially. Adopting them lets teams ship faster.
Pattern 1: FHIR-native storage. Skip proprietary internal + FHIR facade duplication. FHIR resources are the internal model. Lower long-term cost.
Pattern 2: SMART Backend Services for internal integrations. SMART auth for internal service-to-service too, not just external. Consistent auth model.
Pattern 3: Reference implementations before custom. Use LHC-Forms instead of building form renderers. Use Inferno instead of building conformance tests.
Pattern 4: Declarative over imperative. StructureMap for transformations. ConceptMap for translations. Application code stays cleaner.
Pattern 5: Conformance in CI. Automated Inferno testing on every deploy. Catches regressions cheaply.
Complexity accumulators to avoid
1. Custom internal data model + FHIR facade. 2. Custom auth instead of SMART. 3. Custom form renderer instead of LHC-Forms. 4. Manual conformance testing. 5. Terminology mappings in application code.
Complexity reducers
1. FHIR spec is well-designed; use it as-is. 2. Reference implementations are battle-tested. 3. Standards conformance = interoperability. 4. CI-driven quality gates. 5. Domain modeling in FHIR resources, not custom types.
Investment sequence
1. FHIR-native storage from day one (baseline). 2. SMART for all auth (day 1-30). 3. Reference implementations (day 30-60). 4. Declarative transforms (day 60-90). 5. CI conformance (day 90+).
Common complexity failures
1. Custom auth accumulates → replace with SMART is 6-month project. 2. Custom internal model → FHIR facade doubles maintenance. 3. Hand-rolled form logic → user-visible bugs. 4. Terminology in code → drift. 5. Manual conformance → regressions.
EHR development complexity is manageable with the five patterns above. Sites adopting them ship 30-50% faster than sites building custom.

