> But MVs are not alpha or preview, as they are not actively being worked
on.

fwiw I think Jaydeep and Runtian are looking into improving MV status quo
according to
https://lists.apache.org/thread/d3qo3vjxn4116htf175yzcg94s6jq07d

On Thu, 12 Dec 2024 at 09:45 Aleksey Yeshchenko <alek...@apple.com> wrote:

> But MVs are not alpha or preview, as they are not actively being worked
> on. They are currently broken. Calling them ‘alpha’ makes ‘alpha’
> overloaded and less useful.
>
>
> On 12 Dec 2024, at 14:00, Josh McKenzie <jmcken...@apache.org> wrote:
>
> But we also need an approved non-euphemism for features like MVs (I
> suggest ‘broken’) and possibly a softer version of it ('dangerous') for
> our existing features that work fine in some narrow well-defined
> circumstances but will blow in your face if you don’t know exactly what you
> are doing.
>
> Feels like the real answer is:
>
>    1. Endeavor to never get ourselves into this state
>    2. Take immediate action if we discover we're there (fix feature if
>    possible, deprecate and remove if not). Not "leave to fester for years"
>
> I like the introduction of 'alpha' as an alias for 'Preview'; not sure why
> that wasn't what we immediately came up with collectively given how
> widespread its usage is. :)
>
> What would demoting MV's to 'alpha' right now look like? We'd warn on
> their usage w/some different structure and verbiage, and it'd be pretty
> implicitly clear to people they shouldn't use it in production right?
>
> It seems to me that the 3 categories would be sufficient even to handle
> our current scenario where we have some things in the system that are a Bad
> Idea to use in production.
>
> On Thu, Dec 12, 2024, at 6:06 AM, Aleksey Yeshchenko wrote:
>
> I don’t like ‘unstable’ either, albeit for a different reason, but I don’t
> think three is enough and fits, as we already have some features that don’t
> fit into either of (preview,beta,ga) - released but broken, released but
> dangerous, deprecated, removed.
>
> For new features going forward, alpha (preview) -> beta -> GA works well
> enough.
>
> But we also need an approved non-euphemism for features like MVs (I
> suggest ‘broken’) and possibly a softer version of it ('dangerous') for
> our existing features that work fine in some narrow well-defined
> circumstances but will blow in your face if you don’t know exactly what you
> are doing.
>
> These classifications are largely orthogonal.
>
> Alpha(preview)->Beta->GA communicates readiness of a feature under
> development, with GA being the default final state for most features.
>
> From there a feature can transition into ‘broken’ or ‘dangerous’
> territory. Serious issues get uncovered (very) late sometimes. It is what
> it is.
> And we do deprecate and remove functionality when it’s superseded.
>
>
> -1 on unstable. It's way too many words than are needed. Three is a
> magic number and fits:
>
> Preview
> Beta
> GA
>
>
> On 11 Dec 2024, at 18:50, Josh McKenzie <jmcken...@apache.org> wrote:
>
> A structured, disciplined approach to graduating something from [Optional]
> -> [Default] makes sense to me, similar to how we're talking about a
> structured flow of [Preview] -> [Beta] -> [GA]. Having those clear stages
> gives us a framework to define what requirements of stage transitions would
> be which'll ideally lead to us producing higher quality, more predictable,
> more consistent results for our end users.
>
> For instance, requirements from [Optional] -> [Default] could be higher
> level abstractions like:
>
>    - Confidence in stability
>    - Strong evidence to indicate superiority in majority of workloads (by
>    count or importance or size, etc)
>
> These are all things we kind of do implicitly and ad-hoc on the mailing
> list, and I'm not looking to tie us down to any granular structure or
> specificity. More thinking it could be useful for someone that's worked on
> something who wonders "Huh. How do I take this from being optional to the
> default?" and having an answer better than "reinvent the wheel every time
> and fling spaghetti at the dev list and pray".
>
> :)
>
>
> On Wed, Dec 11, 2024, at 1:04 PM, Paulo Motta wrote:
>
> Thanks for bringing up this topic, Josh.
>
> Outside of the major features (ie. MV/SAI/TCM/Accord), one related
> discussion in this topic is: how can we "promote" small improvements in
> existing features from optional to default ?
>
> It makes sense to have optimizations launched behind a feature flag
> initially (beta phase) while the improvement gets real world exposure, but
> I think we need a better way to promote these optimizations to default
> behavior on a regular cadence.
>
> Take for example optimized repairs from CASSANDRA-16274. It was launched
> in 4.x as an optional feature gated behind a flag,
> ie. auto_optimise_full_repair_streams: false.
>
> I could be easily missing something, but is there a world where
> non-optimized repairs make sense once this optimization is proven to work ?
> I agree this is fine while the feature is maturing, but at some point we
> need to rip the bandaid and make the optimization default (and clearly
> communicate that). This would allow cleanup code toil of default behavior
> that is no longer being used, because everyone is enabling the improvement
> during deployment.
>
> This is just one example to demonstrate the issue and I don't want this
> discussion to focus on this particular case, but I can think of other
> improvements launched as optional that are never made default.
>
> I don't know if this should be continued to be addressed on a
> improvement-by-improvement basis or if we could have a more streamlined
> process to review and communicate these changes more consciously at every
> major release.
>
> In the same way we open a loop when adding an optimized behavior behind a
> feature flag, I think we should have a process to close these loops by
> promoting these optimizations to default when it makes sense.
>
> On Tue, Dec 10, 2024 at 2:10 PM Josh McKenzie <jmcken...@apache.org>
> wrote:
>
>
> 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