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: > Endeavor to never get ourselves into this state > 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 >>>> <mailto: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 >>>>> > <mailto: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 <mailto: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 >>>>> >> <mailto: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 >>>>> >> <mailto: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 >>>>> >> <mailto: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 >>>>> >> <mailto: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. >>>>> >> >>>>> >> >>>>> >>