DomainTools employees are fortunate enough to participate in what we call “Hack Days” once a quarter. We’ve written about our hack days in the past, but today, I wanted to dive deeper into a particular project that is near and dear to my heart.
All Engineers enjoy solving problems. Some Engineers enjoy drinking beer. Many Engineers at DomainTools, enjoy solving problems while drinking beer. When we marry these two skills, we wind up with some very interesting projects. This is one of those. This is a story about a little kegerator that could … we call him Danby.
It’s no secret, that DomainTools is a pretty terrific place to work. However, working on such awesome things sure can make one thirsty. Having said that, another perk we enjoy is having the opportunity to unwind and have a beer with co-workers every Thursday. We lovingly refer to this event as Thirsty Thursday™. This typically includes war stories from the week, friendly games of ping pong (unless the challenge board is at play), and oftentimes a somewhat heated music trivia session. But I digress.
Where was I. Oh yes, beer. As companies scale, it is important to embed some concrete processes. DomainTools’ tremendous growth is no different, especially when it comes to managing our beloved kegerator. It was no longer enough to rely on just a chalkboard to inform the company what was pouring at a particular time (communication is key, you see).
Hack days was the perfect opportunity to improve this particular circumstance. We started off by assessing the situation to identify pain points and brainstorm on possible solutions. These are the three questions we wanted to solve for with our project:
- How can we quickly and easily let the company know what beer is on draft?
- How can we manage this system?
- How can we provide information on how much beer is left in the keg?
Our priority was understanding what beer is on draft, so we tackled this issue first. As I mentioned previously, this was solved early on the old fashioned way, with some chalk and a chalkboard. Even today, that chalkboard still hangs proudly above the draft and provides at a glance information.
However, this approach has some limitations – the main one being you need to walk back and visit Danby to see what is pouring. Wouldn’t it be easier to have a simple webpage we could visit to view this information:
- What beer is on draft?
- Where is it from and who makes it?
- What are the ABV and IBU?
This was simple enough, and we had a static page mocked up quickly which was viewable on our internal network.
Not bad. We get a card detailing the beer on draft, including a nice description of what we can expect from this particular brew.
However, this approach was not maintainable long term. With our penchant for beer, it was only a matter of time before we kicked the Summer Ale and were onto something else. Adjusting our page manually each time we refreshed our selection, did not sound appealing.
In order to do this right, we needed to make this page dynamic. We needed a system we could work with to manage the details of kegs, beers, and breweries. The obvious solution was to search for applications that have already been written to solve this problem … but where’s the fun in that. This is hack days after all!
Instead, we opted to write our own create, read, update and delete (CRUD) application to deal with our kegerator related matters. Or, maybe it should be referred to as our build, examine, extend, remove (BEER) application? Too much of a stretch there?
With our current implementation, we’re able to manage all of the pertinent details related to our kegerator. We can easily add and modify details for kegs, beers, breweries, etc. We also have a nice catalog of previous beers we’ve had, including when the kegs were tapped and kicked.
When we want to see what’s on draft, we have an easy to remember URL to visit on our internal network. When we do, we’re greeted with a summary page for the current keg. You’ll notice we capture all the relevant details for this beer, and provide some extra information.
One of the more useful and fun features that Danby has, is his ability to determine how much beer has been consumed and how much is remaining. We were able to modify a second hand scale and interface it with a Raspberry Pi in order to calculate an estimated volume in our keg. The details behind that effort warrants a blog post of its own :)
Also, now that Danby has a memory, we have a detailed history of what beers / ciders we’ve had, when we had them, and how long it took for us to get through them. We’ve yet to run analytics on this data or add visualization, but we’ve tossed around several ideas on how we might in the future.
Overall, we’re extremely pleased with how Danby has matured over the years. He’s been a loyal companion for many a Thirsty Thursday. We still have some big plans for this little kegerator, so stay tuned. In the meantime, cheers.
AngularJS Material: AngularJS Material is both a UI Component framework and a reference implementation of Google’s Material Design Specification.
Slim: Slim is a PHP micro framework that helps you quickly write simple yet powerful web applications and APIs.
SQLite: SQLite is a self-contained, high-reliability, embedded, full-featured, public-domain, SQL database engine.
Git: Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.
Special thanks to Chris Gannon for the awesome pint glass animation.