It was almost six years ago when Scott Snyder invited me to the Briggo offices to talk about a development project.
“The coffee machines at the airport?” I had asked when he said he worked for Briggo.
How was I to know then how deep down the robotic coffee rabbit hole we would go? Here we are almost seven years and some amazing transformations of a sophisticated mobile, cloud, web, and IoT system later and it's time to say goodbye.
The first project was pretty limited - they wanted help implementing a new UI design. One to replace the wood paneled hexagon aesthetic inspired by founder Chas Studor’s grandfather’s machine shop.
That project went from pure development to managing the UX project, then managing the backend development, then to redesigning and operating the software infrastructure and beyond. We were all-in on Briggo through the highs and the lows, and we stayed in the boat through their acquisition by Costa Coffee. We met, worked, argued, drank beer, drank coffee, mindlessly chatted during 2 AM software releases, and got to know a lot of truly great people.
But this week, after years of tireless continued service, it’s time to bid farewell. The last remaining kiosks of our beloved Briggo system have been retired and removed from the Austin Airport and 3M. And as we wave goodbye to this caffeinated cacophony of cogs and computing, I’d like to reflect on some of the things that our SevenPico crew accomplished in service of the team at Briggo. Being a legacy system take-over, I will put this in the context of our methodical approach to taking over legacy systems.
Job one is always to stabilize the system. We had good familiarity with the functionality of the backend from our work on the user interface but knew very little about how it was designed, built, or deployed. First, we redesign and rebuilt the underlying AWS infrastructure using Terraform, giving us firm command of the infrastructure and an ability to deploy multiple environments, e.g. development, qa, beta, and production, in a repeatable and reliable way.
Next we turned to the application build, which had up to that point been done manually by connecting to the running instances, pulling the latest code, and executing build commands. We abstracted the secrets and environment variables to AWS and implemented Docker builds for the artifacts. We also broke the deployment up into three pieces, representing different functional components of the system, from a single monolithic build and deploy.
Finally, we put some energy into the database, specifically implementing automated backups and database change management with Liquibase to give us better control over schema versioning, easier management of database fixtures, and, crucially, the ability to reliably rollback deployments.
“One does not simply ENJOY a Borgia Spice Latte”
One of our key goals when modernizing the legacy system was to streamline operations for both engineers and system administrators, since we were filling both roles on the project. To achieve this, we implemented several critical improvements:
These improvements significantly enhanced the operational efficiency and scalability of the legacy system, allowing our team to focus more on innovation and less on maintenance.
The most significant piece of technical debt in the system was a continuously deferred migration from Python 2 to Python 3. It had been viewed as risky due to lack of deep knowledge of the deep inner workings of the system and limited resources to dedicate to migration, testing and validation. But we reached a point where we could defer it no longer. This effort resulted in a much deeper understanding of the system design and forced replacing some dependencies and implementations. More importantly, however, it forced the implementation of a more rigorous QA and testing strategy.
The other big effort was transitioning from the risky PCI exposure of magstripe readers to a more secure payment process by integrating Stripe for auth and capture. This upgrade enhanced security, reduced fraud risk, and enabled seamless, contactless prepaid pickups. By leveraging Stripe’s infrastructure, we minimized PCI compliance concerns while providing a safer, more efficient payment experience for our users.
With the hard work done we were able to turn to the fun stuff! One of the main reasons we’re committed to AWS, not just as cloud infrastructure, but as an application platform, is the ability to rapidly introduce new functionality, through managed services or through application development tools like AppSync and StepFunctions. Here are a few of the fun things we were able to accomplish:
By this point we had a rock-solid system that ran for years with very little maintenance and need for oversight. We rarely had issues with the cloud system and on those occasions our ability to quickly identify root causes and remediate kept the coffee flowing freely!
Thankfully this is not the end of the Briggo story. Although the original machines and software system have been retired, the legacy lives on in Costa Coffee with all new machines and software systems in place.
We were fortunate enough to have a hand in the concept, design, implementation, and for a while the leadership of the new software systems. Here are a few of the things additional things we’ve done in service of that project:
And so, we say goodbye. Briggo’s retirement is a victory lap. We’re incredibly proud of how far we brought it, and we’ll carry those lessons into the future. The new system will have big shoes to fill, but it’ll also stand on the shoulders of everything we learned from our trusty old friend.
So here’s to Briggo. We’re going to miss your quirky codebase. You were more than just a coffee maker—you were a testament to our team’s ingenuity, determination, and the power of a good cloud infrastructure.
We’ll miss you, Briggo. Thanks for all the caffeine.