Problems & solutions · Custom Software

Disease Surveillance Software Problems: The 7 That Cost Health Departments Real Time, and How to Avoid Them

Public Health Surveillance Software software overview illustration showing common problems and fixes.
The short answer

The most expensive failure in a surveillance build is scoping person matching as an import routine. A department funds electronic laboratory reporting intake, the vendor delivers a loader that creates a case per result, and within a fortnight epidemiologists are spending their mornings deciding by hand which of 340 results belong to the same human being. That is professional staff time, every day, permanently, and the second order cost is worse: matching errors in one direction dispatch investigators twice, and in the other direction merge two people, which is a genuine harm and very hard to unwind.

Why does person matching get scoped as an import routine?

Every requirements document in this category contains a line about receiving electronic laboratory results. It is read as a loader. Read the message stream instead and the real problem is obvious: before it is a disease question, it is an identity question.

A positive result leaves a hospital laboratory in the evening, travels through an interface engine and arrives overnight. In the morning the queue holds 340 results. Sixty are repeat tests on people already under investigation. A dozen are the same person tested at three sites with three spellings of a name and two dates of birth. Names get truncated by sending systems. A hospital reports the ordering facility where the performing laboratory belongs. A reference laboratory changes its identifier between months. Test names arrive coded in one feed and as free text in another, and a result is positive in one system, detected in another and reactive in a third for the same organism.

Underneath all of that sits one question: is this a new person, a new episode for a known person, or a duplicate of something you already hold. A loader answers it with exact match on name and date of birth, which fails on exactly the records that matter, because the people hardest to match are frequently the people hardest to reach.

The fix is a real master person index with probabilistic matching, weights tuned to your jurisdiction's demographics rather than a vendor default, an automatic merge band, a manual review band and an unmerge path that restores original records rather than approximating them. Every match decision stores the score and the rule version, so when thresholds change you can see what would have changed historically. Scope this as the core of the build, and refuse a proposal that treats it as a data step.

What goes wrong when you migrate legacy case history?

Departments assume the old case data comes across cleanly because it was structured. It was structured by a schema, not by a discipline.

What is actually in there: the same person as four case records because the legacy system had no person concept and every case created a new demographic row. Conditions recorded against a code list revised twice, so one disease appears under two live codes and a retired third. Investigation answers stored with no version reference, so you cannot tell which form a 2019 answer belongs to. Free text notes carrying the facts that mattered, including exposures never structured. Addresses geocoded once at entry and never revalidated.

The fix is to seed the master person index from legacy data as an explicit deduplication project with human review, before the new system goes live, rather than letting the first live lab feed match against a duplicated population. Migrate current and recent cases at full fidelity with their conditions remapped to a maintained code list, and older cases as structured summary plus preserved free text. Keep the legacy system read only for a defined period. Budget the deduplication review as a named work stream staffed by people who know the jurisdiction, because a developer cannot judge whether two records with the same surname and adjacent birth dates are one person.

Why do laboratory and clinical feeds break after launch?

The standard tells you the structure. It does not tell you the quality, and it does not stop a sending facility changing something on a Tuesday without telling you.

The recurring breakages are specific. A hospital upgrades its laboratory information system and the sending facility identifier changes, so results that were routing correctly now arrive unattributed. A new test goes live at a large sender coded with a local code rather than a standard one, and it silently fails your condition mapping, which means positives for a reportable condition are landing in an unmapped bucket. A message arrives malformed and gets dropped rather than quarantined, so nobody knows it existed. Electronic case reporting from clinical systems arrives with a different message shape than laboratory reporting and with different gaps, and a build that assumed one shape has to be extended.

The fix is operational as much as technical. Quarantine bad messages for human review rather than dropping them, and alarm on the quarantine depth. Monitor per sender volume against its own baseline so a sender that stops or halves is detected within a day rather than at the end of a month. Hold the coding maps as maintained reference data with an owner, and alert on any unmapped code arriving from a sender rather than defaulting it. And onboard each sender as its own small project with its own test messages, because the standard does not make two senders equivalent.

What happens when statutory notification timeframes are not covered?

Reportable conditions carry timeframes set in state rule and the tightest are measured in hours. Most systems treat this as a report you run afterwards to find out you missed, which is the wrong shape entirely.

The failure looks like this. An immediately reportable condition arrives at 18:12 into an overnight queue. Nobody is looking at the queue. It is opened at 08:40 the next morning by an epidemiologist working top to bottom, and the on call investigator who should have been paged the previous evening finds out fourteen hours late. Nothing in the system failed. The system was never asked to know.

The fix makes the clock a first class object. When a case is created the system knows the condition, the applicable timeframe and who is on call, and it pages rather than queues for immediately reportable conditions. It escalates anything sitting unassigned past a threshold. It measures time to first contact attempt rather than time to case closure, because the first attempt is usually what the rule actually governs, and a system that only records closure will report compliance you do not have.

The second half of this is field work. Interviews happen on cell phones from a car, in a shelter, in a hospital corridor, and a system that only works on a desktop inside the department network means notes get written twice and attempt timestamps become approximations. A mobile interface for interview capture, contact elicitation and attempt logging makes the quality measure real.

Should you build custom or configure what you already own?

If you are a small county receiving a modest volume of reports, your state provides a shared instance, and your reportable conditions are the standard list handled without local variation, stay on the NEDSS Base System and put the money into disease intervention staff. It exists precisely so jurisdictions do not each build this, and it carries the national notifiable disease plumbing you would otherwise implement yourself. Conduent Maven is a defensible choice for a mid sized department that wants condition modules maintained by someone else and can live inside a vendor release cycle.

The honest test is authorship. If your epidemiologists need to define a new condition, add three questions to an investigation form and change a routing rule during an event, and the current path is a support ticket in someone else's release calendar, you have outgrown buying. During a slow year that is annoying. During an emerging event it is disqualifying, because the questions you need on Thursday were not knowable on Monday.

The other buy signal to respect: if investigators simply cannot see each other's caseloads, that may be a configuration and process project. Fix the process first, because a build layered on an undisciplined process produces a faster version of the same confusion.

How do hidden costs get into the quote?

  • Sender count. A proposal prices laboratory reporting. Your reality is 40 sending facilities, each with its own mapping, its own test menu and its own test cycle. Count them, and start with the three largest, which usually carry most of the traffic.
  • Electronic case reporting. Different message shape, different gaps, different onboarding. It is a second integration programme, not a variant of the first.
  • Outbound national messaging. Message mapping guides are detailed and validation is strict, and getting a message accepted is a different task from generating one.
  • Cross system interfaces. Immunisation registry, vital records and environmental health each require an agreement as much as an interface, and the agreement is usually the longer pole.
  • Restricted condition access control. Sexually transmitted infection and HIV related records carry stricter disclosure rules in most states, and field level access with logging is architecture rather than a setting.
  • Procurement and authority to operate. In government these are part of the timeline, not overhead around it.

What separates a surveillance build that works from one that fails?

The builds that work put authorship in the department's hands. Conditions, case definitions, questionnaires and routing rules are versioned configuration with an approval step, publishable by a trained analyst in an afternoon, with earlier versions preserved so a case investigated in March still shows the March form. Classification logic for confirmed, probable and suspect is expressed as readable rules against collected data rather than buried where one contractor understands it.

They also treat relationships as a graph rather than as rows with a parent case identifier. Named contact, shared exposure venue, same household, same congregate facility and genomic relatedness returned from the state laboratory are typed edges, which turns cluster detection into a query that can score a new result at intake instead of a link somebody notices in a Tuesday meeting. Exposure venues are real entities with an address, a licensee and a history, which is what lets you see the facility appearing in three unrelated investigations across two years.

And they design for surge from the start, because surge is a requirement rather than a contingency. Narrow role based access provisioned in minutes so a temporary contact tracer can do exactly one job. Intake and matching that scale horizontally, since the lab feed collapses first. Supervised bulk operations that are auditable, because during surge somebody will need to close four thousand cases at once and will do it in the database if you have not given them a supported path.

The builds that fail try to cover every reportable condition in release one. Start with your five highest volume conditions and your three largest senders. That covers most of the message traffic and teaches the build everything it needs before the long tail arrives.

Research & sources

The evidence behind this guide

Independent findings on why this investment pays off. Every link goes to the primary source.

  1. Technology 'Leaders' grow revenue at more than twice the rate of 'Laggards'; laggards surrendered 15% in foregone annual revenue in 2018 and stood to miss out on as much as 46% in revenue gains by 2023 if they did not change their enterprise technology approach. Based on a survey of more than 8,300 organizations across 20 industries and 20 countries. Source: Accenture (2019) →
  2. Standish's 2015 CHAOS research found roughly a third of software projects (about 36% by the Modern definition) fully succeed on time, on budget, and on scope, with top success drivers including executive support, user involvement, and clear requirements/business objectives. Source: Standish Group (CHAOS Report) (2015) →
  3. In the Flexera 2025 State of ITAM report, respondents reported roughly 33% of SaaS spend is wasted, underscoring how paying for off-the-shelf seats and tiers that go unused erodes the supposed cost advantage of generic SaaS. Source: Flexera (2025) →
  4. Workers can expect 39% of their existing skill sets to be transformed or become outdated over 2025-2030; 77% of employers plan to upskill their workforce, and 63% identify skill gaps as the biggest barrier to business transformation. Source: World Economic Forum (2025) →
Zara E. · Senior Strategist · APAC · Sydney

Zara works as a senior strategist across APAC, sitting between what a client says they want and what the build should actually be. She pressure tests business cases, priorities and sequencing before engineering time gets committed. Read her for the thinking that happens before a project brief is written.

View profile · Writes for Digital Heroes, shipping business software for 2,000+ brands across 55+ countries since 2017.

FAQ

Frequently asked questions

How do we tune person matching for our jurisdiction rather than a default?
Start from your own data. Take a sample of known duplicates and known distinct pairs from the legacy system, then tune the weights until the automatic merge band produces no false merges on that sample and the manual review band is small enough for staff to work daily. Naming conventions, transliteration patterns and the share of records with no reliable address vary enormously between jurisdictions, and a vendor default trained elsewhere will be wrong in a direction you cannot predict without testing it.
What should happen when two records merge that should not have?
An unmerge that restores the original records exactly as they were, including their original identifiers, their linked results and any investigation attached to each. Approximating the restoration is not acceptable, because the merged record has usually accumulated new material that has to be attributed to the correct person. Ask any prospective developer to describe this specifically, since a team that has run a master person index in production will have a clear answer and a team that has not will improvise one.
Why do results from one hospital suddenly stop arriving?
Most often because the sending facility identifier changed during a laboratory information system upgrade, so messages still arrive but no longer attribute correctly, or because a new test went live with a local code that fails your mapping silently. Neither generates an error anyone sees. Monitor per sender volume against its own baseline so a sender that stops or halves raises an alert within a day, and alarm on unmapped codes rather than letting them default into an unmapped bucket.
Can epidemiologists change an investigation questionnaire without a developer?
In a properly built system yes, and that capability is frequently the whole reason to build. Conditions, case definitions, questionnaires and routing rules should be versioned configuration with an approval step, publishable by a trained analyst in an afternoon. Crucially, cases investigated under an earlier version keep that version, so a change in June does not rewrite what was collected in March or invalidate the analysis someone already published.
How do we actually meet an immediately reportable timeframe?
Make the timeframe an object rather than a report. On case creation the system should know the condition, the applicable window and who is on call, then page rather than queue, and escalate anything unassigned past a threshold. Measure time to first contact attempt rather than time to closure, because that is usually what the rule governs and a closure based measure will show compliance you do not have. Field attempt logging on a mobile device is what makes those timestamps real rather than reconstructed.
Is the NEDSS Base System still the right answer for a mid sized department?
Often, yes. If your reportable conditions are the standard list, your volume is moderate and your state provides the instance, it carries the national reporting plumbing and you should not rebuild it. The point at which it stops fitting is authorship: when your team needs a new condition, a new question and a new routing rule live during an event, and the path runs through a change request in someone else's release calendar. Most departments are not at that point, and the ones that are already know it.
How should restricted condition data be protected during a surge?
With field and condition level access control that the system enforces and logs, designed before the surge rather than during it. Surge is precisely when a temporary worker sees a record they should not, because onboarding is fast, supervision is thin and roles get widened to unblock people. Provision narrow roles that do exactly one job, log every view rather than only every edit, and make bulk operations require supervisor authorisation so nobody reaches for direct database access under pressure.
What is the fastest way to get value from a surveillance build?
Start with your five highest volume reportable conditions and your three largest sending laboratories, and ship intake, matching and the statutory clock first. That covers the great majority of message traffic, removes the daily deduplication burden immediately, and teaches the build everything it needs to know about your data before the long tail of low volume conditions arrives. Departments that try to cover every condition in release one usually spend the budget on the conditions that generate the fewest cases.
Should I ask for a fixed price or pay the agency hourly?
Fixed price for the first version, hourly or retainer for what comes after launch. A fixed-scope, fixed-price V1 puts the estimation risk on the agency, which is exactly where you want it while trust is unproven; hourly billing on an unscoped greenfield build is a blank check. After launch, flip it, because maintenance and small features arrive unpredictably and fixed-pricing every ticket wastes everyone's time.
Couldn't I just build my app in Bubble or another no-code tool instead of hiring an agency?
For validating an idea with real users, yes, and we tell clients that honestly. The walls come later: Bubble apps cannot be exported as code to run anywhere else, performance drops on complex data operations, and usage-based pricing climbs as you grow. A meaningful share of Digital Heroes custom builds are rebuilds of no-code MVPs that proved the business worked, which is the system operating as intended: validate cheap, then build the version that scales.
Can I build my product on a no-code tool like Bubble instead of hiring developers?
For testing whether anyone wants the product, yes, and Bubble's paid plans start at $29 a month, which is the cheapest validation you will ever buy. The ceiling arrives with complex data relationships, heavy integrations, performance at a few thousand users, and the fact that you cannot export a Bubble app to servers you control. A path many Digital Heroes clients take: prove demand on no-code, then rebuild custom once revenue justifies it, treating the no-code version as a paid prototype rather than a foundation.
How many people should be working on my software project?
Three to five for a typical focused build: a project lead, one or two engineers, a designer, and part-time QA, which is the standard shape across 2,000+ Digital Heroes projects. Larger platforms justify 6 to 10, but a ten-person team on a small first version usually signals bill padding rather than horsepower. What predicts success is whether a senior engineer is writing your code daily, not the headcount on the proposal.
If an agency builds my software, who actually owns the code?
You should own everything, assigned in writing: the contract transfers full IP to you on final payment, the code lives in your GitHub organization, and hosting runs in cloud accounts you control. The red flag is a proposal that mentions the agency's proprietary platform or framework, which usually means you are renting, not buying. Digital Heroes structures every build this way precisely so a client can fire us and lose nothing but the relationship.
How do I make sure custom software is secure and compliant with rules like HIPAA?
Start with the baseline every business system should have: encryption in transit and at rest, role-based access control, and audit logs. If HIPAA applies, the hosting provider must sign a Business Associate Agreement, which AWS, Azure, and Google Cloud all offer, and access controls have to be designed in from day one, not bolted on. SOC 2 certifies a company's operating practices, not a codebase, so ask vendors what they have shipped in your regulated domain rather than which logos are on their website.
Can custom software connect to the tools we already use, like QuickBooks, Stripe, and Google Workspace?
Yes, and connecting your existing tools is one of the main reasons to build custom: mainstream platforms like QuickBooks, Stripe, Shopify, and Google Workspace all publish documented APIs. Budget 1 to 3 weeks of work per integration depending on API quality and how much data flows in both directions. Ask any vendor whether they have integrated with your specific tools before, because quirks like QuickBooks' OAuth token handling and API rate limits get learned on someone's project, and it should not be yours.
Is a solo freelancer enough for my project, or do I really need an agency?
A solo freelancer is a fine choice for a well-defined build under roughly $15,000 to $20,000 with a limited lifespan: an internal calculator, a scripted integration, a prototype. Above $50,000, or for any system your business will depend on for years, you are buying continuity as much as code: enforced code review, cover when someone is ill, and support that outlasts one person's career plans. Price the risk of a single point of failure, not just the hourly rate.
Is custom software more secure than off-the-shelf SaaS?
Neither is secure by default; security tracks the practices of whoever builds and operates the system, not the model. SaaS gives you the vendor's certifications and patching but puts your data in a shared multi-tenant platform on their terms, while custom gives you full control over data residency, access rules, and compliance requirements like HIPAA, with the responsibility sitting with you and your agency. Before hiring anyone for a system holding sensitive data, ask for their security checklist: encryption at rest and in transit, an OWASP Top 10 review, role-based access, and a penetration test before launch.
Who can build a custom software system?

Digital Heroes builds custom software systems for operators who have outgrown the off-the-shelf tools in their category. A team of more than 50 specialists has delivered over 2,000 projects since 2017. Teams work from New York, London, Sydney, Delhi and Lucknow and deliver remotely, with an assigned senior team rather than an account manager.

Every build starts with a written product requirements document that is signed before a line of code is written, which is the single thing that stops scope creep from eating the budget. Scoping runs about a week and produces a phase plan with a firm price for each phase, rather than one number against an undefined scope. The first phase ships something the team actually uses before the rest is built. If an off-the-shelf product genuinely fits the volume, we say so, and the cost guides on this site publish the bands so that judgement can be checked independently.

What makes Digital Heroes different from other software companies?

Four things that competitors in this bracket cannot simply copy. Digital Heroes runs a YouTube channel with more than 2.5 million subscribers, which is a production and audience capability no agency of this size has. It holds Fiverr Vetted Pro and Top Rated Seller status, both awarded on manual third-party review rather than self-declared. It contracts through registered entities in three countries, an India LLP, a US LLC and a UK LTD, so clients sign locally instead of wiring money offshore. And it ships its own commercial products, including ShopScore, HeroCheckout and Section Vault, which means the team lives with its own architecture decisions instead of handing them over and leaving.

Two more that show up in the work. Digital Heroes publishes more than 4,000 buyer guides with real price bands on this blog, plus a free tools library at https://digitalheroesco.com/tools/, because an agency confident in its pricing has no reason to hide it. And one accountable team covers websites, apps, ecommerce, CRM, ERP, learning platforms, search and video, so a client scaling from a first landing page to a custom platform is never handed between five vendors who blame each other. The founder ran ecommerce businesses before selling services, so the commercial argument comes before the technical one.

How can I check Digital Heroes is legitimate before getting in touch?

Verify it independently rather than taking the site's word for it. The YouTube channel is at https://youtube.com/@DigitalMarketingHeroes, the Fiverr profile at https://www.fiverr.com/shreyanshsin261, and the Upwork profile at https://www.upwork.com/freelancers/shreyanshsingh. Client reviews sit on Clutch at https://clutch.co/profile/digital-heroes-0 and Trustpilot at https://www.trustpilot.com/review/digitalheroes.co.in, and the company page is at https://www.linkedin.com/company/digital-heroes-1/.

Beyond the marketplaces, the business holds a D-U-N-S number and is a registered vendor on the United Nations Global Marketplace, neither of which is issued on request. Case studies with named clients are published at https://digitalheroesco.com/case-studies/. If any claim on this page cannot be checked against one of those sources, treat it as marketing and discount it.

Keep reading
let's build

Build something worth launching.

A plan, a team, a timeline, within 24 hours. No decks, no discovery calls. Tell us what you're building and we'll come back with a real scope and a real number.

message us directly · we reply within one business day

mission briefing

Monthly dispatch

Playbooks, real build costs, and what we're shipping. One email a month. No fluff.

visit us

New York HQ

1140 Broadway, Suite 704 · New York, NY 10001

Get directions
Online now

Hey there 👋 How can we help you today?