How the OpenTelemetry Specification Process Works
Follow an idea from a casual suggestion to a stable rule that every language implementation must obey, and learn who decides, what proof is required, and why the process is built the way it is.
Imagine a group of builders from many different countries who all agree to construct bridges that must connect perfectly in the middle. If each builder invented their own measurements, the two halves would never meet. So the builders write a shared rulebook: the width of the road, the strength of the steel, the shape of the connectors. Anyone who wants to change the rulebook must explain why, show a working sample, and win the agreement of several experienced builders from different companies.
The OpenTelemetry specification is that rulebook, and the specification process is the set of steps for changing it. This post explains the whole journey in plain language. We define every new term the first time it appears, walk through each type of change, look at the people and committees who make decisions, and explain the proof and stability promises that make developers trust the result.
1Why a Specification Exists at All
OpenTelemetry works in many programming languages. Something must keep them all consistent.
OpenTelemetry, often called OTel, is an open standard and a set of tools for producing telemetry. Telemetry means data that software sends out about its own behavior, such as traces, metrics and logs. What makes OpenTelemetry special is that it exists for Java, Python, Go, JavaScript, .NET and many other languages, all at once, and all of them are expected to behave in the same way.
Think about what could go wrong without a shared rulebook. A trace started in a Java service must be understood by a Go service that receives the request. A metric named one way in Python must mean the same thing when it arrives from a .NET program. If every language team made its own private decisions, data from different programs would not fit together, and the whole promise of a single, vendor-neutral standard would collapse.
Consider electrical plugs. If every country, and every manufacturer within a country, invented its own plug shape, travelers would need a suitcase full of adapters. A standard plug lets any device work in any wall socket. The specification is the standard plug shape for telemetry.
What a specification gives you
A specification is not code. It is a written description of behavior: what an operation must do, what it may do, and what it must never do. Implementations in each language then follow that description. Because behavior is described once, centrally, a change to the rulebook becomes a coordinated change across the whole ecosystem, and that is exactly why changing it must be done carefully.
2The Vocabulary You Need
A short glossary makes everything after this chapter easier to follow.
Specification
The written rulebook describing how every OpenTelemetry implementation must behave, independent of programming language.
API
The part of an implementation that application authors call to create telemetry. It describes what you can ask for, not how it is done.
SDK
The part that does the real work behind the API: sampling, batching, and sending data out. It follows the specification.
Protocol
The agreed message format for moving telemetry between programs, called OTLP, the OpenTelemetry Protocol.
Semantic Conventions
Agreed names for common labels, such as the name used for an HTTP method or a database system, so every tool reads them the same way.
SIG
A Special Interest Group, a team of contributors responsible for one area, such as a language implementation or the specification itself.
OTEP
An OpenTelemetry Enhancement Proposal, a written design document used for big, cross-cutting changes.
CNCF
The Cloud Native Computing Foundation, the neutral non-profit home that hosts OpenTelemetry alongside many other open projects.
If OpenTelemetry were a country, the specification would be its constitution, the SDKs would be local governments applying it, the SIGs would be departments, and an OTEP would be a formal bill proposed before a major new law is passed.
This post describes the process as documented in the project’s own repositories. Governance and contribution documents can be revised over time, so before you open a proposal, read the current contribution guide in the specification repository to confirm the details.
3What the Specification Contains and Where It Lives
A tour of the rulebook and the place where it is kept and changed.
The specification lives in a public repository on GitHub, a website where programmers store and collaborate on text and code. The repository holds the cross-language requirements that every OpenTelemetry implementation is expected to meet. The written documents are in a folder named for the specification, and the latest released version is also published on the project website for easy reading.
The main areas covered
The API and SDK rules for each signal
How traces, metrics and logs are created, how context flows from one operation to another, and how the SDK processes and exports the results.
The wire protocol
How telemetry is packaged when it moves between programs, so a sender in one language can talk to a receiver written in another.
Resource and common concepts
How a program describes itself, such as its name and where it runs, and how shared ideas like attributes and context are defined.
Configuration and compatibility
How implementations are configured in a consistent way, and how OpenTelemetry cooperates with other formats and tools.
Stability and versioning rules
The promises made to users about what will and will not change, which we study in detail later in this post.
Two neighbors worth knowing
Two closely related things live nearby but are managed a little differently. The first is the folder of enhancement proposals, the OTEPs, which also sits in the specification repository and holds the design documents behind big changes. The second is the set of semantic conventions, the agreed names for common labels, which are maintained as their own project and repository because they change at a different pace than the core rules.
Versioning of the rulebook itself
The specification follows semantic versioning, a widely used numbering scheme in which the version number tells you how big a change is. Every release has a written changelog listing what is new, what changed, and what was removed. A compliance matrix, kept alongside the specification, records how well each language implementation follows each requirement, which is a practical way for users to see where their language stands.
The project publishes a status page that shows the maturity of each signal and component, and the repository uses milestones to track upcoming work. Together they let anyone see what is stable, what is still being shaped, and what is coming next.
4Who Makes the Decisions
A process is only as good as the people and bodies who run it.
OpenTelemetry is run by volunteers and employees of many companies who contribute to a shared project. No single company owns it. Decision making is spread across several groups, each with a clear area of responsibility. Understanding who does what helps you know where to take an idea and who to ask for help.
flowchart TD
GC["Governance Committee: community health, scope, repositories"] --> TC["Technical Committee: technical direction and spec changes"]
TC --> SPEC["Specification SIG: maintainers and sponsors"]
TC --> LANG["Language SIGs: SDK maintainers and approvers"]
SPEC --> CONTRIB["Contributors: anyone with an idea"]
LANG --> CONTRIB
The groups, in plain words
Governance Committee
A group of nine elected members who handle non-technical matters: mission and values, the code of conduct, project scope, repositories and the relationship with the foundation.
Technical Committee
The body responsible for technical direction, including specification changes, release expectations and settling technical disputes that cross project boundaries.
Specification SIG
The working group that reviews and maintains the specification day to day. Its maintainers include Technical Committee members and designated leads.
Language and other SIGs
Teams that build the implementations, tools and conventions. They own their code and provide the practical experience that shapes the rules.
Maintainers and approvers
Trusted contributors who review changes and decide what is merged. Approvers are code owners with the power to sign off on pull requests.
Specification sponsors
Approvers in the specification area who take on extra responsibilities, such as helping guide significant proposals through the process.
The key design idea is the separation between governance and technical authority. The Governance Committee deliberately does not decide technical questions. It charters the Technical Committee, which in turn works with the SIGs. This keeps arguments about how the community is run apart from arguments about how the software should behave.
If you are new and have an idea, start in the specification channel or at a specification meeting rather than trying to reach a committee. The everyday reviewers are the specification maintainers and approvers, and they can tell you which path your idea should take.
5How the Committees Stay Balanced
Rules about who can serve are what keep one company from steering the whole project.
A shared standard is trustworthy only if no single organization can bend it to its own advantage. OpenTelemetry therefore builds diversity rules directly into its committees and its review process. These rules are one of the least visible and most important parts of the specification process.
The Governance Committee
The Governance Committee has nine members elected for staggered two-year terms, so the whole committee never changes at once. Voters are community members with standing, which means people with a meaningful number of contributions in the previous year, plus all approvers and maintainers. Candidates need endorsements from people at different companies, and no more than two members of the committee may come from the same company. Elections use approval voting, where each voter can approve any number of candidates and the most approved candidates win.
The Technical Committee
The Technical Committee works differently. Members are not elected on a fixed calendar. Instead, a new member is nominated by a community member in good standing, sponsored by existing members, and approved by a super-majority vote of more than two-thirds. The committee must keep a minimum number of members, and no more than a quarter of the members may work for the same employer. Members who stop participating are removed automatically, which keeps the committee active.
| Question | Governance Committee | Technical Committee |
|---|---|---|
| Main concern | Community, scope, values, repositories | Technical direction and specification changes |
| How members join | Community election | Nomination, sponsorship and super-majority vote |
| Company limit | No more than two from one company | No more than a quarter from one employer |
| How decisions are made | Public meetings, supermajority for governance changes | Consensus first, voting when needed |
| Role in escalation | Final escalation for contested governance matters | Technical disputes across projects |
Think of a city. The city council sets the rules for how the city is run and who may serve, while the engineering department decides how the roads and bridges are built. The two cooperate but do not do each other’s jobs, and neither is allowed to be filled by employees of a single construction company.
The same idea at review time
The diversity principle appears again when changes are reviewed. As we will see, a specification change needs approval from code owners who represent different companies. A change that only one company’s staff are willing to support is, by design, harder to merge than one that experts from several organizations agree on.
6Three Sizes of Change
Not every change deserves the same ceremony. The process scales with the risk.
Imagine a hospital where fixing a typo on a poster, buying a new type of bandage and building a new surgical wing are all treated with the same paperwork. Either the typo would take a year or the new wing would be approved in a day. The specification process avoids this by sorting changes into three sizes, each with its own path.
flowchart TD
I["You have an idea"] --> Q{"How big is the change?"}
Q -->|"Typo, clarity, broken link"| T["Trivial: open a pull request directly"]
Q -->|"New term, optional parameter, stabilizing a feature"| S["Smaller: get an issue approved first"]
Q -->|"New signal, new metric type, cross-cutting system"| O["Significant: write an OTEP"]
T --> R["Review and merge"]
S --> R
O --> D["OTEP approved, then spec pull request"]
D --> R
Trivial changes
Typos, wording that is merely unclear, and fixes for broken links. These skip the idea-approval step and go straight to a pull request, because there is little risk and nothing to debate.
Smaller modifications
Adding a new term, adding an optional parameter to an operation, or moving an existing feature toward stability. These require an issue to be opened and approved first, so that maintainers can agree the idea is wanted before anyone invests in writing it up. A draft pull request may accompany the issue to make the idea concrete.
Significant changes
Brand new signals, new kinds of metric, or systems that touch many parts of the rulebook at once. These must go through the enhancement proposal process, which asks for a full written design before any change to the specification text.
Many newcomers assume every change needs a long proposal. In reality, most accepted changes are small and quick. The heavy process is reserved for changes that would force every language to change its code. Starting with the lightest path that fits keeps your idea moving.
When you are unsure which size your idea is, ask in the specification channel. Maintainers would much rather help you choose the right path early than see good work stall because it was started on the wrong one.
7Trivial and Smaller Changes in Detail
The everyday path that most contributions follow.
Trivial changes, step by step
Make the fix in your own copy
You create your own copy of the repository, called a fork, and change the document. For a typo or a link, that is all the thinking required.
Open a pull request
A pull request is a formal proposal to merge your change into the main document. Reviewers see exactly what you changed.
Reviewers approve and merge
The normal approval rules apply, with a practical exception to the waiting period for plainly trivial fixes, so the change lands quickly.
Smaller modifications, step by step
Open an issue describing the problem
Explain what is missing or confusing and why the change would help users. The goal is to agree on the need before anyone writes the solution.
Get the issue approved
Maintainers discuss whether the change is wanted. An approved issue is a green light to invest effort in a pull request.
Write the change and the prototype
You edit the specification text and, where behavior is involved, show that it works in a real implementation. We cover this proof in chapter thirteen.
Update the changelog
Any change that is not trivial must add a line to the unreleased section of the changelog, so release notes stay accurate.
Review and merge
Code owners from different companies approve, and the change waits for the required period before being merged.
Asking for agreement before writing is an act of respect for your own time. Many well-written pull requests have been abandoned because maintainers disagreed with the underlying idea. An approved issue removes that risk.
If your change affects how SDKs are configured, a matching change to the declarative configuration schema must be prepared, approved and merged along with it. Forgetting this companion change is a common reason a pull request is held up.
8Significant Changes: The OTEP
When a change will ripple through every language, a written design comes first.
An OpenTelemetry Enhancement Proposal, shortened to OTEP, is a document that explains a big idea before it is turned into rules. It exists for what the project calls cross-cutting changes: changes that affect multiple languages and implementations by introducing new behavior, modifying existing behavior or changing requirements. Typical examples include a new type of metric, new information attached to every span, a new way to configure tracers, or a change to how extensions work.
An OTEP is like an architect’s proposal before a new building is approved. It contains drawings, the reasons for the design, the alternatives that were rejected, and the problems the architect expects. Nobody pours concrete until the proposal has been studied and accepted.
When an OTEP is not needed
Bug fixes, documentation improvements, internal refactoring and changes that affect only one language do not need an OTEP. The test is simple: would this change force several implementations to change what they do? If yes, you probably need an OTEP. If it stays inside one language or merely clarifies existing text, you probably do not.
What a good OTEP contains
Motivation
The real problem this solves and who suffers without it. Strong proposals start with concrete user pain, not with a solution looking for a problem.
Explanation and design
A clear description of the proposed behavior, detailed enough that implementers in any language could build it.
Drawbacks
An honest list of the costs and risks of the idea. Reviewers trust proposals that name their own weaknesses.
Alternatives considered
Other designs that were weighed and why they were rejected, including the option of doing nothing.
Open questions
Matters that are still undecided, so reviewers know where their input is most valuable.
Prior art
How similar problems were solved in other tools and standards, which helps avoid reinventing mistakes.
9The Life of an OTEP
From a blank template to an approved design, and then into the rulebook.
sequenceDiagram
participant A as Author
participant R as Reviewers
participant S as Spec maintainers
participant L as Language SIGs
A->>A: Copy the template and write the proposal
A->>R: Open a pull request in the oteps folder
R->>A: Comments, questions, alternatives
A->>R: Revise the document
R->>S: Required approvals given
S->>S: Merge the OTEP as approved
S->>A: Integration issue opened for the spec text
A->>S: Spec pull request with prototypes
S->>L: Implementation issues created in each project
Step by step
Write from the template
You copy the standard template into a new file with a temporary name. The template guides you to answer the questions reviewers will ask.
Open a pull request
You submit the file as a pull request. Once it has a number, you rename the file to match it, which is how OTEPs get their sequential identifiers.
Discuss and revise
Reviewers from different languages and companies comment. Expect hard questions, requests for examples and suggestions of different designs. Good authors treat these as improvements, not attacks.
Gather the required approvals
The published guide describes an OTEP as approved once several reviewers, four according to the guide, have given their approval on the pull request. At that point it is merged.
Rejection or withdrawal
If the proposal is rejected or the author withdraws it, the pull request is simply closed. The discussion remains visible in the history, so future contributors can learn from it.
Integration into the specification
After approval, an integration issue is opened. A follow-up change then writes the accepted design into the actual specification text, where reviewers check that the wording matches what was approved.
Implementation in the projects
When the specification change is merged, implementation issues are created in the backlogs of the relevant projects, such as each language SDK, so the work is tracked where the implementers live.
An approved OTEP is permission to proceed, not the end. The idea still has to be turned into precise specification text, proven with prototypes and implemented in many languages. Authors who disappear after approval leave the work stranded.
OTEPs are kept in a dedicated folder inside the specification repository and are numbered in sequence based on their pull request numbers. Browsing that folder is an excellent way to learn how past big decisions were reasoned.
10Review and Approval Rules
Two simple rules do a surprising amount of the work in keeping quality high.
For the specification itself, the contribution guide sets out firm review rules. These rules are intentionally simple so that everyone can predict what will happen to a pull request, and they are designed to protect the standard against hasty or biased decisions.
Rule one: approval from different companies
A change needs approval from at least two code owners who represent different companies. A code owner is a person trusted to approve changes in an area. Requiring two different companies means no single employer can quietly push through a change that mainly serves itself. It also doubles the chance that a mistake will be noticed, because reviewers bring different experience.
Rule two: a cooling-off period
After the last modification to a pull request, it must wait at least two working days before it can be merged. Trivial fixes are the usual exception. This waiting time exists because the community is spread across the world. A change made in one time zone should not be merged before reviewers in another time zone have had a fair chance to wake up, read it and object.
Imagine a village notice board where any proposed rule must stay posted for two market days before it is adopted. That way, farmers who only visit on certain days still get a chance to object before the rule takes effect.
What happens when a change is stuck
Sometimes a proposal stalls because experts disagree or nobody is sure. The guide suggests that the author summarize the different viewpoints in the description of the pull request and mention the relevant experts so they can respond. If nothing moves, the author can raise it in the specification channel or at the weekly specification meeting, typically after waiting around two weeks. Escalation beyond that goes to the Technical Committee through a public issue that lays out the trade-offs.
| Situation | Recommended action |
|---|---|
| Reviewers have not answered for a few days | Be patient, since time zones differ, and check for requested changes |
| Reviewers disagree with each other | Summarize each viewpoint in the description and tag the right experts |
| No movement for about two weeks | Raise it in the specification channel or the weekly meeting |
| Disagreement affects several projects | Escalate to the Technical Committee with a clear summary of trade-offs |
11Prototypes: Proof Before Promise
The project prefers rules that have been tried over rules that merely sound good.
A written rule can look perfect on paper and still turn out to be awkward, slow or impossible in real code. To avoid such surprises, the specification process asks for prototypes. A prototype is a working sample implementation that shows the proposed behavior really can be built and used.
Before a car company puts a new braking system into every model, engineers build a test car and drive it. A beautiful drawing of the brakes would never be enough. A prototype exposes problems drawings cannot.
How much proof is required
Development-level features
A new feature that enters the specification in an early, still-changeable state needs a prototype in at least one implementation that follows the specification.
Stabilizing a feature
Before a feature is declared stable, prototypes in several languages are required. The guide describes three as the typical number, while leaving the final number to the maintainers.
Why several languages for stability
Different languages have different strengths and limitations. A design that is natural in one language may be clumsy in another. Languages without certain features may expose a flaw that the first prototype never revealed. Requiring multiple prototypes before stability drags those hidden problems into the open while changes are still cheap.
Pick languages that are different from each other, for example one with a strong type system, one dynamic and one with a very different runtime. Three prototypes in three similar languages teach far less than three prototypes in three contrasting ones.
Problem
An author proposes a polished design, wins approvals on the strength of the document alone, and has no working implementation anywhere.
Why It’s Harmful
Problems appear only when implementers try to build the design, by which point the specification text is already merged and changing it is disruptive.
Correct Approach
Build at least one prototype alongside the proposal, share its results, and add prototypes in contrasting languages before asking for stability.
12Maturity Levels: How Stable Is It?
Every part of OpenTelemetry carries an honest label about how far you can trust it.
Not every feature is equally finished. A brand-new capability might still change shape next month, while a mature one is promised not to break for years. To avoid confusing users, the specification describes a life cycle with clear maturity levels. These labels are one of the most useful things to understand if you are deciding whether to build on a feature.
flowchart LR
D["Development: may change, even in breaking ways"] --> S["Stable: formal compatibility promises"]
S --> P["Deprecated: replacement exists, same support as stable"]
P --> R["Removed: leaves the specification, major version change"]
Development
Newly introduced and still evolving. Breaking changes and performance adjustments may happen, so it should not be the anchor for long-lived dependencies. It can later become stable without disrupting existing users.
Stable
Thoroughly tested and covered by formal promises. The API must reach stability before the other components that depend on it, such as the SDK.
Deprecated
Marked as on its way out, but only once a stable replacement exists. Deprecated features keep the same support guarantees as stable ones during the transition.
Removed
Taken out of the release entirely. Because removal breaks users, it forces a major version increase.
Building a critical production feature on something marked as development is like building a house on ground that is still being surveyed. It can work, but you accept the risk of rework. Always check the maturity of every component you depend on.
Why a replacement must exist first
The rule that deprecation requires a stable replacement protects users from being stranded. Nobody is told to stop using something unless there is a supported alternative ready for them. This single rule prevents a whole class of painful forced migrations.
13Compatibility Promises and Long-Term Support
What exactly does the project promise when it calls something stable?
Stability is only meaningful if it is spelled out. The specification lays out concrete promises about what will not break, how version numbers signal the size of a change, and how long old versions will continue to receive fixes.
The core promise
Once an API is stable, all existing calls must continue to compile and work against every later minor version of the same major version. Software that works today with a stable API should keep working after routine upgrades. Plugin points that the SDK offers, and the constructors people use to create SDK components, must also remain backward compatible. For languages that distribute compiled binaries, binary compatibility is expected to be preserved as well.
How version numbers speak
| Kind of bump | What it signals | Examples |
|---|---|---|
| Patch | Fixes only, nothing new to learn | Bug fixes and security fixes that need no changes by users |
| Minor | Backward-compatible growth | New capabilities, changes to features still in development, deprecations |
| Major | Possible breakage | Breaking changes to stable interfaces or removal of a signal |
Stable API and SDK packages for one language share a unified version number so that users do not have to guess which versions fit together. Contributed extension packages are versioned independently, and the separate component families, such as the API, the SDK and the semantic conventions, can each increase their own numbers on their own schedule.
How long old versions are supported
Stable APIs are like the standard electrical socket in your wall. The shape is not changed when a new appliance appears, and if the socket design ever does change, the old one is supported for years so nobody has to rewire the whole house overnight.
Because stable promises are so strong, the bar for declaring something stable is high, and the process works hard to find problems early. Prototypes in several languages and wide review exist precisely because fixing a stable mistake is very expensive.
14Semantic Conventions and Schema Changes
Names matter, and renaming something safely is a surprisingly deep problem.
Semantic conventions are the shared dictionary of names used on telemetry: the label for an HTTP method, the name of a database operation, the way a cloud region is recorded. Dashboards, alerts and analysis tools all read these names. If a name changes without warning, dashboards silently go blank and alerts stop firing.
Stable names cannot simply change
Once a name is stable, the project promises not to alter it in ways that would break existing analysis. Instead, evolution is handled through a mechanism of schema transformations. A schema transformation is a machine-readable description of how to convert data from an older naming scheme to a newer one. Allowed evolutions include renaming an attribute or a metric and adding new attributes, with the transformation recorded so that tools can translate.
When a street is renamed, a good city publishes a table saying that the old name now refers to the new name. Mail still arrives, maps can be updated, and nobody is lost. A schema transformation is that table for telemetry names.
Why this has its own home
Semantic conventions evolve faster than the core rulebook, because new technologies and new kinds of systems keep appearing. Giving them their own repository and their own working group lets the community add, refine and stabilize conventions for databases, messaging, cloud platforms and many other areas without slowing the core specification down. The same overall habits apply: proposals, review by experts across companies, maturity levels and compatibility rules.
A name that reaches stable status becomes part of countless dashboards and queries around the world. Proposals for new conventions deserve extra care for exactly this reason. A slightly awkward name that is chosen well is far better than a clever name that must later be changed.
15From Specification to Real Code
A rule on paper only matters once the implementations follow it.
After a specification change is merged, the real work of spreading it begins. The specification SIG does not write every language’s code. Each language SIG owns its own implementation and decides how and when to adopt the new behavior, guided by the specification and the issues created for them.
Implementation issues are opened
For each affected project, an issue records the work needed, so language maintainers can plan it in their own backlog.
Language SIGs implement at their own pace
Different languages have different numbers of volunteers and different priorities, so adoption does not happen everywhere at once.
The compliance matrix records progress
The matrix shows, for each requirement, which languages support it, which partly support it and which do not yet, giving users an honest view.
Feedback flows back into the specification
When implementers discover ambiguities or problems, they raise them, and the specification is clarified. The rulebook and the code improve together.
Configuration gets special care
Because users want to configure every language in the same way, SDK configuration is described by a shared declarative schema. When a specification change alters configuration, the matching schema change must be approved and merged together with it, so the written rule and the machine-readable configuration never drift apart.
Before relying on a new feature in your language, look at the compliance matrix and the maturity of the feature. The specification may describe something that your language’s SDK has not yet adopted.
16Communication and Escalation Channels
Open work needs open places to talk.
The specification process is public by design. Discussions happen in writing, in recorded or documented meetings, and in shared chat channels, so anybody can follow the reasoning behind a decision and anyone can take part.
GitHub issues and pull requests
The official record. Decisions, objections and approvals are visible here for anyone to read at any time.
The specification chat channel
A channel in the foundation’s chat workspace where questions are asked quickly and contributors get early guidance.
The weekly specification meeting
A recurring public meeting held at a time chosen to suit both European and American participants, with shared notes. Additional meetings for Asia-Pacific time zones can be arranged on request.
Technical Committee escalation
For disputes that cannot be settled at the working level, a public issue tagging the committee, with a summary of trade-offs, starts the escalation.
How the Technical Committee decides
The committee prefers to reach agreement through discussion and uses a vote only when consensus cannot be reached. A vote needs a quorum of more than half of the members and a simple majority to pass, and the results are shared publicly. Meetings are open to observers and are documented, which keeps decisions accountable.
When you escalate, summarize the options fairly, including the ones you disagree with. A neutral summary earns trust and speeds up decisions, because reviewers can see you are seeking the best outcome rather than defending a position.
17A Complete Journey: One Imaginary Idea
Follow a made-up proposal from first spark to widespread use.
To make everything concrete, imagine that a contributor notices that many users struggle to measure how long their programs spend waiting in queues. They believe a new kind of measurement would help. This story is invented to show the path, not a record of a real proposal.
The idea is raised
The contributor asks in the specification channel and mentions it at the weekly meeting. Maintainers say it sounds like a new kind of measurement, which affects many languages, so it is a significant change.
The OTEP is drafted
The contributor writes the motivation with real user stories, describes the design, lists drawbacks and alternatives, and opens a pull request.
Reviewers push back and improve it
A reviewer from a different language points out that the proposed design is hard to do without a certain language feature. The author revises the design and adds an alternative.
The OTEP is approved and merged
After the required approvals the proposal is merged, and an integration issue is opened to bring it into the specification.
Specification text and a prototype
The author writes the specification wording, updates the changelog, and builds a working prototype in one implementation. The feature enters the specification marked as development.
Two code owners from different companies approve
After the minimum waiting time with no objections, the change is merged and implementation issues are opened in the language projects.
Real-world feedback
Early adopters try the feature, discover rough edges and report them. The specification is adjusted while the feature is still allowed to change.
Stabilization
Prototypes in several different languages confirm that the design works everywhere. Maintainers agree to declare it stable, and from that moment the compatibility promises apply.
Notice how many separate checkpoints protect the final result: agreement on the need, a written design, wide review, a working prototype, diversity of approvers, a waiting period, early feedback and multi-language proof. Each checkpoint catches a different kind of mistake, and none of them depends on a single person or company.
18Why the Process Is Designed This Way
Every rule in the process answers a specific fear.
| The fear | The safeguard |
|---|---|
| One company bends the standard to its own interests | Approvals from different companies and company limits on committees |
| A design that works in one language fails in another | Prototypes in several languages before stability |
| Contributors waste effort on unwanted ideas | Approving an issue before writing a pull request |
| Reviewers in distant time zones are bypassed | A minimum waiting period after the last change |
| Users are broken by sudden changes | Maturity levels, compatibility promises and long-term support |
| Big ideas are decided in private conversations | Public proposals, public meetings and written records |
| Governance arguments poison technical work | Separation between the Governance and Technical Committees |
Advantages and trade-offs
Advantages
- Strong protection against single-company control
- Designs are proven in real code before being promised
- Users get clear signals about stability and support
- Every decision leaves a public, searchable record
- The process scales its effort to the risk of the change
- Escalation paths exist for real disagreements
Disadvantages / Trade-offs
- Significant changes can take many months
- Volunteers with limited time can become bottlenecks
- Waiting periods slow even correct changes
- Newcomers may find the process intimidating
- Implementations adopt changes unevenly across languages
- Consensus-seeking can stall on strongly contested ideas
The slowness is a conscious price. A standard that thousands of companies depend on cannot be edited like a private notebook. The project accepts slower progress in exchange for decisions that survive scrutiny and rarely need to be reversed.
19Contributor Anti-Patterns
Common ways good ideas get stuck, and how to avoid them.
Problem
The contributor writes a large pull request for a smaller modification without first getting an issue approved.
Why It’s Harmful
If maintainers disagree with the underlying idea, all the effort is wasted, and the author may feel unfairly rejected when the real issue is that agreement was never sought.
Correct Approach
Open an issue first, wait for approval, and optionally add a small draft to illustrate the idea.
Problem
An author treats a significant, cross-cutting change as a quick pull request to avoid the effort of an enhancement proposal.
Why It’s Harmful
Reviewers cannot judge the overall design from a small text edit, language teams are surprised by new obligations, and the change is likely to be stopped or reversed.
Correct Approach
Recognize cross-cutting changes early and write the proposal. The effort is repaid by faster, smoother acceptance.
Problem
The proposal is supported only by people from the author’s own employer, with no reviewers from other companies engaged.
Why It’s Harmful
The process requires approvals from different companies, so the change stalls, and even if it did pass, it would lack the broad testing that diverse reviewers provide.
Correct Approach
Reach out early to practitioners at other organizations, invite their feedback, and use the weekly meeting to find interested reviewers.
Problem
An author pushes to declare a feature stable after proving it in only one language.
Why It’s Harmful
Hidden problems in other languages emerge after the stability promise is made, forcing awkward workarounds or breaking changes.
Correct Approach
Gather prototypes in contrasting languages and let the maintainers confirm the count before asking for stability.
Problem
An approved proposal is abandoned because the author lost interest, leaving the specification text and implementations unwritten.
Why It’s Harmful
Language teams see a promise that never arrives, and the idea is neither cleanly delivered nor cleanly withdrawn.
Correct Approach
Plan for the full journey, and if you cannot continue, say so publicly and hand over the work to someone else.
20Best Practices and Common Mistakes
A practical checklist for anyone who wants to contribute.
Best practices
Start with the user’s problem
Describe who is struggling and how, using concrete examples. Proposals rooted in real pain win support much faster than abstract improvements.
Search before you write
Look through existing issues, past proposals and the specification itself. Your idea may already exist, or may have been rejected for reasons worth knowing.
Pick the lightest path that fits
Use the three sizes of change to choose between a direct pull request, an approved issue and a full proposal. Ask maintainers if unsure.
Be honest about drawbacks
List the costs and risks of your own idea. Reviewers will find them anyway, and openness builds trust.
Prototype early
Build a working sample while the design is still flexible, and share what you learn, including surprises.
Respect time zones and volunteers
Allow time for replies, use the weekly meeting for faster alignment, and avoid pressuring reviewers.
Keep the changelog and companion changes complete
Update the unreleased changelog section and prepare matching configuration schema changes where relevant, so reviewers have nothing to chase.
Common mistakes
Treating review comments as personal criticism. Reviews are how the standard stays good. The best authors thank reviewers and revise.
Assuming a merged specification change means all languages already support it. Always check the compliance matrix and the maturity level.
Building production dependencies on development-level features without a plan for change.
Escalating too quickly. Most disagreements resolve with patient discussion and a clear summary of viewpoints, and escalation should follow the suggested waiting period.
Ignoring the semantic conventions. A change that adds new labels or renames existing ones affects users deeply and needs the conventions’ own care for compatibility.
21A Decision Guide for Your Idea
Answer a few questions and find the right path.
flowchart TD
S["You want to change something"] --> Q1{"Is it only a typo, wording fix or link?"}
Q1 -->|"Yes"| A["Open a pull request directly"]
Q1 -->|"No"| Q2{"Will several languages have to change behavior?"}
Q2 -->|"No"| Q3{"Is it a new term, optional parameter or stabilization?"}
Q3 -->|"Yes"| B["Open an issue, get approval, then a pull request with a prototype"]
Q3 -->|"No"| C["Likely a language-specific matter, take it to that SIG"]
Q2 -->|"Yes"| D["Write an OTEP first"]
D --> E["Then a spec pull request with prototypes, changelog and config schema updates"]
E --> F["Later, gather multi-language prototypes to reach stability"]
| Your idea | Path | Proof expected |
|---|---|---|
| Fix a spelling mistake | Direct pull request | None |
| Clarify confusing wording | Direct pull request | None |
| Add an optional parameter | Approved issue, then pull request | A prototype in one implementation |
| Add a new kind of metric | OTEP, then pull request | A prototype, later several for stability |
| Create a new signal | OTEP, then pull request | Prototypes and broad review |
| Declare a feature stable | Issue and pull request | Prototypes in typically three languages |
| Change only one language’s behavior | That language’s SIG | Determined by that SIG |
Treat the guide as a starting point. Maintainers have the final word on the path and the number of prototypes, so a short conversation before you begin is the best investment you can make.
22How to Get Involved
You do not need to be an expert to begin helping.
Read and follow along
Browse the enhancement proposals and recent specification discussions. Reading how experts reason about trade-offs is a free education in designing standards.
Fix the small things
Typos, unclear sentences and broken links are welcome, and they teach you the mechanics of the repository with almost no risk.
Share real-world experience
Practitioners who run OpenTelemetry in production often have exactly the evidence that proposals lack. Commenting with concrete experience is valuable even if you never write a document.
Build prototypes
Implementers in less-covered languages are especially valuable, because proposals need proof in contrasting languages. A prototype in an underrepresented language can unblock stability for everyone.
Join the weekly meeting
Attending, even silently at first, shows you how decisions are made and who is who. Notes are shared, so you can catch up on what you miss.
Grow into a larger role
Sustained, helpful contribution is how people become approvers and maintainers over time. The roles are earned by showing good judgment and reliability, not by seniority at a company.
23Frequently Asked Questions
Short, direct answers to the questions people ask most.
The specification is a written description of required behavior, independent of any language. An SDK is real software in one language that follows that description. The specification tells implementers what to build, and the SDK is the result.
No. Trivial fixes need only a pull request, smaller modifications need an approved issue first, and only significant, cross-cutting changes need an enhancement proposal.
At least two code owners representing different companies must approve, and the change must wait the minimum period after its last modification. The Technical Committee provides technical direction and handles escalations.
Because designs that look good on paper can fail in real code. A prototype exposes practical problems cheaply, and several prototypes in different languages expose problems that one language would hide.
It means the feature is new and may still change, possibly in breaking ways. It can become stable later without disrupting existing users, but you should not depend on it for long-lived critical systems without accepting the risk.
The stability rules describe at least three years of support for an API after its successor major release, and at least one year for SDKs and contributed packages, with fixes backported during that time.
Stable names are not changed in ways that break existing analysis. Evolution is handled through schema transformations that describe how to translate between old and new names.
Summarize the different viewpoints in the description and tag the relevant experts. If there is still no movement after about two weeks, raise it in the specification channel or at the weekly meeting. Unresolved technical disputes can be escalated to the Technical Committee.
No. The Governance Committee handles community, scope, values and repositories. Technical decisions belong to the Technical Committee and the SIGs, which keeps governance debates separate from technical ones.
Because reviews require approvers from different companies, and the committees limit how many members may share an employer. These rules are meant to keep the standard neutral.
The compliance matrix in the specification repository tracks how each language implementation meets each requirement, and the project status page shows the maturity of signals and components.
No. Governance and contribution documents are revised as the project learns. Always read the current contribution guide in the repository before starting, since details such as numbers of approvals or locations of documents can be updated.
24How the Specification and the SIGs Work Together
The rulebook and the teams that build the software teach each other constantly.
It is tempting to picture the specification as a top-down order handed to language teams. In practice the relationship runs in both directions. The specification group collects lessons from implementers, and implementers rely on the specification for direction. Understanding this two-way flow explains why the process values prototypes, open meetings and wide review so highly.
What the specification group contributes
The specification group offers clarity and consistency. It looks across all languages at once and notices when two teams have solved the same problem in different ways. It writes down a single answer so that users never have to wonder whether a feature behaves differently depending on the language. It also acts as a referee, helping teams find common ground when their preferences differ.
What the language teams contribute
Language teams contribute reality. They know which ideas are easy in their language and which are painful, and they hear directly from users about what breaks. Many of the best specification changes began as a language team’s complaint that the written rule was ambiguous, impossible to follow efficiently, or missing a common situation. Without that feedback, the specification would drift away from real needs.
Think of a cookbook author and the many kitchens that use the book. The author writes the recipe, but each kitchen discovers that an oven runs hot or an ingredient is hard to find. The best later editions of the cookbook include those lessons. The specification and the SIGs are the author and the kitchens of OpenTelemetry.
Typical moments of collaboration
Before a proposal is written
Authors consult language maintainers informally, so that the first draft already reflects practical limits in several languages.
During review
Maintainers of different languages read the proposal and point out places where it would be hard or costly to implement in their own language.
While building prototypes
Early implementers find unclear wording and missing details, and send corrections back to the specification while the feature is still allowed to change.
After release
Users report surprises in production. These reports flow back as issues, leading to clarifications and, over time, to the next round of improvements.
Healthy tension, not conflict
Disagreements between the specification group and a language team are normal and often productive. A language team may argue that a rule is too heavy for its runtime, while the specification group argues that consistency across languages matters more. The escalation paths exist for exactly these moments, and the habit of writing down each side’s reasoning means that even a disputed decision can be understood and revisited later.
If you contribute to either side, make a point of talking to the other. Specification authors benefit enormously from spending time in an implementation, and implementers benefit from attending specification meetings. The people who bridge both worlds tend to produce the clearest proposals.
25Summary and Key Takeaways
The OpenTelemetry specification is the shared rulebook that keeps many language implementations consistent, and the specification process is the careful, public, multi-company method for changing it. Small changes travel a light path, medium changes need an approved issue first, and significant cross-cutting changes begin with a written enhancement proposal. Every non-trivial change needs reviewers from different companies, a waiting period for time zones, and proof in the form of working prototypes.
Features then move through maturity levels from development to stable, and stability carries strong compatibility and long-term support promises that explain why the bar is high. Governance is split between a Governance Committee for community matters and a Technical Committee for technical ones, both bound by rules that prevent any single company from dominating. Understanding these steps lets you read the specification critically, judge the maturity of what you depend on, and, if you wish, take your own idea all the way from a casual suggestion to a rule that the whole ecosystem follows.
Key Takeaways
- The specification is the shared rulebook — it keeps every language implementation consistent so that telemetry from different programs fits together.
- Change size decides the path — trivial fixes go straight to a pull request, smaller modifications need an approved issue first, and significant cross-cutting changes need an OTEP.
- Diversity is built into review — specification changes need approval from code owners at different companies and a minimum waiting period after the last modification.
- Prototypes prove designs — a development feature needs at least one working implementation, and stabilization typically needs prototypes in three contrasting languages.
- Maturity labels are promises — development may break, stable carries strong compatibility and multi-year support promises, and deprecation requires a stable replacement first.
- Governance and technical authority are separate — the Governance Committee runs the community, while the Technical Committee and SIGs decide technical matters, each with employer limits.
- Check before you depend — look at a feature’s maturity and the compliance matrix, and read the current contribution guide, because processes and implementations evolve.