Shipping Greatness Chris Vander Mey Published by O’Reilly Media Beijing ⋅ Cambridge ⋅ Farnham ⋅ Köln ⋅ Sebastopol ⋅ Tokyo Preface Shipping Is Greatness Designing, building, and launching the right software is referred to as shipping in the software industry. Shipping software is not packing boxes and it’s not only hosting launch parties. Shipping is finding the right product, working through a complex and ever-changing process, and doing it quickly. Shipping is one of the few truly new crafts of our century. It’s newer than management because managers have been managing people for a long time. Business execs have been waving their hands at strategy for just as long, if you count stockpiling mammoth bones as inventory control. And marketers have been trying to sell another sprocket or cog since before sprockets and cogs existed. But shipping? Shipping software didn’t exist when you and I were born. Heck, it barely existed when your kids were born, and there are no classes you can take in school that will teach you how to do it. Shipping software is new, but it’s also incredibly meaningful because it solves many problems. Shipping solves money problems, because your investors are always looking for results before they give you more money. It solves customer problems because the features and fixes your customers need are tied up in your ability to ship. It solves team problems because nothing is better for morale than making progress. If fame, fortune, and the pursuit of happiness are the question, shipping great software is the answer. If you can ship, you can make nearly any software business successful, and you can compete with businesses that have deeper pockets because you can get to market faster. But if you screw it up—by missing your date, by launching a product nobody cares about, or by building a beautiful product that nobody hears about— your team will be grumpy, customers will write to the Big Boss, and best case, you don’t get promoted. Worst case, the next project on which you and your team work will involve résumé polishing. Or maybe polishing cars. So, if you can ship, you’ll be personally and professionally successful. But it’s damn hard for teams to ship, which is where you come in. This book is your shortcut to a degree in shipping. Think about it like this: McKinsey and Company, the world-famous, hyperexpensive, fancy-pants management consulting company, hires a new crop of science PhDs each year and puts them in a two-week “mini MBA” program. They then expect these PhDs to do pretty much what the MBAs do, even though the PhDs have two weeks of training to the MBAs’ two years. The goal of this book is to provide you with the same simplified, no-BS approach to doing your job—or understanding your team lead’s job. This book exists because I needed it when I started trying to ship software, and I see product managers, test leads, engineering managers, and team leads of all types who are struggling, just as I did. I see them going through the same special torture that I underwent when I entered this industry—but I had the good fortune to have great teachers attendant at my hazing: Dartmouth, Amazon, Google, and my own mistaken ventures. My first teacher was my own company—I was arrogant enough to think that since I could write software I could do everything else required to ship it. You know, define the minimum viable product, manage the project, iterate, release, market, and so on. I learned many valuable lessons, hubris among them. I then joined another startup as the chief technology officer, and spent years trying to make it big. I learned (mostly) different lessons there, but repeated the class in hubris. Abashed, I went to Dartmouth, and studied at the Thayer School of Engineering and the Tuck School of Business, earning a master’s of engineering management degree. I left Dartmouth and joined Amazon, where I was a technical product program manager and an engineering manager (a.k.a. two-pizza team leader). On projects like customer reviews, identity, and fraud-fighting infrastructure, I saw how Jeff Bezos and his lieutenants worked and learned to mimic how some of the best in the business did the job. I eventually went to Google, and as a senior product manager I spent over five years focusing on scalability, business strategy, and the interpersonal dynamics inherent in software teams. I grew Google Pack, shipped the Google Update service used in dozens of products, and helped build the Google Apps program through mobile sync services, connectors for Microsoft Outlook, and data import tools. I launched Google’s innovative multiway video products, now featured as Google Hangouts. I even worked on Maps for a while. I saw the company grow and change, but more important, I saw successes and failures and learned more lessons about the best ways to ship software. The best leaders at Amazon and Google have a lot to teach. Remember, this business is new, so the techniques, processes, and tricks you need to ship software weren’t developed until after Windows became dominant. Microsoft’s old approach to shipping software came out of large-scale hard-goods engineering processes. The Internet made three-year development cycles, shrink-wrapped floppy disk distribution, and Microsoft’s old way obsolete. The rapid iteration, deployment, and adoption afforded by the Internet enabled engineers to develop rapid application development frameworks, usability studies, and new process frameworks like scrum. As a result, most of us are making this stuff up as we go along, and the guidance you can glean from the relatively few executives who are part of the success of Amazon and Google is critical. The lessons I’ve learned and distilled in this book cover the entire software life cycle because as you try to ship software you will face challenges in product, program, project, and engineering management. Shipping is not just project management and convincing engineers to work faster. If your job is shipping software, you must have an extremely broad skill set that ranges from deeply technical to highly creative, and along the way you must provide cogent business insight. You’ll probably do everything from managing people to writing test cases to making mocks in Photoshop. If you’re up for a challenge that’s second to none, this is your gig. To put this in perspective, shipping is a painful, confusing, and difficult job that’s generally only rewarding if you’re really good at it. The job is like playing golf on gravel fairways—if you suck at it, you’ll spend all day grinding your clubs to bits and wandering around in the pounding sun trying to find your ball, which will be hopelessly unidentifiable amidst the rocks. But if you’re a great golfer, you’ll hit those sweet shots that put you onto the soft green and when you look around, surrounded by sweating, confused duffers, you’ll know what it’s about. It’s glorious. This book covers two major things that will help you be great at shipping. Part One describes a process for shipping that many of the best teams from Amazon and Google use. I work from the beginning—a customer problem—through the details of user experience design, project management, and testing to the end result of launching. Part Two contains techniques, best practices, and skills that a team lead who’s been asked to ship software needs. While Part One is arranged in the order in which you’ll follow the process, you can read Part Two in whatever order you like, and refer to it when you have a particular challenge. The tools and tips herein are blunt and directional; it’s up to you to sharpen them and make them your own, just as Wyatt Earp would remove the safety and polish the hammer cam of his Colt so he could shoot faster. If you’re looking for an in- depth analysis of software strategy, this book is not for you. But if you’re looking for a tried-and-true template that will carry you through a three-day strategy offsite and align your team for success, read on. Acknowledgments I owe a special thanks to Brian Marsh, one of the best engineering managers in the world, for sharing an office with me for much of the past eight years and helping me figure this stuff out. He’s responsible for much of the good advice you read (and none of the bad jokes). Aaron Abrams was my best reader and the first to say, “Make it more snarky,” for which I am very thankful. Thanks to Ali Pasha, Steve Saito, Matt Shobe, and Mike Smith for reading and providing great feedback on the manuscript. Most of all, thank you, Tim, for your patience, help with the tone, and endless support. Part One. The Shipping Greatness Process ANYONE CAN SHIP SOFTWARE that works great and leaves us feeling great, but few of us actually do. More often than not, our products arrive late, miss the real customer need, or cause you and I to develop another ulcer. This is a problem. One of the reasons we have these problems is that we don’t know how to put all the pieces of the shipping puzzle together in the right way. We sometimes forget essential steps or get wrapped up in the wrong details, and we end up charging blindly ahead, depending on luck, hustle, and good will to drive the product out the door. This approach is not sustainable or efficient, which is why the best teams at Amazon don’t work like this. It’s also not fun, which is why the best teams at Google don’t work like this either. Luckily for you, the path to shipping greatness is composed of only seven straightforward steps that any team lead can follow, and generally results in both success and fun. Step 1 is defining the right product. You won’t achieve greatness if you do a fantastic job shipping crap. The right product is one that serves a real customer need that many customers share. Meeting this need in a unique and meaningful way is your mission, and you’ll organize all your efforts to ship around this mission. For example, your mission will inform your strategy, which is your unique approach to your market. Once you have a mission and strategy, your product will be much more clearly defined and much less likely to be crap, because it will conform to a great strategy. You’re already done with step one. Shipping step 2 is to define your product as clearly and with as much detail as you can handle. There are 10 major ways to do this, including writing a press release, building a living FAQ, writing the functional spec, and more. By the time you’ve completed these 10 steps, you’ll have aligned your engineering team, engaged with your management or investors and gained their buy-in, and generally excited everyone. You may also be ready for a break. Step 3 is designing the user experience. Working from the user out, you’ll iterate with your design team to build a beautiful, intuitive, and simple user experience. You’ll ask questions to keep the team focused on your mission, and you’ll help glue the engineering and design teams together so you design something that can be built with software. In step 4, you need to do some basic project management—not too much and not too little. When your engineering team has mockups and requirements that they can write code against, you will start to do some basic project management. You’ll help your team track their deliverables, you’ll help them say no, and you’ll keep the scope in check. Step 5 is when you start testing, because code will start coming in and the product will start getting real. Your velocity as a team will increase, and your testing organization will start to work in earnest. This is a less creative but very exciting time. As the team lead, you’ll lead a bug triage process and make important decisions about what changes you can afford to take in your initial version and what must be fixed before you ship. You’re almost ready to launch in step 6, but before you release your software you need to ensure that you know what success will look like, and that means establishing metrics by which you’ll measure greatness. Because you’re following a good process, your team should have some engineering bandwidth available at this point to help instrument parts of your user experience that weren’t already instrumented and to help build dashboards. Your bug count will hit zero and you’ll be ready to measure your launch. Time to buy the champagne and put it in the fridge. Finally, Step 7 is when you launch. Launching a great product is not as simple as just uploading some files to a server. You will need to plan your marketing and PR, and make sure that you go through a launch checklist. Invariably, something will go wrong and you’ll need to cope with it; if you cope with your launch crisis gracefully, most users won’t notice and you’ll be on a path to greatness, which you can see in your dashboards. Shipping doesn’t seem too hard at this level of detail, and that’s the idea behind the process. Each step has concrete tasks and will build on the prior stages, helping ensure that you build a happy team and a successful project. Throughout these steps you will find that we’re constantly working to reduce the scope of the project, simplify the user experience, and move more quickly from one stage to the next. Moving through this process quickly will help you iterate, and iterations are great because each iteration is informed by customer feedback about the previous one. Even though each version of the product is different, the process will be the same and you’ll work through the same steps. So now let’s look at them in detail, starting with defining your mission and strategy. Chapter 1. How to Build a Great Mission and Strategy SHIPPING IS ABOUT MEETING customer needs well and quickly, in addition to becoming rich and famous. Your mission, therefore, is to solve a customer problem. Your strategy is your unique approach to meeting a need that a group of people—a market segment—shares. It sounds pretty simple, and it is, in theory. Driving a racecar is pretty simple in theory, too—just brake at the right point, turn in at the right point, accelerate at the right point. In practice, figuring out how to drive a racetrack at a car’s peak performance is very hard, just like discovering exactly what customers need and aligning your mission and strategy with that need. To accomplish these tasks, you’ll need some special skills and a very careful focus on a few important things. So let’s break them down a bit and give you the tools you’ll need for this special task. Start by finding a big need that a lot of people share. How to Find the Right Need to Meet The “wow, this is really cool; let’s make it!” road to product definition does not even come close to the wealth, fame, and success road signs. Your business likely caters to a segment of customers who have many different problems; how do you identify the critical problem you are going to solve first? Let’s try driving the road backward, starting with those who are actually successful, famous, and yes, ridiculously wealthy. Jeff Bezos, CEO of Amazon, has made a small fortune for his company and shareholders by constantly emphasizing that teams “focus on customers, not competition.” The great clarity that this distinction provides is that your team remains problem focused, rather than reactive. Similarly, Larry Page, CEO of Google, frequently says, “Start with the customer and work outward.” His notion is similar, albeit less focused on strategy. From Larry and Jeff, we can learn that you have to focus on a real customer problem. Sergey Brin, Google founder and president, brings another critical bit of wisdom to
Description: