by Daniel Phillips


Recently, a number of teams at work have started to make use of Docker. To improve our Docker knowledge across the company, we organised a Code Jam. We’ve run a number of these events in the past and, after some experimentation, we’ve settled on a format that seems to work well for us.

Code Jam?

For us, a Code Jam is a day of experimentation centred around a new tool or technology to gain some familiarity with it. It’s also an opportunity for our teams to work with others outside of their usual groups and get to know each other a little better. The primary focus of the day is learning: the only outcome we expect from attendees is a short talk from their group at the end of the day to present key things that were learned.

The format

A Code Jam is a whole day event that takes place during the working day. Attendees put their regular project work to the side and focus entirely on the jam. Sometimes project deadlines make attendance difficult, but where possible we try to make adjustments and pick a date to ensure as many people as possible can participate.

Choosing a topic

We decide on a topic at least a few weeks in advance of the jam. This gives us time to adequately prepare and also figure out a good time to hold the event. Topics can be as broad as “experiment with technology X” to something much more specific like “build a WarioWare-style minigame using XNA”.

The topic you select affects the amount of preparation you’ll need to do as an organiser. Some topics might require you to build a framework or a number of ‘starter kits’ for attendees to work from to limit scope or reduce the barrier to entry. More general topics allow you to refer attendees to existing tutorial material online.

Topic selection also plays a big part in the success of the jam. We normally don’t require much prep or background reading before attending. This requires the event to be based around a topic that isn’t too big of a departure from what teams are familiar with, or something with a small enough scope that the basics can be learned in a day. Previously, we ran a Code Jam based around classification of images using machine learning, but many attendees weren’t that familiar with the domain and there was simply too much to take in. More adventurous Code Jams are feasible, but you’ll need to do more work to ensure attendees have the background knowledge they need to avoid feeling overwhelmed.

For our last Code Jam, we simply picked Docker as a topic. This worked well for us: it’s quick to pick up the basics, and it was sufficiently open-ended to allow experimentation at a variety of experience levels.

Preparation before the day

Before the Code Jam, there are a number of things that we do to ensure that everything runs smoothly on the day.

  1. Create a Slack channel for attendees to join. This provides a place for discussion during the day and also to ask for help.
  2. Find assistants to help with running the event. These should be people who are reasonably familiar with the topic that you’ve chosen. They won’t be participating directly, but they’ll be available to help out anyone who needs help on the day. Assistants can also help with the preparation of introductory materials.
  3. Write out setup instructions. For our recent Docker Code Jam, we wanted everyone who was attending to install Docker before the event to ensure everyone was ready to start participating instead of debugging install problems.
  4. Send out an invite. Explain the topic in the invite and what preparation attendees need to do before the event.

Schedule on the day

9am: Introductory presentation

To start the day, we normally provide coffee and pastries, then start our introductory presentation at 9:15am. During the presentation, we cover the following:

  • Review the format of the day
  • Introduce the assistants
  • A brief introduction to the topic
    • In the case of the Docker Code Jam: we gave a very basic introduction to Docker, presented some examples of how we were already using it in the company and also provided some examples of what could be accomplished with it.
  • Mention the Slack channel
    • Not everyone in the company was familiar with Slack, so we gave a 2 minute crash course as part of the presentation.

10am: Start the day

After the presentation, we ask all attendees to pair up for the day. We’re not particularly strict about this: it’s fine to form a three, for example, but we try to encourage people who don’t normally work together to form a group. After groups have been formed, the group goes to work together and explore the topic.

12:30pm: Lunch

Halfway through the day, we stop for lunch. This gives us an opportunity to bring everyone together again to discuss what they’ve found out and also share ideas. If you can, provide lunch to encourage all attendees to get back together.

4pm: Wrap-up presentations

Bring everyone together for a wrap-up presentation to end the day. Each group should give a short presentation to show what they learned, what worked and what didn’t work so well. The format of this is completely up to the group: it could range from a brief talk to a demo of what was made. Try to keep this segment no longer than an hour: this might only give teams only a few minutes to present, but will avoid the session dragging on.

5pm: Social event

Finish with a social event immediately after the Code Jam. We normally head to the pub for a post-jam drink, but feel free to pick something else that you think will be appropriate for your teams. This gives attendees the opportunity to continue discussions and serves as a way to strengthen the relationships that were built during the day.