Problems & solutions · Custom Software

CEMS Data Acquisition Software Problems: The 7 That Get Your Quarterly Report Sent Back

Cems Data Acquisition Software code editor and API illustration showing common problems and fixes.
The short answer

The most expensive failure at a continuous emissions monitoring site is a downtime period whose cause was never recorded. The calculation is usually correct. What is missing is the explanation, so when a submission is rejected because the substitution applied does not match what the availability history supports, reconstructing what happened means pulling analyser logs, daily calibration records, maintenance work orders and the operator log, three of which live in systems that do not talk to each other and one of which is a binder in the control room. That reconstruction lands with four days to the deadline, and the same gap is what an inspector probes years later.

Why does a CEMS project turn into a replacement of the certified system?

The brief is usually about visibility. Somebody wants a fleet view of emissions position, or wants operators to see rolling averages before a limit is breached rather than afterwards. Then a developer looks at the data acquisition and handling system, sees a licence fee and a constrained export, and proposes replacing it. On a spreadsheet that looks like savings.

It is the wrong trade and it is specific to this category. Reported emissions data drives allowance obligations and enforcement, so an error is not an operational inconvenience, it is a finding with a public record attached. The certified system performs the regulatory calculation and the submission, and rebuilding substitution logic from scratch means taking on regulatory risk you are not being paid to carry. ESC Spectrum StackVision and CMC Solutions do that job properly, and the sensible move is to keep them.

The fix is to write the boundary into the statement of work before anyone estimates. The certified system stays and remains authoritative for the compliance number. The build is the layer around it: ingestion, permit and averaging modelling, downtime records with causes, the quality assurance obligation calendar, operations facing projections, and reconciliation against the certified output. If a proposal quietly includes recalculating and submitting on its own numbers, that is not a cheaper version of the same project, it is a different project with a different risk profile.

What goes wrong when you import several years of validated emissions data?

A compliance layer with no history is only half useful, so almost every build imports back several years, and that import is consistently underestimated.

The specific problems are structural rather than volumetric. Units have been through permit modifications, so a limit or an averaging period that applied in one year did not apply in another, and importing values without the rule that governed them produces a history you cannot reproduce. Monitor configurations changed after replacements and recertifications, so the same parameter has been measured by two instruments with different span and range settings. Substituted values sit alongside measured values and are often indistinguishable in an export, which means an average computed over imported data silently mixes the two. And the reason a monitor was out of service almost never travelled with the data, because it lived in a work order.

The fix is to import the rule with the data. Permits, limits, parameters and averaging periods should be versioned with effective dates, and every imported hour should be tagged with its status, measured, substituted or invalid, and with the monitor configuration in force. Where the cause of a downtime period cannot be recovered, mark it unrecovered rather than blank, because a gap you have labelled is defensible and a gap you have silently filled is not. Import the periods that carry live obligations first and treat older years as a separate phase.

Why do the analyser, historian and maintenance integrations break after go live?

Because every manufacturer writes its own log format and the interesting fields are rarely in the obvious place. A parser built against one shelter's analysers meets a different manufacturer at the second stack and finds status flags encoded differently, calibration events recorded in a separate file, and timestamps in a local time that shifts twice a year.

The plant historian introduces a second class of failure. It holds process data the emissions system cannot see, which is exactly what you need for flow to load comparisons and for explaining an excursion, but historian tags get renamed during control system upgrades and nobody tells the environmental team. An integration that has been silently reading a renamed tag produces a chart that is wrong in a way no error message reveals.

The maintenance system breaks for a human reason rather than a technical one. Linking a work order to a downtime period only works if the technician records the outage against the monitor rather than against the shelter, the analyser cabinet or a generic asset. If the asset hierarchy does not match how the environmental team thinks about monitors, the link fails quietly and the downtime record stays empty.

The fix is expected data volumes per source with same day alerting when a feed thins, tag mappings held as configuration with a change log rather than embedded in code, and an asset alignment exercise with the maintenance team before the integration is built rather than after it disappoints.

What happens when downtime causes and quality assurance deadlines are not tracked?

Daily calibration error checks, linearity checks, relative accuracy test audits, flow to load comparisons and the requalification steps after a repair form a recurring obligation calendar per monitor per programme. Miss one and data becomes out of control from the moment the deadline passed, which retroactively invalidates a period you already reported. Most sites track this in a spreadsheet maintained by one person, and it works until that person is on leave during an outage.

The problem multiplies across a fleet. Eight stacks with different analyser configurations under different combinations of federal programme requirements plus state permit conditions produce a schedule that is genuinely hard to hold in a spreadsheet, and the consequences are not evenly distributed across it. Missing a routine check on a well behaved monitor is not the same as missing a requalification after a repair, and a date ordered list cannot express that difference.

The fix is to model the obligation calendar per monitor, per parameter and per programme, with results attached and pass criteria evaluated automatically. Rank upcoming obligations by consequence rather than by date. When a test fails, the system should already know which reported data is affected and flag it before the quarterly file is assembled rather than after a reviewer finds it. And make every gap in valid data a record with a cause, a linked work order, the corrective action and the requalification that returned the monitor to service, assembled as the outage happens. That single feature is the one environmental managers ask for first once they see it working.

Should you build custom or configure what you already own?

Keep what you have if you run one or two stacks under a single programme with a working data acquisition and handling system. The licence fee is not the problem you think it is, and the money is better spent on analyser maintenance, which prevents more deviations than any software will.

Before commissioning anything, exhaust the certified system. Ask your vendor what reporting it can already produce on downtime, availability and quality assurance status, since some of the assembly work is a report nobody has configured. Ask what export it supports and at what frequency, because the constraint on a fleet view is often access rather than capability. And align your maintenance asset hierarchy with your monitors, which costs nothing and unblocks the most valuable integration in the whole build.

Build the layer around it when two or more of these hold. You operate several sites and cannot see fleet emissions position without someone assembling it by hand. Your units carry a mix of federal programmes and state permit conditions and the combined obligation calendar lives in a spreadsheet. You have had a submission rejected or corrected in the last two years and reconstructing the cause took days. Your operators cannot see rolling averages against permit limits and you have taken deviations that earlier visibility would have prevented. Or your environmental team spends more time assembling evidence than analysing it.

How do hidden costs get into the quote?

Through the parts of this work that are neither features nor screens.

  • Each regulatory programme on a stack. A unit under a federal programme with a state permit condition and a further federal standard is three rule models on one stack, not one stack.
  • Analyser diversity. Every manufacturer writes its own log format, and a parser for one shelter does not transfer to the next.
  • Historical migration. Importing several years of validated data with the rules and statuses that governed it is real work, and importing it without them is worse than not importing it.
  • The parallel verification period. Environmental teams are correctly conservative and will check every calculation by hand against the certified system before trusting it. Plan for that time rather than resent it.
  • Permit modifications during the project. A modification mid build is normal and forces the versioning design to be right rather than adequate.

What keeps the number down is keeping the certified system exactly where it is, scoping the build as the layer around it, and starting with the two stacks that generate most of your deviation reports.

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

Ask the developer what they would refuse to build. The answer you want includes the certified compliance calculation itself. A team happy to rebuild substitution logic from scratch and submit on it has not understood what is at stake, and enthusiasm on that point is a warning rather than a selling point.

Ask how they would model a permit. You want limits, parameters, averaging periods and applicability held as versioned data with effective dates, because permits get modified and last year's report has to remain reproducible under last year's terms. A hard coded limit is a defect waiting for a renewal.

Ask which analyser log formats they have parsed, and name the manufacturers in your shelters. This is unglamorous integration work and experience shows immediately in the answer, as does the absence of it.

Ask how the build will be verified before anyone relies on it. The right answer is a parallel period where every calculated value is compared against the certified system and every difference is explained, with your environmental team signing off. Then settle ownership in writing before kickoff, because emissions data is regulatory evidence and access to it should never depend on a vendor relationship staying friendly.

Research & sources

The evidence behind this guide

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

  1. The average developer spends more than 17 hours a week dealing with maintenance issues such as debugging and refactoring, and about four of those hours on 'bad code' - waste that equates to nearly $85 billion annually worldwide in opportunity cost. Source: Stripe (2018) →
  2. The federal government spends about 80% of its IT budget on operations and maintenance of existing systems rather than on development or modernization, with many critical systems being decades old. Source: U.S. Government Accountability Office (GAO) (2025) →
  3. Total US training expenditure rose 4.9% to $102.8 billion; learning management systems were used at 89% of organizations (90% of large, 97% of midsize, 84% of small companies), with average training at 40 hours per employee and $874 spent per learner. Source: Training Magazine (2025) →
  4. 88% of organizations are concerned about employee retention, and providing learning opportunities is respondents' #1 retention strategy; career progress is cited as people's top motivation to learn, yet only 36% of organizations qualify as 'career development champions.'. Source: LinkedIn Learning (2025) →
Rohan K. · Director of Web Platform Engineering · Delhi

Rohan directs web platform engineering at Digital Heroes, the group that builds the custom web applications, portals and internal tools behind client operations. He writes about how those systems are structured, where they usually break under load, and what makes one maintainable years later.

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

FAQ

Frequently asked questions

Our last submission was rejected over a downtime period. What is the actual fix?
Make every gap in valid data a record rather than an absence. The acquisition system sees a probe failure, a scheduled calibration, a stack outage with the unit offline and a power loss to the shelter as the same thing, which is no valid data, but those four situations carry different documentation requirements and different substitution consequences. Capture cause, linked work order, corrective action and the requalification test that returned the monitor to service as the outage happens. Then the justification exists before the deadline instead of being reconstructed under it.
Can we give operators live visibility of permit limits without touching the certified system?
Yes, and it is usually the highest value part of the build. The certified system was designed for reporting rather than for driving behaviour, so operators watch analyser readings on the control system while compliance watches rolling averages under permit specific averaging periods, and those are different numbers. A layer that computes every averaging period continuously and projects it forward turns a thirty day rolling limit into an operating decision days before it becomes a deviation report. It reads from the certified system rather than replacing it.
How far back should we import historical emissions data, and what breaks?
Import the periods carrying live obligations first and treat older years as a separate phase. What breaks is importing values without the rules that governed them. Permit modifications changed limits and averaging periods, monitor replacements changed span and range settings, and substituted values often sit indistinguishably alongside measured ones in an export. Tag every imported hour with its status and the monitor configuration in force, version the permit rules with effective dates, and mark unrecoverable downtime causes as unrecovered rather than leaving them blank.
Why do our maintenance work orders never link to the right monitor?
Usually because the asset hierarchy in the maintenance system does not match how the environmental team thinks about monitors. Technicians record an outage against a shelter, a cabinet or a generic asset, so the link to a specific monitor and parameter fails silently and the downtime record stays empty. Align the asset hierarchy with your monitors before the integration is built rather than after it disappoints. That alignment costs nothing and it unblocks the most valuable connection in the whole system.
How do we manage the quality assurance calendar across a fleet with mixed programmes?
Model the obligation per monitor, per parameter and per programme, with test results attached and pass criteria evaluated automatically rather than by eye. Rank upcoming obligations by consequence rather than by date, because a routine check on a stable monitor and a requalification after a repair are not equivalent even though a spreadsheet shows them the same way. The real value appears when a test fails: the system already knows which reported data is affected and flags it before the quarterly file is assembled.
How long is the parallel verification period, and can we shorten it?
Plan for a full reporting period where every calculated value is compared against the certified output and every difference is explained and signed off by your environmental team. Shortening it is possible only by narrowing scope, for example verifying two stacks thoroughly rather than eight superficially. Do not treat this as overhead. It is what makes the system trusted enough to be used at quarter end, and a compliance tool nobody trusts gets bypassed the first time a deadline is tight, which wastes the entire investment.
Does this handle state permit conditions alongside federal programmes?
It should, and that is often the main reason to build. A single stack can carry a federal programme obligation, a state permit condition with a different averaging period, and another federal standard, and no single vendor configuration expresses all three cleanly. Model permits and limits as versioned data with effective dates so a modification does not break the reproducibility of prior reports. Ask any developer to show how last year's report would regenerate under last year's permit terms after a modification lands.
What question exposes a developer who is wrong for emissions work?
Ask what they would refuse to build. The answer should include the certified compliance calculation and submission, and it should come with a reason rather than as a concession. A team eager to rebuild substitution logic from scratch is offering to move regulatory risk onto your site in exchange for a licence saving. Follow up by naming the analyser manufacturers in your shelters and asking which of those log formats they have parsed, since that answer separates integration experience from a reading of the documentation.
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.
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.
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.
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.
Can we migrate years of data out of our current system into new custom software?
Almost always yes, through CSV exports or the vendor's API, and migration should be scoped as its own workstream with field mapping, a dry run, and a planned cutover window rather than an afterthought. The real time sink is rarely moving the data; it is cleaning it, since years of duplicates, free-text fields, and inconsistent formats surface all at once. Pull a full export from your current vendor before committing to anything new, because some SaaS plans restrict exports on lower tiers.
What is a discovery phase, and is it worth paying for separately?
Pay for it, and treat the output as yours. A discovery phase runs two to three weeks, typically 5 to 10% of the eventual build budget, and produces a written scope, wireframes, and a fixed quote you can take to any vendor, including a competitor of the agency that wrote it. Skipping it is how projects end up quoted from a two-paragraph email and delivered at twice the price.
How much should a small business expect to pay for custom software?
Across 2,000+ Digital Heroes projects, a small business system that replaces spreadsheets or one core workflow typically lands between $40,000 and $80,000, with more complex first versions running up to $150,000. The two levers that move the number most are integrations and user roles, not the team's hourly rate. Any quote under $15,000 for a full production system means the vendor has not understood your scope yet.
How do I vet a software development agency before signing a contract?
Ask to speak with two past clients whose projects resemble yours in size and industry, and ask exactly who will write your code, since some agencies sell senior faces and deliver junior or subcontracted hands. Demand a written specification with acceptance criteria before any fixed price, and check that their portfolio links to products that are actually live. An instant quote given without questions about your workflows is the clearest warning sign there is.
What should I prepare before contacting a software development agency?
A one-page brief beats a 40-page requirements document: the business problem in plain words, who will use the system, the 5 to 10 workflows it must handle, the tools it must connect to, and your budget range and deadline driver. You do not need wireframes, a specification, or technical vocabulary; producing those is the agency's job during discovery. Stating a budget range up front is the single best move, because it gets you honest scoping instead of a quote engineered to win the meeting.
What questions should I ask a development agency on the first call?
Ask who exactly will build it, what happens when scope changes mid-project, what their maintenance terms are after launch, and what they will need from you every week. Then ask them to describe a project that went wrong and what they changed afterward; teams that have shipped at real volume have war stories, and teams claiming a perfect record are hiding something. The scope-change answer matters most: a disciplined shop describes a written change-order process, not a vague promise to be flexible.
How do I calculate whether custom software will pay for itself?
Divide the build cost by the monthly benefit, where benefit is hours saved times loaded hourly cost, plus subscription fees replaced, plus any revenue the software unlocks. Three staff saving 10 hours a week each at a $40 loaded rate is about $62,000 a year, which pays back a $60,000 build in roughly 12 months. Across Digital Heroes internal-tool projects, 12 to 24 months is the normal payback range, and anything projecting under 6 months usually means the spreadsheet is hiding costs.
What does it cost to keep custom software running after launch?
Budget 15-20% of the original build cost per year, which on a $100,000 system means $15,000 to $20,000 for security patches, dependency updates, bug fixes, and small improvements as real usage reveals what the spec missed. Cloud hosting for a typical business application adds $50 to $300 a month on top. Skipping maintenance does not save the money; in Digital Heroes rescue work, unmaintained systems typically need a far more expensive rebuild within about three years.
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?