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

Add ADR for choosing a new SDLC #1346

Merged
merged 5 commits into from
Nov 28, 2022

Conversation

jdesrosiers
Copy link
Member

Resolves: #1333

Here's the ADR for documenting the reasons for the paradigm shift in how we develop the spec. I included the approach @awwright laid out recently, but I don't see that so much as an alternative as complementary. If we decide we want to work toward that vision, it would fit just fine into the process we have been discussing and have agreement on.

adr/2022-11-stable-spec.md Outdated Show resolved Hide resolved
adr/2022-11-stable-spec.md Outdated Show resolved Hide resolved
adr/2022-11-stable-spec.md Outdated Show resolved Hide resolved
adr/2022-11-stable-spec.md Outdated Show resolved Hide resolved
adr/2022-11-stable-spec.md Outdated Show resolved Hide resolved
Comment on lines +55 to +57
extension mechanism. This spec should rarely change. New features would be added
through additional specifications that define extensions to the "Core Semantics"
spec.
Copy link
Member

Choose a reason for hiding this comment

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

👍

Copy link
Member

@gregsdennis gregsdennis left a comment

Choose a reason for hiding this comment

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

Much better. It's clear to me what the two options are and how they differ.

Copy link
Member

@Relequestual Relequestual left a comment

Choose a reason for hiding this comment

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

I've made a few comments.
Some are change suggestions, others are thoughts that come to mind while reading it which I wonder if they are worth making notes of (should you keep a list of notes on the SDLC some place. Feel free to create new discussions if a related discussion doesn't exist).

Comment on lines 92 to 100
## Pros and Cons of the Options
The biggest benefit is shared between Option 1 and Option 2. Both approaches
result in a stable spec. This will have benefits for both implementers and
users. Because of the compatibility requirements, whenever you write a schema,
you will never need to change it just to keep up with changes to JSON Schema.
This is also better for implementers because they don't have to maintain
separate code with different semantics in different versions. They just need to
code for the current release and they will automatically have support for past
releases.
Copy link
Member

Choose a reason for hiding this comment

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

I think it's worth noting that "past releases" means "from when the first "stable" release is created, not including previous "draft era" versions of JSON Schema".
It's unlikely, but possible, that someone reading this might conclude that they should expect all previous versions, including "draf era" verisons of JSON Schema, should be supported in a single implementation which claims "stable era" support.

Comment on lines +107 to +113
rather than having to wait months or years for the next release to go out. It
also allows us to iterate faster on unstable features which would allow us to
get them to a stable state much sooner. For example, we have changes to dynamic
references that have been agreed upon and ready to go for over a year, but users
can't benefit from the change until we can get the next full release published.
With this model, the change could have been made available for over a year now
and we would have a years worth of feedback on it's use. Having a mutable spec
Copy link
Member

Choose a reason for hiding this comment

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

Thinking/spitballing: In such a situation, how would a user be able to determine if an implementation supported the RIGHT version of an unstable feature?
Should we provide guidance that says something like unstable features should be referenced by implementations by the specific commit date of the spec file and tests (if any) they are intending to implement?

That got me thinking further...
If we specified that pre-stable keywords MUST be postfixed with the date of the commit, or stage number, or something, idk, then you make sure users and implementations can differenciate easily between pre-stable and stable versions of that keyword. Although I guess you'd expect to be able to do this with the "release" dialect.

And, I wonder if this is somewhat a moot point if we prevent non-dialect/vocabulary defined keywords from being used.

Copy link
Member Author

Choose a reason for hiding this comment

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

This is a bit out of scope for this PR, so let's have this discussion elsewhere.

Comment on lines +119 to +121
The downside of a mutable spec is that it can be more difficult for implementers
and users to track when changes happen. We will need to be better at
communicating changes in blog posts or equivalent.
Copy link
Member

Choose a reason for hiding this comment

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

I have some automation ideas on this.
Any such concept though would require us to track "latest modified" status of keywords in a structured data file, so automation can be run against such data.
This would add a burden to spec authors, unless unstable features/keywords are written in individual files, and merged into a single spec artifact at workflow time. In which case, changes would be easier to catch, but you still wouldn't know if it was a change requiring implementation change or not unless a human specified such.

Copy link
Member Author

Choose a reason for hiding this comment

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

This is a bit out of scope for this PR, but I think I'd argue that this communication is better done by a person than an automation. An automation can't explain why something changed.

Copy link
Member

Choose a reason for hiding this comment

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

Automation could provide reminders for one of us to post on a change, though.

with stable features or want to use a new keyword, users have the information
they need to make that decision.

The downside of the stability model is that it presents a very high barrier for
Copy link
Member

Choose a reason for hiding this comment

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

It's debatable if a high barrier is a downside. If stability is the goal, a high barrier can actually be a benefit.

Copy link
Member Author

Choose a reason for hiding this comment

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

I agree. I thought I had addressed that in previous paragraphs, but it seems I only implied it and should be more clear. The high barrier is definitely a benefit, but there's always a trade off. I was trying to address the trade off in this paragraph. I'll try to make it more clear.

Copy link
Member

@gregsdennis gregsdennis Nov 14, 2022

Choose a reason for hiding this comment

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

To the point of there being a high barrier, when I decided to create JsonSchema.Net as a replacement for Manatee.Json, there was a LOT of work to do, and the vast majority of it was re-implementing all of the keywords. This high barrier was a serious factor in my consideration of making a new library. (Obviously I decided to do it, but I did have to think about the workload I was taking upon myself.)

It's definitely less of a burden for existing libraries to update than for a new library to be created.

Copy link
Member Author

Choose a reason for hiding this comment

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

Right. Although it creates high barriers for spec changes, it actually lowers the barrier for implementers, which is probably worth mentioning as well.

adr/2022-11-stable-spec.md Show resolved Hide resolved
Copy link
Contributor

@handrews handrews left a comment

Choose a reason for hiding this comment

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

I had apparently started a review when this was first posted but never published it 🤦
The comments I had written have since been addressed. There may be points here I'll want to clarify or debate as we document the actual process, but as documentation of the decision this looks good to me!

@Relequestual Relequestual self-requested a review November 21, 2022 22:07
@jdesrosiers jdesrosiers merged commit 38bc78a into json-schema-org:main Nov 28, 2022
@jdesrosiers jdesrosiers deleted the adr-stable-spec branch November 28, 2022 21:49
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.

Write ADR describing the decision to move to the new SDLC process
4 participants