Tool

What do your devices actually do?

A standard is a starting point. What is on your estate is a vendor's implementation of it, and the share of your fleet running a combination nobody has exercised is almost always larger than the lab suggests.

The estate, as it actually behaves

One row per controller family, firmware revision and call. Record what the device did, not what the specification says it should do. The note field is the most valuable column here and the one most often left empty: it becomes the observed-behaviour record the next engineer needs.

Coverage is measured against what you plan to call, not against what you happened to record.
VendorControllerFirmwareUnitsCallBehaviourWhat it doesRemove
9 rows
Breaks the device is a separate status from diverges on purpose. A controller that stops responding under rapid reads constrains your polling schedule rather than your parsing.
This calculator runs entirely in your browser. Nothing you type is sent anywhere unless you ask for the result by email at the bottom of the page.
Where the estate is unexercised
VariantUnitsShare of fleetCalls testedCoverageFindings
Dell iDRAC 9 6.10.309,20038.3%2 of 825%clean so far
HPE iLO 5 2.787,40030.8%2 of 825%1 diverging
Dell iDRAC 8 2.833,10012.9%1 of 813%1 diverging
Supermicro BMC 1.732,40010.0%1 of 813%breaks on load
HPE iLO 4 2.821,9007.9%1 of 813%1 diverging
Ordered by units on untested combinations, which is where the next intermittent failure comes from. A variant with few units and no coverage matters less than a large one with partial coverage.
Matrix coverage
18%
7 of 40 cells
Units on untested combinations
18,925
79% of the fleet
Diverging variants
4 of 5
14,800 units
Breaks under load
2,400
Constrains the polling schedule
2,400 units run a controller that stops responding under rapid reads. That is not a divergence to work around, it is a scheduling constraint on the whole platform.
The next hour of bench time belongs on Dell iDRAC 9 6.10.30: 9,200 units, 38% of the fleet, and 2 of 8 calls exercised. Coverage is worth more on the variants carrying units than on the ones that are easy to reach.
A controller that stops responding under rapid reads is a per-target constraint, not a parsing problem. It cannot be fixed in the abstraction layer, and adding workers makes it arrive sooner. That belongs in the polling schedule before it belongs in the driver.
Send me this matrix

Your estate goes with it, including the notes. If a large share of the fleet is on a combination nobody has exercised, that is usually where the intermittent failures are coming from.

Your inputs are included so the reply can be specific.

Divergences that recur across estates

Twelve behaviours that show up repeatedly on real hardware, with what each one does to code written from the document. The pattern worth noticing is in the right-hand column: most of these produce a plausible value or a misread status rather than an error, which is why they survive testing and appear in production.

LayerWhat the device doesWhat it does to code written from the document
RedfishOptional schema fields absent rather than nullParsers that check for null get an undefined key
RedfishNumeric readings returned as stringsSilent type coercion, or a comparison that never fires
RedfishThermal endpoint missing entirely on older controllers404 read as node-down rather than as unsupported
RedfishSession limits between four and eight, undocumentedFan-out polling degrades the controllers it monitors
RedfishError bodies differ in shape between vendorsError handling written for one vendor misreads another
IPMISensor numbering not stable across firmware revisionsA sensor id read after an update refers to something else
ModbusRegister addressing off by one against the documentEvery value shifted by one register, all plausible
ModbusWord order swapped for 32-bit valuesA plausible number rather than an error, which is worse
ModbusCoils read back a state different from the writeConfirmation logic passes on a write that did not take
ModbusMalformed request stops the device until power cycleA scan takes a device out of service
ModbusDocumented function codes returning an exceptionFeature assumed available at design time is not
AnyBehaviour differs between two units of one part numberReproduction fails on the unit in front of you

The two worst entries are the word-order swap and the off-by-one addressing, because both return a well-formed number that is simply wrong. An exception is a good outcome by comparison: it fails loudly and somebody investigates.

A worked example

A 24,000 unit estate across five controller variants, with two Redfish calls recorded against each. The lab has one of every controller and the team reports the integration as tested against the full estate.

Against the eight calls the platform actually makes, 18 percent of the matrix is recorded. More usefully: 18,925 units, 79 percent of the fleet, run a combination nobody has exercised. That figure is the one that reframes the conversation, because the lab genuinely does have one of everything, and one of everything is not coverage when coverage is measured in units.

Four of the five variants already show a divergence in the two calls that were tested, covering 14,800 units. Extrapolating that rate across the six untested calls is not a rigorous forecast, and it does not need to be: the direction is enough to justify a week of bench time.

The entry that changes the architecture is the Supermicro row. 2,400 units stop responding after five rapid reads, which is not a divergence to handle in the abstraction layer. It is a per-target scheduling constraint on the whole platform, and adding workers makes it arrive sooner. That belongs in the polling schedule before it belongs in a driver.

The arithmetic, so you can check it

A variant is a controller family on a firmware revision, because that is the unit that behaves consistently: vendor alone is too coarse and an individual unit is too fine. Coverage per variant is calls tested / calls planned, capped at one, and fleet coverage weights that by units, so untested units = total - sum(units x coverage).

The ordering is by units x (1 - coverage), which is where the next intermittent failure comes from. It deliberately ranks a large partially-covered variant above a small uncovered one, because that is where the population is.

The honest limit

This records what you observed, so it inherits your sampling. Behaviour can differ between two units of the same part number and the same firmware, which means a single tested unit is evidence about that unit before it is evidence about the variant. It also cannot tell you which untested call will diverge, only how much of the fleet is exposed to that question. Treat a full matrix as the absence of known divergence rather than as proof of conformance.

The reasoning is in PLC to model and fleet scale changes the failure mode. For the scheduling constraint a hostile controller imposes, use the fleet poll scheduler.

Questions

Why does code written from the Redfish or Modbus specification fail in the field?

Because a standard is a starting point rather than a guarantee, and what is on your estate is a vendor's implementation of it. iDRAC 8 and 9 differ, iLO 4 and 5 differ, optional schema fields drop inconsistently, and error behaviour is not uniform even across firmware revisions of one vendor. Code that trusts the document works in the lab and fails intermittently against the real estate.

What is an observed-behaviour record and why keep one?

A table of what each device family and firmware revision actually did for each call you make, rather than what its documentation claims. It is the highest-value artifact in a protocol integration and it almost never exists, so every new engineer rediscovers the same divergences by hitting them in production.

How much of a fleet is typically on an untested combination?

Far more than teams expect, because coverage is usually measured in devices tested rather than in units carried by the variants tested. A lab with one of each controller looks like full coverage and can leave most of the fleet on a firmware revision nobody has exercised. That population is where intermittent failures come from.

Why separate breaks the device from diverges?

Because they need completely different responses. A divergence is a parsing problem you handle in an abstraction layer. A controller that stops responding under rapid reads is a per-target scheduling constraint on the whole platform, it cannot be handled in a driver, and adding workers makes it arrive sooner rather than later.

Where should I spend the next hour of bench time?

On the variant carrying the most units at the lowest coverage, which is rarely the one that is easiest to reach. Coverage on a variant with two hundred units is worth a fraction of coverage on one with nine thousand, and the tool orders by exactly that so the decision does not depend on which device happens to be on the desk.