Kati Michel recently shared this article highlighting how the Treasurer of Python New Zealand stole money from the organization over several years.

I was the Treasurer of the Django Software Foundation for three years (2020-2022), so I wanted to provide an inside opinion on all this.

First of all, it’s important to understand that theft like this happens ALL THE TIME, especially in small government, churches, schools, nonprofits, etc., where a small group of volunteers is often in charge of quite a lot of money. As in the case here, generally, the Treasurer has some personal troubles that lead them to start taking a small amount and then more and more from the organization.

There is a lot of trust placed in the hands of a Treasurer and it takes additional work to build in controls to ensure theft like this can’t occur. When I joined the DSF, there were several Treasurers before me, but the job was far too much work to expect for a volunteer. It required multiple hours a week.

At the time, the DSF had a Bank of America account, used Xero as internal accounting software, accepted donations, paid out the Fellows salaries, supported conferences, the Malcolm Tredinnick award, coordinated with JetBrains on their annual sponsorship, and covered the ops team budget for maintaining the various Django websites. The Treasurer was also involved in filing annual paperwork to maintain the DSF’s 501(c)(3) status as a nonprofit, which required having an accounting firm look over the books and verify them.

The overall job of the DSF Treasurer is to perform all these duties. It’s worth mentioning that sending money overseas is a big hassle, yet often, the DSF does so to pay Fellows or send grants to conferences. It’s way more than a volunteer can manage.

Catherine Holmes, who at the time was working for RevSys with the DSF President, Frank Wiles, had been helping the Treasurers with all of these demands. It is fortunate that, among other skills, she has an undergraduate degree in accounting! But when I joined, RevSys was paying her salary; there was nothing official with the DSF. She worked several hours a month for the DSF, but we needed more.

It quickly became clear that we needed several changes to make the DSF Treasurer role work better:

  • Catherine needed to be paid for her work since she was already unofficially helping and handling all the Treasurer duties was far more than I could manage as a volunteer.
  • Consolidating all communication into a [email protected] email address took several years, rather than using individual DSF email addresses.
  • We created an internal Spreadsheet with monthly and annual updates on all DSF expenses and incomes. This spreadsheet was shared with all DSF Board Members at each meeting and covered any changes in the balance sheet.
  • We needed some controls in place. Catherine and I both independently reviewed all the numbers; one of us updated the spreadsheet, and the other verified it.

This last point is the most important. Accounting may seem black and white from the outside, but in the real world, you are dealing with expected donations that have not yet arrived, immediate bills, trying to plan for the future, and so on. There’s a lot of nuance involved, and it’s easy to make a simple mistake if it’s just you. It’s also easy to cover up things if it’s just you and no one else is paying close attention.

Handling finances anywhere requires a lot of time, focus, and expertise. I have an MBA and have worked in small businesses before, which meant I was familiar with budgets, spreadsheets, and all the rest. Most programmers don’t have this background or interest.

The accounting firm the DSF uses to verify our books doesn’t double-check that we did everything correctly. They look at the information we provide and confirm that it all adds up. The onus is on the organization itself—namely the Treasurer—to be accurate and factual with everything.

When I left the DSF in 2022, Peter Baumgartner took over. He has been running his own firm, Lincoln Loop, for years and understands how to do accounting. One of the first steps he took as the new Treasurer was to move the DSF’s checking account balance–at the time almost $200,000–into a high-yield savings account, which resulted in several thousand additional dollars a year for the DSF. He also skillfully picked up from where I left off and worked with Catherine to make sure everything operated smoothly.

I’ve long wanted to write about the Treasurer role at the DSF, and seeing this article gave me the push to do it. I hope this post sheds some light on the role, makes it clear why fraud can so easily happen, and also sends some appreciation to Catherine Holmes, who is the unsung hero of Django and the Django Software Foundation.