The Slackathon

Last week, the Tilde crew dove into our first Hackathon. It was a really great opportunity to play with unfamiliar technologies and an overall good time.

The Hackathon was a single-day, company-wide event (Peter even flew from sunny California to join us at the Portland office). We created a Slack channel to brainstorm some ideas (both project ideas and the overall format) and tossed them around until we settled on something we all liked.

One of the things the brainstorming sessions helped crystalize for us was that we don’t typically spend enough time working on the same feature/project as a team. This is perhaps a little surprising given the size of our team (we only have six engineers total), but we’ve had so many different things going in the last few months that we missed working all together. So this seemed like the perfect opportunity to fix that.

One idea was to have the entire team work together on a single Hackathon project (as opposed to the more common team-based, or even competitive format). While we liked the idea, we needed to be able to move quickly (and not get overly ambitious) to have any hope of shipping something in a single day. We were worried that the coordination overhead of working on one big project could get in the way of that.

We decided to theme the Hackathon around building automations in the company Slack, hence the Slackathon. It confined the space enough to feel like we were working on the same thing, but left things open enough that everyone could find ways to tie their work to their unique interests.

To make sure things would go smoothly, Yehuda and I spent time researching the Slack API ahead of the Slackathon. We distilled our learnings into a micro-framework that lived inside our Rails app to take care of the boilerplate, so everyone could just dive right in. We made it available as a Gem, feel free to try it in your own app!

We ended up splitting into pairs (as we typical do at Tilde). So next you'll hear from each pair with the scoop on their Slacktivity (couldn't resist!).

Krysfrey (Krystan and Godfrey)

This section written by Krystan.

Godfrey and I paired during the hackathon with the goal of making a few smaller bots to suss out the edge cases of the framework, and suss we did.

We made our first bot as an example bot to use in examples for the framework README file. Now, Tildeños can type /monkey [a phrase], then choose an appropriate monkey emoji. The bot parrots back the phrase along with the emoji.

After writing monkey-bot and the framework docs, we decided to move on to a more useful bot. Enter admin-bot, which allows us to type /admin [user/app/org] [name/email/id] and return up to five matches along with relevant back-office links. Maybe not as fun as monkey-bot, but probably more useful.

Since admin-bot uses more resources than monkey-bot, we took the opportunity improve the framework by making the bot’s response asynchronous via background jobs. In doing so, we encountered a bug in Slack’s API that temporarily disabled monkey-bot’s buttons. OH NOES! Don’t worry though, we found a workaround; monkey-bot speaks/sees/hears no evil once more!

Lastly, we decided to hook up an existing background job that was lacking a UI to the framework. With /lag we can easily check the current lag of four representative apps in our collector app.

I’m really digging the little framework Godhuda put together. Now we can make helpful administrative features in our Rails app and hook them up to a UI really quickly.

Yehudehi (Yehuda and Vaidehi)

This section written by Vaidehi.

Yehuda and I wanted to pair our neuroticism with our inherent nerdiness and build something to make the process of loading and unloading dishes from our office dishwasher a bit easier. I've been interested in dipping my toes into hardware for a while now, but didn’t know where (or how!) to start. As luck would have it, Yehuda was in the same boat.

We decided to try our hand at hardware by building a dishwasher “bot”. The plan was to use a Raspberry Pi to allow our fellow Tildeños to press a button to indicate whether the dishwasher had just been loaded and started, or if the dishwasher had been stopped and unloaded.

(In case this seems strange: while we have a wonderful office, our Dishwasher is perhaps the lowest-tech item on the floor. We're frankly shocked they still make dishwashers with such low-tech/incomprehensible UI. Indeed, we can never tell if it's on, off, clean or dirty. Oh the struggles!)

The hardest part of the whole process was getting set up with our Raspberry Pi. Due to a lack of certain adapters in the office, we attempted to get the hardware ball rolling by trying to get set up without a monitor. Setting up wifi on our Raspberry Pi ended up being surprisingly more complicated and time-consuming than we thought!

Once we were set up with our Raspberry Pi, we set off trying to get our bot set up. The first step was getting an LED to light up. Because it doesn't get more exciting than that, heh.

Both Yehuda and I were total hardware newbies, so we spent a lot of time Googling for answers, watching tutorial videos, reading blog posts, and just plugging things in and…hoping for the best! Eventually, we were able to get a single LED to light up on a breadboard. We iterated on our first design and built upon it, adding a button that would allow someone to toggle the LED light on and off.

Once we had our hardware working, we integrated it with software! We used Johnny-Five, a JavaScript Robotics and IoT Platform, which gave us an easy-to-use API for controlling both our button and LED. The last step, integrating with Slack, turned out to be the easiest step of all!

The final version of our "bot" allowed us to press a button when we started or stopped our office dishwasher, which in turn illuminated a LED light and sent a notification to our team Slack channel!

Surprisingly, the most difficult parts of this project ended up being something that otherwise ought to have been super simple: getting the LED to turn on consistently. We had some issues with our wiring, and ended up reworking the wires on our breadboard multiple times before we realized that our wires weren’t connecting to the board properly. As it turns out, the hardest part when it comes to working with hardware is making sure that you have all the right tools before you start building things. Who knew?! 😂

Hopefully, we’ll have a chance to iterate on dishwasher bot some more in the near future. Stay tuned!

1337er (Lee and Peter)

This section written by Lee.

Peter and I built a “ConfBot” that tells you about all the coolest upcoming conferences (just Ruby conferences for now)!

The micro-framework built by Godfrey and Yehuda made it really easy to get things up and running. So we decided to mix it up and complicate things by using Helix to write Rust in our Rails app. My personal goal for the Hackathon was to write some Rust, so I was super stoked! Peter felt like it was way overkill for what we were doing (true…), but we both agreed it was a fun chance to experiment.

Wrapping Up

Back to Godfrey.

In case it wasn't obvious, we all had a lot of fun at our first company Hackathon Slackathon. Reflecting on the experience, I think having a loose theme to tie everything together was a great idea. In addition, the preparation work we did ahead of time also really paid off; it was super cool to see everyone able to ship something in just a few hours.

If you're considering running a Hackathon at your company, I highly recommend it. Let us know if you have any questions or tips or feedback to share!

If this sounded interesting to you, maybe... perhaps... you might possibly want to come work with us and join our next Hackathon? When we are not Slacking, we also rate flavored water on the Internet and make cupcakes.

On an unrelated note, I also happen to have a product to sell you, which helps pay for fun events like these. If you are already using Skylight, consider referring a friend to help fund your next Hackathon with that sweet $50 Skylight credit (for both of you)?