Should we consider Ranked Choice voting for SC elections?

Speaking for myself:

Summary

I propose changing our Steering Council election process from simple approval voting to a ranked choice system to better capture voter preferences and provide more meaningful feedback to candidates. I want your input to know if this is worth pursuing.

Background

Our PEP-13 voting method has remained unchanged since late 2019. While functional, the simple approval voting system has limitations we should address.

Current Limitations

  1. No Preference Expression: Voters can’t express preferences among approved candidates.

  2. Encourages Strategic Voting: The current system incentivizes limiting approvals, potentially distorting true preferences. Here’s why:

    • In simple approval voting, each approved candidate gets equal weight.
    • To give stronger support to preferred candidates, voters may withhold approval from candidates they actually find acceptable but less preferable.
    • This creates a dilemma: approve more candidates and dilute the impact of your vote, or approve fewer to strengthen support for top choices but potentially harm acceptable alternatives.
    • As a result, voters might not express their true preferences, instead engaging in strategic approval to maximize their vote’s impact.
  3. Limited Feedback: Candidates receive only binary “approval” feedback, which can be discouraging and doesn’t reflect actual voter sentiment.

Proposed Solution: Ranked Choice Voting

Ranked choice voting would allow voters to rank candidates in order of preference, offering:

  1. Better Preference Capture: Voters express their full range of preferences.
  2. Less Strategic Voting: Reduced need to “game” the system by selective approval.
  3. Nuanced Feedback: Candidates receive more detailed information about their support.

Implementation Considerations

  • Voters would rank only as many candidates as they wish.
  • The PSF already handles the implementation and administration of the current SC voting process. They would likely extend this role to manage the ranked choice voting system, given sufficient notice.
  • I would not assume such a change is possible for this years election.

Historical Context

While we used ranked choice voting to select our governance model (PEP 8001), as far as my limited searching could find, we haven’t discussed it for Steering Council elections. Please link to more context if that isn’t true.

Next Steps

  1. Gather community feedback on this proposal. (that’s you!)
  2. If there’s sufficient interest, conduct a straw poll here.
  3. If supported, draft a formal proposal to vote to adjust PEP-13’s voting method.

Questions for y’all

  1. Is this change worth pursuing?
  2. What benefits or drawbacks do you see in switching to ranked choice voting?
  3. Should we consider other voting methods? If so, why?

I encourage everyone to share their thoughts. I wouldn’t want to move forward with this without obviously clear support.


My take: I don’t believe it is knowable if this would change the outcome of our elections or not, but if nothing else it should be a better experience for voters and candidates alike.

While the topic has come up in passing at times, I have not discussed this proposal with the rest of the steering council. The SC doesn’t decide this anyways - thus taking it directly to all of you.

16 Likes

For the PSF Board elections (many candidates these days, most of whom I don’t know personally), I genuinely appreciate the simplicity of Approval voting (I’m merely being asked to answer the question “Do I think this individual would serve the PSF well as a Director?” several times rather than trying to assess the candidates relative to each other). The scope of the PSF Board’s role is so broad that different candidates are likely to offer advantages in different areas that can’t readily be reduced to a linear preference order. If I had to rank them, I’d be tempted not to vote at all.

For the SC, deciding on a preference order amongst my approvals seems much more feasible, since the scope of the role is narrower. Being asked to supply that ranking explicitly wouldn’t harm my willingness to vote.

So I guess I’d be a +0? I know I sometimes skip voting “Approve” on SC candidates that I think would be fine in absolute terms, but would rank below my approved candidates in a preferential list, so I do see potential benefits in terms of election outcome clarity.

With optional preferential voting, those less preferred candidates would still get a ranking, with only folks that I genuinely didn’t feel were good SC candidates not getting ranked at all. (I don’t think compulsory preferential voting would be a good fit for that reason: without the option of letting our votes exhaust, we wouldn’t have a way to express “I don’t think these candidates are a good fit for the role”)

1 Like

Standard RCV isn’t a viable choice for the Steering Council elections. It’s a single-winner electoral system–but the Steering Council elections need to produce five winners. We’d need a multi-winner variant of RCV, perhaps Single Transferrable Vote, aka STV.

Anyway, I’m a firm -1 on this. I think RCV is basically awful. Voting in an RCV election is awkward, its tabulation is overly complicated, and it’s actually terrible for outsider candidates (read: third-party candidates). I suppose it’s a small improvement over “plurality” voting (aka “first-past-the-post” voting). But that’s faint praise indeed. And I’d be very surprised if STV was a big improvement over RCV.

I’m an amateur electoral system enthusiast. I’ve done a bunch of reading on the subject, and watched a bunch of videos too, and I’ve formed my own opinions… though I wouldn’t call myself any sort of expert. The most illuminating thing I’ve seen on this subject is this 6-minute video from Mark Frohnmayer. (Warrning: Mark is wearing a shirt with a swear word on it, sigh.) In the video, Mark uses animated visualizations to demonstrate how bad most voting methods are. There’s a Python connection here: the visualizations are Yee diagrams, an invention of Python’s own Kai-Ping Yee. Yee diagrams are an excellent visualization for analyzing electoral systems; animating them makes them even more revelatory. The video makes it clear: of the four systems examined, RCV is easily the worst, collapsing into risible incoherence with only four candidates. Again, I can’t imagine STV is any better.

If I understand correctly, we currently use a form of multiwinner approval voting called Block approval voting to elect the SC. And approval voting is really pretty good! Given the choice between “stick with our existing system” and “switch to some form of RCV” I’d definitely prefer the former.

If we do want to switch to an even better electoral system, I suggest STAR Voting, specifically its official multi-winner variant Bloc STAR. STAR Voting is a big improvement over RCV–its ballot is simpler and easier to get right, and tabulation is straightforward. Sure, STAR Voting has its share of theoretical flaws, as do all electoral systems. But in practice it seems to produce the best results, in terms of producing results that make the most voters happy. I think of STAR Voting as the “practicality beats purity” electoral system.

The cutest argument for STAR Voting is this 7-minute video, in which stuffed animals experiment with different voting methods. If you’re interested in more rigorous arguments, I suggest this page of articles at the STAR Voting website. It includes several articles on RCV vs STAR; I liked this one best.

As it happens, I wrote my own election tabulation library (in Python, of course!) specifically so I could play with STAR Voting:

My starvote library supports STAR Voting, Bloc STAR, and several proportional representation voting systems. I wrote it for fun and to learn more about electoral systems. I’m pretty sure it works fine, though AFAIK it’s only seen a teeny-tiny amount of actual use.

p.s. If I understand correctly, the pedantically-correct term for RCV is Instant Runoff Voting, or IRV. At least, that’s what Wikipedia and Electowiki both call it. But I know what you mean when you say RCV.

p.p.s. Mark Fohnmayer is the father of STAR Voting. So, sure, it’s unsurprising his video concludes STAR Voting is best. I still find his facts compelling.

17 Likes

No strong opinion from me. As long as the voting method is reasonably democratic then I’m happy. I’ll note that known-to-be-democratic countries such as France and the US (I’m a French citizen) make with much worse election methods than we currently have here :slight_smile:

2 Likes

If you want a ranked voting system, Condorcet method - Wikipedia is probably a better approach than Instant-runoff voting - Wikipedia (aka as RCV or IRV or Hare).

It shows similar (good) properties to our current Approval voting - Wikipedia (see Ka-Ping Yee’s resources posted by @larry), while allowing voters to not only approve candidates, but also provide their own ranking, if they choose to do so.

We’re using this for the board elections of the EuroPython Society via the anonymous Condorcet Internet Voting Service.

The only problem we faced was ties on the last ranked position. The Schulze method we used for completion produced such a result in our last election (this is rather rare to happen).

Since you can’t have more candidates elected than there are positions available on the board, you then have to come up with some sort of resolution. This method should be predefined to not cause issues.

The above system outputs the results under multiple completion systems, so a possible solution is to define a predefined ordered list of completion methods to then turn to in case of a tie.

FWIW, I don’t have strong opinions either way. Both (non-ranked) approval voting and (ranked) Condorcet voting are fine, IMO. I don’t know anything about star voting, so can’t comment. RCV can result in rather serious issues (see e.g. the Wikipedia article or the Ka-Ping Yee resources), though, so I wouldn’t be in favor of that particular method.

7 Likes

I don’t know much about voting systems, but I know someone who does. Unfortunately he’s currently banned. Maybe we can wait until his 3-month ban expires and ask him for advice?

52 Likes

Could we perhaps get advice about governance from the The PSF or the wider Python community? Our group is not the only community that has held elections.

For example, I find it informative to learn about how the EuroPython Society handle their election, from Marc Andre’s post above. Perhaps other community leaders can share their experience and advice as well if we ask them?

5 Likes

My guess is you’d also find STAR Voting to be fine. STAR is an acronym, Score Then Automatic Runoff. It runs in exactly two rounds: a round of Score voting, followed by a round of what I think of as “preference voting”. And Approval voting is equivalent to Score voting if you restrict the choices to 0 and 1. So STAR Voting is like a more nuanced, expressive version of the Approval voting you already like.

3 Likes

As someone who spent… a significant amount of energy posting about electoral systems the last time this came up… I honestly suspect the answer is that it basically doesn’t matter which system we choose.

The community of core devs is so small and tight knit that I suspect you could just random.choice between candidates and get approximately the same overall outcome. The places where I think that’s unlikely to be true are the extreme edges (someone who is unambiguously more or less desired than anyone else), and I suspect that any multi winner strategy is going to handle outsize preferences like that alright.

12 Likes

4 posts were split to a new topic: Should we expand the voter pool for the SC?

Yes that is what I meant. I’d assumed w/o research that you’d just run IRV loop multiple times with the previous winner removed to pick multiple candidates out of it. Thanks for all the links (and stuffed animals)!

Regardless, I think your higher level point is right: I’m looking for something that helps capture preference better than our current system.

I don’t want to feel the annual need to keep suggesting that people intentionally trim their ballot to not reflect everyone they’d be happy with in order to put more weight on their top choices. If there’s no way out of that at our small scale then :person_shrugging: the default is to just stick with what we’ve got.

I’ll read up (or watch puppet shows?) on STAR.

I believe Concordet was a topic I saw mentioned in the past threads with Tim running experiments on that several years ago that weren’t producing wildly different results? We’re in no rush on this - it wouldn’t be resolved this year.

1 Like

For context, here’s the 2018 (pre-PEP-13) thread with pages of discussion on multi-winner voting systems: Python Governance Electoral System - #40 by dstufft

3 Likes

Condorcet was discussed a lot at the end of 2018, while the Python Language Governance (future PEP 13) was being discussed. Here are a few links, but there are more if you search for “Condorcet”.

PEP 8001: Python Governance Voting Process proposed to rank SC candidates. My PEP 8015 proposed the Schulze/Beatpath/CSSD variant of the Condorcet method to elect SC members.

Python Governance Electoral System discuss Approval versus Condorcet. Voting system characteristics discussion also discussed Condorcet.

PEP 13 chose Approval, it was announced in Amendment to PEP 13 to allow approval voting. LWN wrote an article about SC, PEP 13 and voting method: Python elects a steering council.

5 Likes

We use Ranked Choice Voting where I live to elect our city councilors. In practice, it provides voters to build consensus around who is the best choice. It also often allows for non-majority perspectives to gain a single seat at the table if enough people are moved to give a non-majority candidate their “number one vote.” I think it could allow us to get closer to expressing the multiplicity of community sentiment than the current approval voting system does.

3 Likes

@ClayShentrup has provided some relevant research links in: Approval voting vs instant runoff voting, condorcet, etc

Apparently (based on Clay’s summary) the evidence that the preferential voting systems actually capture preferences better than the simple two level “more preferred”/“less preferred” mechanism used in approval voting isn’t that strong, so it’s hard to justify their complexity when approval voting is easier to explain and resolve.

Maybe the fact approval voting lumps +0, -0, and -1 votes into a single “not approved” category is a feature rather than a bug to be fixed?

2 Likes

Hm, I thought we had moved on from instant runoff to STAR.

My own variant would use the STAR algorithm but require voters to give 1-5 stars to each candidate. The current system would then be equivalent to giving either 1 or 5 stars (which is what is how most users tend to use on review websites :-), except the two-phase behavior of STAR encourages “honest” voting as a bonus. I find STAR super easy to explain and understand – unlike anything with “Condorcet” in its name, which to almost everybody (certainly to me) seems to invoke feelings of complexity.

11 Likes

I have created two follow-up topics:

See also this topic for more on STAR voting vs. the others:

6 Likes

I’ll keep this brief - which is unprecedented for me when writing about election theory :wink: I just want you to be comfortable with the “Bloc STAR” that was already accepted (& would also be a fine method for all PSF-related multi-winner elections).

Short course:

  • In modern, sophisticated, large-scale voting simulations, STAR and some Condorcet methods (notably Schulze and Ranked Pairs) give the best results across all methods known, and do about equally well at maximizing voter satisfaction.

  • But STAR is a single-winner method. “Bloc STAR” is the obvious “well, run it W times, to get W winners” generalization.

  • The theory of multi-winner methods is far less developed, and I’m not aware of serious simulation work comparable to the effort that’s been put into single-winner methods. Part of the problem is that people can’t even agree on how to quantify what “best” means for multi-winner outcomes.

  • The huge win for STAR over Schulze is simplicity of implementation and explanation. Anyone can easily enough come to a full understanding of everything required to score STAR ballots. Understanding how Schulze resolves intransitive preference cycles is essentially impossible to explain to most voters, requiring background in graph theory. It may be the sheer complexity of it that makes it attractive to some tech nerds (but is anti-Pythonic). There is no possibility for intransitive preference cycles in STAR (its first phase is cardinal, and scores are totally ordered; its second stage is ordinal, but only has 2 participants, so preference intransitivity isn’t possible).

“Proportional representation” is intuitively attractive at first sight, but there are traps too that aren’t at all obvious at first. Election theory is genuinely hard, bristling with paradoxes, impossibility theorems, and counterintuitive results. Suffice it for now to say that I tried my best last time around to see whether two infinite families of “proportional Approval” would have changed results in the PSF Board vote at the time. No final results would have changed under any variation, just minor changes in the order the winners were picked in the “sequential” family. “The math” just didn’t detect any notable factions (groups of voters who tend to vote for mostly the same candidates).

That wasn’t really surprising to me. Proportional schemes become more attractive when there are highly polarized factions, and the PSF doesn’t even have 2 “political parties”. What “the math” did detect was a group of voters who all tended to approve of only the best-known names, which did give the best-known names more than their “proportional share” of internal support, but not enough so that it mattered to the final set of winners plain Approval picked.

An example of where proportional representation matters a whole lot is Israel’s Knesset, where a whole bunch of very different political parties get some representation.

Nevertheless, it’s possible for “Bloc STAR” to suffer “tyranny of the majority” outcomes too, same as current “block Approval”. There’s just no evidence yet that they happen in PSF elections.

Note that STAR and STAR-PR use exactly the same ballots, so an election can be scored under both methods. If STAR-PR ever delivers a different result than Bloc STAR, that’s the time to agonize over whether switching to proportional representation is desirable. It may not be! I won’t go into details now. Short course: the ultimate in “proportional representation” for a W-winner election would be to pick W winners uniformly at random from the entire electorate. If, e.g., 20% of the electorate are Nazis (pick your poison), 20% of the winners will be too. PR methods are blind to ideologies - they aim to deliver outcomes that are “statistically average” in all respects.

Did I say “brief”? Drat - blew it again.

11 Likes

Fleshing that out: “tyranny of the majority” means a faction with the tiniest possible majority can capture all open seats in a multi-winner election.

Suppose we have an organization with a thousand members, 501 men and 499 women. There’s an election to fill 10 open seats on a committee. 10 men run, and also 10 women. But this is an exceedingly polarized community:

  • Each man approves of all and only the male candidates.
  • Each woman approves of all and only the female candidates.

Using our current “block Approval”, each man gets 501 approvals, and each woman 499. All 10 seats are filled by men. Even if all 499 women ran, they’d still get no representation.

While it would require spelling out lots of ultimately irrelevant details, skip to the end: same thing under “Bloc STAR”.

Any form of proportional representation (PR) scoring would, in the example, give 5 seats to men and 5 to women. Which includes STAR-PR, and any member of the infinite families of “PR Approval” schemes I tried some years ago.

But it comes with some costs: by definition, PR schemes cannot always let a majority have its way. PR outcomes have to be forced by machinery in the scoring algorithm. There isn’t an “obvious” way to do this, and methods vary a lot in details. There’s nothing apparently compelling to favor any one over the others, and small changes in details can change outcomes. And the implementations are far more complicated than their non-PR versions. That makes them more brittle, and very much harder to explain.

In @larry’s STAR-PR implementation, he uses fractions.Fraction to keep track of the convolutions “with infinite precision”. Using floats instead, even tiny rounding errors can change outcomes in some cases.

But I’ll repeat that “election theory is genuinely hard”. “Proof by contrived example” isn’t a good guide. While “so use PR” is a screamingly obvious solution to the example above, other cases can be contrived that make it look bad. A consequence of the many impossibility theorems in election theory is that no method is safe from being made to look foolish by some contrived example.

So that’s more motivation for my preferred path forward: use Bloc STAR. But also score each election under STAR-PR (or my own favorite, “reweighted range voting”, which @ClayShentrup (a bona fide leading world expert on STAR who chimed in under a differ topic) also favors). IF it’s ever the case (and it may well never happen) that the set of winners differ, then we can agonize over figuring out how polarized factions came to split the community, and how best to address that. Which may well be working to heal the divisions rather than gaming the election method.

6 Likes

One more here, and I’m done for now: I’m not suggesting that scoring under multiple methods be an official part of the process. It’s necessary and sufficient that the raw ballots (stripped of any information that could link ballots to voters) be made available to download. Then anyone can experiment with all the alternative scoring methods they like. Since it’s a long-time ongoing interest of mine, I certainly would, but transparency should be valued for its own sake regardless.

2 Likes