Do not wrap the OpenTelemetry API in your own helper class. It looks like good engineering hygiene, but a MetricsHelper.RecordLatency(name, value) facade throws away the performance model OTel is built on, hides the semantic conventions your backend relies on, and teaches your team an abstraction they cannot take anywhere else. The API is already the abstraction. Hold a direct reference to a tracer or an instrument, create it once, and record against it. The only thing worth writing yourself is a thin bootstrap that configures providers and exporters, and that is not the same thing as wrapping the API surface.

The OpenTelemetry maintainers made this argument directly in a 2026 post titled "Don't Wrap OpenTelemetry". If you have ever felt the itch to hide Meter and Counter behind something friendlier, this is worth reading twice, because the itch is real and the fix is not the wrapper you are about to write.

The pattern that feels responsible

Here is the code almost every team writes at some point. You have metrics scattered across the codebase, so you centralize them:

public static class MetricsHelper