{"id":2228,"date":"2016-09-03T12:00:38","date_gmt":"2016-09-03T18:00:38","guid":{"rendered":"http:\/\/www.mooreds.com\/wordpress\/?p=2228"},"modified":"2018-01-12T07:11:54","modified_gmt":"2018-01-12T13:11:54","slug":"product-lessons","status":"publish","type":"post","link":"https:\/\/www.mooreds.com\/wordpress\/archives\/2228","title":{"rendered":"Early Product Lessons"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\"alignright wp-image-2229 size-medium\" src=\"http:\/\/www.mooreds.com\/wordpress\/wp-content\/uploads\/2016\/08\/fence-238475_640-300x225.jpg\" alt=\"fence-238475_640\" width=\"300\" height=\"225\" srcset=\"http:\/\/edit.mooreds.com\/wordpress\/wp-content\/uploads\/2016\/08\/fence-238475_640-300x225.jpg 300w, http:\/\/edit.mooreds.com\/wordpress\/wp-content\/uploads\/2016\/08\/fence-238475_640.jpg 640w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/>I wanted to jot down some lessons I&#8217;ve learned being an early stage technical founder of an unfunded startup, from no product or revenue -&gt; product and revenue. (Of <a href=\"http:\/\/www.thefoodcorridor.com\/\">The Food Corridor<\/a>, if you&#8217;re interested in the startup.) I had the luxury of a co-founder who had spent years immersed in the problem space and months researching the niche. If you can find that, it really really helps in product development.<\/p>\n<p>That said, here are some other lessons. For an idea of our timeline, we did a\u00a0build or buy or both\u00a0evaluation in March, started building in April, did beta testing in May and launched June 1.<\/p>\n<p>&nbsp;<\/p>\n<p><strong>Determine features through demand\/pull, rather than push<\/strong><\/p>\n<p>Once you have a product that you can show users, show it to them!<\/p>\n<p>It will be embarrassing. \u00a0Record all their feedback and note\u00a0patterns (we did a month of beta testing, as noted above). Then, let the user requests pull features from you, rather than push features to them. This serves a couple of purposes:<\/p>\n<ul>\n<li>people will know that you are hearing them, and will be more forgiving of inevitable issues<\/li>\n<li>you will build features that people want to use<\/li>\n<li>you&#8217;ll develop a sense of users needs<\/li>\n<li>you&#8217;ll learn to politely say no to requests that are off base\/only useful to one user<\/li>\n<\/ul>\n<p><strong>Everything is broken<\/strong><\/p>\n<p>Everything is borked, all the time. At an early stage startup you just don&#8217;t have time to do everything right (nor should you, because the wrong thing perfectly engineered is a waste). So there will be features that are half done, or edge cases unhandled, or undocumented build systems. Do the best you can, and realize that it gets better, but make\u00a0your priority getting something out that users can give feedback from. &#8220;<a href=\"http:\/\/startupquote.com\/post\/81851827365\">Usage is like oxygen for ideas<\/a>.&#8221; &#8211; Matt Mullenweg<\/p>\n<p>You have to walk a fine line between building something quickly and building something that you can build on later. \u00a0Get used to ambiguity and brokenness and apologizing to the customer.\u00a0 (But not too used to the apologies!)<\/p>\n<p><strong>UX\/UI polish is relative<\/strong><\/p>\n<p>Our app is a number of open source gems smashed together with some scaffolded ruby code. \u00a0The underlying framework had a decent look and feel, but there are definitely some UI and UX holes. \u00a0I thought I&#8217;d have to spend some time working on those, but our customers thought the product was beautiful and useful. \u00a0My standards were different than their standards.<\/p>\n<p>That doesn&#8217;t mean that the\u00a0app can look horrible, but a plain old bootstrap theme or one of the other common CSS themes is ok. You need to know your audience&#8211;many people are stuck using a mix of software and are used to navigating clunky\u00a0user interfaces. If your interface is just decent, but still solves the problem, you&#8217;ll be OK. \u00a0Of course, you&#8217;ll want to solve gross UX issues eventually, but a startup is all about balance. \u00a0A friend of mine gave me the advice: &#8220;don&#8217;t allow\u00a0your users to make any mistakes&#8221;.<\/p>\n<p><strong>Favor manual process for complex edge cases<\/strong><\/p>\n<p>There have been a couple of situations during the build where a lot of work was needed to handle an edge case. For example, prorating monthly plans. Once you start thinking about prorating in depth, it turns out to be a really interesting problem with a lot of edge cases. But guess what? \u00a0For your startup, edge cases can be a wild goose chase.<\/p>\n<p>When an edge case rears its head, you should consider the following options (in preferential order).<\/p>\n<ul>\n<li>can you outsource the complexity (Stripe handles proration, for example, and I guarantee you they handle\u00a0edge cases you don&#8217;t).<\/li>\n<li>can you make it a manual process? If it doesn&#8217;t happen that often and\/or a real time response is unneeded, you can often get by with a manual solution. This may be partly automated, for example, an SQL query that generates an email to a human who can handle the exceptional situation.<\/li>\n<li>if neither of the above apply, can you defer it? Maybe for a few months, maybe for just a few weeks. But sometimes requirements change and you learn things from users that may make this edge case less important.<\/li>\n<li>if all of the above don&#8217;t apply, you may need to bite the bullet and write code.<\/li>\n<\/ul>\n<p><strong>Back end and front end development doesn&#8217;t have to be synchronized<\/strong><\/p>\n<p>Most users equate the front end with the complete product. Most developers know that, just like an iceberg, there&#8217;s a lot of back end processing hidden in any project. But guess what? When you are getting feedback from users, some of the backend processes need to work, but many don&#8217;t. For example, we had a billing system that handled monthly invoices. We didn&#8217;t need to build the billing system while we were getting feedback from users on what type of charges they needed to handle. We did, however, need to know that we could build it. So make sure you can build the backend system to support your front end system, perhaps by building one path through, but defer the full build-out until you have to.<\/p>\n<p>What about you? \u00a0Any tips for early stage product engineering?<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I wanted to jot down some lessons I&#8217;ve learned being an early stage technical founder of an unfunded startup, from no product or revenue -&gt; product and revenue. (Of The [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6,77,82],"tags":[],"class_list":["post-2228","post","type-post","status-publish","format-standard","hentry","category-programming","category-rails","category-stripe"],"_links":{"self":[{"href":"https:\/\/www.mooreds.com\/wordpress\/wp-json\/wp\/v2\/posts\/2228","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mooreds.com\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.mooreds.com\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.mooreds.com\/wordpress\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mooreds.com\/wordpress\/wp-json\/wp\/v2\/comments?post=2228"}],"version-history":[{"count":9,"href":"https:\/\/www.mooreds.com\/wordpress\/wp-json\/wp\/v2\/posts\/2228\/revisions"}],"predecessor-version":[{"id":2632,"href":"https:\/\/www.mooreds.com\/wordpress\/wp-json\/wp\/v2\/posts\/2228\/revisions\/2632"}],"wp:attachment":[{"href":"https:\/\/www.mooreds.com\/wordpress\/wp-json\/wp\/v2\/media?parent=2228"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mooreds.com\/wordpress\/wp-json\/wp\/v2\/categories?post=2228"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mooreds.com\/wordpress\/wp-json\/wp\/v2\/tags?post=2228"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}