123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821 |
- <!doctype html><!-- This is a valid HTML5 document. -->
- <!-- Screen readers, SEO, extensions and so on. -->
- <html lang=fr>
- <!-- Has to be within the first 1024 bytes, hence before the <title>
- See: https://www.w3.org/TR/2012/CR-html5-20121217/document-metadata.html#charset -->
- <meta charset=utf-8>
- <!-- Why no `X-UA-Compatible` meta: https://stackoverflow.com/a/6771584 -->
- <!-- The viewport meta is quite crowded and we are responsible for that.
- See: https://codepen.io/tigt/post/meta-viewport-for-2015 -->
- <meta name=viewport content="width=device-width,minimum-scale=1,initial-scale=1,shrink-to-fit=no">
- <!-- Required to make a valid HTML5 document. -->
- <title>How to build great products (archive) — David Larlet</title>
- <!-- Generated from https://realfavicongenerator.net/ such a mess. -->
- <link rel="apple-touch-icon" sizes="180x180" href="/static/david/icons/apple-touch-icon.png">
- <link rel="icon" type="image/png" sizes="32x32" href="/static/david/icons/favicon-32x32.png">
- <link rel="icon" type="image/png" sizes="16x16" href="/static/david/icons/favicon-16x16.png">
- <link rel="manifest" href="/manifest.json">
- <link rel="mask-icon" href="/static/david/icons/safari-pinned-tab.svg" color="#5bbad5">
- <link rel="shortcut icon" href="/static/david/icons/favicon.ico">
- <meta name="apple-mobile-web-app-title" content="David Larlet">
- <meta name="application-name" content="David Larlet">
- <meta name="msapplication-TileColor" content="#da532c">
- <meta name="msapplication-config" content="/static/david/icons/browserconfig.xml">
- <meta name="theme-color" content="#f0f0ea">
- <!-- That good ol' feed, subscribe :p. -->
- <link rel=alternate type="application/atom+xml" title=Feed href="/david/log/">
-
- <meta name="robots" content="noindex, nofollow">
- <meta content="origin-when-cross-origin" name="referrer">
- <!-- Canonical URL for SEO purposes -->
- <link rel="canonical" href="http://www.defmacro.org/2013/09/26/products.html">
-
- <style>
- /* http://meyerweb.com/eric/tools/css/reset/ */
- html, body, div, span,
- h1, h2, h3, h4, h5, h6, p, blockquote, pre,
- a, abbr, address, big, cite, code,
- del, dfn, em, img, ins,
- small, strike, strong, tt, var,
- dl, dt, dd, ol, ul, li,
- fieldset, form, label, legend,
- table, caption, tbody, tfoot, thead, tr, th, td,
- article, aside, canvas, details, embed,
- figure, figcaption, footer, header, hgroup,
- menu, nav, output, ruby, section, summary,
- time, mark, audio, video {
- margin: 0;
- padding: 0;
- border: 0;
- font-size: 100%;
- font: inherit;
- vertical-align: baseline;
- }
- /* HTML5 display-role reset for older browsers */
- article, aside, details, figcaption, figure,
- footer, header, hgroup, menu, nav, section { display: block; }
- body { line-height: 1; }
- blockquote, q { quotes: none; }
- blockquote:before, blockquote:after,
- q:before, q:after {
- content: '';
- content: none;
- }
- table {
- border-collapse: collapse;
- border-spacing: 0;
- }
-
- /* http://practicaltypography.com/equity.html */
- /* https://calendar.perfplanet.com/2016/no-font-face-bulletproof-syntax/ */
- /* https://www.filamentgroup.com/lab/js-web-fonts.html */
- @font-face {
- font-family: 'EquityTextB';
- src: url('/static/david/css/fonts/Equity-Text-B-Regular-webfont.woff2') format('woff2'),
- url('/static/david/css/fonts/Equity-Text-B-Regular-webfont.woff') format('woff');
- font-weight: 300;
- font-style: normal;
- font-display: swap;
- }
- @font-face {
- font-family: 'EquityTextB';
- src: url('/static/david/css/fonts/Equity-Text-B-Italic-webfont.woff2') format('woff2'),
- url('/static/david/css/fonts/Equity-Text-B-Italic-webfont.woff') format('woff');
- font-weight: 300;
- font-style: italic;
- font-display: swap;
- }
- @font-face {
- font-family: 'EquityTextB';
- src: url('/static/david/css/fonts/Equity-Text-B-Bold-webfont.woff2') format('woff2'),
- url('/static/david/css/fonts/Equity-Text-B-Bold-webfont.woff') format('woff');
- font-weight: 700;
- font-style: normal;
- font-display: swap;
- }
-
- @font-face {
- font-family: 'ConcourseT3';
- src: url('/static/david/css/fonts/concourse_t3_regular-webfont-20190806.woff2') format('woff2'),
- url('/static/david/css/fonts/concourse_t3_regular-webfont-20190806.woff') format('woff');
- font-weight: 300;
- font-style: normal;
- font-display: swap;
- }
-
-
- /* http://practice.typekit.com/lesson/caring-about-opentype-features/ */
- body {
- /* http://www.cssfontstack.com/ Palatino 99% Win 86% Mac */
- font-family: "EquityTextB", Palatino, serif;
- background-color: #f0f0ea;
- color: #07486c;
- font-kerning: normal;
- -moz-osx-font-smoothing: grayscale;
- -webkit-font-smoothing: subpixel-antialiased;
- text-rendering: optimizeLegibility;
- font-variant-ligatures: common-ligatures contextual;
- font-feature-settings: "kern", "liga", "clig", "calt";
- }
- pre, code, kbd, samp, var, tt {
- font-family: 'TriplicateT4c', monospace;
- }
- em {
- font-style: italic;
- color: #323a45;
- }
- strong {
- font-weight: bold;
- color: black;
- }
- nav {
- background-color: #323a45;
- color: #f0f0ea;
- display: flex;
- justify-content: space-around;
- padding: 1rem .5rem;
- }
- nav:last-child {
- border-bottom: 1vh solid #2d7474;
- }
- nav a {
- color: #f0f0ea;
- }
- nav abbr {
- border-bottom: 1px dotted white;
- }
-
- h1 {
- border-top: 1vh solid #2d7474;
- border-bottom: .2vh dotted #2d7474;
- background-color: #e3e1e1;
- color: #323a45;
- text-align: center;
- padding: 5rem 0 4rem 0;
- width: 100%;
- font-family: 'ConcourseT3';
- display: flex;
- flex-direction: column;
- }
- h1.single {
- padding-bottom: 10rem;
- }
- h1 span {
- position: absolute;
- top: 1vh;
- left: 20%;
- line-height: 0;
- }
- h1 span a {
- line-height: 1.7;
- padding: 1rem 1.2rem .6rem 1.2rem;
- border-radius: 0 0 6% 6%;
- background: #2d7474;
- font-size: 1.3rem;
- color: white;
- text-decoration: none;
- }
- h2 {
- margin: 4rem 0 1rem;
- border-top: .2vh solid #2d7474;
- padding-top: 1vh;
- }
- h3 {
- text-align: center;
- margin: 3rem 0 .75em;
- }
- hr {
- height: .4rem;
- width: .4rem;
- border-radius: .4rem;
- background: #07486c;
- margin: 2.5rem auto;
- }
- time {
- display: bloc;
- margin-left: 0 !important;
- }
- ul, ol {
- margin: 2rem;
- }
- ul {
- list-style-type: square;
- }
- a {
- text-decoration-skip-ink: auto;
- text-decoration-thickness: 0.05em;
- text-underline-offset: 0.09em;
- }
- article {
- max-width: 50rem;
- display: flex;
- flex-direction: column;
- margin: 2rem auto;
- }
- article.single {
- border-top: .2vh dotted #2d7474;
- margin: -6rem auto 1rem auto;
- background: #f0f0ea;
- padding: 2rem;
- }
- article p:last-child {
- margin-bottom: 1rem;
- }
- p {
- padding: 0 .5rem;
- margin-left: 3rem;
- }
- p + p,
- figure + p {
- margin-top: 2rem;
- }
-
- blockquote {
- background-color: #e3e1e1;
- border-left: .5vw solid #2d7474;
- display: flex;
- flex-direction: column;
- align-items: center;
- padding: 1rem;
- margin: 1.5rem;
- }
- blockquote cite {
- font-style: italic;
- }
- blockquote p {
- margin-left: 0;
- }
-
- figure {
- border-top: .2vh solid #2d7474;
- background-color: #e3e1e1;
- text-align: center;
- padding: 1.5rem 0;
- margin: 1rem 0 0;
- font-size: 1.5rem;
- width: 100%;
- }
- figure img {
- max-width: 250px;
- max-height: 250px;
- border: .5vw solid #323a45;
- padding: 1px;
- }
- figcaption {
- padding: 1rem;
- line-height: 1.4;
- }
- aside {
- display: flex;
- flex-direction: column;
- background-color: #e3e1e1;
- padding: 1rem 0;
- border-bottom: .2vh solid #07486c;
- }
- aside p {
- max-width: 50rem;
- margin: 0 auto;
- }
-
- /* https://fvsch.com/code/css-locks/ */
- p, li, pre, code, kbd, samp, var, tt, time, details, figcaption {
- font-size: 1rem;
- line-height: calc( 1.5em + 0.2 * 1rem );
- }
- h1 {
- font-size: 1.9rem;
- line-height: calc( 1.2em + 0.2 * 1rem );
- }
- h2 {
- font-size: 1.6rem;
- line-height: calc( 1.3em + 0.2 * 1rem );
- }
- h3 {
- font-size: 1.35rem;
- line-height: calc( 1.4em + 0.2 * 1rem );
- }
- @media (min-width: 20em) {
- /* The (100vw - 20rem) / (50 - 20) part
- resolves to 0-1rem, depending on the
- viewport width (between 20em and 50em). */
- p, li, pre, code, kbd, samp, var, tt, time, details, figcaption {
- font-size: calc( 1rem + .6 * (100vw - 20rem) / (50 - 20) );
- line-height: calc( 1.5em + 0.2 * (100vw - 50rem) / (20 - 50) );
- margin-left: 0;
- }
- h1 {
- font-size: calc( 1.9rem + 1.5 * (100vw - 20rem) / (50 - 20) );
- line-height: calc( 1.2em + 0.2 * (100vw - 50rem) / (20 - 50) );
- }
- h2 {
- font-size: calc( 1.5rem + 1.5 * (100vw - 20rem) / (50 - 20) );
- line-height: calc( 1.3em + 0.2 * (100vw - 50rem) / (20 - 50) );
- }
- h3 {
- font-size: calc( 1.35rem + 1.5 * (100vw - 20rem) / (50 - 20) );
- line-height: calc( 1.4em + 0.2 * (100vw - 50rem) / (20 - 50) );
- }
- }
- @media (min-width: 50em) {
- /* The right part of the addition *must* be a
- rem value. In this example we *could* change
- the whole declaration to font-size:2.5rem,
- but if our baseline value was not expressed
- in rem we would have to use calc. */
- p, li, pre, code, kbd, samp, var, tt, time, details, figcaption {
- font-size: calc( 1rem + .6 * 1rem );
- line-height: 1.5em;
- }
- p, li, pre, details {
- margin-left: 3rem;
- }
- h1 {
- font-size: calc( 1.9rem + 1.5 * 1rem );
- line-height: 1.2em;
- }
- h2 {
- font-size: calc( 1.5rem + 1.5 * 1rem );
- line-height: 1.3em;
- }
- h3 {
- font-size: calc( 1.35rem + 1.5 * 1rem );
- line-height: 1.4em;
- }
- figure img {
- max-width: 500px;
- max-height: 500px;
- }
- }
-
- figure.unsquared {
- margin-bottom: 1.5rem;
- }
- figure.unsquared img {
- height: inherit;
- }
-
-
-
- @media print {
- body { font-size: 100%; }
- a:after { content: " (" attr(href) ")"; }
- a, a:link, a:visited, a:after {
- text-decoration: underline;
- text-shadow: none !important;
- background-image: none !important;
- background: white;
- color: black;
- }
- abbr[title] { border-bottom: 0; }
- abbr[title]:after { content: " (" attr(title) ")"; }
- img { page-break-inside: avoid; }
- @page { margin: 2cm .5cm; }
- h1, h2, h3 { page-break-after: avoid; }
- p3 { orphans: 3; widows: 3; }
- img {
- max-width: 250px !important;
- max-height: 250px !important;
- }
- nav, aside { display: none; }
- }
-
- ul.with_columns {
- column-count: 1;
- }
- @media (min-width: 20em) {
- ul.with_columns {
- column-count: 2;
- }
- }
- @media (min-width: 50em) {
- ul.with_columns {
- column-count: 3;
- }
- }
- ul.with_two_columns {
- column-count: 1;
- }
- @media (min-width: 20em) {
- ul.with_two_columns {
- column-count: 1;
- }
- }
- @media (min-width: 50em) {
- ul.with_two_columns {
- column-count: 2;
- }
- }
-
- .gallery {
- display: flex;
- flex-wrap: wrap;
- justify-content: space-around;
- }
- .gallery figure img {
- margin-left: 1rem;
- margin-right: 1rem;
- }
- .gallery figure figcaption {
- font-family: 'ConcourseT3'
- }
-
- footer {
- font-family: 'ConcourseT3';
- display: flex;
- flex-direction: column;
- border-top: 3px solid white;
- padding: 4rem 0;
- background-color: #07486c;
- color: white;
- }
- footer > * {
- max-width: 50rem;
- margin: 0 auto;
- }
- footer a {
- color: #f1c40f;
- }
- footer .avatar {
- width: 200px;
- height: 200px;
- border-radius: 50%;
- float: left;
- -webkit-shape-outside: circle();
- shape-outside: circle();
- margin-right: 2rem;
- padding: 2px 5px 5px 2px;
- background: white;
- border-left: 1px solid #f1c40f;
- border-top: 1px solid #f1c40f;
- border-right: 5px solid #f1c40f;
- border-bottom: 5px solid #f1c40f;
- }
- </style>
-
- <h1>
- <span><a id="jumper" href="#jumpto" title="Un peu perdu ?">?</a></span>
- How to build great products (archive)
- <time>Pour la pérennité des contenus liés. Non-indexé, retrait sur simple email.</time>
- </h1>
- <section>
- <article>
- <h3><a href="http://www.defmacro.org/2013/09/26/products.html">Source originale du contenu</a></h3>
- <p>If you believe
- that <a href="http://www.defmacro.org/2013/07/23/startup-lessons.html">sales
- fix everything</a>, it follows that most startups fail because they
- don’t ship a great product in a growing market before they run
- out of money. Assuming you’ve picked an explosive market, how do
- you go about building a great product?<sup>1</sup></p>
-
- <p>Building great products is hard, but the difficulty is greatly
- exacerbated if you have no good model for analyzing products and
- features. Without a model you’re left with a never-ending stream
- of feature ideas and half-informed shots in the dark. Some people can
- pull this off because they start out with a phenomenal product
- intuition. But most people aren’t blessed with this superpower
- on day one.</p>
-
- <p>I started out with terrible intuition (and didn’t even know
- it). Over the past three years I looked at our user metrics every day,
- creating a feedback loop to train my brain on what makes a good
- product. Eventually I got quite good at predicting the impact of any
- given feature, so I started thinking of a model that captures the
- essence of what I’ve learned.</p>
-
- <h1 id="the-three-bucket-model">The three bucket model</h1>
-
- <p>The most important aspect of product management is categorizing
- features into three buckets: gamechangers, showstoppers, and
- distractions. When I first started building products, all features
- looked roughly the same. Over time, I formed the three bucket model
- and now my mind automatically slots every feature into one of these
- buckets.</p>
-
- <p>Here is an example. Suppose you are building a new mobile phone. It
- has to be able to call people, or no one will buy it since it
- wouldn’t be much of a phone. But the reverse isn’t true
- — having voice calls won’t make anybody buy your phone
- because every other phone already does that. So for your mobile phone
- product, voice calls are a showstopper.</p>
-
- <p>On the other hand, suppose your phone could project videos onto a
- surface. No other phone does that, so this feature could be a
- gamechanger that excites a lot of consumers. Alternatively, it’s
- possible that most people won’t care about it at all, in which
- case it’s just a distraction.</p>
-
- <p>This example gives you three buckets to categorize any given feature:</p>
-
- <ul>
- <li><strong>A gamechanger.</strong> People will want to buy your product because of this feature.</li>
- <li><strong>A showstopper.</strong> People won’t buy your product if you’re missing this feature, but adding it won’t generate demand.</li>
- <li><strong>A distraction.</strong> This feature will make no measurable impact on adoption.</li>
- </ul>
-
- <p>Empirically, successful products have one to three gamechanging
- features, dozens of features that neutralize showstoppers, and very
- few features that are distractions. Your job is to build an intuition
- about your space to be able to tell these categories
- apart. That’s still pretty subtle (is a built-in phone projector
- a gamechanger or a distraction?), but at least this model gives you a
- plan of attack.</p>
-
- <h1 id="resource-allocation">Resource allocation</h1>
-
- <p>If you had infinite time, you could ignore these categories and
- blindly iterate on the product until it resonates with the market. But
- your time is finite. The longer you take to find a great product, the
- more likely you are to run out of cash, squander morale, or miss the
- market moving under your feet. Modeling product management in terms of
- the three categories is extremely valuable because it allows you to
- treat product management as a resource allocation problem.</p>
-
- <p>If you put any effort into distractions, you’re wasting
- resources. That much is obvious.</p>
-
- <p>If you’re doing more showstopper features than you absolutely
- need to, you’re wasting resources. Lack of copy-pasting on the
- first iPhone might have been a showstopper for some people, but Apple
- correctly determined that enough consumers would still buy the
- phone. There was no need to delay.</p>
-
- <p>If you put more effort into any given showstopper than the absolute
- minimum you can get away with, you’re wasting resources. The
- first iPhone had pretty bad voice quality, but it was good
- enough. Most people were willing to live with it. It made calls, and
- it wasn’t terrible. Improving the voice quality by another 10%
- would have made little measurable impact on adoption.</p>
-
- <p>If you’re doing more than three gamechanging features,
- you’re wasting resources. Empirically, few disruptive products
- are good at a dozen things. Shipping gamechanging features
- is <i>hard</i>. Three is probably the most you can get away with, and
- even that is a stretch.</p>
-
- <p>Finally, if you don’t pour enough creative energy into any given
- gamechanging feature, you’re wasting resources. If a
- gamechanging feature doesn’t absolutely blow people away,
- it’s not much of a gamechanger — it’s just a
- distraction. In this category you can’t go half way.</p>
-
- <p>You can get away with making some mistakes. Very few products
- absolutely nail this on launch. But most first time product managers
- break all of these rules all the time, probably because they’re
- not aware of them. Break these rules at your own peril. The fewer
- mistakes you make relative to your competition, the better. Every
- mistake can be incredibly costly. Make too many and someone else will
- run circles around you.</p>
-
- <h1 id="craftsmanship">Craftsmanship</h1>
-
- <p>The trickiest part of building products is learning how to tell the
- difference between the categories and knowing when a given category is
- full. Is a built-in phone projector a gamechanger or a distraction? If
- it’s a gamechanger, is it big enough to attract sufficient
- demand, or do you need another gamechanger? If you invented the
- technology to increase voice quality by 50%, does that become a
- gamechanger or is it still just a showstopping feature? How about
- 200%? How many showstoppers do you have to neutralize to build a
- compelling phone?</p>
-
- <p>I have no idea what the answers are for the mobile phone market, but
- in my area, unstructured data, I can look at any given feature and
- tell which category it falls into quite easily. Sometimes I’m
- wrong, but that’s ok. I just have to be wrong less often than my
- competitors.</p>
-
- <p>The best way to build this intuition is to talk to a lot of
- people. Talk to potential users. What do they think? Talk to people
- who tried to build a product in your space and failed. What can you
- learn from their failure? Talk to competitors. How do they approach
- the problem? Talk to engineers in big companies. What can they tell
- you about the state of technology? Talk to other entrepreneurs in
- adjacent spaces, investors, journalists, grad students, professors,
- even the naysayers. The best way to get a sense of taste in a given
- space is to inject yourself into the industry and talk to as many
- people as you can.</p>
-
- <h1 id="buyers-stakeholders-and-pundits">Buyers, stakeholders, and pundits</h1>
-
- <p>The sooner you can learn about the history of the space, the state of
- the technology, the opinions of potential users, and the direction of
- your competition, the sooner you can form a coherent view of the space
- and develop a unique vision for your product. But be
- careful. It’s easy to start taking advice from the wrong people.</p>
-
- <p>Suppose you’ve decided to design your mobile phone in a form
- factor of a walkie talkie for construction workers, and you’ve
- determined that the best way to sell it is to construction managers
- top-down. If you talk to construction workers, they might be enamored
- by beautiful icons and an unusual color scheme. You might determine
- that the unique design of your phone is a gamechanger. But ultimately,
- it’s the construction manager who’s writing the check. For
- the construction manager, a beautiful design is nice, but it
- isn’t a gamechanger. It doesn’t help him run the business
- any better than he did before.</p>
-
- <p>For complex business sales, you have to pay attention to all the
- parties and make sure all the stakeholders are satisfied. Are the
- construction workers strong influencers on the manager’s
- decision? If so, spending time on a unique design might not be a bad
- idea. If not, you might be wasting your time.</p>
-
- <p>It’s true even for consumer products. If you’re designing
- a luxury phone and pricing it above every other phone on the market,
- do your customers have to convince their spouse? Do most families make
- shared decisions about buying luxury items, or do people splurge on
- luxury items independently? If they have to convince their spouse, can
- you add a feature to make it easier? Find out!</p>
-
- <p>Beware of noise. Learn the difference between your users and people
- who are just commenting. Everyone you talk to will have an
- opinion. Early on it can be tempting to design a product based on
- feedback from industry pundits. But a feature is only a gamechanger if
- the person signing the proverbial check recognizes it as
- one. Otherwise, it’s a distraction. Industry pundits can be
- extremely useful for understanding the state of your field, but
- they’re rarely the ones to buy your product. If you design your
- product around their feedback, you’ll find that there is nobody
- to buy it in the end.</p>
-
- <p>A corollary of this is that you can’t design a great product
- unless you live, eat, and breathe like your users do. You need to
- know <i>exactly</i> who your user is, what their problems are,
- how <i>they</i> perceive your product, and who helps them make buying
- decisions. Your intuition has to mirror how the customers will
- perceive your product. Categorizing features is only useful if
- it’s a good predictor of your actual users’s
- response. Otherwise, you’re just wasting time.</p>
-
- <h1 id="aggregate-gamechangers">Aggregate gamechangers</h1>
-
- <p>There is a subtlety to the model we haven’t discussed so
- far. Some features aren’t sufficiently impressive on their own,
- but become gamechangers in aggregate. For example, suppose you design
- a unique set of icons for your phone. Is that a gamechanger? Probably
- not. What about a unique color scheme? It doesn’t seem like a
- gamechanger either. How about a unique family of phone cases?
- It’s hard to imagine people buying a phone because of a pretty
- case.<sup>2</sup> But what if you put these features together? A
- unique design direction that combines a novel icon set, color scheme,
- and family of phone cases sounds like it might be a sufficient
- gamechanger to attract consumers.</p>
-
- <p>Features that become gamechangers in aggregate are dangerous for three
- reasons. Firstly, it becomes harder to tell what combination of
- individual features is and isn’t a gamechanger. Secondly,
- aggregate gamechangers are expensive — instead of making a
- couple of good decisions on a feature, you have to make dozens or
- hundreds of good decisions for a whole family of features. Thirdly, it
- makes it easier to convince yourself that if you add just one more
- feature, you’ll strike a gamechanger. Building great products is
- already difficult. Introducing a subtlety like this makes it even
- harder.</p>
-
- <p>Many products do succeed in exactly this way, but if possible, try to
- avoid it. If you have no choice but to resort to aggregate
- gamechangers, it probably means you’re working in a relatively
- mature market. Often, that’s ok, but it should prompt you to do
- some soul searching. Is it really worth being in this market, or does
- it make sense to find another one where you can innovate more easily?</p>
-
- <h1 id="product-mission">Product mission</h1>
-
- <p>Suppose you’ve developed product intuition to apply the three
- bucket model to your field. You can easily (and correctly) categorize
- features. You’re now ahead of most product managers. But
- you’re still not quite done. There are a few problems with this
- approach:</p>
-
- <ul>
- <li>If you’re categorizing features ad-hoc, it’s easy to make mistakes and then construct a rhetoric in your mind to convince yourself that you’ve done the right thing.</li>
- <li>While you’re building the product, you’ll have to be a part of every single decision because other people have no guidance.</li>
- <li>Your engineers will get frustrated, because they’ll think you’re pulling decisions out of thin air.</li>
- <li>Before the product is done you’ll have to convince many other people to help you — journalists, investors, potential hires, and customers. Convincing people is hard if you’re making decisions ad-hoc.</li>
- </ul>
-
- <p>A great way to get around these problems is to write down a product
- mission. Think of it as a function that accepts a given feature as an
- argument, and returns one of the three categories above. A good
- function definition is concise, understandable, and
- repeatable. Ideally after reading it, most people on your team will be
- able to categorize features themselves in the same way you would.</p>
-
- <p><a href="https://github.com/rethinkdb/rethinkdb/issues/1000">Here</a> is a humorous product mission we came up with for RethinkDB that worked surprisingly well:</p>
-
- <blockquote>
- <p><strong>Database tools should be indistinguishable from magic</strong><br/>
- Surprise and amaze people with developer tools for building real-time, data-driven web applications they could only dream of building, and bring sheer joy and simplicity to the process of building great software.</p>
- </blockquote>
-
- <p>On the surface these two sentences don’t say very much, but if
- you dig in a little, this product mission has surprisingly high
- information density. It tells people we’re building a
- database. It tells people we treat the product as a developer tool
- first. This resolves the tension between developer features (like the
- query language) and operations features (like monitoring). All of our
- gamechanging features revolve around developers. We treat operations
- as a showstopper. It explains what we expect our users to do with
- RethinkDB (build real-time, data-driven web applications). It gives
- people a sense of how far we’ll go on certain features (surprise
- and amaze). Being good enough for developers isn’t enough. These
- people spend many hours a day using our software — we want to
- make the experience <i>pleasant</i>. It suggests that we are willing
- to accept more complex implementations to make our users’s lives
- easier. It guides us to build features that let developers build new
- types of applications, not just the ones that already
- exist. It’s self-aware and leaks a healthy sense of humor we
- have as a team. This gives people a sense of who we are. We can test
- feature proposals against this product mission, and with a bit of
- additional shared knowledge it lets our team members independently
- categorize features in roughly the same way.</p>
-
- <p>It took us three years to understand what we’re doing well
- enough to come up with this product mission. If we’d had it on
- day one, it would probably have cut development time in half —
- maybe more. When you’re building a product, the mission should
- be the first thing you work on. If your mental model is good enough to
- write a product mission that inspires everyone in your company,
- everything else will fall into place.</p>
-
- <hr/>
-
- <p><em><sup>1</sup> I don’t mean to imply that picking a good market
- is easier than building a great product. In fact, the opposite is
- true. It’s far easier to get a handle on product management, so
- I decided to tackle this subject first. Aside from great products and
- market growth, there are also questions of distribution, economics,
- regulated markets, and other subtleties. But the number of early stage
- software startups that fail for these reasons pales in comparison to
- the number of startups that pick small markets or don’t manage
- to deliver great products on time.</em></p>
-
- <p><em><sup>2</sup> In practice it often turns out that people do buy phones because of unique colors or cases. But I’m ignoring this subtlety to focus on a larger point.</em></p>
-
- <hr/>
-
- <p><em>Thanks to Michael Glukhovsky and Michael Lucy for reviewing this post.</em></p>
- </article>
- </section>
-
-
- <nav id="jumpto">
- <p>
- <a href="/david/blog/">Accueil du blog</a> |
- <a href="http://www.defmacro.org/2013/09/26/products.html">Source originale</a> |
- <a href="/david/stream/2019/">Accueil du flux</a>
- </p>
- </nav>
-
- <footer>
- <div>
- <img src="/static/david/david-larlet-avatar.jpg" loading="lazy" class="avatar" width="200" height="200">
- <p>
- Bonjour/Hi!
- Je suis <a href="/david/" title="Profil public">David Larlet</a>, je vis actuellement à Montréal et j’alimente cet espace depuis 15 ans. <br>
- Si tu as apprécié cette lecture, n’hésite pas à poursuivre ton exploration. Par exemple via les <a href="/david/blog/" title="Expériences bienveillantes">réflexions bimestrielles</a>, la <a href="/david/stream/2019/" title="Pensées (dés)articulées">veille hebdomadaire</a> ou en t’abonnant au <a href="/david/log/" title="S’abonner aux publications via RSS">flux RSS</a> (<a href="/david/blog/2019/flux-rss/" title="Tiens c’est quoi un flux RSS ?">so 2005</a>).
- </p>
- <p>
- Je m’intéresse à la place que je peux avoir dans ce monde. En tant qu’humain, en tant que membre d’une famille et en tant qu’associé d’une coopérative. De temps en temps, je fais aussi des <a href="https://github.com/davidbgk" title="Principalement sur Github mais aussi ailleurs">trucs techniques</a>. Et encore plus rarement, <a href="/david/talks/" title="En ce moment je laisse plutôt la place aux autres">j’en parle</a>.
- </p>
-
- <p>
- Voici quelques articles choisis :
- <a href="/david/blog/2019/faire-equipe/" title="Accéder à l’article complet">Faire équipe</a>,
- <a href="/david/blog/2018/bivouac-automnal/" title="Accéder à l’article complet">Bivouac automnal</a>,
- <a href="/david/blog/2018/commodite-effondrement/" title="Accéder à l’article complet">Commodité et effondrement</a>,
- <a href="/david/blog/2017/donnees-communs/" title="Accéder à l’article complet">Des données aux communs</a>,
- <a href="/david/blog/2016/accompagner-enfant/" title="Accéder à l’article complet">Accompagner un enfant</a>,
- <a href="/david/blog/2016/senior-developer/" title="Accéder à l’article complet">Senior developer</a>,
- <a href="/david/blog/2016/illusion-sociale/" title="Accéder à l’article complet">L’illusion sociale</a>,
- <a href="/david/blog/2016/instantane-scopyleft/" title="Accéder à l’article complet">Instantané Scopyleft</a>,
- <a href="/david/blog/2016/enseigner-web/" title="Accéder à l’article complet">Enseigner le Web</a>,
- <a href="/david/blog/2016/simplicite-defaut/" title="Accéder à l’article complet">Simplicité par défaut</a>,
- <a href="/david/blog/2016/minimalisme-esthetique/" title="Accéder à l’article complet">Minimalisme et esthétique</a>,
- <a href="/david/blog/2014/un-web-omni-present/" title="Accéder à l’article complet">Un web omni-présent</a>,
- <a href="/david/blog/2014/manifeste-developpeur/" title="Accéder à l’article complet">Manifeste de développeur</a>,
- <a href="/david/blog/2013/confort-convivialite/" title="Accéder à l’article complet">Confort et convivialité</a>,
- <a href="/david/blog/2013/testament-numerique/" title="Accéder à l’article complet">Testament numérique</a>,
- et <a href="/david/blog/" title="Accéder aux archives">bien d’autres…</a>
- </p>
- <p>
- On peut <a href="mailto:david%40larlet.fr" title="Envoyer un courriel">échanger par courriel</a>. Si éventuellement tu souhaites que l’on travaille ensemble, tu devrais commencer par consulter le <a href="http://larlet.com">profil dédié à mon activité professionnelle</a> et/ou contacter directement <a href="http://scopyleft.fr/">scopyleft</a>, la <abbr title="Société coopérative et participative">SCOP</abbr> dont je fais partie depuis six ans. Je recommande au préalable de lire <a href="/david/blog/2018/cout-site/" title="Attention ce qui va suivre peut vous choquer">combien coûte un site</a> et pourquoi je suis plutôt favorable à une <a href="/david/pro/devis/" title="Discutons-en !">non-demande de devis</a>.
- </p>
- <p>
- Je ne traque pas ta navigation mais mon
- <abbr title="Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33.184162340">hébergeur</abbr>
- conserve des logs d’accès.
- </p>
- </div>
- </footer>
- <script type="text/javascript">
- ;(_ => {
- const jumper = document.getElementById('jumper')
- jumper.addEventListener('click', e => {
- e.preventDefault()
- const anchor = e.target.getAttribute('href')
- const targetEl = document.getElementById(anchor.substring(1))
- targetEl.scrollIntoView({behavior: 'smooth'})
- })
- })()
- </script>
|