Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Initial cut at laying out core principles for Specification change. #4286

Merged
merged 26 commits into from
Nov 22, 2024
Merged
Show file tree
Hide file tree
Changes from 9 commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
e6b8e26
Initial cut at laying out core principles for Specification change.
jsuereth Nov 7, 2024
c4724e2
Fix markdownlint.
jsuereth Nov 7, 2024
8e994dd
Merge branch 'main' into wip-specification-principles
jsuereth Nov 7, 2024
ad49da8
rework simplicity last paragraph.
jsuereth Nov 7, 2024
cd797cf
Update specification/specification-principles.md
jsuereth Nov 8, 2024
3fb01d2
Update specification/specification-principles.md
jsuereth Nov 8, 2024
9504660
Update specification/specification-principles.md
jsuereth Nov 8, 2024
caafb13
Update specification/specification-principles.md
jsuereth Nov 8, 2024
fa4b5ec
Update specification/specification-principles.md
jsuereth Nov 8, 2024
ee5343a
Update specification/specification-principles.md
jsuereth Nov 8, 2024
9caeb61
Update specification/specification-principles.md
jsuereth Nov 8, 2024
6bf7ad6
Update specification/README.md
jsuereth Nov 8, 2024
11ba3ab
Fix lint and add link from CONTRIBUTING
jsuereth Nov 8, 2024
fe7e90b
Update specification/specification-principles.md
jsuereth Nov 8, 2024
ba12159
Update specification/specification-principles.md
jsuereth Nov 8, 2024
a144b05
Fix link in contributing.
jsuereth Nov 11, 2024
9ec278f
Update specification/specification-principles.md
jsuereth Nov 12, 2024
175bb69
Update specification/specification-principles.md
jsuereth Nov 12, 2024
36fb406
Update specification/specification-principles.md
jsuereth Nov 12, 2024
41111de
Update specification/specification-principles.md
jsuereth Nov 12, 2024
3b08a2d
Reword consistency principles.
jsuereth Nov 13, 2024
a1ea938
Merge branch 'main' into wip-specification-principles
jsuereth Nov 13, 2024
6c6c27d
Add CHANGELOG
arminru Nov 19, 2024
7c82a0a
Update specification/specification-principles.md
jsuereth Nov 19, 2024
4a037e6
Merge branch 'main' into wip-specification-principles
jsuereth Nov 20, 2024
1cab46f
Add changelog.
jsuereth Nov 21, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 7 additions & 4 deletions specification/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,13 @@ path_base_for_github_subdir:

- [Overview](overview.md)
- [Glossary](glossary.md)
- [Versioning and stability for OpenTelemetry clients](versioning-and-stability.md)
- [Library Guidelines](library-guidelines.md)
- [Package/Library Layout](library-layout.md)
- [General error handling guidelines](error-handling.md)
- Principles and Guideliens
jsuereth marked this conversation as resolved.
Show resolved Hide resolved
jsuereth marked this conversation as resolved.
Show resolved Hide resolved
- [Core Principles](specification-principles.md)
- [Versioning and stability for OpenTelemetry clients](versioning-and-stability.md)
- [Library Guidelines](library-guidelines.md)
- [Package/Library Layout](library-layout.md)
- [General error handling guidelines](error-handling.md)
- [Performance](performance.md)
- API Specification
- [Context](context/README.md)
- [Propagators](context/api-propagators.md)
Expand Down
110 changes: 110 additions & 0 deletions specification/specification-principles.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
# Specification Principles

This document defines common principles that will help designers create and extend
the OpenTelemetry specification to adapt to new use cases and fix issues.

## OpenTelemetry Mission and Values

It should be taken in context of the [overal values of OpenTelemetry](https://opentelemetry.io/community/mission/), which lays out the following core values:
jsuereth marked this conversation as resolved.
Show resolved Hide resolved

- [Telemetry should be easy](https://opentelemetry.io/community/mission/#telemetry-should-be-easy)
- [Telemetry should be universal](https://opentelemetry.io/community/mission/#telemetry-should-be-universal)
- [Telemetry should be vendor-neutral](https://opentelemetry.io/community/mission/#telemetry-should-be-vendor-neutral)
- [Telemetry should be loosely-coupled](https://opentelemetry.io/community/mission/#telemetry-should-be-loosely-coupled)
- [Telemetry should be built-in](https://opentelemetry.io/community/mission/#telemetry-should-be-built-in)

Additionally, it lays out the following core Engineering Values:

- [Compatibility](https://opentelemetry.io/community/mission/#we-value-_compatibility_)
- [Stability](https://opentelemetry.io/community/mission/#we-value-_stability_)
- [Resilience](https://opentelemetry.io/community/mission/#we-value-_resilience_)
- [Performance](https://opentelemetry.io/community/mission/#we-value-_performance_)
- See [Specification Performance Principles](performance.md) for more details.

In addition to these core values, there are a set of things we've learned about
Specification work and drive how we write our Specification.

## Specification Principles

Here are the key principles of the OpenTelemetry Specification:

- [Be User Driven](#be-user-driven)
- [Be General](#be-general)
- [Be Stable](#be-stable)
- [Be Consistent](#be-consistent)
- [Be Simple](#be-stable)

Note that at times some of these principles are at odds with each other. For
example, keeping things stable may put constraints on possible simplicity. These
principles are a rubric to guide design, and form a specturm through which we
evaluate additions or changes to the Specification.

Let's look at each in more detail.

### Be User Driven

The specification is useless without the ecosystem it enables. Changes should
focus on real world use cases, and real user needs. Additionally, changes should
be implementable across the entire OpenTelemetry ecosystem.

This means proposals should think "end to end" not "add this one little thing".

Projects and proposals should provide prototypes or implementations
prior to solidification within the Specification.
jsuereth marked this conversation as resolved.
Show resolved Hide resolved

We have a few simple rules of thumb regarding prototypes:

- API/SDK changes should be prototyped in three languages. The goal is
jsuereth marked this conversation as resolved.
Show resolved Hide resolved
coverage of possible API designs, not any specific language:
- One language should cover typed Object-Oriented ecosystems (Java, C#, etc.)
jsuereth marked this conversation as resolved.
Show resolved Hide resolved
- One language should cover dynamically typed ecosystems (Python, Javascript)
jsuereth marked this conversation as resolved.
Show resolved Hide resolved
jsuereth marked this conversation as resolved.
Show resolved Hide resolved
- One language should cover structural ecosystems (e.g. Go, Rust)
jsuereth marked this conversation as resolved.
Show resolved Hide resolved
- Protocol changes should be prototyped both on the client and the server.
- Prototypes can be unmerged Pull Requests, existing projects, etc. but must
demonstrate the feature with confidence that the Specification of it will
be successful.

### Be General

The specification needs to be implemented across a wide range of languages,
frameworks, ecosystems and communities. OpenTelemetry components should be
allowed to provide idiomatic experiences to their users.
jsuereth marked this conversation as resolved.
Show resolved Hide resolved

THe Specification should focus on *what* not *how*. When describing how, use
jsuereth marked this conversation as resolved.
Show resolved Hide resolved
non-normative language or supplementary guidelines, like this document.

### Be Stable

Don't. Break. Users.
mx-psi marked this conversation as resolved.
Show resolved Hide resolved

Yes, this is a repeat of the overall OpenTelemetry mission of
[Stability](https://opentelemetry.io/community/mission/#we-value-_stability_).
That's how important stability is.

To achieve OpenTelemetry's mission of "Telemetry should be built-in", we need to
create a set of components that are safe for users to depend on. Instability
breaks trust, and hurts the mission of being a built-in solution.
jsuereth marked this conversation as resolved.
Show resolved Hide resolved

When things do change, the specification (and implementation) should do the
heavy lifting to ensure seamless, smooth experience for the OpenTelemetry
ecosystem.

### Be Consistent

Don't make users learn new concepts and behaviors for each feature they interact
cijothomas marked this conversation as resolved.
Show resolved Hide resolved
with in OpenTelemetry. This has three sub-principles:

- Favor fewer broadly applicable features over many narrowly defined ones.
jsuereth marked this conversation as resolved.
Show resolved Hide resolved
- Prefer similar concepts and behaviors between signals.
- Reuse naming conventions between signals, components, where possible.

### Be Simple

Simple is better than complicated. Abstractions should pay for themselves.
OpenTelemetry has a large scope and many components. Solving a complex problem
with simple design and solution leads to a much lower maintenance burden and
easier evolution in the future.

Additionally, a Specification is read and interpreted by many individuals.
Complex language, nuanced wording and unclear descriptions lead to confusion and
often times poor user experience as sections are not interpreted as desired.
Loading