Problems & solutions · Custom Software

Occupational Health Software Problems: The 7 That Cost Real Money, and How to Avoid Them

Occupational Health Software architecture and database illustration showing common problems and fixes.
The short answer

The most expensive failure mode is a protocol that was current in the binder and stale in reality. An employer adds a job class in March, your front desk works from the sheet printed in January, and six people leave the clinic without the screen their role required. Two weeks later the safety manager calls, you bring all six back, and you eat the cost because the contract says knowing the protocol is your job. That is the visible loss. The invisible one runs every month: when Digital Heroes has instrumented multi site providers, the gap between services documented and services invoiced has landed in the high single digits of monthly revenue, driven by exactly the same disconnect between what was performed and what the system believed was owed.

Why does the protocol engine get scoped as a template feature?

This is the scope failure that defines the category. Someone reads the requirement as configurable visit templates, prices it accordingly, and delivers a system where a protocol is a document attached to an employer. Six months later the front desk is back to a binder, because a document cannot decide anything.

This is specific to occupational health because your protocols are not clinical pathways, they are contract terms. A regional manufacturer with eleven plants and forty job classes has forty service lists, each negotiated, each changeable by their safety director on a Tuesday, each binding on you from a date. Primary care has nothing equivalent, which is why general electronic health records treat employer as free text and why appointment types named after clients accumulate until nobody can read the schedule.

The fix is to model the protocol as a versioned record with an effective date, and to resolve every visit against the version in force on the date of service. Employer, location, department, job class, protocol version, service, rate. When the safety director adds the freezer role, they add it in a portal, you both see the date it takes effect, and every check in for that job class after that date builds the correct service list without anyone deciding. Ask any prospective developer what happens when a protocol changes mid year. If the answer is that you update the template, the re-dos will continue and you will also lose the ability to prove what was owed on a past date.

What goes wrong when you migrate history out of SYSTOC or Agility?

Migration is consistently the most underestimated line in this category, and the damage is not evenly distributed. Some records matter far more than others.

  • Audiometric baselines. These are the highest risk records you hold. A baseline is the reference point for every future standard threshold shift calculation, and if it migrates without its test date, its ear specificity or its revision history, your surveillance programme has no defensible foundation. Losing a baseline is not a data quality issue, it is a compliance issue.
  • Certificate history. Commercial driver certification dates drive the compliance clock. If expiry dates arrive without the exam date and examiner that produced them, the audit trail is broken even though the calendar looks correct.
  • External events. A large share of your surveillance facts did not happen at your clinic. Baselines from a prior employer, a respirator clearance done by a mobile vendor, a titer faxed in. Systems that only migrate their own encounters silently drop these, and the clock restarts on people it should not.
  • Employer contract history. Rates change at renewal. If only the current rate card migrates, you cannot reprice or defend a historical invoice, and any billing dispute becomes a negotiation instead of a lookup.
  • Restriction and clearance decisions. These are legal determinations. Migrating them as note text rather than as structured decisions means you cannot report on them or produce them cleanly when asked.

Get written confirmation of the export format and cadence from your current vendor before the project starts. Plan three to six weeks and insist on at least one full dry run against production data, with your medical director checking a sample of audiometric baselines personally.

Why do lab and drug screen interfaces break after go live?

Interfaces do not fail loudly. They fail on the small share of messages that do not match, and that share is somebody's expired card.

The recurring causes are consistent. A result arrives for a patient whose identifiers do not match your record, because the employer submitted a roster with a nickname and the collection site keyed a legal name. A collection site is added to an employer's programme and its results route to nobody. A medical review officer outcome arrives on a different channel and timeline from the laboratory result, so the visit sits incomplete while the clock runs. A reference laboratory changes a code and the mapping quietly stops resolving, producing results that land as unmatched rather than as errors.

Design the error queue before the interface. Every unmatched result needs a visible owner, an age, and an escalation, because an unmatched result is a person whose clearance is not recorded and whose employer believes they are cleared. Ask a prospective developer who owned the error queue after go live on a named interface they built. If they have not thought about it, they have built a happy path.

The other structural fix is to treat any inbound fact as a first class event regardless of source: your exam, an uploaded document, a laboratory result feed, a screening vendor callback. Document extraction earns its line item here, pulling thresholds and expiry dates from inbound paper and posting them as events with a confidence score, with anything below threshold routed to human review rather than left in a shared drive.

What happens when ADA record segregation and DOT reporting are not covered?

Two gaps in this vertical carry consequences that are not merely operational.

The first is the wall between medical information and the employer. Under the Americans with Disabilities Act, employee medical records must be kept separate from personnel records, and the employer is entitled to the fitness determination and the restrictions, not the diagnosis. A general electronic health record has a share the chart function, and that function does not make the distinction. This has to be enforced at field level in the routing logic: the employer contact receives fitness and restrictions, the clinical detail stays inside. Bolting a portal onto a system that was not designed for this produces an exposure, not a feature.

The second is commercial driver work. Certified examiner workflow, the examination report and certificate forms, and reporting to the national registry on the required timeline are not places to improvise, and the audit trail matters as much as the submission. Get it right and certificate expiry becomes an event in the same clock that drives your recall list and your revenue forecast.

The related gap is restrictions themselves. If a physician writes them as free text in a note, you cannot route them, report on them or pre populate a state form from them. Model them as structured data: body part, activity, limit, duration, effective dates, review date. Then the employer summary, the state form and the case follow up all fire from the same signed decision, and a case that would have become lost time gets a light duty offer the same afternoon.

Should you build custom or configure what you already own?

Plenty of providers should not build, and we say so. If you run one or two sites with under roughly fifteen employer contracts and a mix of commercial driver physicals, drug screens and minor injury care, Net Health Agility or SYSTOC will hold that comfortably. Your protocols fit in a binder because there are twenty of them, and a build is a distraction from hiring another provider. The same answer applies if your plan is to be acquired within about eighteen months, because the acquirer will migrate you onto their stack regardless.

Before commissioning anything, look hard at what you already own. Agility and SYSTOC do model the employer, and a lot of pain at mid sized providers comes from a configuration that was never finished: rate cards never loaded, recall logic never switched on, reports never built past the defaults. Enterprise Health handles surveillance capably. If the surveillance module is sitting unused next to a spreadsheet, a configuration engagement costs a fraction of a build.

Build when the signals cluster, and they usually arrive together. Three or more sites with protocols that differ by client rather than by service. A named person whose actual job is maintaining the surveillance spreadsheet. A prospect that asked for an employer portal and chose someone else. Contract revenue past roughly forty percent of the top line. The settling tell is when your best clients ask for reporting you cannot produce without a week of manual work, because the thing they are asking you to customise is precisely the thing a vendor cannot let you customise.

How do hidden costs get into the quote?

  • Interfaces priced per project rather than per interface. Each laboratory result feed, screening vendor callback and collection site flow is separate work with its own testing and its own error queue.
  • Multi state workers compensation. One state's forms and fee schedule is a feature. Six states is a subsystem, and it needs an owner after go live because fee schedules change.
  • Migration dry runs. Budgets often include one extraction. In practice you want a dry run, a review by your medical director, corrections, and a second run before cutover.
  • Security posture. Health information handling is table stakes. If you are chasing national accounts they will ask for a formal security attestation, which changes your architecture and your timeline, so decide before design rather than during sales.
  • The error queue owner. After go live, somebody has to work unmatched results and low confidence extractions daily. Costing the software without costing that role is how the queue silently grows.

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

Make them draw the data model on the call. Ask for the entities and relationships across employer, location, job class, protocol version, service, rate card and clearance decision. If the first shape drawn is patient centric, you will get an urgent care record system with an employer field, and you will discover it in month five.

Ask what happens when a protocol changes mid year. Effective dated versions with visits resolving against the version in force on the date of service is the answer that separates people who have shipped this from people who have read about it.

Ask for a named interface they have built and who owned its error queue after launch. Ask how they enforce the separation between clinical detail and employer facing determinations at field level. Ask how a charge line is created, because tying every charge to the executed protocol version at the rate in force on the date of service, with a nightly reconciliation flagging documented services with no charge, is what closes the billing leak that funds the build.

Finally, get ownership in writing before kickoff: the source code, the repositories, the infrastructure and the data. At Digital Heroes the client owns all of it from the first commit. For a system sitting directly on top of your employer contracts, hesitation on that point is the whole answer.

Research & sources

The evidence behind this guide

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

  1. Across 1,471 IT projects the average cost overrun was 27%, but one in six projects was a 'black swan' with an average cost overrun of 200% and a schedule overrun of nearly 70%. Source: Harvard Business Review (Bent Flyvbjerg & Alexander Budzier, University of Oxford) (2011) →
  2. An independent Forrester Total Economic Impact study of OutSystems found a 363% three-year ROI with payback in under 6 months, illustrating that faster, lower-labor build approaches can materially shift the payback math. Source: Forrester Consulting (commissioned by OutSystems) (2024) →
  3. An EY survey found one in five U.S. payrolls contains errors, each costing an average of $291 to remediate, with a typical 1,000-employee organization spending roughly 29 workweeks per year fixing common payroll errors. Source: EY (Ernst & Young) (2022) →
  4. A later Nucleus Research review of analytics software ROI case studies found customers received $9.01 in benefits for every dollar spent on analytics technology, showing returns vary with deployment factors but remain strongly positive. Source: Nucleus Research (2019) →
Theo W. · UX Researcher · UK · London

Theo runs the research that decides what a build should contain: interviews with the people who will use the software, usability sessions on prototypes and the analysis that turns a pile of opinions into a short list of problems. Useful reading before signing off any set of requirements.

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

FAQ

Frequently asked questions

Why do we keep performing the wrong services for an employer?
Because the protocol lives as a document and the decision lives in a person. Any model where the front desk reads a sheet and chooses services will drift the moment an employer changes a job class, and the drift is invisible until a safety manager calls. Model the protocol as a versioned record with an effective date, let the employer update it through a portal, and have every check in build its service list from the version in force on that date. The front desk stops deciding, which is the point.
What is the highest risk record to migrate off SYSTOC or Agility?
Audiometric baselines, without much competition. A baseline is the reference for every future threshold shift calculation, and if it arrives without its test date, ear specificity or revision history, your entire surveillance programme rests on a number you cannot defend. Certificate history for commercial drivers is second, because the compliance clock runs off it. Have your medical director personally review a sample of migrated baselines during the dry run rather than accepting a row count as proof of success.
Our surveillance spreadsheet tracks events done elsewhere. Can software hold those?
It has to, and this is where vendor recall logic usually stops short. Recall features anchored to a service performed at your clinic cannot represent a baseline from a prior employer, a respirator clearance done by a mobile vendor or a titer that arrived by fax. Build the clock as its own service where every requirement is a rule with an interval, an owner and a source, and it accepts an event from any origin. Document extraction can turn inbound paper into those events with a confidence score, routing anything uncertain to a review queue.
Why do lab and drug screen results go missing after we go live?
Almost always identity matching and routing rather than connectivity. A roster submitted with a nickname produces a result that will not match your record. A newly added collection site routes results to nobody. A medical review officer outcome arrives on a different timeline from the laboratory result, leaving the visit incomplete. None of these produce a loud failure, so build the error queue first: every unmatched result gets a visible owner, an age and an escalation, because an unmatched result is a person whose employer already believes they are cleared.
How do we share results with employers without breaching medical privacy?
Enforce the split in the routing logic, not in staff judgement. Under the Americans with Disabilities Act, employee medical records must be kept separate from personnel records and the employer is entitled to the fitness determination and restrictions, not the diagnosis. That means field level permissions where the employer facing summary is assembled from the clearance decision and the structured restrictions only. A general record system's share the chart function does not make this distinction, which is why bolting a portal onto one is risky.
Where is the money actually leaking in occupational health billing?
In three places that all trace to the same cause. Services performed but never invoiced because they were outside the appointment type. Panels billed at last year's rate because the contract renewed and the rate card did not. Re-dos billed to nobody. Tie every charge line to the executed protocol version at the contract rate in force on the date of service, then run a nightly reconciliation flagging any documented service with no charge line and any charge at a rate that does not match the active contract. That report is the one your finance lead will open first.
Is Net Health Agility or SYSTOC enough for a growing provider?
Yes if your protocols are standard, your employer count is modest and your mix is driver physicals, screens and minor injury care. They model the employer, which general record systems do not, and staying on them is the right answer more often than agencies admit. The case changes when protocols vary by client rather than by service, when someone on payroll exists to maintain a surveillance spreadsheet, and when clients ask for a portal or reporting you cannot produce. That is a customisation problem, and customisation is what a product cannot give you.
How do we stop injury cases turning into lost time claims?
Shorten the path between the signed decision and the employer's return to work choice, and make restrictions structured rather than free text. Body part, activity, limit, duration, effective dates and review date. When the physician signs, the employer facing summary, the state form and the case follow up all fire from those same fields in parallel rather than sequentially through scanning and faxing. Cases that pass their review date with no contact are where cost accumulates, so make that a queue with an owner rather than a memory.
How do we get years of data out of our old system and into the new one?
Treat migration as a planned sub-project: a field-mapping document, at least one dry run on a copy of your data, then a cutover with the old system kept read-only for 30 days as a safety net. On Digital Heroes projects it consumes 10 to 15% of the budget when the old system has an export, and more when data must be pulled out screen by screen. Ask any vendor to walk you through their last migration before you sign.
We run everything on spreadsheets and Airtable. How do we know it's time for custom software?
The reliable signals are re-typing the same data into multiple tools, one employee acting as human middleware between systems, and errors appearing in handoffs between teams. Hard limits force the issue too: Airtable's Team plan caps at 50,000 records per base, and Business costs $45 per seat per month, so a 20-person team pays about $10,800 a year for a tool it has already outgrown. When workarounds consume more hours than the tools save, the spreadsheet era is over.
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.
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.
Is it cheaper to customize Salesforce than to build a custom CRM from scratch?
If you use less than a third of what Salesforce does, a custom CRM is often cheaper by year three. Salesforce Enterprise lists at $165 per user per month, so 25 seats cost about $49,500 a year before admin and consultant fees, while a focused custom CRM runs $60,000 to $100,000 once plus 15 to 20% a year in maintenance. If you genuinely need Salesforce's ecosystem, reporting, and app marketplace, customizing it beats rebuilding it; the mistake is paying enterprise prices to use it as a glorified contact list.
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.
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.
How much should a small business budget for its first custom app or website?
For a focused first build, most small businesses land between $8,000 and $60,000: roughly $8,000 to $45,000 for a custom website and $25,000 to $60,000 for an internal tool or simple web app, based on Digital Heroes delivery across 2,000+ projects. Customer-facing products with payments, logins, or a mobile app start around $40,000. Quotes far below these bands usually mean a template with your logo on it, not software shaped around your workflow.
Our developer disappeared mid-project. Can another team pick up the code?
Yes, this is a routine engagement, provided the code exists somewhere you can access, so your first move is securing the repository, hosting, and domain credentials today. A takeover starts with a one to two week paid code audit that ends in one of three verdicts: continue the build, keep the design but rebuild the weak parts, or start over. Digital Heroes has inherited enough projects to say plainly that sometimes the rebuild is cheaper than the rescue, and an honest agency will tell you which one you have before taking your money.
Does it matter which tech stack the agency wants to use?
Yes, but not in the way most buyers expect: the goal is boring, popular technology such as React, Node.js or Python, and PostgreSQL, because any future team can maintain it and hiring a replacement developer takes days, not months. The red flag is an agency-proprietary framework or an unusual language, which welds you to that one vendor no matter what your contract says about code ownership. A useful test: could you find three freelancers fluent in this stack within a week? If not, push back.
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?