This is a guideline, so there always will be situations where the guideline still will leave questions open.
As long as:
- We validate the guideline from time to time and
- We are aware that as long as it helps us in 80% of the situations, all is fine.
The rest are exceptions and can be tackled individually.
Definitions
Reversibility
How much effort is it to reverse the decision?
Impact
How many people have to change something as a result of the decision?
Decision framework
- Votes should be public by default
- If a vote is private/anonymous, it is by definition at least flavour M
- Only active team members are allowed to vote
- If a topic is too large (not votable) it needs to be split into separated RFCs.
Decision process
- Consult the decision framework and find out the flavour. Do not worry if you can’t decide between M or L - since both include a planning/discussion timeframe it will ultimately be decided there.
- If you are not a team member create an RFC (How? Where?)
Process for flavour XS
- Consult impacted people and make the decision yourself.
Process for flavour S
- Consult impacted people and make a mini-voting in the chat, synchronous
Tools
- Slack
Examples
- Internal: Should we add a new web server to the neos.io cluster?
- Financial: Spending of approved budget inside a team (“Is 150 € for a flight OK or shall I travel by train?”)
- Technical: Shall we form a project to try out CQRS as a way to improve the content repository?
- Technical: Refactor the Package Manager to embrace composer more.
- Technical: Raise the PHP requirements to PHP 7
- Communication: New Channel Naming Structure in Slack
Process for flavour M
- Create an RFC in an official channel and announce it
- RFCs need a planning/discussion phase with a minimum timeframe of 1 week and a maximum timeframe. If the discussion or voting timeframe is not long enough, it will come up here.
- Decide if it has to be private/anonymous
- RFCs need a voting phase with a minimum timeframe of 1 week and a maximum timeframe.
- Voting results need to be published
- Arguments in a discussion should be documented with the RFC
Sprint version for flavour M
- Bring up the topic in the sprint
- Discuss the topic with all regarding people
- Vote by hand raise
- Publish the discussion and voting results in Discourse
Tools
- Create RFC in Discourse
- Announce RFC in Slack
- For a Yes/No vote: If the voting is public vote in Discourse via liking the option posts, if private/anonymous use a poll in Discourse
- Voting Yes/No or Voting several options flavour M
Examples
- Internal: Onboard new team member
- Technical: Renaming an existing keyword (e.g. “@override” in TS, different impact for team and end users, backwards compatibility, not everybody might have an opinion about that)
- Technical: Changing CGL rules
- Technical: Replace Fluid by Fluid Standalone, as it is a bigger undertaking (easy reversibility/medium impact).
Decision making
- Either a quorum of > 1/3 and a 2/3 majority vote
- Or a quorum of > 50% and a majority vote
- Vote for onboarding of new team member refer only to the members of the regarding team
Process for flavour L
- Create an RFC in an official channel and announce it
- RFCs need a planning/discussion phase with a minimum timeframe of 1 week and a maximum timeframe. If the discussion or voting timeframe is not long enough, it will come up here.
- Decide if it has to be private/anonymous
- If the RFC has several options it needs a minimum timeframe to suggest options of 2 days and a maximum timeframe of 1 week. The timeframe for the options must be ended before the voting timeframe starts.
- RFCs need a voting phase with a minimum timeframe of 1 week and a maximum timeframe.
- Voting results need to be published
- Arguments in a discussion should be documented with the RFC
Tools
- Create RFC in Discourse
- Announce RFC in Slack
- For a Yes/No vote: If the voting is public vote in Discourse via liking the option posts, if private/anonymous use a poll in Discourse
- For a voting with several options flavour L use systemic konsensierung: https://www.konsensieren.eu/en/
Examples
- Internal: Do we have an upper limit of members in the Neos team?
- Internal: What’s the pattern of Neos team member email addresses?
- Internal: „Changing our communication tool away from Slack“
- Brand: Decide on a „New Neos logo“
- Start major rewrite projects, with big architectural impact on Neos:
- Technical: Should we re-write the Neos User Interface with React UI?
- Technical: Should we “re-write” (in large parts) the Neos Content Repository to embrace CQRS?
- Financial: new or add-on budget requests
- Legal: Should we change the License of Neos to MIT?
- Legal: Should we found a legal entity?
Decision making
- Quorum of 2/3
- Yes/No vote: 2/3 majority vote
- Several options vote (systemic konsensierung): option with the least negative points
How we vote
Yes/No (possible for flavour M and L)
Yes/No can be used for options that are independent of each other.
A voting for Yes/No need at least the following options:
- Yes (mandatory option)
- No (mandatory option)
- Abstain (mandatory option)
- I need more discussion (mandatory option)
Several options flavour M only
Several options flavour M can be used for options that are dependent on/exclusive of each other.
A voting for several options needs at least the following options:
- Option 1
- Option 2
- Option …
- Option n
- Abstain (mandatory option)
- I need more discussion (mandatory option)
Several options flavour L only
Several options flavour L can be used for options that are dependent on each other.
A voting for several options should be done based on systemic konsensierung: https://www.konsensieren.eu/en/. Remember that you are not voting for the option you prefer most, but rather how much you are against each option from 0-10:
- Option 1
- Option 2
- Option …
- Option n
- We do not change anything (called passive option - mandatory option)
- I need more discussion (mandatory option)