Last Friday, I participated in my first ever Hackathon. It was the second such event sponsored by my employer. The event was held from noon to midnight and attended by approximately 13 developers from various geographical locations.
Two of us participated from the Canadian office and partnered on a small feature. Others connected via VPN (Virtual Private Network) while a small core group ran a tight ship in the bowels of our main development centre* in central US.
First, a bit of background information. My company creates and sells assessment software for use in kindergarten to grade 12 schools with a focus on math and reading comprehension. Students are encouraged to take quizzes to validate their understanding of curriculum concepts. Teachers can then report on results and identify which concepts need to be taught more in-depth or which students require more assistance.
The challenge for this Hackathon? Given an event notification that a student has started or completed a quiz, what useful subsidiary steps could we take? My partner and I chose to code a book recommendation engine. When Student A clicks to start a quiz, our engine would get notified with information about the book such as its author, reading difficulty level, number of words, and whether the book was fiction or non-fiction. Given that information, our engine would search a library of available books to find three titles Student A might like to read next.
Books by the same author would be favoured*. So would books of the same type (fiction or non-fiction) as well as books of approximately the same length since we figured a child who’s just completed an early reader is unlikely to be ready to tackle a heavy tome.
Once Student A completes the quiz, a notification is received with the quiz results. If the student performed well on this quiz, our engine would recommend books that were slightly more difficult than the one just read. If, however, the student struggled, it would take that into consideration and recommend books that were slightly easier. Our goal was not to discourage a reader by recommending something too difficult.
The engine would then send an email to Student A’s parents to inform them that their child has just taken a quiz and here are three books we recommend they read next.
Another team chose to sent notification to Twitter whenever a child passed a quiz while yet another chose to create a live heat map that would show where quizzes are being taken in the last few minutes. The solutions were all very different from one another and used a wide variety of available technologies.
This project was a lot of fun to do though, naturally, it was built on a slew of assumptions that would not hold in real-life. For example, that library of books to search through for books to recommend? We made it up. We have that information in the software somewhere but it would have taken too long to make it available for our purposes given that only had 12 hours to work with.
We also made the simplifying assumption that only one quiz was being taken at a time and that the quiz would be started and ended reliably. Limitations that can’t work in real life but make it possible to build a simple prototype which was all we were hoping to produce.
Will we ever implement this kind of functionality in our product? Who can tell? But I sure had fun coding it and I’m already looking forward to the next Hackathon!
* These are not spelling mistakes. I am Canadian! 😉