It’s hard to believe, but the third yearly hackathon event which my current employer hosts, has just ended.
My company sets aside one week and invites all software developers, interns and any other employees interested in participating, to gather together and work on any project they desire.
Barring any unforeseen emergencies where an employee must take care of some urgent customer issue, every hackathon participant can put their entire concentration and focus on their project.
For any software engineer who’s been around the block, so to speak, this is extremely appealing.
For an entire week, you get to concentrate 100% on PURE, UNDADULTERATED CODING. In a normal week, this rarely, if EVER happens. If you’re in an agile/scrum shop, you’ve got daily standups and the always constant pressure to finish your sprint commitments.
Then there’s the daily, if not hourly deluges of e-mails and voicemails that constantly demand your attention.
On a GOOD day, you can maybe set aside 20-30% of your day for real actual software development. The rest of the day is a constant juggling act to get all the non software development tasks and chores out of the way.
In a hackathon, you get to focus just on the project you want to work on. Which is yet, another appealing selling point to many software engineer veterans.
Most of the time, software engineers have little to no say in what kind of projects they get to work on. That is chosen for them either by a product owner in an agile driven company, or a project manager in a waterfall driven development shop.
On top of that, even the technical stack is often controlled and decided on before the software developer writes their first line of code.
You want to write a project in ReactJS, because you hear it’s a great alternative client side library to AngularJS? Sorry, but company policies dictate we go with AngularJS.
How about writing server side web code in NodeJS? Nope, sorry, but company policy dictates you have to write all back end web app code in Java.
What about using a NoSQL database like MongoDB? Sorry, but the company requires all database applications use enterprise Oracle.
Rules and policies and on and on. By the time the software developer is ready to start on a company project, most of the technical stack and architecture has already been decided upon for the developer.
In a hackathon, the developer calls all the shots. Wanna write it in NodeJS and ReactJS? Go for it!
Want to code your project as an iPhone app? Hack away! Or how about programming a hackable drone that can take video? Go for it!
The hackathon developer gets to call all the shots about what the project will be and what technical stack goes into implementing it.
So it was an easy personal decision to decide to participate again in another company sponsored hackathon.
I even had a few ex-coworkers at previous companies who wanted to join me. Add a couple more summer interns and we had a hackathon team ready to tackle on a project.
Ironically, the toughest thing about any hackathon, is exactly WHAT to work on. Coming up with a viable idea that has a decent chance of success and provides enough development work for each team member to work on.
This is an especially important point where you have a hackathon team that isn’t necessarily all software developers. You need to make sure the project has enough coding and non coding work for EVERYONE to be able to work on.
I really wanted to use a technical stack outside my “wheelhouse”. My career has been built around Microsoft’s technical stacks and I wanted to use something that was new to me.
I suggested to the rest of my hackathon team that we use NodeJS for the back end server.
The rest of the team members liked that idea and we decided on NodeJS for the back end and HTML/JQuery for the front end UI/UX experience.
We would use the distributed source control system, Git, to be our source code repository. It’s excels at the ability to handle parallel and concurrent software development with multiple team members, something I didn’t have to worry about at my previous hackathon, where I was the sole software developer.
The team decision to work on a web application meant we could use any type of hardware/software development environment we wanted. That’s the beauty of web development is that it’s agnostic about the hardware and tech stack you want to use on a project … it’s completely up to you.
Some of us use Macs and some of us had Windows equipped PCs. The summer interns used Webstorm, a popular commercial web application development tool. The rest of the team decided on downloading and installing a fairly newish development tool from Microsoft called Visual Studio code.
It’s a cross platform web application development tool that can run on Linux, Windows and Mac and run Microsoft’s flagship developer framework, Microsoft .NET. It’s also an excellent tool for NodeJS development so I decided to use Visual Studio code as my primary development environment.
As for the project idea, we ultimately decided on aggregating and consolidating some key intranet tools we use from the software company Atlassian.
Atlassian is a key player in the agile world. They make software to help organizations use agile processes more efficiently.
Confluence is Atlassian’s flagship documentation and wiki system. Jira is Atlassian’s tool to help scrummasters and product owners organize product backlogs and daily standups.
Bamboo is Atlassian’s tool to help run daily software builds and automate continuous integration. Stash/Bitbucket is Atlassian’s tool to help organize internal company source code repositories with the open source tool Git.
Our company uses all four tools at an enterprise level and we were pleasantly surprised by the fact that all four tools offer programmable access via RESTful APIs.
RESTful APIs are essentially a way for a developer to gain access into a particular software system via simple HTTP calls.
And NodeJS is especially good at RESTful API development.
Our project idea was to query all four Atlassian systems, Jira, Confluence, Stash and Bamboo using their REST APIs, and aggregate the data into one combined result set.
We would provide a nice web based user interface to allow a user to do a particular keyword search and bring back combined results from all four systems.
So if someone typed in the word, ‘oracle’, our application would make RESTful HTTP calls to each of the four systems, and bring back anything associated with and related to the search phrase ‘oracle’.
It would bring back any wiki/documentation information from Confluence about Oracle, any sort of Jira daily standup or product backlog information about Oracle, and any Oracle related information from the Stash source code repository tool and the build tool Bamboo.
The scope of the project was big enough for all our team members to work on yet not too large of scope to exceed a week’s worth of development time.
Four out of the five team members would work on developing the code to query each of the four Atlassian systems and the fifth person would work on the user interface.
Day one was about planning the project and doling out each of the programming tasks to each of the hackathon team members.
The rest of the week, we all sat together in the same area and got busy with each of our tasks.
You would think that a week is a lot of time to work on a hackathon project, but it’s far from the truth.
The first day of a hackathon is really about planning the project and figuring out who does what. The last day of the hackthon is the showcasing/demo of all the hackathon projects. So in reality, you really only have three dedicated days of actual development, and boy, those go by FAST.
And anyone who writes software knows nothing ever goes perfectly. You will ALWAYS be wrestling with bugs, flaws in your design, etc…
I wanted to add more functionality than what was agreed upon on the first day, but it turns out as much as I wanted to add that in, as a cherry on top of what we had, there simply wasn’t enough time to do so.
By the end of the fourth day, we pretty much accomplished what we set out doing. Sure, we ran into bugs and obstacles on the way, but that was part of the fun of the hackathon .. figuring things out and working together to get to the finish line.
On the final demo day, we were near the last of the list to showcase our project. The gods of chance were smiling on us that day as we were using the live Atlassian systems for our application, and they were all up and running for our demo.
Nothing blew up and we had our five minutes in the sun to demo our app. It didn’t win first prize, but our team was very proud we created a project from start to finish.
And for me personally, it refreshed my passion for software development and made me clearly remember why I chose software development as a career. Not a bad return for a week long, caffeine overloaded induced session of hacking!