virtualizing a hackathon at ScalaMatsuri 2020

in

Here's a report of running a virtual hackathon at ScalaMatsuri Day 2 Unconference. Someone proposed it for the Unconference, and I volunteered to be a facilitator on the day, so I went in without preparation. I booked the time originally for 4h (noon - 4pm JST, 11pm - 3am EDT) but it was successful so it got extended after some coffee break.

One thing I emphasize is The Law of Two Feet:

If at any time you find yourself in any situation where you are neither learning nor contributing: use your two feet and go someplace else

It's an online Unconference with multiple sessions going on, so I've stated up front that people should feel free to drop in and out of Hackathon and check out other talks, or come in later and code.

what we used

  • Zoom Meeting
  • Discord
  • Google Docs

Main communication was done using Zoom Meeting that ScalaMatsuri created. This allowed different participants to share their screen or ask questions. One potential drawback is that everyone can hear everything, so it wouldn't work well if multiple groups tried to pair program.

Text-based communication was done using Discord. Discord was used to share links or for asking questions. We didn't use it, a potential use of Discord can be for split-up room per project since it can share screen in a voice channel.

A Google Doc was created for listing projects, GitHub issues, and for signing up to the issues to work on.

work flow

  • Ask around to see if there are any project maintainers who could be a mentor.
  • Project maintainers list good first GitHub issues people can work on the Google doc, and give quick summary of the issue over Zoom.
  • Participants can sign up to an issue by placing their name(s) next to it.
  • Project maintainers give tutorial on to get unit tests and intergration tests going (partest for scala/scala, scripted for sbt/sbt etc)
  • Project maintainers can also list more challenging work task and code together.
  • Repeat the process as people come in and out.
  • Mute and hack.
  • Facilitator occasionally ping people to see if they have things to work on.
  • When someone completes a task either successfully or unsuccessfully, they present a quick overview of what they did on Zoom. (This could be pushed to the end of the day if there are many participants)

scala/scala

People were interested in contributing to scala/scala where Scala compiler and standard library is hosted. I also gave a fair warning that it's not uncommon for scala/scala pull request to sit around for several months especially when it's not a clear-cut bug fix.

Funnily the first issue that got assigned was a regression introduced by another participant @exoego, so he mentored Shibuya-san to the fix.

Some useful links:
- https://github.com/scala/scala/blob/2.13.x/CONTRIBUTING.md#junit
- https://github.com/scala/scala/blob/2.13.x/CONTRIBUTING.md#partest
- https://docs.scala-lang.org/overviews/reflection/symbols-trees-types.html

sbt

For any projects, it's actually hard to come up with a good first issue. Some could be too easy. Others could look easy but not possible to fix in a day. For sbt, I suggested fixes for recent sbt 1.4.0 features.

sbt-gpg

Airframe

The maintainer Taro Saito (@xerial) dropped in and asked if someone could bump up Scalafmt version manually since Scala Steward doesn't run the scalafmt after the update.

Scala Steward

TATSUNO Yasuhiro (@exoego) tackled the root cause and decided to change the Scala Steward itself.

summary

Some of the work might require some follow up work after the code is reviewed, but we managed to send around 12 pull requests, which I think is great. This is certainly more than one person could have coded in a day. In that sense, doing these Hackathon event is a huge force multiplier if you could pick up some issues get a group of people.

Through the context of talking about GitHub issues and coding, I had so much fun spending quality time with Scala programmers whom I've now known for years, and also meet new people. Thanks to all the participants, because it wouldn't have worked if you didn't show up and code :)