Intlock Hackathon

Last week we had our first hackathon. We took the entire company – Product and Development Teams – to the desert for a two-and-a-half day coding session. Except for a few team members who couldn’t join us (mainly from our Boston office), almost all the Intlock technology guys were in one place – for the first time in a very long time. And without phones, emails, business sessions, conferences or any other distraction. It was just us for 50 hours straight – talking, designing, debugging and coding our marketing suite (with some breaks now and again to recharge our batteries).

 

Let me begin by telling you about where we stayed. The good news is local residents don’t pay taxes (our accountant is already working on relocation packages…). The bad news is there is absolutely nothing to do there. Especially for city people like myself. For those who like hiking and don’t mind the cold, we offered early-morning meditation sessions and sunrise trips between 5 and 6 am, to see nature at its best. It was, however, so cold (desert cold) that most people just stayed put the entire time. (I have a hunch our CEO “fixed” the heating in our rooms so that the only warm place would be the hackathon hall.)

 

 

So with about 35 hours of coding, plus 20 espresso shots per person, we really accomplished some amazing achievements.

 

Right from the start we knew exactly what we wanted to achieve. From what I had read on the Internet prior to the hackathon, it seemed that most other companies don’t actually have a clear agenda or specific goals for their hackathons. But we did:

  • Close as many bugs and tasks as possible – preferably those that require more than one person.
  • Bring new employees up to speed and introduce them to other employees and their line of work.
  • Initiate new projects and ideas that have been waiting for a long, long time.

We had spent hours preparing the technical agenda in such a way that people will not have to wait for others to finish their present task. Not an easy task when you have 100 tasks, 2-3 people on each task, etc. We were sure we had everything carefully planned, but reality has a way of intruding on even the best laid plans: On the morning of the hackathon one of our key people woke up with a fever and was unable to join us.

We had to suddenly reorganize our plans, so we decided to concentrate on the larger tasks (some of which we had not originally planned to address during the hackathon) instead of attempting to close as many tasks as possible. In the end, we only managed to close some of the tasks on our original list, but we did manage to significantly improve two complete modules, something we had been planning to do for a very long time. If it was up to me, these two models would have been the only two tasks for this entire hackathon, but I knew that others would want to see 80-90% of all tasks closed on Gemini (especially the CEO, who likes to say “planning is important, but execution is everything”).

 

In a way, things really did work out for the best, having been able to dramatically improve these two core modules in our marketing suite:

  • Voice-of-Customer Module: When we first built our survey module, it was based on specific requirements from Microsoft. As this module was one of the most critical modules, we made a wise decision (in our humble opinion) and developed it relatively quickly, knowing that we would have to rewrite some of the logic later on, once we receive additional requirements from customers. The main problem with the original version, however, was that it was not as flexible as we had wanted it to be, and we hadn’t been able to add new features that customers, partners and leads had asked for, such as additional question types and multiple questions.
    Following our hackathon in the desert, however, we were finally able to add key features that had been requested many a time over the past year:

    • Multiple Question Surveys – In our new version, you can create surveys with more than one question. And of course you can define optional questions, so that your visitors won’t have to answer all of the questions if they don’t want to.
    • New Question Types – Besides open questions, and single and multiple answers, we are now able to support additional question types, such as rating (starts, smileys, sliders) and ranking (visitors can arrange the answers in a specific order).
    • Conditional Thank You Messages – You can now create different thank-you messages based on the visitor’s answers. It can be an additional message, or a continued question. For example, you can ask a paying customer to rate your service: “Please rate our service”. If the rating is high, a “Thank You” message will appear. If, however, the rating is low, you can display a message such as: “Thank you. We would like to learn more about our service. Could we contact you?”. The continued answer would then be: “Yes/No.”
    • State Machine Survey – Although not part of the present version, our survey module is able to support conditional questions. We are still working on the UI (which is far from being trivial), and hope to launch it by the end of this quarter.
  • Real Time Analytics – Our initial real-time analytics module was developed 6 years ago for one of our customers who asked for a simple “Who is online” widget as part of his dashboards. We have since made several major improvements, but hadn’t yet integrated them into our marketing suite modules. During the hackathon we decided to enhance this module and its functionality to support complex site architectures (multiple domains, multiple farms, CDN and other caching mechanisms), and provide our customers with real values.
    As I have often said, real time analytics are a cool feature to have, but offer no real value except for QA-ing campaigns and tracking. With this new version, however, our customers can push surveys and change the user experience for specific visitors who are currently on the site. For example, you can push a survey for a specific segment real time, such as for visitors from a specific country or traffic source, visitors who have achieved certain goals or have visited specific pages, or even segment visitors based on their current score. You can push a survey or pop up a message, change a banner, or redirect the user to a specific page – for a group of visitors or a specific visitor.

These two new enhanced modules really made the cold and desolate work “vacation” worthwhile.

 

And in case you are thinking about holding a hackathon, here are some tips that might come in handy:

  • Working in pairs, in my opinion, is the best approach. It can be server-side and client-side developers together, a client-side developer and a UI person, or any other combination.
  • If you have limited time, prepare a list of tasks for each day in advance.
  • As backup, go over your bug/task tracking system and mark things you want to do, in case someone has some free time. Some bugs and small tasks may only require a few minutes.
  • Everyone should code, even the QA team and account managers. Give them some small coding tasks, even if they’re not very exciting. Your development team will be happy to get rid of these tasks and will be able to assist those doing them.
  • Plan long breaks in the middle of the day, so that people can go outside, take a walk or short drive, rest or eat. This will help them get through the second and third parts of the day – and be more productive.
  • Depending on your version control system , keep in mind that your configuration team will have a lot of work merging and committing all changes to your main branch. As we use SVN, which is not ideal for this kind of work, we had to create branches in advance in order to deal with mergers and conflicts. I am not that familiar with Git but from my basic understanding, Git would have made it much easier during the hackathon itself, and now as well, when we want to merge everything together.

In any case, it was a really successful hackathon – we became acquainted and re-acquainted with one another, solved important issues, and all in all had a good time.