{"id":1676,"date":"2013-07-19T00:00:00","date_gmt":"2013-07-18T22:00:00","guid":{"rendered":"https:\/\/wwwneu.strehle.de\/tim\/weblog\/archives\/2013\/07\/19\/1628\/"},"modified":"2013-07-19T00:00:00","modified_gmt":"2013-07-18T22:00:00","slug":"1628","status":"publish","type":"post","link":"https:\/\/www.strehle.de\/tim\/weblog\/archives\/2013\/07\/19\/1628\/","title":{"rendered":"Jeff Atwood: The Rule of Three"},"content":{"rendered":"<p>Jeff Atwood \u2013 <a href=\"http:\/\/www.codinghorror.com\/blog\/2013\/07\/rule-of-three.html\">The Rule of Three<\/a>:<\/p>\n<p>\u201cWe <em>think<\/em> we&#8217;ve built software that is a general purpose solution to some set of problems, but we are almost always wrong.<\/p>\n<p>[\u2026] To build something truly reusable, you must convince three different audiences to use it thoroughly first.<\/p>\n<p>[\u2026] One customer or user or audience might be a fluke. Two gives you confidence that maybe, just maybe, you aren&#8217;t getting lucky this time. And three? Well, three is a magic number.<\/p>\n<p>[\u2026] We&#8217;re spending all our effort slowly, methodically herding the software through these three select partners, one by one, tweaking it and adapting it for each community along the way, making sure that each of our partners is not just happy with our discussion software but ecstatically happy, before we proceed to even tentatively recommend Discourse as any kind of general purpose discussion solution.\u201d<\/p>\n<p>I have long experienced this to be true. (It\u2019s painful, because we\u2019re in the \u201cEnterprise Software\u201d business and generate way too much code used by only one or two clients\u2026)<\/p>\n<p>It\u2019s also true at a smaller scale: The APIs and formats and configuration settings internally used by our software need different use cases as well to prove that they\u2019re well-designed. It helps that DC-X offers a lot of its functionality via UI, Web service, command line and PHP API (see <a href=\"\/tim\/weblog\/archives\/2004\/12\/16\/435\">Five faces of a Web app<\/a>). Still, lots of areas remained \u201cone-hit wonders\u201d though we tried to make them reusable.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Jeff Atwood \u2013 The Rule of Three: \u201cWe think we&#8217;ve built software that is a general purpose solution to some set of problems, but we are almost always wrong. [\u2026] To build something truly reusable, you must convince three different audiences to use it thoroughly first. [\u2026] One customer or user or audience might be [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_share_on_mastodon":"0"},"categories":[1],"tags":[],"class_list":["post-1676","post","type-post","status-publish","format-standard","hentry","category-weblog"],"share_on_mastodon":{"url":"","error":""},"_links":{"self":[{"href":"https:\/\/www.strehle.de\/tim\/wp-json\/wp\/v2\/posts\/1676","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.strehle.de\/tim\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.strehle.de\/tim\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.strehle.de\/tim\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.strehle.de\/tim\/wp-json\/wp\/v2\/comments?post=1676"}],"version-history":[{"count":0,"href":"https:\/\/www.strehle.de\/tim\/wp-json\/wp\/v2\/posts\/1676\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.strehle.de\/tim\/wp-json\/wp\/v2\/media?parent=1676"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.strehle.de\/tim\/wp-json\/wp\/v2\/categories?post=1676"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.strehle.de\/tim\/wp-json\/wp\/v2\/tags?post=1676"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}