Architecture review
Façade, repository or hybrid — decided on your data, your volumes and your roadmap, in writing.
Standing up an endpoint takes a fortnight. Living with the choice underneath it takes years — how fresh the data is, what search you can support, whether you can pass certification, and what it costs at a million resources. We build FHIR the way we build product: the decision first, then the code.
Not “which FHIR server should we buy” — that's a procurement question. This is the one that decides your latency, your search surface, whether Bulk Export is even possible, and how much of certification you can pass.
C is the honest answer for most production systems: a repository for everything that must be searchable or exportable, with a live pass-through for the few resources where a stale answer is unacceptable. Choosing that deliberately is very different from arriving at it after a rebuild.
There is no universally right answer — but there is a wrong way to arrive at one, which is to start coding before this conversation has happened.
Most performance problems in FHIR products are really a mismatch between the access pattern and the use case. Pick the wrong one and no amount of tuning saves you.
One patient, now. The default, and the right answer more often than people admit.
Anything driven by a user looking at one patient. Chart views, decision support, a clinician opening your app. Latency matters, volume doesn't.
_include and _revinclude quietly turning one call into thousands of rows_lastUpdated because nobody built subscriptionsDesign the search parameter set deliberately and index for it, cap includes, use cursor-style paging, and load-test with a realistic patient — not the three-resource test patient everyone develops against.
$exportPopulations, not patients. Analytics, quality measures, risk, training data.
Asynchronous by design — you kick off a job, poll a status endpoint, then collect newline-delimited JSON files. It is a batch pipeline wearing a REST interface, and it should be operated like one.
_since was never wired upIncremental exports keyed on _since, isolated from the live read path, with resumable collection and a checksum on what landed. This is the pattern that makes a façade painful and a repository comfortable.
“Tell me when something changes” — the pattern people assume exists, and often can't get.
Topic-based subscriptions arrived properly in R5 and are available to R4 through a backport guide — but support in real deployments is inconsistent. Never design a product around a customer enabling subscriptions until you've confirmed that specific customer can.
Polling on _lastUpdated, which works and is wasteful, or an HL7 v2 feed for the event and FHIR for the detail — a combination that's less elegant than the slide deck and more reliable in production.
Build the event path behind an interface so subscriptions, polling and a v2 feed are interchangeable per customer. The product stops caring which one a given site can offer.
Your app opening inside the chart, already knowing the patient and the user.
Scope design. SMART v2 splits read into finer-grained permissions, and asking for more than you need is the fastest way to fail a customer's security review. Registrations that lock after go-live make this expensive to correct.
Design the smallest scope set that supports the workflow, prove it in a sandbox, and validate the launch against conformance tooling before a customer's reviewer sees it. Vendor-specific paths are here →
Most products need two of these. Very few need all four — and building all four is how a roadmap disappears.
This is the detail that separates teams who have shipped FHIR from teams who have read about it. Building to the newest guide is not the same as being compliant, and being compliant is not the same as being current.
If you sell to payers, this is the single biggest FHIR demand event in years. The APIs must be built on FHIR R4 with SMART authorisation, and CMS points clearly at the Da Vinci guides as the intended path.
The moment a provider orders something, a hook fires and the plan answers in real time: is prior authorisation needed, and what documentation supports it.
A smart questionnaire handed back to the EHR, pre-filled from the chart — so nobody retypes what the system already holds.
Submission and decision: approved, denied with a specific reason, or pended. Seven calendar days standard, 72 hours expedited.
Patient access, provider access and payer-to-payer exchange — the three that make the prior-auth data reusable rather than trapped.
X12 278 remains permitted for back-end transmission, so this is not a rip-and-replace of your claims stack — it's a FHIR surface in front of it. Which brings you straight back to the façade-or-repository question above.
None of these show up in a sandbox. All of them show up at a real customer.
Everything is fast against sandbox data. The first real patient has 900 Observations and eleven years of history, and the chart view times out.
A conformant server returns nothing for an element the UI assumed was always present. Blank screens, and an argument about whose bug it is.
Codes arrive in a local system nobody translated to LOINC or SNOMED CT. The data stores fine and is invisible to every rule you wrote.
Offset paging works for three pages and collapses at three hundred. Usually found by whoever built the export, at the worst moment.
The same person arrives under different identifiers from different systems, and quietly becomes two patients in your product.
An over-broad scope set sails through development and fails a customer's security review — after the registration has been locked.
Fixed scope and fixed price, except the last, which is monthly.
Façade, repository or hybrid — decided on your data, your volumes and your roadmap, in writing.
A conformant R4 surface over your data — US Core-profiled, searchable, and tested against the certification bar.
Launch inside the chart, or server-to-server. Scope design, conformance validation, and the customer review.
Existing interfaces brought behind one FHIR model, one at a time, with nothing going dark.
Monitoring, version and profile changes absorbed, and a monthly note on how it's running.
Payer teams working to CMS-0057-F: talk to us about the Da Vinci scope specifically — it's a different shape of project and the 2027 date is not moving.
A standalone SMART on FHIR server built to the g(10) standardised API criterion and passed on the first run — the bar an app must clear to launch inside a certified EHR.
A decade of point-to-point HL7 v2 feeds re-pointed at one canonical FHIR model, migrated in waves with both paths live during each cutover.
Facilities sharing no infrastructure and no vendor, kept consistent through one FHIR model — reconciled continuously rather than overnight.
If yours isn't here, it's a better use of a call than an email.
_include quietly multiplying the result set, or offset pagination degrading as clients page deeper. All three are architectural rather than tuning problems, which is why they don't respond to adding hardware. We'd want to see one slow request traced end to end before saying which it is — it's normally obvious within a day.We'll tell you which architecture fits your volumes, what conformance you actually need, and a realistic date. Reviewed by an engineer who has passed the tests, not a sales queue.
Iselin,
NJ 08830
Baner, Pune,
Maharashtra 411045
You'll hear back within one business day, from someone who has built this.