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

Conversation

jsuereth
Copy link
Contributor

@jsuereth jsuereth commented Nov 7, 2024

Fixes #4276

Changes

Documents the values we use when evaluating specification changes. Also sort out the specification README to clarify which components cover Principles and Values.

  • These values can be at odds with each other.
  • These values require subjective judgement.
  • These values can and should be understood and backed by the whole community.

specification/specification-principles.md Outdated Show resolved Hide resolved
specification/specification-principles.md Outdated Show resolved Hide resolved
specification/specification-principles.md Outdated Show resolved Hide resolved
Copy link
Member

@reyang reyang left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM with some minor suggestions.

Copy link
Member

@pellared pellared left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

1 minute review, will do better once I find some time.

specification/README.md Outdated Show resolved Hide resolved
specification/README.md Outdated Show resolved Hide resolved
specification/specification-principles.md Outdated Show resolved Hide resolved
specification/specification-principles.md Outdated Show resolved Hide resolved
specification/specification-principles.md Show resolved Hide resolved
specification/specification-principles.md Outdated Show resolved Hide resolved
specification/specification-principles.md Outdated Show resolved Hide resolved
specification/specification-principles.md Outdated Show resolved Hide resolved
specification/specification-principles.md Outdated Show resolved Hide resolved
Copy link
Member

@tigrannajaryan tigrannajaryan left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All LGTM, except one sub-principle which I think can be misinterpreted, see the comment.

specification/specification-principles.md Outdated Show resolved Hide resolved
Copy link
Member

@jack-berg jack-berg left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't disagree with anything in here, but wish there was some way to give more practical advice on a few topics I see coming up a lot:

  • Should we extend an interface, even when its allowed? Extending interfaces is easier in some languages than others. Ideally we get it right the first time (and we should strive for this), but in the event we don't, when does the value of extending an interface trump the friction it causes in the languages where they are hard to extend? This is related the "be stable" value, but not entirely captured.
  • Language implementation or collector. We often have proposals for use cases that could be done in the collector, but could also be done in the SDK which is advantageous to some users who don't want to use the collector (or in some cases can't). Given that spec API / SDK features need to implemented 11 times, when is it appropriate to reject a API / SDK feature proposal that can be accomplished in the collector? Doing so can help us focus on more pressing problems, and potentially simplify user story by reducing the number of ways to accomplish the same thing.
  • Plugin extension point or structured config. There’s a trade off between SDK plugin extension points (i.e. exporters, processors, samplers), and a more limited or structured approach (i.e. exemplar filters, attribute limits). SDK plugin extension points offer more flexibility but generally have more cumbersome and less standardized configuration. Reducing flexibility (or adding guardrails) can add safety and improve UX in certain domains. When do we choose one or the other? This is related to the "be simple".

It could be the case that we don't have enough experience yet to extract out useful principles on these, but these are the types of questions I see recurring.

Approving because while I think there's even more we could offer contributors, I agree with what is written here.

@jsuereth
Copy link
Contributor Author

@jack-berg I think maybe your specific things can be "examples" or "faq" section. I've been thinking about this comment (and @tigrannajaryan's) for a bit, I'm going to give this an update to account for that, will notify when it's complete.

Agree we should address common concerns and show the interplay of these principles.

@carlosalberto
Copy link
Contributor

As we have enough approvals, one option is to address the important points raised by @jack-berg as a follow up.

@jsuereth
Copy link
Contributor Author

@carlosalberto That sounds like a plan, it's going to be a new section anyway. I'll address @tigrannajaryan's comments and we can follow up with @jack-berg's in a future PR

@jsuereth
Copy link
Contributor Author

I don't disagree with anything in here, but wish there was some way to give more practical advice on a few topics I see coming up a lot:

  • Should we extend an interface, even when its allowed? Extending interfaces is easier in some languages than others. Ideally we get it right the first time (and we should strive for this), but in the event we don't, when does the value of extending an interface trump the friction it causes in the languages where they are hard to extend? This is related the "be stable" value, but not entirely captured.
  • Language implementation or collector. We often have proposals for use cases that could be done in the collector, but could also be done in the SDK which is advantageous to some users who don't want to use the collector (or in some cases can't). Given that spec API / SDK features need to implemented 11 times, when is it appropriate to reject a API / SDK feature proposal that can be accomplished in the collector? Doing so can help us focus on more pressing problems, and potentially simplify user story by reducing the number of ways to accomplish the same thing.
  • Plugin extension point or structured config. There’s a trade off between SDK plugin extension points (i.e. exporters, processors, samplers), and a more limited or structured approach (i.e. exemplar filters, attribute limits). SDK plugin extension points offer more flexibility but generally have more cumbersome and less standardized configuration. Reducing flexibility (or adding guardrails) can add safety and improve UX in certain domains. When do we choose one or the other? This is related to the "be simple".

It could be the case that we don't have enough experience yet to extract out useful principles on these, but these are the types of questions I see recurring.

Approving because while I think there's even more we could offer contributors, I agree with what is written here.

Opened #4293 to address

Copy link
Member

@cijothomas cijothomas left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Left a minor comment, not a blocker!
Very glad to see this written down.

specification/specification-principles.md Outdated Show resolved Hide resolved
@arminru arminru merged commit 88bffea into open-telemetry:main Nov 22, 2024
6 checks passed
@jsuereth jsuereth deleted the wip-specification-principles branch November 24, 2024 12:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Do we need to specify what implementations must exist before marking capabilties Stable?