So some questions to test a world w/3 classifications (Preview, Beta, GA):
- What would we do with the current experimental features (MV's, JDK17, 
witnesses, etc)? Flag them as preview or beta as appropriate on a case-by-case 
basis and add runtime warnings / documentation where missing?

- What would we do in the future if a feature's GA and we discover a Very Big 
Problem with it that'll take some time to fix? Keep it GA but cut a hotfix 
release w/a bunch of warnings? Bounce it back to Preview? Leave it be and just 
feverishly try and fix it?

> for policy decisions like this (that don’t need to be agreed in advance) we 
> should try to legislate the minimum necessary policy to proceed today
Definitely agree; MV's being in limbo for years strains the "3-step 
classification" structure for me. If we want to avoid having a solution for the 
MV-shaped case on the grounds we won't allow ourselves to reach this state 
again in the future, that seems reasonable. With the caveat that we *might* be 
in a similar situation with vector search right now, etc.


On Tue, Dec 10, 2024, at 1:48 PM, Benedict Elliott Smith wrote:
> Yep, I agree with this - we can revisit if we ever absolutely feel the need 
> to add additional states for exceptional circumstances.
> 
> > On 10 Dec 2024, at 13:24, Patrick McFadin <pmcfa...@gmail.com> wrote:
> > 
> > -1 on unstable. It's way too many words than are needed. Three is a
> > magic number and fits:
> > 
> > Preview
> > Beta
> > GA
> > 
> > As a matter of testing the process, any pending CEP should go though
> > this exercise so we can see how it will work.
> > 
> > PS
> > Got the actual numbers from Whimsy.
> > DEV - 1425 users
> > USER - 2650
> > 
> > This means that when features experience a state change, finding more
> > avenues to get the word out will be important.
> > 
> > On Tue, Dec 10, 2024 at 10:04 AM Benedict Elliott Smith
> > <bened...@apache.org> wrote:
> >> 
> >> As an aside, it would be nice to admit we basically revisit everything 
> >> each time it becomes relevant again, and for policy decisions like this 
> >> (that don’t need to be agreed in advance) we should try to legislate the 
> >> minimum necessary policy to proceed today, and leave future refinements 
> >> for later when the relevant context arises.
> >> 
> >> On 10 Dec 2024, at 13:00, Benedict Elliott Smith <bened...@apache.org> 
> >> wrote:
> >> 
> >> I agree with Aleksey that if we think something is broken, we shouldn’t 
> >> use euphemisms, and for this reason I don’t like unstable (this could for 
> >> instance simply mean API unstable). If we intend to never need this 
> >> descriptor, we should avoid bike-shedding and insert a “placeholder” for 
> >> now to be refined as and when we need it when we have the necessary future 
> >> context.
> >> 
> >> i.e.
> >> 
> >> preview -> beta -> [“has problems that will take time to resolve 
> >> placeholder” -> beta] -> GA
> >> 
> >> 
> >> 
> >> On 10 Dec 2024, at 12:39, Josh McKenzie <jmcken...@apache.org> wrote:
> >> 
> >> +1 to this classification with one addition. I think we need to augment 
> >> this with formalization on what we do with features we don't recommend 
> >> people use (i.e. MV in their current incarnation). For something 
> >> retroactively found to be unstable, we could add an "Unstable" 
> >> qualification for it, leaving us with:
> >> 
> >> Unstable: Warnings on use, clearly communicated as to why, either on-track 
> >> to be fixed or removed from the codebase. No lingering for years in a 
> >> fugue state. We should target never needing this classification.
> >> Preview: Ready to be tried by end users but has caveats and most likely is 
> >> not api stable. Developer only documentation acceptable.
> >> Beta: Feature complete/API stable but has not had enough testing to be 
> >> considered rock solid. Developer and User documentation required.
> >> GA: Ready for use, no known issue, PMC is satisfied with the testing that 
> >> has been done
> >> 
> >> 
> >> To walk through how some of the flow might look to test the above:
> >> 
> >> Simple case:
> >> - Preview -> Beta -> GA
> >> 
> >> Late discovered defect case:
> >> - Preview -> Beta -> Unstable -> Beta -> GA
> >> 
> >> Pathological worst-case (i.e. MV):
> >> - Preview -> Beta -> GA -> Unstable -> [Preview|Removed]
> >> 
> >> On Tue, Dec 10, 2024, at 12:29 PM, Jeremiah Jordan wrote:
> >> 
> >> I agree with Aleksey and Patrick.  We should define terminology and then 
> >> stick to it.  My preferred list would be:
> >> 
> >> Preview - Ready to be tried by end users but has caveats and most likely 
> >> is not api stable.
> >> Beta - Feature complete/API stable but has not had enough testing to be 
> >> considered rock solid.
> >> GA - Ready for use, no known issue, PMC is satisfied with the testing that 
> >> has been done
> >> 
> >> 
> >> Whether or not something is enabled by default or the default 
> >> implementation is a separate access from the readiness.  Though if we are 
> >> replacing an existing thing with a new default I would hope we apply extra 
> >> rigor to allowing that to happen.
> >> 
> >> -Jeremiah
> >> 
> >> On Dec 10, 2024 at 11:15:37 AM, Patrick McFadin <pmcfa...@gmail.com> wrote:
> >> 
> >> I'm going to try to pull this back from the inevitable bikeshedding
> >> and airing of grievances that happen. Rewind all the way back to
> >> Josh's  original point, which is a defined process. Why I really love
> >> this being brought up is our maturing process of communicating to the
> >> larger user base. The dev list has very few participants. Less than
> >> 1000 last I looked. Most users I talk to just want to know what they
> >> are getting. Well-formed, clear communication is how the PMC can let
> >> end users know that a new feature is one of three states:
> >> 
> >> 1. Beta
> >> 2. Generally Available
> >> 3. Default (where appropriate)
> >> 
> >> Yes! The work is just sorting out what each level means and then
> >> codifying that in confluence. Then, we look at any features that are
> >> under question, assign a level, and determine what it takes to go from
> >> one state to another.
> >> 
> >> The CEPs need to reflect this change. What makes a Beta, GA, Default
> >> for new feature X. It makes it clear for implementers and end users,
> >> which is an important feature of project maturity.
> >> 
> >> Patrick
> >> 
> >> 
> >> 
> >> On Dec 10, 2024 at 5:46:38 AM, Aleksey Yeshchenko <alek...@apple.com> 
> >> wrote:
> >> 
> >> What we’ve done is we’ve overloaded the term ‘experimental’ to mean too 
> >> many related but different ideas. We need additional, more specific 
> >> terminology to disambiguate.
> >> 
> >> 1. Labelling released features that were known to be unstable at release 
> >> as ‘experimental’  retroactively shouldn’t happen and AFAIK only happened 
> >> once, with MVs, and ‘experimental’ there was just a euphemism for 
> >> ‘broken’. Our practices are more mature now, I like to think, that a 
> >> situation like this would not arise in the future - the bar for releasing 
> >> a completed marketable feature is higher. So the label ‘experimental’ 
> >> should not be applied retroactively to anything.
> >> 
> >> 2. It’s possible that a released, once considered production-ready 
> >> feature, might be discovered to be deeply flawed after being released 
> >> already. We need to temporarily mark such a feature as ‘broken' or 
> >> ‘flawed'. Not experimental, and not even ‘unstable’. Make sure we emit a 
> >> warning on its use everywhere, and, if possible, make it opt-in in the 
> >> next major, at the very least, to prevent new uses of it. Announce on dev, 
> >> add a note in NEWS.txt, etc. If the flaws are later addressed, remove the 
> >> label. Removing the feature itself might not be possible, but should be 
> >> considered, with heavy advanced telegraphing to the community.
> >> 
> >> 3. There is probably room for genuine use of ‘experimental’ as a feature 
> >> label. For opt-in features that we commit with an understanding that they 
> >> might not make it at all. Unstable API is implied here, but a feature can 
> >> also have an unstable API without being experimental - so ‘experimental' 
> >> doesn’t equal to ‘api-unstable’. These should not be relied on by any 
> >> production code, they would be heavily gated by unambiguous configuration 
> >> flags, disabled by default, allowed to be removed or changed in any 
> >> version including a minor one.
> >> 
> >> 4. New features without known flaws, intended to be production-ready and 
> >> marketable eventually, that we may want to gain some real-world confidence 
> >> with before we are happy to market or make default. UCS, for example, 
> >> which seems to be in heavy use in Astra and doesn’t have any known open 
> >> issues (AFAIK). It’s not experimental, it’s not unstable, it’s not ‘alpha’ 
> >> or ‘beta’, it just hasn't been widely enough used to have gained a lot of 
> >> confidence. It’s just new. I’m not sure what label even applies here. It’s 
> >> just a regular feature that happens to be new, doesn’t need a label, just 
> >> needs to see some widespread use before we can make it a default. No other 
> >> limitation on its use.
> >> 
> >> 5. Early-integrated, not-yet fully-completed features that are NOT 
> >> experimental in nature. Isolated, gated behind deep configuration flags. 
> >> Have a CEP behind them, we trust that they will be eventually completed, 
> >> but for pragmatic reasons it just made sense to commit them at an earlier 
> >> stage. ‘Preview’, ‘alpha’, ‘beta’ are labels that could apply here 
> >> depending on current feature readiness status. API-instability is implied. 
> >> Once finished they just become a regular new feature, no flag needed, no 
> >> heavy config gating needed.
> >> 
> >> I might be missing some scenarios here.
> >> 
> >> 
> >> 
> 
> 

Reply via email to