Puppet, Docker & iPads in Specsavers Retail Stores
When Steve Jobs announced the iPad all the way back in 2010, all of us in IT with an eye for these things knew the day would come when our retail stores would want them. We also knew that making our retail application run on the device would amount to a world of hurt.
I work for Specsavers Optical Group, the world’s largest privately owned optical retailer. It is based in the UK, with more than 2,500 stores throughout Europe, Australia and New Zealand. Each store runs its own server, and we support more than 20,000 client PCs in the estate.
Obviously, having physical PC desks located throughout the store as customer service points consumes a lot of floor space (the average retail space has at least four such dispensing stations). This is space that would be better served with product displays. Making the move to truly mobile retail operations with the introduction of iPads was an obvious big win. Store staff greeting customers, iPad in hand, means great, instant service. There's no more waiting for a desk to become free. It not only looks efficient, it also eases and speeds the customer’s flow through the buying journey.
It took a while, but around the beginning of 2013, a project began to take shape. We needed iPads in the stores, by any means necessary, and we had to figure out how to use our in-house Java application on a device that didn't support Java.
A few months later, we piloted a pair of iPads in a store using a VNC app, connected to two client PCs stacked up in the back office. It worked — sort of. The stores loved it, as the retail assistants were now able to meet and greet customers, book appointments and dispense glasses and contact lenses without having to wait for a client PC to become available on the shop floor. The iPads on the shop floor took off in a big way — and there was the problem.
The only way to make our in-house application work was to pair each iPad on the shop floor with a client PC. This was fine when the store wanted only one or two iPads, but then a store ordered nine! We needed a better plan.
Luckily, a couple of us had just returned from PuppetConf 2013 in San Francisco (which took some serious convincing, given that we are based in the U.K.). We were all fired up and ready to change the world. We absolutely knew that Puppet would be able to solve a multitude of issues for us, and that anything we did in our team from that point onwards would have the advantage of being re-engineered from the start, with Puppet at the core.
We had been merrily ripping out all our build servers and rebuilding them from the ground up, using Puppet, as well as replacing our kickstart files with slimmer, fitter versions, to let Puppet remove the historic bloat and do what it does so well. However, we hadn't yet had the chance to use Puppet in the production estate.
When a picture of nine client PCs, all stacked on top of each other in a store’s back office, landed with my engineering guys, we knew we had a chance to really make a difference.
With our admittedly limited experience of what Puppet allowed us to trim out of our base builds, and the fact that we had also just started playing around with Docker (which is also fantastic, by the way), we hacked out a cunning plan on a whiteboard in 10 minutes flat, and got to work on a proof of concept.
Within just a few days, we had a working Docker container with Puppet under the hood. We were able to spin up a very lightweight way of delivering our retail application without changing the application itself. After a few more days of puppetizing all the plumbing that we hadn't gotten around to yet, we had a proof of concept that worked! Better than that, we had also taken the chance to use the latest 64-bit OS (RHEL 6.5), upgraded to Java 1.6 and fixed a bunch of annoying issues that had been bugging everyone for ages. Puppet and Docker, hand in hand, made all this seamless.
Less than a month after our whiteboard plan, we were able to pilot in a store. We replaced the nine client PCs with a single unit spinning nine containers — it's capable of spinning 35 if needed — serving our retail application up to the nine iPads on the shop floor. We matched the physical client speed perfectly so the stores didn't see any difference, but now we had just a single server to deal with. Effectively, our pilot lasted only six working days, at which point the store gave the go-ahead to remove the original client PCs completely!
Less than a month later, the pilot store has ordered another 12 iPads, taking them up to 21 iPads in the store — all made possible by Puppet and Docker. To say the team is pleased would be an understatement!
Our Docker/Puppet solution will soon start to replace all the existing iPad / client implementations. This has paved the way for getting Puppet out there in the production estate.
Stores no longer have to purchase a paired iPad-plus-PC solution, providing a large initial cost saving. (Just to give you an idea, each PC costs approximately £300, while a server that can support 30 iPads costs about £2,000). Plus, customers love the feeling of being engaged via an iPad; it makes them feel like they are in an Apple store! Customer journey times will decrease as store staff become more proficient in using the iPads, leading to an increase in the number of customers we can serve at one time.
We are currently working on replacing all the retail client builds with Puppet-managed implementations, and expanding our use of Docker and Puppet into other problem areas.
We haven't yet implemented Puppet Enterprise in the estate, as we are still expanding our knowledge and Puppet’s usage into other systems. I expect this to change in the near future as we start to move at pace and bring in Puppet at scale. There are some great advantages to moving to Puppet Enterprise: scalability, full support from Puppet Labs, and global state management of our distributed environments. These will become especially important as we start expanding into the rest of our global estate, which we hope to start exploring shortly!
It's a brave new world we're venturing into, but the view is fantastic!
- Hear Solomon Hykes, founder and CTO of Docker, talk about the increasing adoption of Linux containers by application developers.
- Yes, containers and configuration management can co-exist. James Turnbull writes about using Puppet and Docker together.
- James Turnbull writes about how to build Puppet-based applications inside of Docker.