Skip to content

California Ballot Propositions with PEP

📅 2020-11-05

There have been several life-altering events this year like the Covid-19 pandemic and wildfires in California. This is why casting our ballot is especially important for addressing issues affecting our community. For example, proposition 19 will allow victims of natural disasters to move to a new home and keep low property taxes.

So how do these propositions get placed on the ballot? I decided to learn and challenge myself to compare the Statewide Initiate Guide (SIG), which explains how to place a proposition in the ballot with the Python Enhancement Proposal (PEP), which is the process for making changes to the Python programming language.

Comparing something we use in our daily life with something unfamiliar can make it less alien and easier to understand. As a software engineer, I am more familiar with creating features or fixing bugs than how laws are created.

The following are steps for submitting a ballot initiative and a python enhancement proposal (PEP). There are certain parallels that each step can share, as well as differences that are unique to a process.


Steps to submit a ballot initiative:

  1. Draft the proposal
  2. Submit a written proposal to the Attorney General
  3. Attorney General assigns the circulating title, summary, and a unique identifier.
  4. Collect signatures from registered voters
  5. Secretary of State provides approval to place the proposal on the ballot
  6. Californians vote on the ballot proposition

Steps to submit a python proposal:

  1. Draft the proposal
  2. Submit a pull request to the PEP GitHub repository
  3. PEP editors review and merge the pull request, and assigns a PEP number
  4. Collect feedback and approval from core developers
  5. Steering Council provides final approval to the proposal
  6. Implement the proposal into the Python programming language

Comparisons of ballot initiatives vs python proposals

Ballot: Draft the proposal

There are no specific guidelines to write the proposal. Instead, the recommendation is to find a lawyer. The contact information for the Office of Legislative Council and the Secretary of State are listed. UC Hastings has a database for past proposals.

Python: Draft the proposal

There are specific guidelines for how a proposal should be written. There is a Github repository for (all proposals)[https://github.com/python/peps].

Ballot: Submit a written proposal to the Attorney General

The proposal must be submitted as a printed copy. Emails and facsimiles are not allowed. This implies the proposal needs to be mailed or hand-delivered to the Attorney General’s office. There is also a $2000 fee that will be refunded if qualified for the ballot.

Python: Submit a pull-request to the PEP Github Repository

The proposal can be virtually submitted from anywhere with an internet connection. There are no fees to submit a pull-request on GitHub

Ballot: Attorney General reviews the proposal and assigns the circulating title, summary, and a unique identifier.

This will be needed to circulate the proposal and collect signatures.

Python: PEP editors review and merge the pull request, and assigns a PEP number

The PEP number is used to reference and track the proposal.

Ballot: Collect signatures from registered voters

Depending on the proposal, a certain percentage of signatures from registered voters are required. For example, an initiative statute requires 5% or 623,212 signatures. Up to 180 days are allowed to collect signatures and 131 days before the next general election.

Python: Collect feedback and approval from core developers

There is a python-dev mailing list for collecting feedback. But there are no specific instructions for how the feedback should be collected or how many core-developers need to approve.

Ballot: Secretary of State provides approval to place the proposal on the ballot

There are two stages: eligible and qualified. The proposal is eligible once signature verification is completed and ready to be placed on the ballot. Then the proposal becomes qualified when it is certified to be placed on the next ballot.

Python: Steering Council provides final approval to the proposal

The Steering Council is the final authority to accept or reject proposals. Alternatively, a core developer can volunteer to be a PEP-Delegate and become the final authority instead.

Ballot: Californians vote on the ballot proposition

All registered voters in California are required to submit their ballots by November 3rd this year. Normally there are two options: Go to a polling place Submit the ballot by mail Due to the Covid-19 situation, mailing the ballot is the only option.

Python: Implement the proposal into the Python programming language

The proposed change is implemented into the source code repository and documented.


Some steps between a ballot initiative and the python proposal are very different. For example, the final step in python is to make the change into the programming language after approval from the Steering Committee. But a ballot initiative requires voters to approve it on the ballot before the change can happen.

But overall, both processes draw similar parallels because a proposal has to be documented, reviewed, and processed. Now that I can make the comparison, ballot propositions seem a lot easier to understand and something I would participate in the following years.