Advertisement
dfarrell07

tsc_election_proposal.wiki

Jun 14th, 2016
221
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 21.95 KB | None | 0 0
  1. == Overview ==
  2.  
  3. This page is a part of the OpenDaylight community's attempts at refactoring the OpenDaylight Technical Steering Committee (TSC) election system. It provides background information, guiding principles, a "framework" of ideas that have consensus, framework amendment proposals where consensus is unclear and specific seat allocation proposals for the current election.
  4.  
  5. Please feel encouraged to make edits, no matter your position in the ODL Community. The wiki's version control can be used to track changes.
  6.  
  7. == Background ==
  8.  
  9. When OpenDaylight was initially bootstrapped, there wasn't an existing technical community to draw Technical Steering Committee (TSC) leadership from. The initial TSCs were bootstrapped with Platinum Designates, one per by OpenDaylight Platinum Member Company. The intention at the time and since has been to move away from Platinum Designates towards community-elected representatives once the community was mature enough to provide the required leaders.
  10.  
  11. This need to refactor the TSC's election system was made more pressing by [https://lists.opendaylight.org/pipermail/tsc/2015-October/004026.html recent attempts to avoid an undesirable feature of the TSC election system] with a recurring waver, which the OpenDaylight Board rightly pointed out amounted to bypassing the TSC's charter instead of fixing it.
  12.  
  13. == Principles ==
  14.  
  15. This section documents ''why'' we designed the election system we did.
  16.  
  17. === Representation of Constituencies ===
  18.  
  19. OpenDaylight is made up of groups that sometimes want different things from the TSC. These Constituencies should be represented at the TSC.
  20.  
  21. === Election by Community Peers ===
  22.  
  23. Representatives to the TSC should be elected by their peers in the OpenDaylight community on the basis of merit. Now that OpenDaylight is a more mature project with a large and healthy community to draw leadership from, non-elected bootstrap positions like Platinum Designates can be supplemented or replaced.
  24.  
  25. === Protection from Dominance by a Constituency ===
  26.  
  27. No single Constituency should be able to dominate the TSC.
  28.  
  29. === Fairness of Exclusion ===
  30.  
  31. Candidates should be excluded from the possibility of holding a TSC seat they would have otherwise won as infrequently as possible, and only for the sake of trade-offs with other key principles. When some candidates must be excluded from holding seats, the selection should be done as fairly as possible (consensus, merit, random, not power over career).
  32.  
  33. === Modern Election Tools ===
  34.  
  35. When possible, OpenDaylight's election process should make use of high-quality existing election primitives. For example, proportional representation voting systems for multi-seat constituencies that use ranked voting, like [http://civs.cs.cornell.edu/rp.html Condorcet] or [https://en.wikipedia.org/wiki/Single_transferable_vote Single Transferable Vote], have well-understood good properties that are helpful for our use-case.
  36.  
  37. === Flexibility over Time ===
  38.  
  39. We have an imperfect understanding of what governance structures are best for OpenDaylight and we expect the governance needs of OpenDaylight to change over time. The election system we adopt should enable a clear path for adjustments over time, especially for aspects that are most likely to be dynamic (like seat allocations to Constituencies).
  40.  
  41. == Framework ==
  42.  
  43. This framework is meant to include the parts of OpenDaylight's Election Proposal that have consensus. Sections where consensus is still developing are stubbed out with pointers to proposed alternatives.
  44.  
  45. === Overview ===
  46.  
  47. OpenDaylight's Technical Steering Committee will be elected by a set of multi-winner elections, one election per [https://wiki.opendaylight.org/index.php?title=TSC:Election_Proposal#Seat_Allocation Represented Group]. The set of Represented Groups and the number of TSC seats allocated to each will be determined before each election by the outgoing TSC.
  48.  
  49. === Frequency ===
  50.  
  51. TSC elections will happen <TBD see Framework Amendment Proposals#Frequency>.
  52.  
  53. === Seat Allocation ===
  54.  
  55. OpenDaylight TSC seats are allocated to Represented Groups (RGs) of the OpenDaylight community. Represented Groups are typically Constituencies with systematically competing interests that the TSC wants to ensure have voices (in the form of votes). Seats may be allocated to other groups, for example to incentivize behaviors like projects moving to later [https://www.opendaylight.org/project-lifecycle-releases#ProjectTypes ODL Lifecycle states].
  56.  
  57. Before each election, the outgoing TSC will review and potentially make changes to the allocation of TSC seats.
  58.  
  59. The seat allocation for an election is defined as a set of Represented Groups, each of which is defined by:
  60.  
  61. # Min Seats - Minimum number seats allocated to the RG (as a percentage or integer). Provides [https://wiki.opendaylight.org/view/TSC:Election_Proposal#Representation_of_Constituencies Representation of Constituencies] property.
  62. # Max Seats - Maximum number seats that can be held by the RG (as a percentage or integer). Provides [https://wiki.opendaylight.org/view/TSC:Election_Proposal#Protection_from_Dominance_by_a_Constituency Protection from Dominance by a Constituency] property.
  63. # Candidates - Set of people eligible to run for the RG's seats. Provides [https://wiki.opendaylight.org/view/TSC:Election_Proposal#Election_by_Community_Peers Election by Community Peers].
  64. # Voters - Set of people who can vote in the RG's election. Provides [https://wiki.opendaylight.org/view/TSC:Election_Proposal#Election_by_Community_Peers Election by Community Peers].
  65.  
  66. === Election Mechanics ===
  67.  
  68. OpenDaylight will run a series of elections, one per Represented Group. Each election will have N winners, where N is the Represented Group's "Min Seats" value.
  69.  
  70. For each Represented Group, the eligible candidates for its seats should be notified of their eligibility and asked to self-nominate. The TSC or some Election Official appointed by the TSC will specify a location to post candidate information (like a wiki), and may additionally suggest (biographical, platform) or require (name, IRC handle) some discretionary information. Self-nominations from candidates must include the set of Represented Groups for which they match the Candidate description and as well as a single Represented Group under which they would like to run for a TSC seat.
  71.  
  72. The self-nomination phase should remain open for a period that enables eligible candidates from all Represented Groups to complete the process with a reasonable effort. If a Represented Group fails to produce enough self-nominated eligible candidates to fill the seats allocated to it, the TSC should reopen the self-nomination phase, encourage additional nominations and potentially revise the seats allocations for the election.
  73.  
  74. After the self-nomination phase, for each Represented Group, the eligible voters in its election should be directed to the candidate information and given a ballot for each Represented Group for which they are a member of the electorate. If the Ranked Preference Algorithm tooling supports it, ballots will list all self-nominated eligible candidates in a pseudorandom order. Exact wording for the ballot and other communication can be specified by the TSC or left to an Election Official. Voters vote, and the Ranked Preference Algorithm returns the raked preference results. For each RG, the top "Min Seats" candidates are declared winners pending over-max resolution.
  75.  
  76. For all Represented Groups, the number of TSC seat winners who meet the Candidates description of the RG (declared during self-nomination) is determined. The actual percentage of representation achieved by each RGs is determined. If the actual percentage of TSC seats won by candidates in a Represented Group is higher than the group's Max Seats allocation, over-max resolution is handled by a Scaled Popularity Election.
  77.  
  78. Winning candidates are notified, results are publicly posted and the transfer of TSC seats happens immediately.
  79.  
  80. ==== Election Algorithms ====
  81.  
  82. OpenDaylight's Election Framework allows the specific ranked preference voting algorithm it consumes to be swapped out. This gives the TSC or their Election Official [https://wiki.opendaylight.org/view/TSC:Election_Proposal#Flexibility_Over_Time flexibility over time], allowing the best known algorithm and tooling to be used for each election. This also allows the algorithm and implementation be treated like a black box in the rest of the Election Framework, simplifying user-facing elements by extracting complexity to [https://wiki.opendaylight.org/view/TSC:Election_Proposal#Modern_Election_Tools modern election tools].
  83.  
  84. For the sake of the rest of the Framework, the specific algorithm and tooling used for a given election will be called the Ranked Preference Algorithm. The properties of modern election algorithms are complex, so the TSC and their Election Official should generally strive to follow modern best practices. The only specific requirement imposed by the way the algorithm is consumed in OpenDaylight's Election Framework is that it must provide a ranked preference result, so the top N candidates can win the N seats in their Represented Group's election.
  85.  
  86. The [http://civs.cs.cornell.edu/rp.html Condorcet algorithm], with the Condorcet-IRV completion rule, will be used for OpenDaylights first new-style election. Tooling will be provided by the [http://civs.cs.cornell.edu/ Condorcet Internet Voting Service], which is [https://github.com/andrewcmyers/civs open source] and maintained by Cornell. ODL's Elections Framework was originally designed with STV in mind, but no suitable web-based implementation can currently be found and Condorcet may be a more fair algorithm.
  87.  
  88. ==== Over-Max Resolution Through Scaled Popularity ====
  89.  
  90. After running the elections for all Represented Groups, for any RG that exceeded the Max Seats value, an over-max resolution election is held (using the votes from the full election, no new voting needs to occur) among the winning candidates. Each candidate's vote count is scaled to account for differences in the number of votes cast in their Represented Groups. The resulting counts are used to run a normal Ranked Preference Algorithm election among the over-max RG's winning candidates, with the number of winners equal to the the RG's Max Seats value. After all losing candidates have been determined, they are dropped from the main Represented Group elections they competed in. Elections for all Represented Groups are then re-run. If the new results put a RG above its Max Seats cap, the process repeats until all RG are below their cap. If the pool of self-nominated eligible candidates is exhausted before the process terminates, the outgoing TSC should revisit the company cap size or recruit a more diverse set of candidates.
  91.  
  92. ===== Scaled Popularity Example =====
  93.  
  94. As an example, if we had three elections with 4, 8, and 16 voters in each, where we wound up with four candidates from RG A winning, but a cap of three, we would have a special side election to figure out which one should be dropped. This would be done by scaling the candidate's votes by 1/n, where n is the number of voters in the RG, and re-running the Ranked Preference Algorithm election.
  95.  
  96. So, if the candidates got:
  97. * A.) 2 votes of 4
  98. * B.) 3 votes of 8
  99. * C.) 5 votes of 16
  100. * D.) 3 votes of 16
  101.  
  102. That would result in candidates having scaled votes of:
  103. * A.) 0.5
  104. * B.) 0.375
  105. * C.) 0.3125
  106. * D.) 0.1875
  107.  
  108. The result is that person D is eliminated and the main RG elections are re-run.
  109.  
  110. == Examples ==
  111.  
  112. === Basic Example ===
  113.  
  114. ==== Example Seat Allocation ====
  115.  
  116. * Represented Group A
  117. ** Min Seats: 1
  118. ** Max Seats: 100%
  119. ** Candidates: [list of candidates]
  120. ** Voters: [list of 100 voters]
  121.  
  122. ==== Election A ====
  123.  
  124. All candidates are notified of their eligibility and asked to self-nominate.
  125.  
  126. Two candidates self-nominate: Candidate AA and Candidate AB.
  127.  
  128. All voters are given a ballot (basic example below). If the Ranked Preference Algorithm tooling supports it, the order of the candidates vary pseudorandomly per-voter.
  129.  
  130. <explanation of TSC elections, links to candidate info, etc>
  131.  
  132. Rank the candidates below 1-n, with 1 being the most preferred and n the least preferred.
  133.  
  134. * Candidate AA: [_]
  135. * Candidate AB: [_]
  136.  
  137. Ballots are distributed by the Ranked Preference Algorithm tooling. Voters complete and submit them. The Ranked Preference Algorithm tooling returns the preference ranking of the candidates, and the top Min Seats candidates (one in this case) are declared winners. Since there's only one RG election, the TSC election process terminates. No RG is exceeding their Max Seats bounds, so no additional action needs to be taken.
  138.  
  139. == Framework Amendment Proposals ==
  140.  
  141. The sections here are meant to provide alternatives substitutions into the generally agreed upon framework above.
  142.  
  143. Please feel encouraged to add your ideas here.
  144.  
  145. === Election Frequency ===
  146.  
  147. How frequently should TSC elections occur? Should they be correlated with some other event, like an [https://wiki.opendaylight.org/view/Simultaneous_Release:Beryllium_Release_Plan#Schedule ODL Release Milestone]?
  148.  
  149. ==== Per-Release ====
  150.  
  151. TSC elections would be held per-release.
  152.  
  153. A major job of the TSC is to approve a release plan and work through a release. Linking TSC elections and releases seems natural. Having one election to one release provides the quickest possible feedback iterations.
  154.  
  155. ==== Bi-Release ====
  156.  
  157. TSC elections would be held every two OpenDaylight releases.
  158.  
  159. With our current six month release cycle, bi-release elections would provide the yearly election frequency prescribed by the [https://www.opendaylight.org/tsc-charter current TSC Charter].
  160.  
  161. Compared to per-release elections, bi-release would provide slower iterations, but may incur less overhead. Bi-Release elections provide the same natural linking of TSC elections to releases as pre-release elections.
  162.  
  163. ==== Yearly ====
  164.  
  165. Section 4 of the [https://www.opendaylight.org/tsc-charter current TSC Charter] prescribes yearly elections.
  166.  
  167. The term for TSC members, including the Chair, is one year. There are no term limits for TSC members.
  168.  
  169. A disadvantage of yearly elections is that they don't necessarily relate to release cycles, so TSCs may be asked to drive releases they didn't plan.
  170.  
  171. == Represented Group Proposals ==
  172.  
  173. Represented Groups (seat allocations, eligible candidates and eligible voters) proposals for the first election.
  174.  
  175. See the [https://wiki.opendaylight.org/view/TSC:Election_Proposal#Seat_Allocation Seat Allocation] section of the framework for details.
  176.  
  177. Please feel encouraged to add additional proposals.
  178.  
  179. === Bit of Everything ===
  180. This proposal allocates seats to most Represented Groups discussed so far. It makes a good example proposal because most other proposals will be subsets of it. To simplify things, all Min Seat counts are set to 1.
  181.  
  182. For purposes of avoiding domination by any particular RG, Max Seats is uniformly set to 33% for all RGs except Committers-at-Large (since any TSC member elected will be a committer).
  183.  
  184. * Committers-at-Large
  185. * Min Seats: 1
  186. * Max Seats: 33%
  187. * Candidates: Committers to ODL projects
  188. * Voters: Committers to ODL projects
  189. * Core Project PTLs
  190. * Min Seats: 1
  191. * Max Seats: 33%
  192. * Candidates: PTLs of Core projects
  193. * Voters: PTLs of Core projects
  194. * Mature Project PTLs
  195. * Min Seats: 1
  196. * Max Seats: 33%
  197. * Candidates: PTLs of Mature projects
  198. * Voters: PTLs of Mature projects
  199. * Incubation Project PTLs
  200. * Seats: 1
  201. * Candidates: PTLs of Incubation projects
  202. * Voters: PTLs of Incubation projects
  203. * Kernel Project PTLs
  204. * Min Seats: 1
  205. * Max Seats: 33%
  206. * Candidates: PTLs of Kernel-type projects
  207. * Voters: PTLs of Kernel projects
  208. * Protocol Project PTLs
  209. * Min Seats: 1
  210. * Max Seats: 33%
  211. * Candidates: PTLs of Protocol-type projects
  212. * Voters: PTLs of Protocol projects
  213. * App Project PTLs
  214. * Min Seats: 1
  215. * Max Seats: 33%
  216. * Candidates: PTLs of App-type projects
  217. * Voters: PTLs of App projects
  218. * Support Project PTLs
  219. * Min Seats: 1
  220. * Max Seats: 33%
  221. * Candidates: PTLs of Support-type projects
  222. * Voters: PTLs of Support projects
  223. * Offset-0 Project PTLs
  224. * Min Seats: 1
  225. * Max Seats: 33%
  226. * Candidates: PTLs of Offset-0 projects
  227. * Voters: PTLs of Offset-0 projects
  228. * Offset-1 Project PTLs
  229. * Min Seats: 1
  230. * Max Seats: 33%
  231. * Candidates: PTLs of Offset-0 projects
  232. * Voters: PTLs of Offset-0 projects
  233. * Offset-2 Project PTLs
  234. * Min Seats: 1
  235. * Max Seats: 33%
  236. * Candidates: PTLs of Offset-0 projects
  237. * Voters: PTLs of Offset-0 projects
  238. * Platinum Members
  239. * Min Seats: 1
  240. * Max Seats: 33%
  241. * Candidates: Representatives of Platinum Members
  242. * Voters: Representatives of Platinum Members
  243.  
  244. For purposes of avoiding dominance from a particular company, also define any given company as an Represented Group with no seats (and thus no need to define voters):
  245.  
  246. for company_var in <the set of all companies>:
  247. * Represented Group company_var
  248. * Min Seats: 0
  249. * Max Seats: 33%
  250. * Candidates: Works for company_var
  251. * Voters: None
  252.  
  253. Total seats: 12
  254.  
  255. === All Types, Mature Lifecycle States ===
  256.  
  257. This is similar to [https://lists.opendaylight.org/pipermail/tsc/2015-November/004226.html Option 0], which [https://lists.opendaylight.org/pipermail/tsc/2015-November/004230.html seemed to get a fair amount of consensus].
  258.  
  259. For purposes of avoiding domination by any particular RG, Max Seats is uniformly set to 33% for all RGs except Committers-at-Large (since any TSC member elected will be a committer).
  260.  
  261. * Committers-at-Large
  262. * Min Seats: 5
  263. * Max Seats: 100%
  264. * Candidates: Committers to ODL projects
  265. * Voters: Committers to ODL projects
  266. * Core Project PTLs
  267. * Min Seats: 0 (we have no core projects)
  268. * Max Seats: 33%
  269. * Candidates: PTLs of Core projects
  270. * Voters: PTLs of Core projects
  271. * Mature Project PTLs
  272. * Min Seats: 2
  273. * Max Seats: 33%
  274. * Candidates: PTLs of Mature projects
  275. * Voters: PTLs of Mature projects
  276. * Kernel Project PTLs
  277. * Min Seats: 2
  278. * Max Seats: 33%
  279. * Candidates: PTLs of Kernel-type projects
  280. * Voters: PTLs of Kernel projects
  281. * Protocol Project PTLs
  282. * Min Seats: 2
  283. * Max Seats: 33%
  284. * Candidates: PTLs of Protocol-type projects
  285. * Voters: PTLs of Protocol projects
  286. * App Project PTLs
  287. * Min Seats: 2
  288. * Max Seats: 33%
  289. * Candidates: PTLs of App-type projects
  290. * Voters: PTLs of App projects
  291. * Support Project PTLs
  292. * Min Seats: 2
  293. * Max Seats: 33%
  294. * Candidates: PTLs of Support-type projects
  295. * Voters: PTLs of Support projects
  296.  
  297. For purposes of avoiding dominance from a particular company, also define any given company as an Represented Group with no seats (and thus no need to define voters):
  298.  
  299. for company_var in <the set of all companies>:
  300. * Represented Group company_var
  301. * Min Seats: 0
  302. * Max Seats: 33%
  303. * Candidates: Works for company_var
  304. * Voters: None
  305.  
  306. Total seats: 15
  307.  
  308. === All Types, All Lifecycle States ===
  309. For purposes of avoiding domination by any particular RG, Max Seats is uniformly set to 33% for all RGs except Committers-at-Large (since any TSC member elected will be a committer).
  310.  
  311. * Committers-at-Large
  312. * Min Seats: 4
  313. * Max Seats: 100%
  314. * Candidates: Committers to ODL projects
  315. * Voters: Committers to ODL projects
  316. * Core Project PTLs
  317. * Min Seats: 0 (we have no core projects)
  318. * Max Seats: 33%
  319. * Candidates: PTLs of Core projects
  320. * Voters: PTLs of Core projects
  321. * Mature Project PTLs
  322. * Min Seats: 2
  323. * Max Seats: 33%
  324. * Candidates: PTLs of Mature projects
  325. * Voters: PTLs of Mature projects
  326. * Incubation Project PTLs
  327. * Min Seats: 1
  328. * Max Seats: 33%
  329. * Candidates: PTLs of Incubation projects
  330. * Voters: PTLs of Incubation projects
  331. * Kernel Project PTLs
  332. * Min Seats: 2
  333. * Max Seats: 33%
  334. * Candidates: PTLs of Kernel-type projects
  335. * Voters: PTLs of Kernel projects
  336. * Protocol Project PTLs
  337. * Min Seats: 2
  338. * Max Seats: 33%
  339. * Candidates: PTLs of Protocol-type projects
  340. * Voters: PTLs of Protocol projects
  341. * App Project PTLs
  342. * Min Seats: 2
  343. * Max Seats: 33%
  344. * Candidates: PTLs of App-type projects
  345. * Voters: PTLs of App projects
  346. * Support Project PTLs
  347. * Min Seats: 2
  348. * Max Seats: 33%
  349. * Candidates: PTLs of Support-type projects
  350. * Voters: PTLs of Support projects
  351.  
  352. For purposes of avoiding dominance from a particular company, also define any given company as an Represented Group with no seats (and thus no need to define voters):
  353.  
  354. for company_var in <the set of all companies>:
  355. * Represented Group company_var
  356. * Min Seats: 0
  357. * Max Seats: 33%
  358. * Candidates: Works for company_var
  359. * Voters: None
  360.  
  361. Total seats: 15
  362.  
  363. === All Types ===
  364. For purposes of avoiding domination by any particular RG, Max Seats is uniformly set to 33% for all RGs except Committers-at-Large (since any TSC member elected will be a committer).
  365.  
  366. * Committers-at-Large
  367. * Min Seats: 3
  368. * Max Seats: 100%
  369. * Candidates: Committers to ODL projects
  370. * Voters: Committers to ODL projects
  371. * Kernel Project PTLs
  372. * Min Seats: 3
  373. * Max Seats: 33%
  374. * Candidates: PTLs of Kernel-type projects
  375. * Voters: PTLs of Kernel projects
  376. * Protocol Project PTLs
  377. * Min Seats: 3
  378. * Max Seats: 33%
  379. * Candidates: PTLs of Protocol-type projects
  380. * Voters: PTLs of Protocol projects
  381. * App Project PTLs
  382. * Min Seats: 3
  383. * Max Seats: 33%
  384. * Candidates: PTLs of App-type projects
  385. * Voters: PTLs of App projects
  386. * Support Project PTLs
  387. * Min Seats: 3
  388. * Max Seats: 33%
  389. * Candidates: PTLs of Support-type projects
  390. * Voters: PTLs of Support projects
  391.  
  392. For purposes of avoiding dominance from a particular company, also define any given company as an Represented Group with no seats (and thus no need to define voters):
  393.  
  394. for company_var in <the set of all companies>:
  395. * Represented Group company_var
  396. * Min Seats: 0
  397. * Max Seats: 33%
  398. * Candidates: Works for company_var
  399. * Voters: None
  400.  
  401. Total seats: 15
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement