Talk — Supporting the George Floyd Protests in Portland: Demonstrations, Legal Support, and Django Apps

A slide with a gray background and large black text reading "Supporting the George Floyd Protests in Portland: Demonstrations, Legal Support, and Django Apps". In the lower right corner, smaller black text reads "@thursdayb / @pdxgdc"

I gave a 25ish-minute talk at PyCascades 2022 covering a Django app that Jamey Sharp built and I supported for the Portland GDC. My script and slides are below. Please note that this is not an exact script; I had to cut some material from my talk during recording to get it closer to the time limit that I’ve left in this version of the script. Consider it a little bonus material! You can watch a video of the talk on YouTube or below:


A gray slide with large black text reading "Content notes: This talk will include discussions of institutionalized racism and police violence, as well as the technology that supports them."

I’m here to talk about my experiences doing bail and legal support for protestors arrested in 2020 and 2021 during the George Floyd Uprising. Since I’m White and I’m talking about supporting people arrested while asking for racial justice, I need to say that I’m only talking about the specific project I worked on. I didn’t organize or lead protests or anything like that. Please consider this a report back on the small chunk of mutual aid that I worked and nothing more. Furthermore, I did not do this work alone. This talk covers the efforts of dozens of people who I am proud to work alongside.

This talk covers technical topics, but it also includes discussions of institutionalized racism and police violence. If you’re not in a place where you can hear about these topics, please consider stepping away for the moment. You can always watch the recording later.

A gray slide with large black text at the top reading "A brief timeline". A white box takes up most of the slide below, with slightly smaller black text reading "May 25 — Derek Chauvin kills George Floyd in Minneapolis.
May 26 — Protests start in Minneapolis.
May 27 — Black and Indigenous women hold space in memory of George Floyd at Portland’s Multnomah County Justice Center.
May 28 — Around 100 protestors gather at Multnomah County Justice Center.
May 29 — More than 1,000 protestors march to the Multnomah County Justice. Police arrest 13 people. PDX GDC provides bail and legal support.
May 30 — Multiple protests take place. Police arrest 64 protestors. PDX GDC launches our GoFundMe."

On May 25th, 2020, George Floyd went to a grocery store in Minneapolis and made a purchase. Thirty-one minutes later, he was dead at the hands of a police officer.

On May 26th, hundreds of protestors took to the streets in Minneapolis, demanding accountability for Floyd’s death — and the long list of other deaths of Black people at the hands of police officers.

On May 27th, a small group of Black and Indigenous women gathered in Portland at the Multnomah County Justice Center to hold space in memory of Floyd. 

On May 28th, around 100 people gathered at the same building, with some people sitting in the doorways. Riot police violently pushed people away from the building. 

On May 29th, over 1,000 people gathered at Peninsula Park in North Portland and marched into downtown to gather again at the Justice Center. Portland police officers arrested 13 people.

The Portland General Defense Committee immediately started posting bail for protestors who were arrested. The GDC started as a legal defense organization for union organizers and workers. Members of the Industrial Workers of the World founded the GDC in 1917. The Portland branch started in 2017 and has provided jail and legal support to protestors since its start. We did the same things for folks arrested on May 29 that we did for past protests: We made a spreadsheet of people arrested and started figuring out who needed bail money, including prioritizing arrestees by relative risks at the jail. Those risks included whether the person arrested was Black or Indigenous, LGBTQ, or had health risks.

Dealing with thirteen arrests at once was a stretch for us. At that point, we were used to two or three arrests at one event and supporting maybe two people with ongoing cases at any given time. We were able to pull together bail funds from members and friends, but we knew we would need to raise money to cover legal costs and reduce the bail burden we’d already taken on. Prior to 2020, the Portland GDC had a budget of a few thousand dollars per year. I put up a GoFundMe early on May 30th. By the end of that day, police had arrested 64 people. 

Protests continued every night into January 2021. I’ve heard estimates that 70,000 people participated over those eight months. Portland still sees several protests and rallies around racial justice every month. Local police and federal law enforcement agents made over 1,000 arrests at protests in Portland. They beat, gassed, and otherwise hurt countless protestors and journalists. 

A gray slide with large black text reading "No time and no resources". A screenshot of a  screenshot with column headings listing information about arrestees and color-coding for arrest status

As you can guess, gathering and managing information on who had been arrested, who needed bail money, and where each person was in the legal process outgrew a single spreadsheet rapidly. On June 6th, 2020, I contacted on Jamey Sharp, who I knew from various tech-related things here in Portland and asked for help. I was deep in the weeds at that point and basically gave Jamey free rein to figure out how to replace this terrible spreadsheet with something that could manage information better. We were not in a position to pay Jamey and I am eternally grateful he was able to help us. The Portland GDC still has minimal resources beyond dedicated volunteers and some funds earmarked for legal expenses. While we eventually raised over a million dollars, that money is all for to bail and legal expenses and therefore not available for administrative costs like building software applications.

A gray slide with large black text in the upper left corner reading "Jamey Sharp". In the middle of the slide are a black box and a white box. The black box contains a logo including a stylized red rocket blasting off and the words "Comic Rocket" in white letters. The white box contains black text reading "comic-rocket.com".

One of the reasons I reached out to Jamey is because of his experience scraping all kinds of websites. He was unable to speak at this event, but I encourage you to check out his project Comic Rocket at comic-rocket.com, which is one of the places he got that experience. I figured Jamey would be able to automate some of our information gathering, letting volunteers focus on things technology can’t do. Jamey’s experience meant that he had the first iteration of our app up and running on June 12, with all the notes in our terrible spreadsheet imported and ready for us to work on.

As the summer of 2020 wore on, we added users and functionality and scaled up a little just about every day. The Portland GDC’s workflow constantly changed based on capacity and the growing number of arrests. This was not a situation where a developer got to make nice neat little upgrades and slowly roll them out to users. This was duct-taping steering to an airplane that was already in flight and occasionally doing barrel rolls. 

A gray slide with large black text reading "Scraping multiple systems" and two screenshots of pages from the websites of the Multnomah County Sheriff's Office and the Oregon Judicial Department.

The web app we use for the Portland GDC’s work can be thought of as two key pieces. Most people only ever see an interface to a database, listing people who were arrested with a bunch of fields about their contact information, the status of their court case, and various other details. It’s an amped-up, search-friendly spreadsheet. 

But the app also pulls in information from several sources, automatically prepopulating many of those fields and providing updates to volunteers. Those sources generally don’t have APIs, so the app scrapes them. The sources include Oregon state court records and jail records from the Multnomah County Sheriff’s Office. MCSO is responsible for processing anyone arrested on state charges and many of those arrested on federal charges in Multnomah County (which includes the majority of the city of Portland). 

The information we need to do our work comes in an absurd variety of formats, with an equally absurd set of access requirements. For instance, a lot of court information is in PDFs that are scans of printed documents, often with important handwritten notes like “Dropped” to indicate a suspended charge. 

Federal courts work differently than state courts. and have less public information that can be scraped. Federal court cases go through PACER, which is an app that charges 10 cents per page when you access a document, as well as fees for search results and non-case specific reports. 18F, the federal government’s in-house technical consultancy, has looked at upgrading the system but their report is best summarized as no one knows how PACER works, it’s unmaintainable, and we need something entirely new and built from scratch.

Important information also disappears regularly. MCSO’s arrest information will change with no warning and no record if someone at the jail updates information, including during the booking process. Records of arrests drop off the site entirely after a few weeks. There’s also no listing of citations — incidents where protestors are charged with a crime, usually a misdemeanor, but not arrested. And the information is available is often full of errors. Information collected during arrests is the worst. We’ve known for a long time that law enforcement agents will “tweak” certain information they collect to make their own stats look better. But the data we saw from protests made those changes much more obvious. Police record the races of people arrested incorrectly constantly. In particular, we’ve seen glaring errors around the race of people of color, which have allowed the Portland Police Bureau and other agencies to claim that almost all protestors arrested in Portland are White. We’ve also seen names, genders, physical descriptions, and more recorded incorrectly. 

We’ve had to figure out the meanings of certain data through trial and error because there’s not any documentation available. MCSO also uses different terms and definitions for specific charges than the Oregon court system uses, to the point that our app only grabs the statute number a person is charged under and maps it to correct charge information in our database.

This system is especially infuriating when you realize that it’s on the people who are arrested to correct any errors. Since errors can have consequences that include being kept in jail, they can be impossible to correct without expert legal help. People who are arrested are also expected to stay up to date on their cases, without any of the modern notification systems you might expect. If someone’s charges are suspended, that person is instructed to call the district attorney’s office at least monthly to check if their charges have been reinstated for at least the next two years. If they don’t, they’ll likely miss a court case which will result in a warrant being issued for their arrest and other terrible outcomes. COVID has also meant that policies change constantly, often without online notice. Even before the pandemic, details around court hearings routinely changed on the day of, but as things moved online, everything about legal processes got more complicated.

These websites are also delicate. Some were constructed by contractors trying to keep costs down, while others are built by companies that know that they can take advantage of people who are incarcerated without anyone important caring. 

A gray slide with large black text reading "Finding work arounds" and a screenshot of a Djgo website interface showing data related to court hearings with personal details redacted.

Django and Python were the logical choices for this project for a few reasons: First, Jamey had already built Django apps and was pretty familiar with the framework. And while I haven’t built a whole Django app by myself, I’ve gone through some workshops. Second, Django’s built-in admin interface makes managing a bunch of structured data really easy. The user interface enables anyone to edit that data without tons of training. Jamey was also already familiar with Scrapy, a Python scraping framework, so he could get that set up with a Django-based app quickly. 

One of the pieces of information we need to grab automatically are upcoming court dates. The Oregon court calendar site is particularly irksome. Jamey jumped through lots of programmatic hoops to get that scraper running: the site limits search to 550 results, without offering any “next page” button. The scraper can’t just grab all calendar entries over the next 3 months without hammering the site harder than we want to. So the solution is a little complicated: the scraper looks at the specific case numbers we care about, then groups all the cases with the same starting numbers, trimming off the last two digits. When the court calendar is queried with those truncated group numbers, there are a max of 100 active cases returned. By batching together cases, the scraper minimizes the number of queries — though Jamey has pointed out that if whoever designed the court calendar site had just limited to search results to 1,000 rows instead of 550, he could have cut the number of queries even further.

Of course, there’s still plenty of work that requires a human touch. We have to audit our data regularly, adding in pieces that MCSO missed or that come from conversations with the protestors we’re supporting. Django has made those audits relatively simple, even though they still require a lot of reading through information for the humans involved. We can use tags for indicating the specific categories that need auditing at a given time, as well as sort and filter information in a variety of ways. 

A gray slide with large black text reading "Onboarding and training users" and a screenshot of a Google Doc containing software documentation

The Portland GDC is not a large organization, even now. We’re also not an especially technical group. We recruited volunteers to work on legal support in July and August of 2020, and more volunteers have joined since then.

In preparing this talk, I asked folks who use the app regularly what technical knowledge they had before volunteering with the GDC. The range was even wider than I expected. One of our most technical volunteers (other than Jamey and myself) came in knowing some JavaScript and could use the command line. But we also had folks with very little technical experience, who might use Google Docs or email, but not much else. With some onboarding and documentation, they were all able to make use of the app, as well as suggest improvements that would make our work easier.

All onboarding, and all other work for that matter, happens remotely. Django’s user interface is reasonably simple right out of the box and while we’ve tweaked the user experience lightly, Django uses a visual language in interfaces that is very similar to what’s considered “standard” on the internet. 

I created our technical onboarding process. Another person was responsible for walking new folks through specific support situations, communication norms, and our policies, so I was able to focus just on getting people on to the app. 

I do a video call with each new user that includes a 30-minute walk through of the app. We actually don’t always need the full 30 minutes, but we set up user accounts during that session and getting folks through their first time logging in was often hard — in fact, it was the point our users struggled with the most. That’s because some of our account setup emails wind up in spam. So I built in time to search around for emails. I also limited onboarding sessions to a max of three new users because I only have enough patience to go through three people’s spam folders at a time.

During the walk through session, we go through each section of the app as well as our documentation. Our documentation is a shared Google Doc with screenshots and written descriptions — it’s not fancy, but it does contain answers to basically every question anyone has asked me about the app. 

A gray slide with large black text reading "Adding features" with a screenshot of a Django menu.

We tweaked the app as users asked questions and needed more features. Jamey wisely pushed back every so often and reminded us of our options, even deleting certain features when they were no longer needed. If Jamey hadn’t provided a technical voice of reason, we’d probably have a full-featured CRM at this point, even though that’s not what we need. 

And when I checked in with our users while getting ready to give this talk, they told me that the app was intuitive, friendly, hard to break, and empowering. Users felt empowered to work with data, even if they didn’t come in knowing tech, legal proceedings, or activism. Some features still don’t get used as much as possible. But volunteers say this is more about the time available to do work, not due to difficulties with the app. People also like that they don’t feel beholden to the app and that it’s not judgmental about unfilled fields. One person even said that using the app reminds them of using a message board because they can see the notes and work of other volunteers, which helps them stay connected through all this remote work. 

A gray slide with large black text reading "Assessing risk factors" and a screencap of the "Security in Django" web page, which is available at https://docs.djangoproject.com/en/4.0/topics/security/

We realized early on that we were sitting on a pile of valuable information. While most of what we pulled together was publicly available, it wasn’t combined in this way anywhere else. Between what we scrape and the information we add from the people we’re supporting, we created a doxxer’s paradise. Not only do we have data like physical addresses and phone numbers, but we also have notes on who needs what kinds of help. The risks of holding this information are massive. If someone with bad intentions got access, they’d be able to easily harass people both online and offline. We have an ethical obligation to mitigate every risk we can and to protect this information. The alternative is compounding the harm legal systems are already doing to folks. 

We also faced a lesser risk of losing access to the sources where we pull information from. That did happen several times — not only does MCSO remove information from their arrest records, but the Oregon court system stopped allowing access by anything with an IP address located outside of the US, which coincidentally enough included us at the time. Jamey found us work-arounds, but I’m always waiting for the next time one of these systems changes their access controls. We also faced concerted attacks on any tool we publicly use: we dealt with numerous malicious reports to GoFundMe, Twitter, our email provider, and more. 

We reduced our risks in several ways. First off: we obviously didn’t go around telling people about this app. After all, if someone is attacking your email, they’ll attack every other system they can find related to your organization. We’re facing less attention online now, so talking about the app here is a calculated risk that we’re comfortable with — but I’m not telling you who hosts the app or other important details to keep those risks to a minimum.

We also look closely at everyone who gets access to the app. Our due-diligence process for volunteers includes an in-depth internet background search and confirmation of the information we find with shared connections where possible. Jamey was also able to set up multiple types of user accounts so that we could limit each volunteer’s access to information they actually need to do their work. If, for instance, someone is writing letters of support to people who are currently incarcerated, they can only see those people in the system who they’re writing to. Those volunteers don’t get much more than an address and some biographical information. 

Technical security is, of course, an aspect of risk mitigation. Django has good security features out of the box, assuming you use them. By using Django, we could use built-in security options and also access documentation that we could adapt to explain what was going on behind the scenes to volunteers. But the most important step to managing our security concerns was our effort to avoid collecting information that we didn’t feel we could protect — and that policy would have been the same no matter what framework or language the app was written in. No technology choice is as important as defining what data you’ll collect and how it will be handled. 

A gray slide with large black text reading "Inevitably burning out" and a screen shot of a blog post about a protest on December 31, 2020 which is available at https://pdx.recompilermag.com/2020/12/31/december-31-protest-new-years-noise-making-event/

One of our biggest ongoing issues was burn out. Basically everyone burnt out over the course of 2020 and 2021 — doing legal support just made us burn out faster. We’ve had higher turnover among volunteers than I’d like, but this is hard work. Even though we don’t need to worry too much about gathering and processing data, we’re dealing with emotional situations and even the best outcomes for the people we’re working with involve lots of time dealing with an adversarial legal system.

The only way to handle the fluctuations in capacity is to document EVERYTHING. Everything that happens in an individual case gets recorded in the app. Everything about the app gets documented, too. Our documentation isn’t fancy: it’s a document that I add questions and answers to whenever an app user asked me something. I lifted some pieces out of the Django documentation and reworded them a bit to ensure our users understood how to handle a problem even if they didn’t come in with a ton of technical experience. And any time an edge case came up, I took tons of notes. 

I did worry a lot about what would happen when Jamey and I burned out, however. We both managed to hang on until the app was basically stable and there hadn’t been any new features needed in a while. I did want to make sure that someone had enough knowledge to at least decide if a situation was an emergency and to have someone who could step up if such an emergency came to pass. Luckily, our most technical volunteers reached a point with the app where they seemed capable of handling questions and I drafted a back-up developer who would be willing to handle emergencies before I had to take a break.  

A gray slide with large black text reading "Outcomes for protestors" with a screenshot of a CNN broadcast of a press conference with George Floyd's family after a jury found Derek Chauvin guilty of Floyd's murder. Closed captioned text on the broadcast reads "...Portland stayed in the streets".

I think the work I’ve done with the Portland GDC over the past two years is some of the most important work I have done or will do. We put together legal support for hundreds of protestors out of Django, duct tape, and donations from strangers. We did our part to ensure that protestors could be in the streets for months on end and reduced the risks they faced. One of the most meaningful measures of our work, at least for me, is that Rodney Floyd, George Floyd’s brother, thanked Portland protestors specifically last April. He said the support of protestors meant so much to their family and that staying in the streets helped ensure his brother’s killers faced justice.

So here’s where everything stands as of February 2022: Mike Schmidt, the district attorney here, suspended most protest-related charges. That’s not the same thing as dropping charges entirely. Instead of dropping charges, he’s just not currently prosecuting charges. The DA has the option to reinstate suspended charges for years to come. He’s already reinstated a few. By suspending charges, rather than dropping them, the state also gets to hold on to bail money and evidence until the charges age out. And since almost $700,000 of the money the Portland GDC raised went to posting bail for hundreds of protestors, that money is not available for legal fees or bail for future protests for an indeterminate amount of time. Schmidt is considered a very progressive DA and he’s still chosen to hold protest-related charges over protestors’ heads for years to come. 

The federal district attorney, Scott Asphaug, hasn’t been so nice. Several protestors are facing federal charges, with Black and Indigenous folks facing the harshest penalties. There are at least three such cases which will be going to court in the next few weeks with each defendant facing years in jail. It’s also worth noting that Asphaug previously worked for the Portland police union to get police officers out of trouble during internal investigations and the U.S. Department of Justice does not consider that relationship a conflict of interest.

The city of Portland, as well as several federal agencies, are facing lawsuits from many of the protestors who police attacked. Residents of Portland who were not involved with protests but were teargassed or otherwise harmed are also bringing their own lawsuits. While a few cases have already been settled with payouts by the relevant government agency, many seem to be going to court.

While Portlanders are no longer protesting in the streets every night, cases related to the George Floyd Uprising won’t be over for months, perhaps even longer. The Portland GDC is still doing legal support and expects to be doing prison support for folks unjustly incarcerated over these protests for years to come. 

A gray slide with large black text reading "Donate to support protestors" with screencaps of the Portland GDC's donation links, which are hyperlinked in the text of this post.

I hope you found this talk valuable, both in terms of learning about launching a Django app with minimal resources and even less time and in terms of understanding the amount of work it takes to support protestors through arrests and court cases. The Portland GDC continues to support people arrested at protests in 2020 and 2021 and if you’re able to, please consider donating to help cover the legal costs that many protestors are still dealing with. You can donate through CashApp, Venmo, or by mail to PDX GDC, 2249 East Burnside Street, Portland, OR 97214.

PDX.Vote: Officially launching a news site covering Portland-area elections in 2022

I’ve launched a new project that I’m excited to share with all of you.

TL;DR

PDX.Vote rounds up news related to the 2022 elections taking place here in Portland, Oregon. It also publishes long-form articles about specific aspects of Portland’s politics. Please support this work financially.

If you’re interested in my thoughts behind this site and my plans for its future, keep reading!

Why a news site focused on elections?

I’ve always followed local politics pretty closely. One of my first paid blogging gigs was covering the 2008 presidential election, which really helped me understand that local politics impact our day-to-day lives more than most things happening in Washington, D.C. I was also an election judge in Maryland and saw first hand how hard voting was for some folks.

Since moving to Portland, I’ve made zines about our local elections, as well as writing articles, massive Twitter threads, and even a newsletter for a specific election. Folks seem to find these resources useful and I always wind up with far more research than will fit in just one article or one update. I’ve been thinking about ways to share more of what I find and the idea of a website has been in the back of my mind for a while.

I also think that a lot of the media covering local news just aren’t covering local elections in any real depth. That’s partially due to the financial constraints on a lot of news media. But there’s also a sense that nonpartisan groups like the League of Women Voters write great voters guides that provide enough information for most voters to make their decisions. Now, I read the Portland League of Women Voters’ guides cover to cover and think they’re a great resource — but those guides are put together by folks who are trying hard not to influence the outcome of the races they’re covering.

Local elections decide matters of life and death importance here in Oregon, from the oversight of police forces and the violence they enact to the budgets for supportive services for folks without stable housing. But a nonpartisan report doesn’t tell voters whose policies are likely to increase deaths or save lives. We deserve better information.

Furthermore, we deserve a wider variety of perspectives on our elections. Nonpartisan guides are generally written by volunteers, who can afford to donate their time and often have a certain amount of privilege. News media tend to employ folks with privilege, as well — as of 2018 about half of all newsroom staff are white men. The only way to change which perspectives we’re hearing about political candidates is to actively seek out people with different experiences and then pay them for their reporting.

What are my short-term plans?

I’ve already soft-launched PDX.Vote with three key types of coverage:

  • Digests of news related to the current election cycle
  • Weekly calendars rounding up important meetings, deadlines, and other dates relevant to local politics
  • Articles that go deeper into specific races, as well as important context for upcoming elections

At the moment, I’m doing all of the writing for the site. But with the official launch of PDX.Vote, I’m accepting pitches for articles. I’m also actively reaching out to people who are able to talk about political issues in ways I can’t. I’m privileged enough to be able to fund my startup costs and an initial writers budget so that I can pay for these contributions. My goal is to share election coverage from as diverse a group of contributors as possible. In terms of numbers, the first metric I’m measuring is the percentage of contributors from different racial backgrounds than my own, which I plan to report back on quarterly. It’s not a perfect metric, of course, but it’s one that I’m confident I can track as the only administrative staff for the site, as well as one that will give a top-level view of how well I’m doing at recruiting writers with different experiences. If you’re interested in writing for PDX.Vote, please contact me.

While I can cover the initial costs of setting up the site, I do need community support to publish this coverage. My first financial priority is covering the expenses of running the site, including the media insurance policy I needed to feel safe doing this work. My second financial priority is paying contributors. It would be nice to be eventually rewarded for my labor, but that’s much farther down the list.

So how can you support PDX.Vote? Currently, you can give us direct financial support. The current options are a one-time payment of $10 or a recurring monthly payment of $10. I’ll be making other options, such as printed voter guides, available later on. However, I will neither be accepting advertising on the site for the foreseeable future nor putting up a paywall in front of content. Both options make me feel uncomfortable when we’re talking about election coverage: Every resident (including non-voters) should be able to access information about the governments under which they must live, without paying for that information. And advertising tends to affect what news media publish, even without any explicit expectations. While I’m happy to discuss financial support in larger amounts, I do want the site to be primarily funded by the people I hope will most benefit from having free coverage available — people who can afford to throw $10 towards PDX.Vote, rather than people who can afford to spend thousands of dollars a year on multiple newspaper subscriptions.

Because I’m talking about elections and political power, I think it’s important to be as transparent as possible, especially about finances. I’m making the site’s financials available on a monthly basis. I’ve also included a transparency section on the ‘About’ page, including my own donations to candidates and political committees. I’ll be asking contributors about their connections to candidates and political committees and adding that information as I deem appropriate and safe. I’m also explicitly talking about my own biases and the site’s slant as a whole: I’m a leftist and you should expect PDX.Vote’s coverage to lean left as well. Furthermore, I am critical of even leftist elected officials — rather than being invested in maintaining a status quo, I want us to rethink what governance looks like and limit the harm the state can cause to each of us.

What are my long-term plans?

Well, a lot depends on how many folks find PDX.Vote a useful resource. While I’m confident I can put together regular updates through the November 2022 election, I’m not yet sure if I’ll continue the site after that time. Financial sustainability and reader interest will probably be the determining factors.

I would love to continue to build on the site’s coverage long-term if I can. I’m already working with a few contributors for one-off pieces and I want the opportunity to bring in some folks as regular contributors if I can afford to pay them for their work. I see two key areas of expansion: first, geographic coverage and, second, linguistic coverage. Currently, PDX.Vote covers Multnomah County elections, because that’s the county that covers the largest chunk of the city of Portland. It’s also the county I live in. I’m working on coverage of Washington and Clackamas Counties because they’re part of Metro, along with Multnomah County. It’s hard to cover Metro races without having at least a working knowledge of Washington and Clackamas Counties. I’d like to eventually cover all seven counties that include Portland and its suburbs, but that’s beyond what I can do without regular contributors. Bringing on folks to cover these additional counties will require finding reporters already living in each county, so that we can read coverage from folks actually impacted by county politics. And I have to admit that expanding coverage to Clark County (and Vancouver, Washington) will probably be low on the list. Clark County is important to understanding Portland politics, but it’s in Washington State and therefore plays by a different set of rules. Adding Clark County coverage to PDX.Vote will take more work than adding another Oregon county.

I also believe that expanding coverage outside of the English language is crucial. Portland residents speak a wealth of languages and deserve news in languages they understand. Translation is expensive and I don’t expect to be able to publish every article in multiple languages right away, but that’s my ultimate goal. Currently, I see Spanish, Vietnamese, and Chinuk Wawa translations as priorities. While the community of Chinuk Wawa speakers in Portland is smaller than the communities that speak several other languages, Portland sits on land that rightfully belongs to Indigenous tribes, including Chinookan tribes. Chinuk Wawa is a jargon used by many tribes. While I’m not Indigenous, I believe in the Land Back movement. Providing news in Chinuk Wawa seems like a tangible step towards respecting Indigenous sovereignty that goes deeper than a simple land acknowledgement.

I’m not sure how much I’ll be able to accomplish until I see what sort of financial support community members are prepared to provide. But I will do everything I can afford to do that will make local political information more widely available here in Portland. I’ll keep y’all updated.

Upcoming talk at PyCascades 2022

I’m giving a talk at PyCascades 2022! I’ll be covering the technology the Portland General Defense Committee used to manage bail and legal support for hundreds of protestors during the George Floyd Uprising, including our custom Django app. The Portland GDC is continuing to support protestors as court cases proceed.

PyCascades is virtual again this year. If you’re interested in attending, tickets are $50 for three days of Python talks, sprints, and social events. Discounted tickets are available for students and enthusiasts (anyone whose employer won’t cover the cost of their ticket).

​Formally ending The Portland Prospectus

Some of you may remember that in the before times, I ran an email list covering sponsorship opportunities around tech conferences and other events related to tech here in Portland. I haven’t updated it since 2019, given the large number of cancellations and postponements in the last two years.

Both running and sponsoring events look dramatically different today than they did in 2017, when I started the newsletter. Personally, I don’t feel comfortable attending big events in person and I don’t see that changing any time soon. My work has also moved away from the tech industry, so I’m not really tracking tech events very closely at this point.

As a result, I’ve decided to formally shut down the mailing list. After this post goes live, I’ll delete the mailing list, including subscriber emails. If someone wants to start something similar in the future, you have my blessing. And if you want my templates and notes, let me know — we can work out an equitable arrangement.

Since I’ll be deleting the content that went out to the Portland Prospectus mailing list, I’m also sharing the PDFs of the different iterations of the Portland Prospectus here as a sort of archive.

My election coverage, to date

I’m already working on some coverage of the 2022 primary and general elections. In the meanwhile, though, I wanted to collect the resources I’ve made over the past several years into one place.

Prior to moving to Portland, I also wrote about elections (including a stint blogging professionally about the 2008 election). I don’t really recommend my political writing prior to about ten years ago; I have learned a lot since then and developed personal politics that I feel a lot better about.

Evergreen Resources

Election-Specific Resources

The Portland Charter Review Process: A Resource Roundup

I’ve been following the Portland Charter Review process closely since it started in 2020 and have done what I can to make the process a little more understandable. Those efforts have included Twitter threads, explainers, and even ideas for folks interested in submitting public comments. I’m collecting all the materials I’ve made here and will continue to add additional items as I make or find them.

Materials I’ve Created (Arranged By Topic)

Charter Overview

Public Testimony to the Charter Review Commission

Applying to Join the Charter Review Commission (Application Now Closed)

  • Application Explainer — During the process of selecting commissioners for the Charter Review commission, I created this explainer to help more people apply for the commission.
  • Twitter Threads on Applying — This thread covers material included in the explainer adapted to social media. The threads are on Twitter, but there’s also a PDF of the tweets included in the threads, because finding old tweets is difficult.

Additional Resources From Other Sources

Sharing Guidelines

If you are interested in sharing or repurposing any of the materials I’ve created around the Portland Charter Review, you’re welcome to do so. I’ve licensed the materials I’ve created under a Creative Commons Attribution 4.0 International License, meaning that I just ask you to keep my name on things I’ve written as you share them. I’m not necessarily worried about credit so much as making sure that folks understand that these are materials produced in my spare time and are not reviewed by anyone who is officially part of the charter review process.

Please let me know if you do repurpose or share any of these materials in a way that I can help promote. Examples include:

Glitter, Radical Protests, and Tee Ball on the South Lawn.

Saul Alinsky’s Rules for Radicals

The whole book is a useful read, albeit a bit dated — it was published by a professional organizer in 1971. But Alinsky’s rules remain widely applicable:

  1. Power is not only what you have, but what the enemy thinks you have.
  2. Never go outside the expertise of your people.
  3. Whenever possible, go outside the expertise of the enemy.
  4. Make the enemy live up to its own book of rules.
  5. Ridicule is man’s most potent weapon.
  6. A good tactic is one your people enjoy.
  7. A tactic that drags on too long becomes a drag.
  8. Keep the pressure on. Never let up.
  9. The threat is usually more terrifying than the thing itself.
  10. The major premise for tactics is the development of operations that will maintain a constant pressure upon the opposition.
  11. If you push a negative hard enough, it will push through and become a positive.
  12. The price of a successful attack is a constructive alternative.
  13. Pick the target, freeze it, personalize it, and polarize it.

A Glitter-Infused Protest

Reading today’s headlines would have made Saul Alinsky proud: around 200 activists grabbed the national news cycle by holding a dance party. Of course, holding the dance party outside of the vice president-elect’s home in Washington, D.C. definitely helped.

A Brief Buyer’s Guide: Glitter

I do not like the aftermath of glitter. Glitter gets everywhere and stays there for approximately the rest of forever. Seriously, glitter is so good at adhering to things that forensic scientists have written lengthy odes to glitter’s value in solving crimes.

But we’re going to need a lot of glitter for protest dance parties in the near future, so let’s talk about the environmental impact of glitter. On Amazon, you can buy glitter by the pound for under $20 per pound (which I’m not linking to, because no one should have that sort of power). When you buy a pound of glitter, you’re buying a pound of tiny pieces of plastic you fully intended to scatter around. Glitter is really does stick around forever.

So we need to switch to the biodegradable stuff. Luckily, biodegradable glitter comes in a variety of lovely colors, perfect for adding that something special to your next protest. No word yet on what forensic scientists think of biodegradable glitter, though.

Fireworks, Another Bright and Sparkly Option

Every American Inauguration Day has been celebrated with fireworks. The president-elect is keeping the fireworks for tomorrow’s festivities, even though he fired Charlie Brotman, who has announced every American presidential inauguration since 1957, when Brotman swore in Dwight D. Eisenhower for a second term. Brotman also was the stadium announcer for the Washington Senators, as well as announcing tee ball games on the South Lawn of the White House.

via GIPHY

Put Your Damn Money Where Your Mouth Is

Diversity is important to tech, right?

We want the makeup of our company to reflect the vast range of people who use Twitter. Doing so will help us build a product to better serve people around the world. — Twitter

Intel is committed to setting the industry standard for a diverse and inclusive workplace culture. — Intel

At Facebook, we value the impact that every individual can have. We are dedicated to creating an environment where people can be their authentic selves and share their own diverse backgrounds, experiences, perspectives and ideas. — Facebook

Most of these companies have backed their words with money — funds that are earmarked for improving diversity. And they do back some good things, like events specifically meant for the demographics those companies are trying to add to their own workforces.

But the money that most tech companies have set aside for diversity isn’t going towards the infrastructure necessary to truly create a sustainably inclusive tech industry.

I’ve been an organizer with the local PyLadies group for a few years now, and we have no shortage of companies that want to buy us pizza so that they can tell our members about job opportunities. When someone talks about offering childcare at broader meetups, everyone agrees that the idea is sound, but no one wants to pay for it. The same is true for tech conferences. As co-chair of Open Source Bridge this year, I hoped to find a sponsor specifically for childcare — a simple change that would make it easier for attendees with families. The business case seems pretty obvious: no matter their gender, senior programmers routinely have families. If those programmers work remotely, are single parents, or split care with another parent, finding childcare can be difficult. Weekend conferences, in particular, can be hard because a parent might have to leave their children with someone overnight.

Providing childcare means that parents are more likely to attend conferences or other events and therefore have a better chance of interacting with a recruiter for a given company. That sort of infrastructure dramatically improves the number of people able to attend.

Adding infrastructure like childcare services to the technology industry’s norms is a prerequisite for making the industry more diverse. Recruiters have to be able to find diverse candidates if they’re going to connect them with employers. That means funding the infrastructure that gets those diverse candidates into the room.

So why is it so hard to get sponsors for things that make diverse conference attendance easier, even for relatively inexpensive additions like providing ASL interpreters?

I offered myself up as a walking billboard in our crowdfunding campaign in order to cover our childcare costs at Open Source Bridge. I asked numerous sponsors if they would be interested in being our childcare sponsor. The lack of enthusiasm compared to our standard sponsorship levels and even compared to sponsoring diversity scholarships was obvious. (Surprise: Even guaranteeing that a company get their logo on one of the most visible people at a given conference isn’t enough to get money for childcare. We managed to cover the cost of childcare, but it was a near thing.)

Apparently the name on the label is very important to sponsors: specifically labeling a sponsorship level as a diversity opportunity gets potential backers excited because they like having their names associated with the word ‘diversity.’

Don’t get me wrong. I’m all for diversity scholarships. They play an important role in making conferences more accessible. But each scholarship only helps one person. The right infrastructure will make tech events, along with the rest of the industry, more accessible to a much larger number. I may be hung up on childcare, but by offering childcare at no additional costs makes a world of difference for people who can afford a ticket to a conference but can’t afford the $100+ cost of a babysitter for a single day . For instance, think about developers whose employers will pay for their ticket and travel but won’t cover any other costs. And when you consider that multiple attendees will face that sort of expense, eliminating the cost of childcare means multiple attendees will find a conference financially accessible.

From a strict business perspective, this is ridiculous. And it’s easy enough to fix, provided tech companies truly want the diversity they keep talking about.

It’s time for tech companies to put their money where their mouths are.

In terms of conference sponsorships, that means funding real accessibility. The bullet points below are my personal wish list for conferences I run, but every conference needs different things:

  • An accessible venue
  • On-site, free childcare
  • Transcription and ASL interpretation
  • Multiple food options, including at snack times (vegan, halal, etc.)
  • Swag other than t-shirts

(Liz Abinante has a more exhaustive list here.)

There are plenty of other opportunities to develop better infrastructure in the tech industry in general, too:

  • Scholarship funds (not just individual scholarships) for code schools
  • Dry (alcohol-free) parties and other events
  • Childcare for meetups and other networking events

Dry events, in particular, would be a welcome addition. There is no doubt that the tech industry has a drinking problem. Even casual meetups often focus as much around a keg as they do around a technical talk. That excludes so many people: folks who have alcohol intolerances, folks who are pregnant, folks who need to drive home, and — perhaps the elephant in the room—folks who struggle with sobriety. An estimated one in 12 people have problems with alcohol abuse; they’re at every meetup, happy hour, conference, or other tech event we go to and have to face the choice of fitting in or taking care of themselves. And yet, many of these events don’t even have an alternative to drinking (asking for water can be difficult). We need not only alternative beverages, but alternative types of events that don’t rely on booze.

Because this sort of infrastructure doesn’t yet exist, many people are shut out of the tech industry. If you can’t go to the next networking happy hour for tech companies in your town — whether you can’t get a sitter, you can’t drink, or for some other reason — your chances of getting a job in the tech industry go way down.

A few people make it in anyhow, by paying what amounts to a tax on being more diverse than the next programmer over: finding a way to pay for whatever tools necessary to cover the cost of fitting in is the only way past those problems. In an ideal world, tech companies should give giant signing bonuses to candidates who improve their diversity numbers, if only to cover those candidates’ costs of getting into the industry in the first place.

The wage gap makes me think that sort of bonus will never happen, so pay for the infrastructure your company needs to recruit these people.

Want an easy way to start putting your money into the infrastructure the tech industry really needs? Cut a check to an organization today. Even $25 makes a difference, so if you benefit from that aforementioned wage gap, consider putting money in personally as well as through a company.

The Family Business Advantage Puts Some Entrepreneurs Ahead of the Game

69122_6581

I started freelancing in high school. Even though I didn’t really know it at the time, I’d started my own business at a time when most of my peers were applying for whatever jobs would work around their school schedules. Some how this experience has translated into an assumption that I know something about how to help younger entrepreneurs get a start.

I’m not really an expert in how to get kids to start their own businesses, but I know that I had a clear advantage: I surrounded by entrepreneurs from the day that I was born. The grand majority of my family run their own businesses. That translated into a very different approach to earning money than most of my friends had. I never automatically assumed that I needed to find a job to put money in my pocket. Part of that approach was a result of a long progressions of helping out with various family businesses as needed. There was always a relative who needed someone to handle a big data entry project or hand out flyers. — which may have lead directly to freelancing as an easy starting point.

One of the biggest advantages I’ve had in life comes from growing up around entrepreneurs. It’s an experience that business school just can’t replicate.

The Advantage of Growing Up in a Family Business

I’ve talked about the situation with other business owners and coming from a family of business owners does seem to normalize the idea of entrepreneurship, at the very least. Ashley Brooks had some seriously similar experiences. She comes from a similarly entrepreneurial background: “My grandpa started his own business and passed it on to two of my uncles; I have an aunt and uncle who own their own print shop; another uncle left his day job to start his own insurance company; and I have an aunt who’s done some freelance editing herself. People in my family just didn’t seem to do well with day jobs, and they were all extremely successful at their own endeavors. I never questioned that I could do it that way too.”

That last bit echoes one of my experiences. After spending enough time with entrepreneurs, especially those who you are related to, it becomes a lot harder to land and hold one of those day jobs that I’ve heard so much about. Part of it is sheer practicality: it’s hard to get results from resumes with big employment gaps or with a work history where your last name matches the sign on the door. But part of it is that, especially these days, it gets a lot harder to accept that you’ve got to do all your work between 9 and 5 or the whole world will fall apart. If I decide to do my work between 10 and 7, nothing truly dramatic is going to happen, but a lot of jobs assume otherwise.

Recognizing that there are options beyond that 9-to-5 grind can be incredibly difficult if you haven’t seen the alternatives in action. I’m a pain, constantly trying to help certain friends strike out on their own, but when I’m the only person who those friends know with a business of her own, I’m far less persuasive. Having people in your circle of friends and family who actually show that there’s not just one way to make a living is almost a necessity for someone who really wants to become an entrepreneur.

The Advantage of Not Having to Explain Yourself

One of the reasons that entrepreneurship is at least a little easier for someone who grew up in a family business or in a family of entrepreneurs is because those family members will generally be supportive of the idea of someone else in the family striking out on her own. Starting a new business is incredibly difficult. Starting one while listening to your family tell you that you’re crazy is much harder.

Only two of my family members have ever questioned my ability to launch my own business. It’s no coincidence that both of those family members have held a succession of day jobs and aren’t entrepreneurs themselves.

Don’t worry, though: I do get plenty of those concerned calls from relatives wanting to check up on particular aspects of how I run my business. My family doesn’t leave me concern-deprived, by any means. But, in addition to that concern, I get a bit of a pass when it comes to prioritizing my work over other parts of my life. Sure, the whole family would love to spend more time together — but most of us are realistic about picking which holidays to celebrate as a clan and which we’re each going to be open for business.

(That isn’t to say, however, that certain people can’t take that permissiveness too far. We all know which member of our family won’t make it to any family get-togethers because he spends 80 hours a week at his business.)

The Advantage of Seeming Perfectly Normal

Going back to those questions I get about how to encourage kids to take a look at entrepreneurship, I’ve got to say that the most important step is to make running your own business seem like the normal thing to do. Otherwise, you’re going to be in a situation where business ownership seems entirely aspirational — something everyone would like to do eventually but that is out of reach right now.

While I don’t have a ton of numbers to back me up, my experiences show that young entrepreneurs usually only emerge when they have friends or family who have also gone into business for themselves. Having a mentor who can provide advice on the nuts and bolts of running a business is part of the reason, but that’s not all of it. Knowing that your uncle, who has gone through four wives and shouldn’t be left alone with a six-pack, can run a business does a lot for making entrepreneurship really seem possible. It may even make starting your own business seem like a complete no-brainer.

In those sorts of circumstances, a kid may start thinking of her own future without quite as many constraints. While I went through quite a few potential career paths (I thought I was going to go to law school for quite a while), I definitely assumed that I would work for myself and wind up at the top of the food chain through most of my plans. Ashley seemed to have a similar experience, despite have somewhat more focused goals: “As for my entrepreneurial family, I guess I’d never realized how much it impacted my outlook on work until I graduated college. I knew I wanted to freelance way before it was the cool thing to do. When I was in 8th grade, I remember knowing that I wanted to be an editor, and I wanted to work from home on my own schedule.”

Family isn’t Everything for Encouraging Entrepreneurship

College tends to screw with an entrepreneur’s plans: while there are plenty of schools that put heavy emphasis on helping students, most schools are very clearly set up to feed students straight into jobs after granting those all-important diplomas. Both Ashley and I spent several months post-graduation applying to jobs that we didn’t particularly care for. Ashley was a lot smarter than I was: “Once I was in college, I adjusted my plan a bit: I assumed I’d work as an in-house editor for a few years to build connections before I struck out on my own. Long story short, that plan changed after I spent four months applying to jobs I wasn’t crazy about, for companies I didn’t care for, in locations that meant a long commute. I was already doing some freelance work, so I said ‘screw it’ and started putting all that extra time into building my business.”

I actually landed one of those jobs I applied for, took it, and then quit after a week and a half. I might have been able to stick out that particular job longer if I hadn’t had some freelance work already coming in, as well as a belief that I actually had to. But it was an awful job, in the way that many jobs immediately after college are, and I had no driving assumptions that the world had to be that way.

In fact, I was working off of assumptions that directly opposed the idea that I had to deal with a job that made me miserable. With freelancing, and even with the odd jobs I’d had both with family members’ businesses and assorted college departments, I’d had a pretty good time. I usually wound up doing work that I enjoyed, with people I enjoyed hanging out with. I’m not about to suggest that you should only do work that you’re passionate about, but I’d like to believe that we should all be able to find work that we either don’t dread every morning or that we get paid more than enough to make worthwhile.

But because I had that sense that I could be doing more, plus some real world business experience from my time in family businesses, and the belief that running a business just wouldn’t be that hard, I went whole hog into working for myself. I see my family background as a major advantage in that respect.

Image by Stock.xchang user Bubbels

The Memory of Money in the Modern Age

11435188454_ac025460e3

 

Deep down, I’m always surprised when I can give someone a dollar and I get something back. Money — paper or plastic — doesn’t really seem like it should be worth anything. We’re all in on this giant unspoken conspiracy to agree that money will continue working and that we can exchange it.

But while we all do a good job of playing along, I spend a fair amount of time thinking about why the concept of money works. I read an interview with economist Neil Wallace that provides a little insight. I’m going to copy a chunk of the interview here (you can read the whole thing here. The TL;DR is that money is memory — a way to track and exchange favors more than anything else, but Neil Wallace says it better. ‘Region’, by the way, refers to The Region, a publication put out by the Federal Reserve Bank of Minneapolis, which published the interview.

Wallace: Now think about Robinson Crusoe, after he meets Friday. They don’t need money, but again, there might be plenty of absence of double coincidences. Now think further. Here we are in the middle of Pennsylvania. There are lots of Amish communities around here. When they’re isolated, the usual story about an Amish community—or an isolated Israeli kibbutz—is that they didn’t use money.

Region: Trust was their currency.

Wallace: Well, that’s a word that Douglas Gale used, but it’s probably not the best word. Think about this Amish community. The vision is, if my barn burns down, then everybody will come and help me rebuild it. In economics, we try to rationalize behavior without altruism, if we’re able to; so what makes that work without altruism? Everybody notices who shows up to help rebuild it.

Region: A sort of credit accounting.

Wallace: Yes. And the guy who doesn’t show up, if he does that repeatedly, will get kicked out eventually. This can work without money because people remember what people have done in the past.

Region: So, money is memory.

Wallace: Yes, “money is memory” is a casual way to state that. Now, that’s a hugely powerful idea that I and other people have been working with.

Cryptocurrencies Are Just Memory, Too

The concept of ‘money is memory’ works surprisingly well when we think about Bitcoin and other cryptocurrencies. Effectively, every Bitcoin has a record of who mined it and who has held it since — not by name, but by an identifier that lets users be sure that a Bitcoin is a genuine piece of spendable currency. The unbroken chain of provenance lets everyone (at least those who use Bitcoins) agree that a particular Bitcoin is real and not fradulent.

That sort of memory of exchange shows, over and over again, that currency really is a series of shifting of obligations on to the next person. With a cryptocurrency that is essentially unbacked, the only way to get value back out of the money that you have somehow earned is to keep it moving.

Dogecoin is a cryptocurrency with a sense of humor. Based on the ‘doge’ meme (where pictures of a Shiba puppy are surrounded by broken English discussing something amazing, usually in Comic Sans), Dogecoin is similar to Bitcoin but worth far less at this point. A small community of users has sprung up, many of whom have started using Dogecoin as a way to tip people who are doing cool things online. On the Dogecoin subreddit, for instance, there’s now a tool to allow you to reward other reddit commenters with Dogecoins when they share something clever or useful.

Perhaps even more so than other currencies, Dogecoin’s use as a way to tip or otherwise acknowledge small bits of awesomeness reflects the real value of money as a way to trade memories. It’s a way to share a memory that is not quite big enough to be worth paying for — building a barn is a big memory, while sharing a witty comment on a link isn’t nearly as momentous. But even those tiny transactions will build up over time: on a site like reddit, a respected contributor has access to an audience. The same holds true for most websites. When someone consistently shares interesting things online, they’re rewarded with attention, which can lead in turn to financial benefits. Dogecoin tips just allow us to track smaller increments of memories.

The Long Memory of the Internet

It’s funny, in a way, that we have this sense of the internet as the elephant that never forgets: sure, technology has an awkward way of ensuring that your high school shenanigans you shared to Facebook will come back and bite you. But we’re talking about tools that are only a few years old — perhaps as old as a few decades if we’re going to include email — and that are already dealing with an overwhelming amount of data.

Yes, our collective memories are all online, including the ones we regret, but we’re already approaching a point where sorting through all the details is getting tough. What happens when Facebook actually has twenty years of your photos, updates, and likes? What about fifty years? Sorting through all that data to pull out value is going to make current big data efforts look rudimentary at best.

But having that data available also going to make the real value of memory clearer — and make sense of ‘money as memory.’ As we do business on a global scale, we need to be able to comparatively value products and services. Most currencies are essentially contextual: we know the local currency’s value within our day to day activities, but we can’t really guess what another country’s currency is really worth (and the whole idea that people get rich off of trading currencies can be downright scary). But with a shared currency, we can make financial decisions we trust on a global scale. We can trade the memory of painting a house in the U.S. into the memory of a meal in Argentina into the memory of writing software in Thailand.

Cryptocurrencies Aren’t Ready Just Yet

While I am enthusiastic about the concept of digital currencies, I haven’t jumped in — I’m certainly not one of those devotees who have committed themselves to using nothing but Bitcoin! That’s because Bitcoin, and other cryptocurrencies to a lesser extent, aren’t yet stable enough to truly act as a useful global currency. Over the course of 2013, a Bitcoin’s value had two zeroes tacked on to the end, going from $13.50 to well over $1000.

That sort of extreme variation makes it impossible to use Bitcoin in day-to-day business. Even if there were business owners willing to rely on Bitcoin (rather than to accept it as something of a novelty act), the fluctuations have led many users of the cryptocurrency to hoard their money, with the expectation that the value can only continue to increase. We’re essentially in the middle of a Bitcoin bubble — sooner or later, the whole thing is going to fall apart.

And that’s okay. Consider this a first go at the cryptocurrency learning curve. The first recorded fiat currency (currency backed by a government but not pegged to gold or silver) was in 11th century China. The situation fell apart pretty quickly, with the government printing more money and causing inflation. It took a couple of tries for fiat currency to work out. It’s going to take a couple of attempts for cryptocurrencies to work out the kinks. But in the long-term, there’s an incredible potential for the effectiveness of the concept of a digital currency.

Image by Flickr user dilettantiquity