The title of this blog post is what co-worker, author, and Microsoft F# MVP Jamie Dixie said to me. Recently there was an internal hackathon at my company, and Jamie asked me to be on his team. It took place over this past Martin Luther King Jr. 3-day weekend. Now that we’re done, and did our presentation – I whole-heartedly agree, and I’d like to make my case.
What is the value to me?
Well first, hackathons typically have money on the line. Sometimes it’s free software or services, sometimes it’s a few hundred dollars, sometimes it’s several thousand dollars. So even above the intrinsive value, there is always just straight-up cash which might incentivize you.
But really, the value is much deeper than that. The real value is that this is an all-out test of your skills… ALL of your skills. This will test your mettle, from top to bottom. By the end of the event, you will be pretty clear on what your strengths are and what your weaknesses are, because a hackathon is a super-compressed, entire delivery process of a software application. You cover:
- Organizing your work (OneNote) and communication (Email/IM/SMS)
- Setting up source control
- Setting up a database
- Gathering requirements
- Establishing a name and a logo
- Troubleshooting your first delivery to dev
- Doing many interative cycles, and working with other devs – and successfully handling merge conflicts
- Doing mini-demos with co-workers and getting feedback
- Updating documentation and working towards a presentation
- Arguing about what is / is not going to make it into the final build
- Cramming to make sure the final build is all tightened-up
- Doing a final release before the deadline
- Doing a presentation to the business about what you built
Like I said, this is like a super-compressed version of an entire release cycle. But instead of it taking several months and you having a separate project manager, this takes place over a couple of days, and you and your teammates wear whatever hat is necessary to get the job done.
So, the value is that you get a real-life test to see where you actually are with all of your professional skills. What better thing could there be to see what are your strengths, and what areas you need to work on? And, if you have a good team and have good “systems” in place, you might even win some money!
How to do well in a hackathon?
The way that I look at a hackathon, is that I want to put together all the “systems” that I have, and in which I am proficient – to solve the problem at hand. For example, here are some Systems I consistently use.:
- Have a place for source control. At work, I’d use TFS. Outside of work I’d use http://tfs.visualstudio.com
- Have a place to store files – like the logo.psd file. In source control, I create a src, docs, hlp, and bin. Src is where the VS solution goes. Docs is where I put .psd, .pptx, .xls, or any other project-specific files. Hlp is where I put any documentation or a Sandcastle help file project.
- Have a way to create/connect to a database. I am a big fan of code-first Entity Framework – and so I can unit test everything else, I like using the Repository Pattern on top of that. I put the EF models in a Models folder, and all of the repository stuff goes in Data.
- Have a way to communicate information – I really like using OneNote from a shared drive (at work), or via OneDrive outside of work, primarily because OneDrive knows how to handle two people updating it at the same time.
- Have a way to layout a website – nowadays, I use Bootstrap exclusively.
- Have a way to use icons – I use Bootstrap and Font-Awesome icons
- Have a way to get data to the client. Nowadays, I use AngularJS data-binding, controllers, and services to talk to ASP.NET Web API for data
and on it goes. The thinking being that as soon as you get the details of what you need to build, you don’t need to get bogged-down in where to start. You should already have a place to start. Using the above, I have: source control, database access, a REST API, a core website with the ability to get AJAX data, a way to have icons everywhere, etc, etc.
To me, not only is this the right way to start doing a hackathon, THIS is what is going to be tested. If one of these Systems fail, or doesn’t serve you well – you will know, and you will learn for next time. So, the added benefit of participating in a hackathon, is that is will thoroughly test all of the Systems that you think are great. You will find out whether they really are or not!
How do find a hackathon, in which to participate?
I have found this to be sort of hit-and-miss. There isn’t any one place to see every hackathon, everywhere – but there are quite a few aggregation sites. Just do a search: https://www.google.com/#q=find+hackathon
Also if you work for a large enterprise, like me – you might find that upper mgmt has discovered they can get a proof-of-concept done over a weekend, instead of spending a million dollars and it taking 10 months! So, many large enterprises now have internal hackathons to solve stubborn business problems which have previously been difficult or expensive to solve.
Lastly, if you participate in local user group meetings, you can often hear about local events from there. In the U.S., most Microsoft field offices host a monthly user group meeting and/or there will always be a local .NET user group meeting (for example) – or you can search for local meetups.
I challenge you, dear reader, to participate in a hackathon at LEAST once per year. Test your mettle. Test your systems. Get a very accurate picture of where you are, professionally. And, you could also win some money or swag along the way too!
Oh, and we won’t know until Tuesday if Jamie and I won our hackathon – but as you can tell, I already got quite a bit out of the experience. So, any monetary award would just be icing on the cake!