What happens at a hackathon?

Author: Piers Cawley. Link to original: http://www.h-online.com/open/features/112997 (English).
Tags: coworking, hacking, open source, Programming Submitted by kkapp 10.04.2009. Public material.
Last weekend, the Birmingham Perl Mongers group hosted and was main financial sponsor of the 2009 QA Hackathon, which was held at the Birmingham City Inn. Key developers in the Perl Quality Assurance world flew in from as far afield as Sydney, Portland, OR and Birmingham itself to spend 3 days hacking on all aspects of the Perl and CPAN toolchain. If the hackathon proved anything, it's that while Internet time is fast, face time is faster.

Translations of this material:

into Russian: Что такое хакатон?. Translation complete.
Submitted for translation by kkapp 10.04.2009 Published 1 year, 10 months ago.

Text

Last weekend, the Birmingham Perl Mongers[1] group hosted and was main financial sponsor of the 2009 QA Hackathon[2], which was held at the Birmingham City Inn. Key developers in the Perl Quality Assurance world flew in from as far afield as Sydney, Portland, OR and Birmingham itself to spend 3 days hacking on all aspects of the Perl and CPAN toolchain. If the hackathon proved anything, it's that while Internet time is fast, face time is faster.

(картинка)

Don't underestimate a room full of hackers with a short deadline.

It is easy to forget that open source development, with its massively distributed, continent-spanning teams is just people writing software to solve their own problems.

Winning on aggregate

Take Curtis Poe, for example. If you check out his author directory on CPAN[3], you'll find a varied collection of software, from jeux d'esprits like Acme::Code::Police[4] to more useful work like Test::Aggregate[5]. Before the hackathon, Curtis was working with a test suite which ran thousands of individual tests. Without Test::Aggregate, they took 52 minutes to run. After Test::Aggregate, they took 11 minutes. So, Test::Aggregate is a huge win. However, it could be better. Because of the nature of the Test Anything Protocol (TAP), the text based heart of the Perl QA toolchain, it was hard for the tools to spot when test scripts had halted suddenly.

Nesting TAP streams?

Adrian Howard had a similar problem. Adrian maintains Test::Class[6], which puts an xUnit[7] face on the Perl testing libraries. There's a bit of cognitive dissonance between a pure xUnit approach to testing and the way Test::Class works. If it were possible to nest one TAP stream inside another, then Test::Class could present its results in a way that would make more sense. Nestable TAP would help solve Curtis's problems with Test::Aggregate as well.

(картинка)

Michael G Schwern reporting on Test::Builder2 progress.

Michael Schwern is the maintainer of the Test::Builder[8] TAP producer library. Unlike Curtis and Adrian, Schwern doesn't have a direct need for nested TAP, but Test::Builder will need changing to support it.

Andy Armstrong maintains Test::Harness[9] and 'prove'. These are the tools which most Perl users use to handle running their tests, summarising them, and sanity checking installations as part of the CPAN installation process. Andy likes the idea of nested TAP, but it's vital that any proposals for it be backward compatible and sanely parseable.

Nested TAP is a long standing and annoying problem - a loose thread that people have been meaning to sort out for ages. It's annoying because it affects so many people. There were four immediate stakeholders at the hackathon, never mind all those who simply use CPAN to install the modules they need to get their job done.

By lunchtime on the Saturday of the Hackathon, Curtis had pretty much cracked it. He'd forked Test::Builder on Github, implemented his idea and walked his laptop back and forth between Schwern, Adrian, Andy and me a few times for sanity checking before incorporating our suggestions and pushing the changes to Github. By the end of the day, those changes had made it into Schwern's developer release of Test::Builder and Adrian Howard was grinning from ear to ear as he ripped out chunks of code from Test::Class before turning his attention to other annoyances with the library. By the end of the weekend, Andy was a good way along the road to having proper support (different from simply 'not breaking') for nested TAP implemented in Test::Harness.

Productivity boost

That's the great thing about a hackathon. When you have the right people in the room, productivity shoots up. I arrived on the Saturday morning after 4 hours of sleep and a long drive from Gateshead, but the atmosphere in around the place was so positive and focused that it was easy to simply pull out my laptop, hook up to some power and get straight to work. I didn't even say hello to everyone until we broke for lunch.

(картинка)

Jos Boumans (left) in discussion with David Golden.

David Golden told me that "one of the brilliant things about the hackathon is that there's just enough time to do one or two things and it makes you really focus." He and Ricardo Signes did a fabulous job of welding a team together to work on Metabase, which is intended to replace the NNTP server at the heart of the CPAN Testers[10] collaborative CPAN integration testing cloud. There's a whole academic paper to be written on how to get a team welded together and doing good work in the space of three days. The key ingredients appear to be good people, proximity, trust and, surprisingly the three day limit. In the time they had available, the Metabase team went from seven people, only two of whom really knew what the Metabase was, to a coherent team who had produced something that, while not _finished_, has all the core components designed for real world use by CPAN Testers. David reckons he's about half an ideal day away from having the whole stack running locally and a few months away from smoke testing with the kind of load the real CPAN testers see every day.

TAP & Metabase not the only projects

(картинка)

Ricardo Signes sorting out the Metabase design.

Obviously, nested TAP and the Metabase weren't the only projects of the weekend.

Michael Peters spent the weekend ripping his custom installation and upgrade toolchain out of the Smolder[11] continuous integration reporting server. He pushed out the first CPAN releases of that application on the Monday of the hackathon.

Jon "JJ" Allen released Perldoc::Server[12], a version of the code that runs perldoc.perl.org[13]. Install and run it and it serves up the documentation for all the Perl modules on your system.

Antonia Mayer worked on a draft TAP specification as part of the effort to turn it into an IETF standard.

When he wasn't involved in the details of nested TAP support, Schwern worked with Colin Newell on Test::Builder2, a new, easier to use version of Test::Builder[14].

Others took advantage of the presence of almost all of the toolchain team to sort out the last few details of things like MYMETA.yml and the 'configure_requires' key. Plumbing is boring, but if you don't get it right you end up with sewage everywhere.

I spent the weekend hacking on a fork of Evgeny Zislis[15]'s p5-cucumber[16], a Perl port of the Cucumber[17] literate integration testing framework. I also released my first CPAN module in 6 years.

There's something about a hackathon

(картинка)

Even the Tea and Coffee sign was hacked.

What is it about a hackathon that encourages this kind of productivity? The recipe seems to be "Choose an area of endeavour. Fill a smallish conference room with a couple of dozen decent and interested programmers. Make sure that the key people in the field are there - pay their travel expenses if necessary. Run a short progress report each morning encouraging everyone to outline what they've achieved and what they plan to do for the rest of the day. Keep them fed, watered and caffeinated for three days. Have a final progress report on the last day and then repair to the pub. You'll be amazed what gets done." Nothing to it. The people who are there are already motivated to take full advantage of the high quality time that comes from being in close proximity to everyone else.

It's simple really. Good people + proximity + sharp focus + trust = amazing results.

URL of this article:

http://www.h-online.com/open/features/112997

Links in this article:

[1] http://birmingham.pm.org/

[2] http://www.qa-hackathon.org/

[3] http://search.cpan.org/~OVID

[4] http://search.cpan.org/~OVID/Acme-Code-Police-2.18281/lib/Acme/Code/Police.pm

[5] http://search.cpan.org/dist/Test-Aggregate

[6] http://search.cpan.org/dist/Test-Class

[7] http://wikipedia.org/wiki/XUnit

[8] http://search.cpan.org/dist/Test-Simple/lib/Test/Builder.pm

[9] http://search.cpan.org/dist/Test-Harness

[10] http://testers.cpan.org

[11] http://search.cpan.org/dist/Smolder

[12] http://search.cpan.org/dist/Perldoc-Server

[13] http://perldoc.perl.org

[14] http://github.com/schwern/test-more/tree/Test-Builder2

[15] http://blog.kesor.net/

[16] http://github.com/pdcawley/p5-cucumber

[17] http://cukes.info