My experience in participating Hackathons
It is only my point of view and your thoughts about Hackathons and ways of gaining additional experience may be drastically different.
Who am I
I am a guy who loves math very much and became a software developer and ML engineer to build things using a brain, a laptop and a pair of hands. I’m fond of new technologies, especially Machine Learning, because it frees your hands from changing algorithms in a system frequently (I see ML as an automatisation of an algorithms maintenance) and you can do more intelligent tasks. I like visiting different events for software engineers and I became a fun of hackathons too, but more on this later.
What a hackathon is
A classic hackathon is a competition where your team (usually from 3 to 5 people) needs to build a working demo, an MVP in one or two days and then, present it to a jury. These competitions are usually sponsored by such IT giants as Facebook, Microsoft, Bosch, etc. What you should build depends on a theme of a hackathon and a track. For example, very often you can find such topics as digital retail, data economics, internet of things and sustainability. Organisers usually give enough freedom and encourage creativity, so you shouldn’t be afraid of experiments. After a weekend of hard work you present your demo to a jury and get rewarded if you surprised the jury or other teams (sometimes not jury, but teams evaluate each other. For instance, at Junction hackathon in Helsinki). Prizes can also be quite different. You can win a €200 Amazon gift card, a hoverboard, a raspberry pi or other nerdy staff, but rewards are not why people take part in. The most important that you can get on the radars of big tech companies, find new job opportunities and build new connections. Personally I love hackathons for the opportunity to travel and stepping out of a comfort zone.
How did I find out about hackathons
When I was at my final year at university I understood that even I was taught basic algorithms, several programming languages, could develop and maintain parts of a big project I still had no idea how to build an app from scratch and promote/present it. I’ve started research this and only then I’ve found out that a hackathon is the best choice to improve such skills. Every article I’ve read was like an ad, everyone said that during a hackathon they learned more than during a year at the university. It was not convincing, but it was inspiring. I also liked, that it could be a free English practice in a foreign country. Plus, as a huge advantage, participating in hackathons gives you an opportunity to travel (from 2 to 3 days in Europe, for example, doesn’t this sound cool?) and free stuff like t-shirts, pens, backpacks, etc. I was hooked by this ‘hackathon movement’ and I should have definitely checked everything that is said by others.
My first hackathon
No sooner said than done. I needed to find a hackathon to participate! I’ve found a group in Telegram in my own country, which announces almost every hackathon in the world. So, I’ve just looked at the closest one, which I could attend. It was HackUPC in Barcelona. A beach, a paella and a laptop. Sounds great! In order to participate in this hackathon you must be a student and also fill out a form and write a motivation letter why you want to participate in the event. It is quite common for hackathons, especially for popular ones, that you have to do some homework like writing a motivation letter or preparing a presentation about your idea. Everybody writes that they want to make new connections and build the most famous app in the world, so try to be original here. Also, HackUPC, as many other hackathons, provides compensation for the round trip. Luckily, without any serious background, I was invited. Let’s pack a bag!
When my plane landed in warm Barcelona, I was thrilled and scared. I had to find a way to the university, where the hackathon took place. After around 30 minutes of confusion I’ve figured out the city navigation and arrived at the UPC (Polytechnic University of Catalonia), where I’ve met my first and only teammate so far whom I met online through a slack group dedicated to the hackathon. At a registration desk we’ve got a cool backpack (which I still have, btw), a simple thermos, a t-shirt and stationery. Everybody was so nice and welcomed. Most of the organizers were also students from the UPC. We went from table to table, collected swag, talked with company representatives.
After a short rest, we’ve started looking for future members of our doomed to win team. Most of the communications were through the slack group, so we’ve tried to find teammates here at first. I can suggest you to take your time and wait for an opening, where companies introduce their tracks and prizes and only after that look for people who are interested in the same track and want to win. Furthermore, it is really important to have people in your team with backgrounds as varied as possible. A hackathon is not only about coding, it is also about brainstorming and inventing ideas. And, of course, your team must be able to present your ‘product’ in the most understandable way. The first thing, which I’ve learned at hackathons, that coding is the least useful skill to have (But don’t get me wrong here, I just want to say that coding goes for granted). We couldn’t find teammates until the first minute of the opening ceremony and I was very worried that we would be without a team. But suddenly, my teammate said that he found another two guys who were also looking for a couple. We didn’t really discuss ideas and how much we share interests, we just wanted to be a complete team. Finally we were able to focus on tracks and choose one to solve.
There were so many well-known companies like McKinsey, Facebook, HP, Skyscanner, Typeform, etc. We chose a Skyscanner track, because the theme was quite broad: “Innovation with Travel + the most visionary use of Skyscanner API”. With this wording you could create almost anything in the travel industry. In addition, we selected this track because not too many teams chose it (which meant fewer competitors) and prizes were fine: Noise Cancelling Bluetooth Headphones. We wanted a prize, we wanted to win and to make it happens our idea had to be unique and original.
Idea for an app
This is the best part of hackathons. I love brainstorming, generating ideas, playing with them, checking the track requirements. The right idea costs at least 80% of success. Here is a little piece of advise: understand who has what skills in your team. It helps you to understand will you be building a mobile app, a web app, a raspberry pi project or something more complex with a client-server architecture with a distributed database and real-time ML algorithms. But don’t try to do the impossible. You can’t develop sophisticated solutions in only two days (and no one would believe if you do). The most important thing is the originality of the idea and you have to decide how you can spend the time most efficiently. I did the mistake several times at different hackathons. I tried to build ML models and a backend from scratch and wasted so much valuable time and, in the end, it wasn’t even appreciated enough. It doesn’t matter how complex your system is. Sometimes it’s enough to write a simple mobile application with mock data. Focus on the idea and try to come up with something that none of the teams can think of.
We’ve spent about 4 hours to come up with an idea. The idea came from my teammate during a dinner. we stood in a long line for food, talking about our past experience, other hackathons, thinking about how we can use the Skyscanner API. All our thoughts were about the same thing and, to be honest, quite ordinary. Then, suddenly, my teammate said “Do you know Akinator?” and that was a starting point. I immediately understood what he would like to speak about and the idea was brilliant.
For those, who don’t know. Basically, Akinator is a game made by a French company, where a gin asking questions tries to guess a character you are thinking about (link).
My teammates idea was to combine the akinator game and travelling. Sometimes people don’t know where they want to travel. There are so many diverse places all over the world with different cultures, languages, traditions, food, so you can’t easily choose one of them. It will be easier to pick the specific place according to answers to some questions. Our app should do just that. The app should ask questions and after several questions (about climate, religion, food, tolerance, etc) it should show several relevant options and offer easy booking (yep, we managed to add Skyscanner API). Simple as that.
For example, the dialog with the app could be something like:
App: How peaceful is the city required to be?
User: 5
App: How good is the city for life?
User: 5
App: Which view do you prefer?
User: <choosing a picture>
App: Which food do you prefer?
User: <choosing a picture>
...App proposes 3 choices (with images + an approximate cost of travelling):
1) Glasgow
2) Edinburgh
3) Manchester
Variations of questions can be endless.
We wanted to build almost finished product (and this was our mistake, as I said earlier), so we had to build a mobile app client, a server to make ratings computation and an algorithm to define the right cities to show after some questions. It’s a pretty ambitious goal, if you want all things to be done right.
How we distributed efforts
We wanted to build a client-server app with an ml algorithm under the hood, so it looks quite straightforward how to split work between people in ideal situation. But the truth is that one of us had quite limited knowledge in CS and could only help to write some functions. Luckily, one of my teammates had an experience of building a mobile app, so we split this way: one developed a mobile app, two of us worked on a backend part and the last one work with a ratings computation algorithm. As we started working, I felt how much time we spend on the process of installing the development environment, downloading components, creating a project templates. All of this takes time that could be spent on the app development itself.
What I can suggest is to understand tools and frameworks which can speed you up before a hackathon. Overall, at hackathons you should not write everything from scratch, but connect ready-made parts together.
For example, to build a mobile app (android and ios or even a web app) the simplest solution could be a usage of Flutter. This SDK helps building an app for “any” platform from a single codebase. It is relatively easy to learn (but you have to learn the Dart language in addition) and very easy to prototype.
Also, for a backend part it’s quite common to choose Python and Flask or Django framework.
- Nowadays almost every software engineer knows Python and can write code in it. The best decision is to understand Flask/Django frameworks and prepare templates for a future project before a hackathon, so at the hackathon you just add functions and don’t waste too much time for a project infrastructure.
- Don’t be too smart with databases as well. Don’t use anything more complicated than sqlite. It will be perfect if you can make your app without databases at all. Something like json/csv files are a good choice. This may sound crazy, but It’s just a prototype and it is supposed to be as simple as possible. Otherwise, you will spend too much time tuning a database, debugging your code and rewriting schemas.
- As for ML algorithms, nowadays there are so many libraries and tools which work in two lines of code straight out of the box. Just understand the main idea of Machine Learning and write several samples to train a model and get predictions before a hackathon as well. The most common libraries to use which I can think of are catboost, lightgbm, fbprophet. Don’t spend too much time optimising algorithms at a hackathon, no one cares if you will get 1% better results, the main metric is the adequacy of the results by an eye.
In addition, I can’t help but mention the ngrok tool. With this guy you can passthough your requests from a client to a server without exposing ports. It is essential when you develop a client-server app in a public place. There’s no need to expose ports, set up forwarding, or make other network changes.
We more or less split our work and started building the project. I don’t want to write a boring part how we wrote functions, rested, ate and constantly communicated with the Skyscanner team about our app, so I will be short here and only mention one of our absurd solutions. At first, we wanted to make an autorization for users, so that each user has their own preferences and cities, but in the end the time was so limited that we decided not to do it at all. Our server didn’t have an authorisation, tokens and it had an adhocky method ‘reset’ to reset a server state for a new user. When I look at this solution right now it seems crazy for me, but back then it was the only way to build everything on time.
At hackathons organizers usually provide places to sleep: rooms, mats, sleeping bags. Often it isn’t very convenient and someone can snore nearby, but this is better than nothing. Generally speaking, you will have to sleep a little, very little. At my first hackathon, I was so excited and overwhelmed by what was happening around, that I only slept a couple of hours over the weekend and even that was at my desk (and got sick for a couple of days after returning, so I don’t recommend not to sleep).
At the end, for the last 2 hours before the deadline tired and exhausted we were trying to add an ML model just to be ‘cool’ and not because it could help our city ranking and it was a disaster. We’ve faced type conversions, dimensional mismatch, divnisioning by zero, overfitting and incorrect weighting of new scores with an old algorithm. So here is another lesson which I took from this: sometimes inaction is better than rushing. It was better to spend last 2 hours debugging the application and already existing parts or polishing a presentation, not building an unstable may-not-work code. Eventually this ML part did not provide any additional input during a project presentation.
Project presentation
After 12 pm at Sunday there was a time for presentations. We, as other teams, had to present our project to several juries (each jury was responsible for its nomination). We were inspired and proud of our project. The project worked and we had our MVP on android and ios. There was little left to do — to convince the jury that our project was the best.
Our first mistake was that we thought that everyone knew what ‘Akinator’ is and it turned out we were wrong. It wasn’t easy to give a general idea of it: almost every our presentation started with words like “Do you know what Akinator is? No, you don’t? Ok then, it is a game where you can …”. I’m not sure that every jury understood us, but nevertheless, everyone was interested in the UI and mechanics of choosing cities.
Overall, we’ve pitched our project about 5 times and it looked like most of the jury members liked our project and we waited to be nominated. But unfortunately, for some reason, it didn’t happen and we couldn’t believe this. We tried to win several prices from different tracks but, unfortunately, didn’t succeed in any of them. Maybe we weren’t so original, as we thought we were, or maybe we just were unable to correctly present the solution. And this part is crucial. You can build the most innovative app or system in the world, but if you are not be able to deliver about it properly, you will fail. Unfortunately, our team have started to prepare a presentation just a couple of hours before a presentation to a jury. We didn’t invest enough time to put together a presentation, rehearse it several times. So leave enough time to polish your presentation, tell it to your team several times, a company representatives and you will be ok.
For example, at the last of my hackathons we took 2nd place and an audience there liked our project very much. The project wasn’t too difficult. The idea was simple enough to understand and at the same time the project had a potential to help a society. I remember that at this hackathon we polished the presentation multiple times during the last day before a deadline. We invested time and effort into this and we were close to a win.
What I’ve learnt from hackathons so far
Despite the fact that we did not win, it was an invaluable experience. For only two days I learnt how to prototype things, learnt new technologies and frameworks like flutter, ngrok, google services api to collect images for cities, Skyscanner api, etc. Hackathons help to understand the actual cost of your coding skills — every software engineer should know how to design and build something useful from scratch. This type of events helps to
- stay creative
- collaborate with complete strangers
- estimate development time
After the HackUPC I’ve attended 4 more hackathons, each of which gave me an increasing understanding of what prototyping is, how to build software faster and easier and how to present the created products.
Why did I stop participating in hackathons
After the global lockdown in 2020 all hackathons went online and it wasn’t as useful and fun as before. A hackathon was a kind of vacation for me. It is an opportunity to completely reboot, get tons of emotions and meet new people. It pulled me out of everyday life. As a small addition, I travelled a lot and explored the world. I remember the time when after the hackathon in Barcelona our team have an evening together before our flights and we just walked around the city and talked.
Nowadays most hackathons are offline and you sit at home at the same table as always, especially when you’ve started working remotely. You don’t learn so quickly as with offline events, because your team meets online and you don’t know who and how works with the camera off and the last part it’s just boring.
To sum up
Hackathons are definitely worth attending, but, in my opinion, they are most useful for beginners and recent graduates. By participating in hackathons you are involved in all stages of software development. Bringing your idea to life is amazing, even with a bunch of reservations and crutches. It is a perfect place to learn new frameworks in no time and find like-minded people. But to win you have to be prepared. Here I can only advise a couple of simple tips.
- Learn how to prototype things faster, understand what you can and can’t code in 1 or 2 days.
- Focus on your idea. Sometimes, simple, but original app is better. You can expect that a dozen other teams will compete for a main prize and all of them may have approximately the same app (it happened to me once — a task was too narrow and about 5 teams did almost the same).
Also, I could recommend you to visit https://devpost.com, it is a good place to find your next hackathon.
Thank you for reading. Here are all my thoughts on the hackathon experience. Let me know if you have been to hackathons and what do you think about them.