On Mon, May 27, 2019 at 3:44 PM Reuven Lax <re...@google.com> wrote:

> We generally use Experimental for two different things, which leads to
> confusion.
>   1. Features that work stably, but where we think we might still make
> some changes to the API.
>   2. New features that we think might not yet be stable.
>

Part of my point is that these tend to be related. Often you discover that
you cannot achieve high quality without changing the API. I think once
quality is achieved, verified, and assured it can graduate from being
Experimental. We may still have a better idea later, but we can probably
just give it a different name.

Kenn




> This dual usage leads to a lot of confusion IMO. The fact that we tend to
> forget to remove the @Experimental tag also makes it somewhat useless. Many
> APIs that have been in place for years and are used by most Beam users are
> still marked Experimental.
>
> Reuven
>
> On Mon, May 27, 2019 at 2:16 PM Ismaël Mejía <ieme...@gmail.com> wrote:
>
>> > Personally, I think that it is good that moving from experimental to
>> non-experimental is a breaking change in the dependency - one has
>> backwards-incompatible changes and the other does not. If artifacts had
>> separate versioning we could use 0.x for this.
>>
>> In theory it seems so, but in practice it is an annoyance to an end
>> user that already took the ‘risk’ of using an experimental feature.
>> Awareness is probably not the most important reason to break existing
>> code (even if it could be easily fixed). The alternative of doing this
>> with version numbers at least seems less impacting but can be
>> confusing.
>>
>> > But biggest motivation for me are these:
>> >
>> >  - using experimental features should be opt-in
>> >  - should be impossible to use an experimental feature without knowing
>> it (so "opt-in" to a normal-looking feature is not enough)
>> > - developers of an experimental feature should be motivated to
>> "graduate" it
>>
>> The fundamental problem of this approach is inconsistency with our
>> present/past. So far we have ‘Experimental’ features everywhere. So
>> suddenly becoming opt-in let us in an inconsistent state. For example
>> all IOs are marked internally as Experimental but not at the level of
>> directories/artifacts. Adding this suffix in a new IO apart of adding
>> fear of use to the end users may also give the fake impression that
>> the older ones not explicitly marked are not experimental.
>>
>> What will be the state for example in the case of runner modules that
>> contain both mature and well tested runners like old Flink and Spark
>> runners vs the more experimental new translations for Portability,
>> again more confusion.
>>
>> > FWIW I don't think "experimental" should be viewed as a bad thing. It
>> just means you are able to make backwards-incompatible changes, and that
>> users should be aware that they will need to adjust APIs (probably only a
>> little) with new releases. Most software is not very good until it has been
>> around for a long time, and in my experience the problem is missing the
>> mark on abstractions, so backwards compatibility *must* be broken to
>> achieve quality. Freezing it early dooms it to never achieving high
>> quality. I know of projects where the users explicitly requested that the
>> developers not freeze the API but instead prioritize speed and quality.
>>
>> I agree 100% on the arguments, but let’s think in the reverse terms,
>> highlighting lack of maturity can play against the intended goal of
>> use and adoption even if for a noble reason. It is basic priming 101
>> [1].
>>
>> > Maybe the word is just too negative-sounding? Alternatives might be
>> "unstable" or "incubating".
>>
>> Yes! “experimental” should not be viewed as a bad thing unless you are
>> a company that has less resources and is trying to protect its
>> investment so in that case they may doubt to use it. In this case
>> probably incubating is a better term because it has less of the
>> ‘tentative’ dimension associated with Experimental.
>>
>> > Now, for the Jet runner, most runners sit on a branch for a while, not
>> being released at all, and move to master as their "graduation". I think
>> releasing under an "experimental" name is an improvement, making it
>> available to users to try out. But we probably should have discussed before
>> doing something different than all the other runners.
>>
>> There is something I don’t get in the case of Jet runner. From the
>> discussion in this thread it seems it has everything required to not
>> be ‘experimental’. It passes ValidatesRunner and can even run Nexmark
>> that’s more that some runners already merged in master, so I still
>> don’t get why we want to give it a different connotation.
>>
>> [1] https://en.wikipedia.org/wiki/Priming_(psychology)
>>
>> On Sun, May 26, 2019 at 4:43 AM Kenneth Knowles <k...@apache.org> wrote:
>> >
>> > Personally, I think that it is good that moving from experimental to
>> non-experimental is a breaking change in the dependency - one has
>> backwards-incompatible changes and the other does not. If artifacts had
>> separate versioning we could use 0.x for this.
>> >
>> > But biggest motivation for me are these:
>> >
>> >  - using experimental features should be opt-in
>> >  - should be impossible to use an experimental feature without knowing
>> it (so "opt-in" to a normal-looking feature is not enough)
>> >  - developers of an experimental feature should be motivated to
>> "graduate" it
>> >
>> > So I think a user of an experimental feature should have to actually
>> type the word "experimental" either on the command line or in their
>> dependencies. That's just my opinion. In the thread [1] myself and Robert
>> were the ones that went in this direction of opt-in. But it was mostly lazy
>> consensus, plus the review on the pull request, that got us to this state.
>> Definitely worth discussing more.
>> >
>> > FWIW I don't think "experimental" should be viewed as a bad thing. It
>> just means you are able to make backwards-incompatible changes, and that
>> users should be aware that they will need to adjust APIs (probably only a
>> little) with new releases. Most software is not very good until it has been
>> around for a long time, and in my experience the problem is missing the
>> mark on abstractions, so backwards compatibility *must* be broken to
>> achieve quality. Freezing it early dooms it to never achieving high
>> quality. I know of projects where the users explicitly requested that the
>> developers not freeze the API but instead prioritize speed and quality.
>> >
>> > Maybe the word is just too negative-sounding? Alternatives might be
>> "unstable" or "incubating".
>> >
>> > Now, for the Jet runner, most runners sit on a branch for a while, not
>> being released at all, and move to master as their "graduation". I think
>> releasing under an "experimental" name is an improvement, making it
>> available to users to try out. But we probably should have discussed before
>> doing something different than all the other runners.
>> >
>> > Kenn
>> >
>> > [1]
>> https://lists.apache.org/thread.html/302bd51c77feb5c9ce39882316d391535a0fc92e7608a623d9139160@%3Cdev.beam.apache.org%3E
>> >
>> > On Sat, May 25, 2019 at 1:03 AM Ismaël Mejía <ieme...@gmail.com> wrote:
>> >>
>> >> Including the experimental suffix in artifact names is not a good idea
>> >> either because once we decide that it is not experimantal anymore this
>> >> will be a breaking change for users who will need then to update its
>> >> dependencies code. Also it is error-prone to use different mappings
>> >> for directories and artifacts (even if possible).
>> >>
>> >> May we reconsider this Kenn? I understand the motivation but I hardly
>> >> see this making things better or more clear. Any runner user will end
>> >> up reading the runner documentation and capability matrix so he will
>> >> catch the current status that way.
>> >>
>> >>
>> >>
>> >> On Sat, May 25, 2019 at 8:35 AM Jozsef Bartok <jo...@hazelcast.com>
>> wrote:
>> >> >
>> >> > I missed Ken's input when writing my previous mail. Sorry.
>> >> > So, to recap: I should remove "experimental" from any directory
>> names, but find an other way of configuring the artifact so that it still
>> has "experimental" in it's name.
>> >> > Right?
>> >> >
>> >> > On Sat, May 25, 2019 at 9:32 AM Jozsef Bartok <jo...@hazelcast.com>
>> wrote:
>> >> >>
>> >> >> Yes, I'll gladly fix it, we aren't particularly keen to be labeled
>> as experimental either..
>> >> >>
>> >> >> Btw. initially the "experimental" word was only in the Gradle
>> module name, but then there was some change
>> >> >> ([BEAM-4046] decouple gradle project names and maven artifact ids -
>> 4/2/19) which kind of ended up
>> >> >> putting it in the directory name. Maybe I should have merged with
>> that differently, but this is how
>> >> >> it seemed consistent.
>> >> >>
>> >> >> Anyways, will fix it in my next PR.
>> >> >>
>> >> >> On Fri, May 24, 2019 at 5:53 PM Ismaël Mejía <ieme...@gmail.com>
>> wrote:
>> >> >>>
>> >> >>> I see thanks Jozsef, marking things as Experimental was discussed
>> but
>> >> >>> we never agreed on doing this at the directory level. We can cover
>> the
>> >> >>> same ground by putting an annotation in the classes (in particular
>> the
>> >> >>> JetRunner and JetPipelineOptions classes which are the real public
>> >> >>> interface, or in the documentation (in particular website), I do
>> not
>> >> >>> see how putting this in the directory name helps and if so we may
>> need
>> >> >>> to put this in many other directories which is far from ideal. Any
>> >> >>> chance this can be fixed (jet-experimental -> jet) ?
>> >> >>>
>> >> >>> On Fri, May 24, 2019 at 9:08 AM Jozsef Bartok <jo...@hazelcast.com>
>> wrote:
>> >> >>> >
>> >> >>> > Hi Ismaël!
>> >> >>> >
>> >> >>> > Quoting Kenn (from PR-8410): "We discussed on list that it would
>> be better to have new things always start as experimental in a way that
>> clearly distinguishes them from the core."
>> >> >>> >
>> >> >>> > Rgds
>> >> >>> >
>> >> >>> > On Thu, May 23, 2019 at 10:44 PM Ismaël Mejía <ieme...@gmail.com>
>> wrote:
>> >> >>> >>
>> >> >>> >> I saw that the runner was merged but I don’t get why the foler
>> is
>> >> >>> >> called ‘runners/jet experimental’ and not simply ‘runners/jet’.
>> Is it
>> >> >>> >> because the runner does not pass ValidatesRunner? Or because the
>> >> >>> >> contributors are few? I don’t really see any reason behind this
>> >> >>> >> suffix. And even if the status is not mature that’s not
>> different from
>> >> >>> >> other already merged runners.
>> >> >>> >>
>> >> >>> >> On Fri, Apr 26, 2019 at 9:43 PM Kenneth Knowles <
>> k...@apache.org> wrote:
>> >> >>> >> >
>> >> >>> >> > Nice! That is *way* more than the PR I was looking for. I
>> just meant that you could update the website/ directory. It is fine to keep
>> the runner in your own repository if you want.
>> >> >>> >> >
>> >> >>> >> > But I think it is great if you want to contribute it to
>> Apache Beam (hence donate it to the Apache Software Foundation). The
>> benefits include: low-latency testing, free updates when someone does a
>> refactor. Things to consider are: subject to ASF / Beam governance, PMC,
>> commiters, subject to Beam's release cadence (and we might exclude from
>> Beam releases for a little bit). Typically, we have kept runners on a
>> branch until they are somewhat stable. I don't feel strongly about this for
>> disjoint codebases that can easily be excluded from releases. We might want
>> to suffix `-experimental` to the artifacts for some time.
>> >> >>> >> >
>> >> >>> >> > I commented on the PR about the necessary i.p. clearance
>> steps.
>> >> >>> >> >
>> >> >>> >> > Kenn
>> >> >>> >> >
>> >> >>> >> > On Fri, Apr 26, 2019 at 3:59 AM jo...@hazelcast.com <
>> jo...@hazelcast.com> wrote:
>> >> >>> >> >>
>> >> >>> >> >> Hi Kenn.
>> >> >>> >> >>
>> >> >>> >> >> It took me a while to migrate our code to the Beam repo, but
>> I finally have been able to create the Pull Request you asked for, this is
>> it: https://github.com/apache/beam/pull/8410
>> >> >>> >> >>
>> >> >>> >> >> Looking forward to your feedback!
>> >> >>> >> >>
>> >> >>> >> >> Best regards,
>> >> >>> >> >> Jozsef
>> >> >>> >> >>
>> >> >>> >> >> On 2019/04/19 20:52:42, Kenneth Knowles <k...@apache.org>
>> wrote:
>> >> >>> >> >> > The ValidatesRunner tests are the best source we have for
>> knowing the
>> >> >>> >> >> > capabilities of a runner. Are there instructions for
>> running the tests?
>> >> >>> >> >> >
>> >> >>> >> >> > Assuming we can check it out, then just open a PR to the
>> website with the
>> >> >>> >> >> > current capabilities and caveats. Since it is a big deal
>> and could use lots
>> >> >>> >> >> > of eyes, I would share the PR link on this thread.
>> >> >>> >> >> >
>> >> >>> >> >> > Kenn
>> >> >>> >> >> >
>> >> >>> >> >> > On Thu, Apr 18, 2019 at 11:53 AM Jozsef Bartok <
>> jo...@hazelcast.com> wrote:
>> >> >>> >> >> >
>> >> >>> >> >> > > Hi. We at Hazelcast Jet have been working for a while
>> now to implement a
>> >> >>> >> >> > > Java Beam Runner (non-portable) based on Hazelcast Jet (
>> >> >>> >> >> > > https://jet.hazelcast.org/). The process is still
>> ongoing (
>> >> >>> >> >> > > https://github.com/hazelcast/hazelcast-jet-beam-runner),
>> but we are
>> >> >>> >> >> > > aiming for a fully functional, reliable Runner which can
>> proudly join the
>> >> >>> >> >> > > Capability Matrix. For that purpose I would like to ask
>> what’s your process
>> >> >>> >> >> > > of validating runners? We are already running the
>> @ValidatesRunner tests
>> >> >>> >> >> > > and the Nexmark test suite, but beyond that what other
>> steps do we need to
>> >> >>> >> >> > > take to get our Runner to the level it needs to be at?
>> >> >>> >> >> > >
>> >> >>> >> >> >
>>
>

Reply via email to