If you asked me what products I built in the past five years, I'd answer with cloud infrastructure products (you know, databases, compute clusters, etc). If you then asked me if you could use my cloud infrastructure products, I would gladly say yes because they're awesome. If you then asked me how to use it, I would show you. And you would spit your coffee out in disgust. Probably in my face. Because to use my product, you'd have to know as much about cloud infrastructure as I did.  


I started my career building  web applications. I built features that I thought were awesome (cool javascript animations, beautiful navigation, well designed forms, etc). Then over the years I focused on what users were actually doing through metrics and user interviews. I used user stories to build new features. I measured user interactions to build better features. I reveled in making the difficult simple for a user. And I loved building products in this way.

Unfortunately, I had lost the user-centric focus while I moved to operations and infrastructure engineering. As I learned how to use configuration management systems, built continuous integration and deployment systems, learned git branching models, prepared deployment artifacts, and coded my infrastructure, I somehow lost the focus on the end user. Frankly, I didn't know an end user existed.

Instead, I focused on provisioning and maintaining cloud infrastructure. I think the tools in this domain are difficult to use. I think the complexity of gluing tools together (like Chef and EC2, or SaltStack with Terraform) required so much knowledge that building a sensible user interface wasn't even at the top of my mind. Learning how to build an EC2 instance in the correct subnet with the correct security group was hard. I didn't even know what a security group was until I realized I couldn't SSH into my EC2 instance. Making this easy to use for a developer? No way, I had other problems to solve.

And to be honest, the products I've built in this way are terrible. I definitely deserve some coffee in my face.

I also believe this is how many infrastructure teams at small startups build cloud infrastructure (assuming they're not using Heroku). If I had to join another startup in an infrastructure team again, I think I would definitely focus on building for the users instead of myself.

How I would do this and what are those users? That's for future coffee thought because I'm now out of coffee.