Lessons in luck, perseverance, and product management

Today is my last day at Joyent after nearly five years. It’s been a wonderful ride with some of the best and smartest people I’ve ever worked with. We leveraged Joyent’s unique container technology to turn the company around and position it for acquisition, then scaled up as our acquirer became the largest customer we’ve ever had. This seems a good opportunity to sum up what I’ve learned about product management through it all.

Most importantly, product managers wear many hats and must do whatever is needed to keep the product on the path to success. “Not my job” is something you should never hear from a product manager.

Beyond that, I’ve been lucky to learn by doing:

Find and patch product gaps: Joyent’s unique approach to containers was incompatible with the container management tools of the time, so we needed an alternative. We developed ContainerPilot, which I prototyped with shell scripts that became the central demo of the opening keynote at Couchbase’s annual conference. For a critical period leading up to Joyent’s acquisition, ContainerPilot transformed Joyent from a small cloud with some interesting container virtualization technology to a company with a plan for the future of applications.

Change the conversation around product gaps you can’t patch: we didn’t have an EBS alternative at Joyent, and the timeline for building or buying+integrating one was too far out. The second-best solution was to change market expectations, and we were able to do that for some customers and use-cases based on thought leadership work around how to manage persistent data on ephemeral disk and the Autopilot Pattern.

Ruthlessly prioritize, and find smaller solutions to bigger problems: Our customers wanted a load balancer, but the timeline for building or buying+integrating one was too far out. For a majority of customers, however, the real problem was consistent addressing for global discovery and ingress. Looking at the problem that way led us to build an automated DNS that satisficed the problem faster with fewer moving parts. (Bonus: consistent addressing is a requirement for proper LBaaS as well.)

Dogfood, and productize internal solutions to create value: Developing DBaaS, LBaaS, and other *aaS offerings on top of the public API revealed missing abstractions we required to operate those offerings—abstractions our customers required as well. Key among those was an equivalent to AWS’ Auto Scaling Groups (though they’re better named Managed Instance Groups in GCE, and VM Scale Sets in Azure). Building Auto Scaling Groups for Joyent solved problems for our customers and advanced our *aaS efforts. (Bonus: developing these on top of the public API allowed us to separate concerns and scale our effort.)

Build delightful UX/UI experiences: People who were comfortable on the command line were loving ContainerPilot, but the majority of potential customers and sales conversations wanted a visual experience. Watching people see their applications when using CoPilot, the ContainerPilot UI was amazingly rewarding. I’m tremendously proud of all the detailed design, IA, and user-testing work the team did, even down to the UI toolkit.

Work at scale: I was lucky to work with teams on applications servicing billions of devices, and on the global infrastructure that supported those applications and exabyte-scale storage they needed.

Face failure: Even in a culture of candid debate, failures happen. Communicating with customers, learning lessons, and pulling together to figure out how to make sure those failures never happen again are top priorities.

Stay curious and keep an eye on the competition: There’s no room for not invented here in a successful organization. It’s up to product managers to know their competition and the broader landscape in which they’re operating, and regularly distill and share that context with the entire team. And when you’re thinking you’re ahead of the competition, look for ways to challenge yourself and question your assumptions.

Build a wonderful team: I’m tremendously happy to have built a team of engineers, product managers, editors, designers, and PgMs at Joyent. And just as happy to have worked with an even larger team of engineers, ops, support, marketing, and sales (and HR, and finance, and G&A, and…). Everybody worked tirelessly to get us to the acquisition, and then even more tirelessly to scale up and integrate our largest customer.

Shape and represent the company, its products, and its vision: I enjoyed the opportunity to drive the long-term vision of the company and its roadmap but finding ways to represent that vision was a real joy. My thought leadership talks on Everything We Need to Know About DevOps We Learned From Sci-Fi Movies and Lies We Tell Our Code were just two of the dozens of talks I’ve been privileged to do.

Listen to customers: Always be listening everywhere, but time and conversations with customers are critical to developing and validating an understanding of what works, what doesn’t, and what might work for your products. Be on the lookout for the faster horses problem/opportunity, ask the right questions, and listen carefully to criticism.