if it's technically feasible, I am also in favor of requiring experimental features to be (per-tag, Python should be updated) opt-in only. We should probably regularly audit the set of experimental features we ship (I'd say as part of the release, but that process is laborious enough, perhaps we should do it on a half-release cycle?) I think imposing hard deadlines (chosen when a feature is introduced) is too extreme, but might be valuable if opt-in plus regular audit is insufficient.
On Thu, Apr 4, 2019 at 5:28 AM Kenneth Knowles <k...@apache.org> wrote: > This all makes me think that we should rethink how we ship experimental > features. My experience is also that (1) users don't know if something is > experimental or don't think hard about it and (2) we don't use experimental > time period to gather feedback and make changes. > > How can we change both of these? Perhaps we could require experimental > features to be opt-in. Flags work and also clearly marked experimental > dependencies that a user has to add. Changing the core is sometimes tricky > to put behind a flag but rarely impossible. This way a contributor is also > motivated to gather feedback to mature their feature to become default > instead of opt-in. > > The need that @Experimental was trying to address is real. We *do* need a > way to try things and get feedback prior to committing to forever support. > We have discovered real problems far too late, or not had the will to fix > the issue we did find: > - many trigger combinators should probably be deleted > - many triggers cannot meet a good spec with merging windows > - the continuation trigger idea doesn't work well > - CombineFn had to have its spec changed in order to be both correct and > efficient > - OutputTimeFn as a UDF is convenient for Java but it turns out an enum > is better for portability > - Coder contexts turned out to be a major usability problem > - The built-in data types for schemas are evolving (luckily these are > really being worked on!) > > That's just what I can think of off the top of my head. I expect the > examples from IOs are more numerous; in that case it is pretty easy to fork > and make a new and better IO. > > And as an extreme view, I would prefer if we add a deadline for > experimental features, then our default action is to remove them, not > declare them stable. If noone is trying to mature it and get it out of > opt-in status, then it probably has not matured. And perhaps if noone care > enough to do that work it also isn't that important. > > Kenn > > On Wed, Apr 3, 2019 at 5:57 PM Ahmet Altay <al...@google.com> wrote: > >> I agree with Reuven that our experimental annotation is not useful any >> more. For example Datastore IO in python sdk is experimental for 2 years >> now. Even though it is marked as experimental an upgrade is carefully >> planned [1] as if it is not experimental. Given that I do not think we can >> remove features within a small number of minor releases. (Exception to this >> would be, if we have a clear knowledge of very low usage of a certain IO.) >> >> I am worried that tagging experimental features with release versions >> will add toil to the release process as mentioned and will also add to the >> user confusion. What would be the signal to a user if they see an >> experimental feature target release bumped between releases? How about >> tagging experimental features with JIRAs (similar to TODOs) with an action >> to either promote them as supported features or remove them? These JIRAs >> could have fix version targets as any other release blocking JIRAs. It will >> also clarify who is responsible for a given experimental feature. >> >> [1] >> https://lists.apache.org/thread.html/5ec88967aa4a382db07a60e0101c4eb36165909076867155ab3546a6@%3Cdev.beam.apache.org%3E >> >> On Wed, Apr 3, 2019 at 5:24 PM Reuven Lax <re...@google.com> wrote: >> >>> Experiments are already tagged with a Kind enum >>> (e.g. @Experimental(Kind.Schemas)). >>> >> >> This not the case for python's annotations. It will be a good idea to add >> there as well. >> >> >>> >>> On Wed, Apr 3, 2019 at 4:56 PM Ankur Goenka <goe...@google.com> wrote: >>> >>>> I think a release version with Experimental flag makes sense. >>>> In addition, I think many of our user start to rely on experimental >>>> features because they are not even aware that these features are >>>> experimental and its really hard to find the experimental features used >>>> without giving a good look at the Beam code and having some knowledge about >>>> it. >>>> >>>> It will be good it we can have a step at the pipeline submission time >>>> which can print all the experiments used in verbose mode. This might also >>>> require to add a meaningful group name for the experiment example >>>> >>>> @Experimental("SDF", 2.15.0) >>>> >>>> This will of-course add additional effort and require additional >>>> context while tagging experiments. >>>> >>>> On Wed, Apr 3, 2019 at 4:43 PM Reuven Lax <re...@google.com> wrote: >>>> >>>>> Our Experimental annotation has become almost useless. Many core, >>>>> widely-used parts of the API (e.g. triggers) are still all marked as >>>>> experimental. So many users use these features that we couldn't really >>>>> change them (in a backwards-incompatible) without hurting many users, so >>>>> the fact they are marked Experimental has become a fiction. >>>>> >>>>> Could we add a deadline to the Experimental tag - a release version >>>>> when it will be removed? e.g. >>>>> >>>>> @Experimental(2.15.0) >>>>> >>>>> We can have a test that ensure that the tag is removed at this >>>>> version. Of course if we're not ready to remove experimental by that >>>>> version, it's fine - we can always bump the tagged version. However this >>>>> forces us to think about each one. >>>>> >>>>> Downside - it might add more toil to the existing release process. >>>>> >>>>> Reuven >>>>> >>>>> >>>>> On Wed, Apr 3, 2019 at 4:00 PM Kyle Weaver <kcwea...@google.com> >>>>> wrote: >>>>> >>>>>> > We might also want to get in the habit of reviewing if something >>>>>> should no longer be experimental. >>>>>> >>>>>> +1 >>>>>> >>>>>> Kyle Weaver | Software Engineer | kcwea...@google.com | >>>>>> +16502035555 >>>>>> >>>>>> >>>>>> On Wed, Apr 3, 2019 at 3:53 PM Kenneth Knowles <k...@apache.org> >>>>>> wrote: >>>>>> >>>>>>> I think option 2 with n=1 minor version seems OK. So users get the >>>>>>> message for one release and it is gone the next. We should make sure the >>>>>>> deprecation warning says "this is an experimental feature, so it will be >>>>>>> removed after 1 minor version". And we need a process for doing it so it >>>>>>> doesn't sit around. I think we should also leave room for using our own >>>>>>> judgment about whether the user pain is very little and then it is not >>>>>>> needed to have a deprecation cycle. >>>>>>> >>>>>>> We might also want to get in the habit of reviewing if something >>>>>>> should no longer be experimental. >>>>>>> >>>>>>> Kenn >>>>>>> >>>>>>> On Wed, Apr 3, 2019 at 2:33 PM Ismaël Mejía <ieme...@gmail.com> >>>>>>> wrote: >>>>>>> >>>>>>>> When we did the first stable release of Beam (2.0.0) we decided to >>>>>>>> annotate most of the Beam IOs as @Experimental because we were >>>>>>>> cautious about not getting the APIs right in the first try. This >>>>>>>> was a >>>>>>>> really good decision because we could do serious improvements and >>>>>>>> refactorings to them in the first releases without the hassle of >>>>>>>> keeping backwards compatibility. However after some more releases >>>>>>>> users started to rely on features and supported versions, so we >>>>>>>> ended >>>>>>>> up in a situation where we could not change them arbitrarily without >>>>>>>> consequences to the final users. >>>>>>>> >>>>>>>> So we started to deprecate some features and parts of the API >>>>>>>> without >>>>>>>> removing them, e.g. the introduction of HadoopFormatIO deprecated >>>>>>>> HadoopInputFormatIO, we deprecated methods of MongoDbIO and MqttIO >>>>>>>> to >>>>>>>> improve the APIs (in most cases with valid/improved replacements), >>>>>>>> and >>>>>>>> recently it was discussed to removal of support for older versions >>>>>>>> in >>>>>>>> KafkaIO. >>>>>>>> >>>>>>>> Keeping deprecated stuff in experimental APIs does not seem to make >>>>>>>> sense, but it is what he have started to do to be ‘user friendly’, >>>>>>>> but >>>>>>>> it is probably a good moment to define, what should be the clear >>>>>>>> path >>>>>>>> for removal and breaking changes of experimental features, some >>>>>>>> options: >>>>>>>> >>>>>>>> 1. Stay as we were, do not mark things as deprecated and remove them >>>>>>>> at will because this is the contract of @Experimental. >>>>>>>> 2. Deprecate stuff and remove it after n versions (where n could be >>>>>>>> 3 releases). >>>>>>>> 3. Deprecate stuff and remove it just after a new LTS is decided to >>>>>>>> ensure users who need these features may still have them for some >>>>>>>> time. >>>>>>>> >>>>>>>> I would like to know your opinions about this, or if you have other >>>>>>>> ideas. Notice that in discussion I refer only to @Experimental >>>>>>>> features. >>>>>>>> >>>>>>>