The Year Google Bought Us
For me, 2014 will be remembered primarily by one particularly big event: Revolv was purchased by Google, and is now part of Nest Labs. But that has only been one piece of an entire year of interesting projects and events.
At this time last year -- December 2013 -- I was not kicking back before a fire with a mug of wassail. Nope. I was coding my butt off. CES 2014 was right around the corner, and Revolv had a huge booth and some ambitious plans to run live demos at six stations. There was just one problem: Our Java-based cloud solution couldn't run reliably in that environment.
So I was burning the midnight oil rewriting the entire thing... in Go.
We replaced a Java/DyanmoDB server with a Go/MySQL version, and then in just under two weeks I wrote a real-time messaging server that implemented PubNub's API. We ran all of that on a Mac Mini hidden in our CES booth. And it worked marvelously well.
Not long afterward -- maybe late February or early March -- the Revolv engineering team decided to move all of our cloud services off of Java and onto Go. We also migrated off of Heroku and onto AWS, and took the opportunity to subtantially rework deployment, functional testing, and package maintenance. We also decided to switch databases to PostgreSQL. And that's a decision I've been thrilled with, even though I have long been a MySQL user. My blog post on ditching NoSQL got me into some hot water, but also got some positive coverage.
By June, we had migrated completely off of our old environment. Nobody noticed. There was no downtime, and no noticable change from the user perspective. In the cloud world, that's a huge success.
Over 2014, we added a number of tools to our arsenal. A few of the notable ones include:
- Packer and Docker
- Drone for CI/CD
- Cookoo, Squirrel, and Structable for our Go servers
- OxDBE for database development
- GPM and later Glide for Go package management
With a team of 4, we managed over 40 servers and a few dozen internally developed software projects. And, no, we didn't work insane hours. In fact, we enjoyed a relaxed and fun work environment.
For DevOps, we developed a strategy that combined package management and machine image management with autoscaling. The net result was a reliable and downtime-resistent deployment system whose primary issue was speed. It did take about 20 minutes to do a production deploy, almost all of which was waiting for EC2 instances to come up. But a 20 minute deploy seemed like an acceptable trade-off when the benefit was a downtime-free, easily rolled back, fault-tolerant deployment.
On the process end, our team had set a pacing goal: We wanted to be about 6 weeks ahead of the rest of the teams on feature development. The idea was that the cloud should provide all of the necessary features far enough in advance that the applications could rely on a production grade API early in their development lifecycle. (Keep in mind that in Agile, 6 weeks is three full sprints.)
The goal was lofty, and we only sort of hit it. While we did develop features early, we often found that we had to cycle back and make changes based on how the apps worked. But we didn't consider that to be a complete failure to hit the goal. For it was much easier to make these small changes than to try to co-develop the cloud at the same time as the applications.
The second half of 2014 was focused on features, along with hunting down a very peculiar and dangerous bug. One of the coolest features that we built was the IFTTT integration for Revolv. The release of that one, though, was overshadowed by the bigger news: Revolv was acquired by Nest Labs. (Nest is part of Google, who bought them early in 2014. I still don't totally understand the nuances of the organization.)
While it's certainly exciting to be acquired by the coolest tech company on the planet, it was also tough to hear that Revolv's core product was going to be discontinued. As software developers, we know that our work is ephemeral. But it is nonetheless hard to watch a project fade into the night -- especially one with strong virtues.
The other casualty of the acquisition was my session at the Wearables+Things conference. It's the first time in my career that I have ever had to back out of a speaking engagement. I did have a chance to do a blog post for them, but I still feel terribly unprofessional for having to cancel my session.
Along with Revolv work, I signed up to co-author a book with Matt Farina. We're working on Go in Practice for Manning. I'm really excited about that book, since it gives me the opportunity to put down on paper many of the lessons we learned building Revolv's services. I also had articles in a few of the DevZone guides for 2014. DevZone has done an excellent job creating some highly relevant currated content for hot technologies.
Matt and I also released (early in 2014) the HTML5-PHP parser, and that project has gained momentum and contributors over the year. Glide, our Go package manager, has also gained momentum. I'm looking forward to pushing it forward in 2015, getting it to a solid 1.x release. And I've continued working on QueryPath, Cookoo, and other open source projects I started. The PHP OpenStack libraries I started (again with Matt Farina) were adopted by OpenStack, while my similarly structured Node.js OpenStack bindings are now officially iced. And I found out that GitHub uses one of my most obscure projects (Textmate syntax highlighting for the Vala language). It's a virtue of open source that even the small stuff may save someone else some hassle.
Late in the year, I had my laptop (and other stuff) stolen. That's significantly slowed my work on open source software. And just about everything else. I've been surprised to discover how much of my daily routine involved a glowing rectangle and a bunch of backlit keys. After New Year I'll try to recoup.
So what does 2015 hold? Well... a Go book. But beyond that, I'm not sure. It may well mark the end of my development career as I get transitioned into a full time team lead. But we'll see. I love development too much to hang up the vi editor for good.