Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature development branch/toggle capabilities #10192

Closed
garagatyi opened this issue Jun 26, 2018 · 16 comments
Closed

Feature development branch/toggle capabilities #10192

garagatyi opened this issue Jun 26, 2018 · 16 comments
Labels
kind/epic A long-lived, PM-driven feature request. Must include a checklist of items that must be completed. lifecycle/stale Denotes an issue or PR has remained open with no activity and has become stale.

Comments

@garagatyi
Copy link

Description

While the most widespread practice in the project for the development of a feature is to use a long-living feature branch it might not always be the best options.
Another popular solution for development of a feature is Feature toggle. Here is a great and detailed explanation of the thing, use cases, and techniques by Martin Fowler https://martinfowler.com/articles/feature-toggles.html
I thought that contributors and maintainers were free to choose a technique they prefer but figured out that we need an agreement on that here.
Personally, I and other team members struggled a lot because of lack of agreement whether we can use feature toggles or not.
Feature toggle technique can tackle a lot of use cases such as:

  • Experimental features that can be tested on different stages of CI/CD or different members of the community
  • Intermittent state when a couple of versions of the same functionality exists and helps migrate users, tests implementation with canary releases, prove the affect new implementation does to the project
  • Operational toggles that can help ops to mitigate some issues on production (overloaded systems, some infra outage, etc)
  • And even alternate different functionality for different groups of users (see permission toggle in the article)
@benoitf
Copy link
Contributor

benoitf commented Jun 26, 2018

+1 for using toggle on experimental stuff !

@gazarenkov
Copy link
Contributor

@garagatyi happy to see you follow it :)

My suggestion is: start systematically but small, let's say on "experimental features toggling" would be a good problem to solve (that's what we discussed initially in fact).
I'd consider IoC and component model we have is a good basis to use as a foundation.

@skabashnyuk
Copy link
Contributor

@benoitf @garagatyi . You are talking about nice things. It would be even nicer if they become more technically concrete. For instance, I may understand it in terms of Theia plugins your words as beta releases. However, from the things that Alex is mostly working, where there is no strong isolation it can means - "Lets put in production code everything that becomes compiling and call it feature-toggles"
Do you have any concrete things to propose?

@garagatyi
Copy link
Author

Actually, feature toggles allow to control whether the experimental code is enabled on production, so I see no issue here as far as it is well tested, reviewed and designed.
Apart from that this issue is not about my or Florent's contributions, it is about a general convention. I created it because @gazarenkov suggested to discuss it as a separate topic.
Because this is about the convention I don't know what exactly you want to discuss from the technical perspective. Please, elaborate.
If you are asking about concrete things I just want to figure out whether this technique is allowed or not and prevent situation as we had before when a team wants to use feature toggle technique and someone doesn't allow to do that because of his personal preferences and willingness to do things his way.

@skabashnyuk
Copy link
Contributor

skabashnyuk commented Jun 26, 2018

I'm not sure I understand your point of discussion.

  1. Should we discuss big changes with stakeholders before merging? - yes
  2. Can we split a big task into small steps if that possible and merged it - I guess yes in case if [1] is ok.

Is there anything else?

@dmytro-ndp
Copy link
Contributor

Please, take into consideration that Feature Toggling makes acceptance (E2E) testing much more complex because we need to test behavior of system by having all possible combinations of feature flags. Ideally we will need to have separate CI QA jobs for each possible combination (multiplying on 4 types of possible Eclipse Che distribution (Singleuser or Multiuser + deployed on OCP or Docker)) to run dedicated subset of selenium tests against it.

You can find more info about that point in section "Feature Toggles introduce validation complexity" of article https://martinfowler.com/articles/feature-toggles.html mentioned in description of issue.

@garagatyi
Copy link
Author

@skabashnyuk I was told that we need a discussion regarding usage of feature toggles, so this is the reason for the issue. I agree with the points from your last comment.

@garagatyi
Copy link
Author

@dmytro-ndp yes, I know about this burden and we would have to deal with that in case the code would be available to users. But since not all the flows merge code that is available to users it is up to the author of the contribution and reviewers to agree on what should be tested and how.

@benoitf
Copy link
Contributor

benoitf commented Jun 26, 2018

@skabashnyuk I was not talking about theia plugins when saying that toggle is a real benefit as we've early feedback on features and merge small changes every time.

I assume to test any feature on che on che.openshift.io using a toggle.

@gazarenkov
Copy link
Contributor

@dmytro-ndp well, I do not think it is the same expectations, i.e. we hardly would plan a release with switched on experimental features.

@slemeur
Copy link
Contributor

slemeur commented Jun 26, 2018

Feature flag capabilities would be absolutely valuable for the community and anyone involve on Eclipse Che.

  • It's an interesting way to introduce new capabilities. They can be delivered in an experimental mode along with the development.
  • It avoids silos and branches that are living during long long time.
  • It exposes the work that is in progress and allow any contributors/users to see the progress
  • It is a way to collect early feedback!

That would be definitely valuable for Che moving forward.

@slemeur slemeur changed the title Discuss feature development branch/toggle practices for the project Feature development branch/toggle capabilities Jun 26, 2018
@slemeur slemeur added kind/epic A long-lived, PM-driven feature request. Must include a checklist of items that must be completed. and removed kind/question Questions that haven't been identified as being feature requests or bugs. labels Jun 26, 2018
@dmytro-ndp
Copy link
Contributor

@gazarenkov: if user will be able to switch on some experimental feature in released version it would be better to ensure that it works correctly.

@garagatyi
Copy link
Author

If a user knows how to enable an experimental feature (it is good practice to have a unique toggle for a feature, so user can't enable all of them) and want to try it it's great. He will provide an early feedback. And since he enabled the feature manually it is totally clear that he is ready to face some instability to check it out.

@gazarenkov
Copy link
Contributor

@dmytro-ndp yep, it would be, in ideal world ;)

@garagatyi
Copy link
Author

I created an issue #10470 to integrate Unleash in Che. This will allow us to use it on wsmaster and other clients. Unleash also has official Golang, JS clients, and REST API, so we would be able to benefit from it on UD, Theia and other sites.

@che-bot
Copy link
Contributor

che-bot commented Sep 7, 2019

Issues go stale after 180 days of inactivity. lifecycle/stale issues rot after an additional 7 days of inactivity and eventually close.

Mark the issue as fresh with /remove-lifecycle stale in a new comment.

If this issue is safe to close now please do so.

Moderators: Add lifecycle/frozen label to avoid stale mode.

@che-bot che-bot added the lifecycle/stale Denotes an issue or PR has remained open with no activity and has become stale. label Sep 7, 2019
@che-bot che-bot closed this as completed Sep 17, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
kind/epic A long-lived, PM-driven feature request. Must include a checklist of items that must be completed. lifecycle/stale Denotes an issue or PR has remained open with no activity and has become stale.
Projects
None yet
Development

No branches or pull requests

7 participants