Things I wish I knew as a hackathon participant
Tags: hackathon, development, agile
Published: 2023-05-04 04:56:47

Hackathon is one of the most popular type of competition in the field of programming. It's basically a project development and showcasing competition where you get to implement a project idea on the spot and solve some particular real life problems, also add new features based on judge recommendations. 

Typically in a hackathon the team consists of 3-5 members. But of course if it is based upon the scale of the project that is required. One of the key points on winning a hackathon is the proper co operation and proper co-ordination as the workload is being distributed among the team members.

Based on my experiences of participating on hackathons I would like to share some of the tricks that I wish I knew before.



## 1. Don't focus on scalability of your architecture
You are not here to build a production level application that will have 1 million users. You just need to convince the judges that you do have the proper knowledge and potential to turn your idea into reality. 

## 2. Use pre-built components from UI libraries as much as possible

You don't need to build a cutting edge User Interface by applying a lot of styling. You just need to present that the features are working properly. If you put a lot of time in designing a cutting edge UI but don't get the time to make them functional, the judges will not be happy. 

(_However, there are some project showcasing competition where people get a prize by just creating a figma design. But I don't consider them as hackathons, they are startup business idea competitions for me. Well actually they are business idea competitions but sometimes they name it as hackathon._)

## 3. Use cloud services as back-end and database instead of developing own server-side application. 

Don't spend time on developing APIs for basic operations such as authentication and CRUD operations. Instead use cloud services like **Firebase**, 

## 4. Integrate modern techs such as Speech Processing, Computer Vision, Maps, etc. with cloud services  which are not free for everyone.

Cloud services provide a lot of useful services that are easy to integrate and function. But the problem is they are not free. They require card information even if you want o create a free trial account. 
Well here's the hack, you can use your student email account to apply for github student developer pack. Once you have that you have a superpower as student dev. You can have 6 month free access to Microsoft Azure. Azure comes up with almost all the services you will possibly need to make your project an unique one from others'.

## 5. Use docker if you really need to migrate applications to a single machine.

You may have developed front-end application and back-end application or maybe also a mobile application on different machines. But while presenting you need to demonstrate all the applications in a single machine. Therefore it's really a good and safe choice to dockerize the applications.

## 6. Create project in GitHub and keep track of the tasks. 

As you will be working on team, It's really important to keep track of the features that are implemented and that are in progress and assign task of implementing features to team members, it can be very useful to have a GitHub project. Or you can use other project management tools like Jira and Trello.

## 7. Learn how to work on branches and resolve merge conflicts in GitHub and VScode.

If you are working in parallel, you definitely need to work on different branches. But in order to sync you also need to merge your codes into the default branch _(which is **main**
branch in most of the cases) _. Therefore you will have conflicts. Learn how to pull and resolve conflicts in local machine with VSCode or any IDE that you are using. They provide a GUI tool for you to work around gits or any other version control systems. 

## 8. While testing use the IP addresses of your machine in local network for communication between apps running on different machines. No need to merge them on single machine.

If you need to connect your front-end application with your back-end application which are running on separate devices you can use their IP addresses on the local network and port numbers. But make sure all the devices are connected to the same local network (e.g same WiFi). You can find the local IPs of the machine using some commands on your terminal which vary from machine to machine, therefore you need to do some googling based on your machine environment.

## 9. Finally the most important one: Present recorded workflow. 

Make small recording of your work flow of your project using 
[loom](https://www.loom.com/) and present that to the judges instead of demonstrating the project on your machine. Because if you do that there may occur some errors due to unknown reasons which is not possible to fix at that time.

That's all from me. If you think I missed something, share your experience with me ...