I ran a conference. It went better than last time.
talks
I didn't have a call for talks this time. I instead spent a lot of time cold-emailing speakers who I thought would have something interesting to say.
I contacted 51 people, of which:
- 31 said yes
- 1 said maybe
- 8 said no
- 11 did not reply (which is a totally fair response to a cold email)
32 talks seemed like plenty. But no plan survives contact with entropy:
- 6 speakers (one of whom was a maybe) bowed out right before the deadline
- 12 speakers submitted their talks on time
- 14 speakers were late
- 2 speakers finished their talk the day before the conference
- 1 speaker finished their talk the day after the conference
- 3 extra speakers volunteered to fill gaps in the last week
I'm not sure what I could change here. If I was strict about the deadline then there wouldn't have been much of a program. But letting everything drag on until the last minute was stressful, it wasn't fair on the speakers who did work hard to deliver their talk on time, and it also made the rest of the infrastructure work harder because I couldn't batch any of the tasks - I kept having to incrementally add and remove talks and shuffle things around.
I made an info page for speakers with advice on encodings etc and a link to a google form to submit their videos. Some of the speakers read that page, but mostly I had to go through a few rounds of emails to get the information and fill in the form myself.
lightning talks
I also put up a call for lightning talks. Since I don't have space constraints I committed to accepting all submissions as long as they were on-topic and not just a blatant ad for some product (non-blatant ads were acceptable, they just had to have something to offer in addition to the ad).
In the end I:
- accepted 10 talks
- rejected 1 talk that was just a scrolling readme of a project
- asked 1 talk to fix a weird technical issue, but they didn't have time
marketing
Last time many people said they would have loved to have attended if they had heard about it, so I put more effort into spreading the word this time.
I made accounts on bluesky, mastodon, and twitter, and also a buttondown newsletter, all of which regularly shared updates on the program and occasionally related blog posts.
I have no idea how much impact any of that had. What I do know is that writing the same posts across 4 different platforms without any tools is tedious. If I did it again I'd probably post way less, and only in the week or two before the conference when people are more likely to act.
I also ran into constant twitter bugs eg posting a dozen copies of the same post, posts disappearing after posting, the editing box becoming unselectable.
tickets
I sold tickets using stripe payment links. The conference was pay-what-you-want with a suggested price of $64. Last time I had to implement that by making multiple payment links at different prices, but now stripe supports pay-what-you-want directly (the docs say that they don't, but the docs are wrong).
I sold 481 tickets at a variety of prices:
- $0.35 => 9
- $1.0 => 37
- $2.0 => 1
- $3.0 => 1
- $4.0 => 1
- $5.0 => 20
- $6.0 => 3
- $6.4 => 1
- $8.0 => 5
- $9.0 => 1
- $10.0 => 48
- $13.37 => 1
- $14.0 => 1
- $15.0 => 6
- $16.0 => 9
- $20.0 => 16
- $22.0 => 1
- $25.0 => 4
- $28.0 => 1
- $30.0 => 6
- $32.0 => 22
- $35.0 => 1
- $38.0 => 1
- $40.0 => 4
- $45.0 => 1
- $47.0 => 1
- $48.0 => 2
- $50.0 => 6
- $64.0 => 269
- $80.0 => 1
- $100.0 => 1
That comes to a total of 20,434 usd, or 28,941 cad because stripe will only allow paying out the balance in my home currency, and at a fairly poor conversion rate too.
That's less tickets and less revenue than last time. I'm not sure what to blame that on. Were the talks less appealing? Did I do a worse job of advertising? Is everyone too busy doom-scrolling to go to conferences?
Expenses were similar to last time:
- zulip: -1449 cad
- stripe: -1288 cad
- bunny: -145 cad
- gst (on canadian tickets): -123 cad
- descript: -100 cad
- google drive: -30 cad
- namecheap: -27 cad
- buttondown: -26 cad
- zoom (for interview recording): -24 cad
Labor was the main cost. I probably averaged 10 hours per week over 4 months. The mental overhead was pretty high too - I didn't get much else done in that time because my head was full of conference.
Last time I delivered tickets via email, most of which was black-holed and didn't even arrive in spam folders, leading to me having to help 100s of people login at the start of the conference. This time I didn't bother with email at all and redirected directly from the payment link to a chat invite link. I only had to help 13 people login this time - a huge improvement.
video
I transcribed everything on descript. The ai transcription is pretty good as a first pass and then I'd spend 20-30 minutes per talk correcting the errors. The ui is nice in theory, but in practice I ran into a lot of annoying bugs (eg sometimes scrolling to the top of the transcript when I hit pause, sometimes starting from the wrong location when I hit play, sometimes being confused about how long the video is after I've sped it up). It also seems like they hardcode some behaviour on top of the transcription layer itself, so eg the ai would transcribe www.foo.com
and the ui would 'correct' it to www. Foo. Com
.
Favorite mistranscriptions:
- goroutine -> goating
- DuckDB -> DougDB
- randomly capitalizing english nouns when spoken in german accents
I hosted the videos and the captions (exported from descript) on the bunny cdn. It's substantially cheaper than the competition. Also sometimes less reliable, but with the descript-hosted videos as backup I was ok with that. In the event I didn't see anyone mention problems so I probably got away with it.
I did get many complaints about audio quality though. Some of that was on the recording end, which I could maybe have improved by running a denoising pass in descript. But the volume of the talks also varied wildly on bunny, and not on descript. It seems like it varied depending on what encoding the recording used, so maybe I could have avoided it by exporting all the videos from descript rather than uploading the originals?
chat
The whole conference ran out of zulip. I made channels for announcements, hallway chat, jobs etc, and then one channel per talk.
I generated a script in advance so I could just copy-paste announcements every 30 minutes:
Zulip has a free tier where you're on your own and several monthly-fee-per-user tiers that offer support. I wasn't sure how many attendees would pay less than the zulip fee for their tickets, so I contacted zulip and we agreed to just pay $1000 flat fee for support.
Feedback on zulip after the conference was mostly positive. I got way fewer complains than I did about matrix last time, and most of the complaints were about the firehose nature of the conversation:
- I should have named the talk channels by timeslot so that they sort nicely (I actually planned to do this, but was distracted by all the late-arriving talks).
- People found it hard to keep track of conversations. We found the inbox 'followed topics' view right at the end, which would have helped.
- Some people found it hard to pick topic names. The less popular talks mostly ended up using
general chat
. The really busy talks ended up with many topics, but often because the speakers were moving messages to keep track of what they had answered already.
live
The conference itself mostly went smootly.
Zulip had one hiccup early on in the day. Support fixed it quickly and most people didn't notice. Everything after that was smooth.
I had spent time learning how to use all the moderation tools but ended up not needing them. My wife joined at the start in case I needed help with email support or moderation, but it was pretty quiet so she went home.
The only big issue was that many of the speakers didn't show up to their own Q&A. I should have sent regular reminders during the few weeks beforehand, but I was too tunnel-visioned on getting all the talks in. Most of the speakers showed up eventually after some frantic messaging, but four speakers never showed up or even replied at all, just totally ghosted.
The chat was way busier than I've seen at other online conferences, which made me very happy:
I can't get hourly graphs, but it definitely felt like it started strong and then tailed off after the first 3-4 hours as people got tired. I probably should have made the lunch break an actual break rather than filling it with lightning talks.
The median talk has ~100 views which means that most people only watched a fraction of the talks. The total views are much higher, but only because a few talks were really popular after the conference.
It looks like people mostly watched the bunny videos. The only descript videos with lots of views are the two that had weirdly low volume on bunny.
next?
I mostly think of the point of an online conference as solving a coordination problem. To the speakers I can say "if you make a 10 minute video, I guarantee 100s of people will watch it". To the attendees I can say "if you take a day off I can fill your day with well-curated talks on topics you might not have known to look for". And then it gets everyone together in a discussion with relatively high quality (eg vs posting a talk on hacker news).
From the feedback I got afterwards it seems like people mostly enjoyed it, and mostly just wanted it to be a bit better signposted (eg send out an email explaining how things are going to work, and give some tips on how to best use zulip).
So it feels like >0 usefulness, but I'm definitely not sold that it's obviously the most useful thing I could be doing, or even the best way to solve the coordination problem. I'm not sure if I'll do another. If I do it probably won't be quite the same thing.
Eg one idea I had to reduce the stress was to make it a rolling event every 3 months (say). If some talks arrive after the deadline, they can just go in the next quarter. If I ran it like that I probably wouldn't bother with tickets either, just run it for free and find ways to spread out the labor.