Friday, April 6, 2012

Best Training Ever: Internal Drupal Hackathon at Goodwin College

I just wrapped up a week-long training with my development team today and this was the best training ever: we eschewed the traditional bring-in-the-expert-to-drone-over-some-powerpoint model and styled our week-long training as a hackathon instead.

There were six developers from my team and two from another department all looking to learn how to use Drupal for different projects. These are real projects with real (internal) customers and we all thought that Drupal might be the right tool for the job, but none of us knew how to use it very well. Some of us had played around with it, but some of us hadn't. For one person it was their first time working with a cms. For me it was my second time getting my hands on a drupal instance.

We didn't know how to develop for it as a platform and we didn't know how to install and configure it so that it would be a reliable and secure content management system for our customers. We didn't know how we would set up our dev, test and production workflows, and we just plain didn't know where to begin wading through the sea of modules to find the right tools for our specific needs. Our boss hired an outside consultant to join us for the week to either teach us or work along side us for the week, whatever we needed. We really lucked out getting Tim Plunkett from Zivtech--this guy is an active contributor to many of the Drupal modules that we ended up needing. He knows his stuff and he was excellent at not only teaching us what we needed to know but also teaching us how to find answers when it comes to Drupal and its many modules.

Why was it so awesome?


I have never, ever, learned so much in such a short period of time. It was so efficient. I felt like I was in flow most of the time. I felt that rare electric feeling like the whole room was in flow, like we have never been as a group.

Learn by doing--it's how I learn best; it's how a lot of us learn best. Even better was that because we were all learning different things at different times I had opportunities not only to learn but to teach what I just learned to someone else. This cemented my learning, in a matter of hours, not weeks. On that note, I am sure, SURE, that what I accomplished on the second day would have taken me at least two weeks on my own. That feels amazing.

Here's how it worked


For the most part it was one (or more) project per person, but I was actually on a team with one other developer because our project has a deadline of April 16th (just over a week after the hackathon--ambitious!).

Here were some of our projects:
  • Porting of some static html to CMS with theming (this was mine--with the short deadline), laying groundwork for future massive site migration in to CMS
  • Porting a wiki-based site to Drupal to take advantage of better add-on functionality
  • Q&A site for teachers (replacing existing software)
  • Faceted search/browse prototype for a customer with a ton of diverse but related content
  • Hardware inventory/maintenance history logging system for sysadmins
  • Massive open online course platform
  • Site for alum-teachers to share videos and other resources with each other

Ahead of time

Ahead of time we set up a wiki page to keep track of the projects and all of the Drupal questions we had going in to the week. I set up a rough agenda that basically said on the first day we each talk about what we are going to do during the week, then each day we work and stop in the middle to check in (or show and tell) and then on the last day we have final presentations. That's it. I wanted to keep it simple and informal so that we could get as much done as possible. We got some budget to buy snacks and pizza for the week and I found us a room that we could use each day for a whole week (surprisingly difficult!). My colleagues and I agreed that it was important that we get away from our desks if we were going to be able to really focus on learning and getting deep in to Drupal quickly.

The week before I sketched out a layout for the room, a rectangle of tables, with enough room so that the consultant or other people could hop in between people. We sent out invites to our internal customers, asking them to stop by for a check in or to give us some feedback. The Friday before my colleagues helped to set up the room, with my colleague Amir making sure that we had things like an ethernet switch, lots of ethernet cables and power strips and even laptop locks. We checked on things like spare monitors, mice and keyboards, which were conveniently around the corner in the main IT office if we wanted to borrow them.

We checked in with Tim, our consultant, to pick up some best practices for getting our dev environments ready. He suggested things like setting up a space in source control for each project and having php, drupal and drush installed and in the right versions.

The hackathon week began

Once we were all there and we got past the initial introductions and started working it was like magic. I was never stuck, wrestling with a bug or a mystery. Either Tim had the answer, or could find the answer or one of my colleagues had it. When enough of us wanted to see something Tim would do a demo for the group and then we would get back to work. People would bounce around the room from time to time, sharing things they had learned and asking questions. We worked like crazy all day and I never had that feeling in the afternoon like I needed a nap--I was actually energized at the end of the day. (I am exhausted now, but it's a great exhaustion, like after an amazing long run.)

We did check-ins each afternoon, except Wednesday we did a mid-week show and tell just to share what we had learned and accomplished so far. This helped us identify people who had already done the things we needed to figure out how to do. I wrote the first module on Tuesday. Well, it was mostly Tim telling me exactly the words to type and what files to create, but it was a very effective tutorial on module building and a first glimpse for me in to some of the APIs and how Drupal works. On Thursday I learned features and had packaged up my work from the first half of the week in to a feature that could be checked in and pushed out to the other development instances.

About mid-week we realized that a lot of our projects were for different parts the same internal customer's (massive) website and so they should actually live in one big Drupal instance. That required a new project, which was the multi-project multi-developer infrastructure and workflow project. Prior to that we had all been playing in our own sandboxes. By the end of the week we had a solution figured out and the development layer set up so that we could develop features and push them out to each other and keep our development instances in sync. Amir even had a prototype of a staging instance and a workflow for deploying up from development with a plan for how that would work for production too.

In the end we covered just about everything that we had hoped to cover and in a lot more depth than I had imagined possible. We made real progress on real projects and we know a lot of how to do what we have left. Plus, we have learned how to figure out the rest.

So what's next?

At the very end of the event I led the team in a retrospective and almost everyone mentioned that we should do this again. There are a few things that we might do differently, like nail down or narrow down our goals to get even deeper and further along on fewer things or set up a better way to organize common questions and answers that have come up so that we can more efficiently share the knowledge we have gained between us. On the whole everyone loved it and we hope we get to do this again and again and again.

My question is why can't every week be like this at work? Is your work like this?