Blog

Brew-tally: A Beer Rating App

The Finer Parts to Office Culture

Let’s be real, no one actually likes pumpkin beer. But that doesn’t stop Cognizant Quick Left from holding its annual Pumpkin Beer Contest. Every October, CQL’s monthly happy hour is dedicated to just this.  In past years the CQL team would submit a beer or cider of choice to share with the team. Everyone would vote on the best and worst beers and tally up each drink’s ratings from 1 to 10 on a dry erase board. 

While this strategy sufficed, at CQL we build web apps for a living. That being said, myself and another developer felt there was a better way to go about the beer tasting experience and the process for ranking brews.

brew-tally-beer-rating-app

 

Brew-tally

Brew-tally-beer-rating-app

We decided to write a native iOS beer rating app.  As a team we pair programmed while building out the app.

If you’re not familiar with pair programing, it’s essentially a method for writing code that development teams use to more efficiently build software. Two programmers are stationed on one computer that has two monitors, two keyboards and two mice. There is usually a “driver,” the person who does most of the typing, and a “navigator,” the person who reviews the code and lets the driver know if they made a mistake, much like a backseat driver.  The navigator is also the person who researches problems if the team gets stuck.  These roles switch quite often while developing.

As we developed Brew-tally, one of us focused on building out the iOS app, while the other focused on writing the server and designing the interface to display the final data points.

The app was fairly simple. It included a tableViewController that displayed all the beers and allowed users to select them, rate them between 1 and 10 and submit the ratings.  The app used Socket.io to update the ratings in real time. 

Brew-tally Server

The server was written in NodeJS and Express.  It used mongoDB and MongooseJS for the database.  The server was RESTful compliant and had endpoints had POST  methods for /beers/, /beers/{beerId}/reviews/, and had GET methods for /beers/, /beers/{beerId}, /beers/{beerId}/reviews/, and /beers/{beerId}/reviews/{reviewId}.  Since we only had about a week to develop the app we didn’t have any time to setup any PUTS or DELETES though this is something we might implement in the future.

We also wrote a mobile-first web app for testing.  

TV Carousel 

The final ratings interface was written in Polymer/WebComponents. We chose this “framework” so that we could quickly develop the app within one week.  The interface was essentially a carousel of “cards” that contained an image of each beer bottle.  We hid the ratings of the beers until the very end of the competition to keep people honest when voting since showing the ratings as they were submitted could influence the reviews.  We hard coded the time the event was supposed to end into the server.  Once the event was over the app would display the top three highest rated beers.

brew-tally-beer-rating-app

Distributing the iOS App

To distribute Brew-tally we used Apple’s TestFlight program for beta testing.  We didn’t have a lot of time to get for approvals from Apple, so using TestFlight allowed us to add many users as internal testers. This made it easy for team members to download the app though TestFlight.  We also had a web version for those who didn’t have iPhones, which allowed all members to participate.  

Next Steps

brew-tally-beer-rating-app

Overall our team of tech fanatics loved the app experience. At some point we hope to continue to develop the app and get it into the App Store.  For next year there are quite a few changes we want make.  One idea is to create user accounts so that users can’t vote more then once for each beer.  We would also like to have the ability to create events from within app itself.  

All in all it was a quick and fun mini-project that made our happy hour even more enjoyable than in previous years. Brewtally is a nice example of an app that you can create while trying to learn something new, whether that be a new language, a new way of building software or a new way of working together as a team.