The short answer
Building the application is predictable. Connecting it to the systems already in use is not, because it depends on other people's timelines, interfaces and approval processes.
Scope integration separately, with its own assumptions stated, rather than folding it into a single figure.
What drives the cost
| Factor | Effect |
|---|---|
| Number of systems | Each is a separate negotiation and test cycle |
| Interface maturity | A documented interface is a fraction of the cost |
| Who controls access | Third party control means third party timelines |
| Approval process | Frequently the longest single item |
| Test environments | No test environment means testing in production |
The test environment row is worth asking about first. Its absence changes both cost and risk substantially.
Questions to answer before committing
- Which systems must we connect to, and who owns each one?
- Does a documented interface exist, and have we seen the documentation?
- Is there a test environment, and how do we get access?
- What approval is needed, from whom, and how long has it taken others?
- What happens to our system when theirs is unavailable?
Point five is design, not just planning. A system that stops working entirely when an upstream one is down is frequently unacceptable in a clinical setting.
Scope it in stages
A phase to establish access and confirm the interface behaves as documented, then a phase to build against it. Pricing the second before completing the first produces figures that are guesses.
That first phase is usually short and inexpensive, and it removes most of the uncertainty in the overall estimate.
Plan for the upstream system failing
- Queue outbound work and retry rather than failing outright
- Show clearly when data may be stale
- Keep local function available where it is safe to do so
- Alert someone who can escalate to the other system's owner
- Reconcile after recovery rather than assuming it caught up
Reconciliation after an outage is the step most often skipped, and it is where silent data gaps come from.