{"id":31,"date":"2007-09-10T13:54:54","date_gmt":"2007-09-10T12:54:54","guid":{"rendered":"http:\/\/www.bluej.org\/mrt\/?p=31"},"modified":"2020-05-15T15:46:27","modified_gmt":"2020-05-15T15:46:27","slug":"every-open-system-develops-towards-the-unusable-2","status":"publish","type":"post","link":"https:\/\/blogs.kcl.ac.uk\/proged\/2007\/09\/10\/every-open-system-develops-towards-the-unusable-2\/","title":{"rendered":"Every open system develops towards the unusable"},"content":{"rendered":"<p>Kathy Sierra, on her <a href=\"http:\/\/headrush.typepad.com\">excellent blog<\/a> (which may have very sadly come to a close now, but that&#8217;s another long and sad story) has recently published a collection of her favourite graphics from the last few years.<\/p>\n<p>Here is one that I really like:<\/p>\n<p style=\"text-align:center\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.bluej.org\/mrt\/wp-content\/uploads\/2007\/04\/featuritis.jpg\" border=\"0\" alt=\"Featuritis\" hspace=\"12\" vspace=\"4\" width=\"440\" height=\"343\" \/><br \/>\n(By Kathy Sierra, from <a href=\"http:\/\/headrush.typepad.com\/\">http:\/\/headrush.typepad.com\/<\/a>,<br \/>\nshamelessly copied without permission &#8211; I hope she doesn&#8217;t mind!)<\/p>\n<p style=\"text-align:justify\">You should really look at <a href=\"http:\/\/headrush.typepad.com\">the site<\/a> yourself &#8211; there are many more great diagrams!<\/p>\n<p style=\"text-align:justify\">The Featuritis diagram above struck a nerve with me, since it&#8217;s something that&#8217;s been close to my heart for a long time. It is also related to what I think is one of the Natural Laws Of Software Development:<\/p>\n<p style=\"text-align:center\"><strong>Every open system develops towards the unusable.<\/strong><\/p>\n<p style=\"text-align:justify\">If you want to find out why I think that, read on.<\/p>\n<p><!--more--><\/p>\n<p style=\"text-align:justify\">The first part of this is the observation illustrated in Kathy&#8217;s diagram above: that the simple rule &#8220;more features is better&#8221; is just poppycock.<\/p>\n<blockquote><p>(Aside: a sad part of this is that even people who agree here in principle get sucked in to this regularly. Marketing people, of course, love features. Marketing people need arguments to sell stuff, and features give them their foot holds to stand on. Many people who buy products &#8211; professionally or privately &#8211; follow the tick list approach: if product X does all that product Y does, plus more, it must obviously be better.<\/p>\n<p>Developers know about tick list purchasing too, and so they go into tick list development: Our product must do all that our competitor&#8217;s does, plus one more thing.<\/p>\n<p>Even if you know about this, it&#8217;s sometimes hard to resist. Imagine you want to buy a digital camera, and you stand in the store and stare at the 27 different models a bit like a mildly senile sheep would stare at a small type printout of the theory of relativity, it is very tempting to go by whoever promises to do most. Unfortunately, very few design for, and then advertise with, good usability, and those who do are mostly lying.<\/p>\n<p>There is hope, though: look at the iPod, for example. It always had less functionality than competitors, with a benefit for usability, and people have actually noticed, and they are buying these things like crazy. So not all is lost.<\/p>\n<p>But most companies are just not brave enough to design for simplicity. I&#8217;ll come back to bravery below.)<\/p><\/blockquote>\n<p style=\"text-align:justify\">So, let&#8217;s assume we agree that more features is not better to an unlimited degree, and that the &#8220;Happy User Peak&#8221; indeed does exist. (And if we don&#8217;t agree, then you&#8217;re wrong: It does, I tell you!)<\/p>\n<p style=\"text-align:justify\">The second aspect is specifically relevant to open source systems (and other open systems, by which I mean those that are ultimately influenced by a large group of people, either through direct participation or through community processes, or similar.) For simplicity&#8217;s sake, I&#8217;ll call them &#8220;open source&#8221; systems for the rest of today.<\/p>\n<p style=\"text-align:justify\">For open source systems, another factor comes in: reward.<\/p>\n<p style=\"text-align:justify\">We all do things to get rewarded. Being rewarded is being made to feel good somehow, to receive something that you like to get. The kind of rewards can be very different, but we all need rewards. (To think that open source programmers spend all their time and effort without reward would be na\u00efve, and against human psychology.)<\/p>\n<p style=\"text-align:justify\">The rewards of open source programmers differ, of course, from those of commercial programmers. For professional programmers, the reward is (at least partly) money.<\/p>\n<p style=\"text-align:justify\">So what is the reward for open source programmers? Well, typically it is peer recognition, and the satisfaction you get from seeing someone else use your work. We all like to get the occasional mails back saying &#8220;cool stuff what you did there &#8211; I really love your work&#8221;. Or something of that kind.<\/p>\n<p style=\"text-align:justify\">Just being known for having contributed something useful to the community is sufficient reward for quite a few. Peer recognition. Pure and simple.<\/p>\n<p style=\"text-align:justify\">Now, the problem with this in this context is that there is very little peer recognition to be earned in geek communities for <em>not doing something<\/em>. Or for removing a feature.<\/p>\n<p style=\"text-align:justify\">As a result, typically the only way to enter into and be recognised in an open source community, it to <em>add something<\/em>. And that means that the amount of features in an open system will continuously increase over time:<\/p>\n<p style=\"text-align:right\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.bluej.org\/mrt\/wp-content\/uploads\/2007\/04\/features.png\" border=\"0\" alt=\"Features\" hspace=\"12\" vspace=\"4\" width=\"400\" height=\"300\" align=\"right\" \/><\/p>\n<p style=\"text-align:center\"><em>Number of features over time in an open system<\/em><\/p>\n<p style=\"text-align:justify\">Since rewards in collaborative communities are for individual bits of work, and simplicity is an overall system property, collaborative systems have a hard time rewarding simplicity.<\/p>\n<p style=\"text-align:justify\">Now, if you take this together with the Happy User Peak, you get my Natural Law from above:<\/p>\n<p style=\"text-align:center\">Every open system develops towards the unusable<strong>.<\/strong><\/p>\n<p style=\"text-align:justify\">Another part of the problem is that, even if some people can easily agree that we should fight feature creep and concentrate on the core features, they can never agree on <em>what the core features are<\/em>.<\/p>\n<p style=\"text-align:justify\">Too many people have their own favourite feature, that they see as absolutely essential for their daily work, and they will insist on it going in. And simplicity goes out the window quicker than a rat up a drainpipe.<\/p>\n<p style=\"text-align:justify\">So, what we really need is for a system developing towards the Happy User Peak, and then somebody pulling the hand brake and saying &#8211; &#8220;That&#8217;s it, folks, from now on we are only maintaining compatibility, keep the system running, oiling the cogs, but no new features. Anyone who adds a feature will be shot.&#8221;<\/p>\n<p style=\"text-align:justify\">In practice, this rarely happens. Why is that?<\/p>\n<p style=\"text-align:justify\">One problem is that it is very hard to agree where the peak is. When is the right time to stop. If your system is actually successful (meaning a good number of people find it useful enough that they actually use it), then there will always be a few hundred people pushing for something extra.<\/p>\n<p style=\"text-align:justify\">(And make no mistake: feature count is a one way street. It will only go up. The only way to get a system with fewer features is to write a new application.)<\/p>\n<p style=\"text-align:justify\">So typically a group of people discuss this, several people push the feature count (upwards, of course), the system slowly grows, we cannot agree when we have reached the peak, and one morning we all wake up and realise that we have long passed it.<\/p>\n<p style=\"text-align:justify\">We have seen it many times. Microsoft Word. Where the last few versions have been mainly about trying out new techniques for coping with an unmanageable amount of features. (How about removing some features? No? Well, I didn&#8217;t think so.)<\/p>\n<p style=\"text-align:justify\">Eclipse is also heading this way. And Java. Java started out as a small, clean, neatly designed language that really had a feel of the clarity of a single person&#8217;s design. It was far from perfect, but it clearly valued simplicity over completeness of features. And now look at the later additions. Genericity. The design of genericity in Java has special syntax for some rather esoteric cases &#8211; it really smells like design by committee. Like something where everyone had to get their favourite use case explicitly supported. And the result: while I knew a good number of people before, who could explain any and every valid Java statement, I can now write valid Java code that almost nobody on the planet can correctly explain. Josh Bloch and Neal Gafter excepted, maybe.<\/p>\n<p style=\"text-align:justify\">Even the iPod! Video? I don&#8217;t need no stinkin&#8217; video on my MP3 player!<\/p>\n<p style=\"text-align:right\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.bluej.org\/mrt\/wp-content\/uploads\/2007\/04\/deco.png\" border=\"0\" alt=\"Deco\" hspace=\"12\" vspace=\"0\" width=\"63\" height=\"38\" align=\"right\" \/><\/p>\n<p style=\"text-align:justify\">Above I said it takes a brave person to build a simple system. That is because people always worry that simplicity is mistaken for triviality. And rightly so: many people are impressed by anything they cannot understand (&#8220;oh, what clever people it must have been who built this&#8221;), and don&#8217;t appreciate the difficulty to engineer simplicity.<\/p>\n<p style=\"text-align:justify\">If your boss is one of those persons, then you&#8217;re in trouble. Michael Jackson &#8211; no not the singer! &#8211; has a great story about this. One of my favourite quotes:<\/p>\n<p style=\"text-align:right\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.bluej.org\/mrt\/wp-content\/uploads\/2007\/04\/Brilliance.jpg\" border=\"1\" alt=\"Brilliance\" hspace=\"12\" vspace=\"4\" width=\"568\" height=\"584\" align=\"right\" \/><\/p>\n<p style=\"text-align:center\"><em>from: Michael Jackson: &#8220;Software Specifications and Requirements: a lexicon of practice, principles<br \/>\nand prejudices&#8221;,  Addison-Wesley, 1995. ISBN 0-201-87712-0 (<\/em><em><a href=\"http:\/\/www.amazon.com\/exec\/obidos\/ISBN=0201877120\/theinternationscA\/\">Amazon<\/a><\/em><em>)<\/em><\/p>\n<p style=\"text-align:justify\">So what is the way out of this? Is there any hope? I know of only one way how this can be stopped (or at least slowed): a system needs a dictator. No committee, no group decisions. Have discussions, by all means. Talk, gather ideas.<\/p>\n<p style=\"text-align:justify\">But then one person has to make the decision. And that has to be someone who has a single plan in mind, and who is not afraid to offend people by rejecting their (individually good) ideas.<\/p>\n<p style=\"text-align:justify\">Open communities are great for development. They are a disaster for design.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Kathy Sierra, on her excellent blog (which may have very sadly come to a close now, but that&#8217;s another long and sad story) has recently published a collection of her favourite graphics from the last few years. Here is one &hellip; <a href=\"https:\/\/blogs.kcl.ac.uk\/proged\/2007\/09\/10\/every-open-system-develops-towards-the-unusable-2\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":179,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8,11],"tags":[34,80],"class_list":["post-31","post","type-post","status-publish","format-standard","hentry","category-programming","category-software-tools","tag-coding","tag-open-source"],"_links":{"self":[{"href":"https:\/\/blogs.kcl.ac.uk\/proged\/wp-json\/wp\/v2\/posts\/31","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.kcl.ac.uk\/proged\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.kcl.ac.uk\/proged\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.kcl.ac.uk\/proged\/wp-json\/wp\/v2\/users\/179"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.kcl.ac.uk\/proged\/wp-json\/wp\/v2\/comments?post=31"}],"version-history":[{"count":1,"href":"https:\/\/blogs.kcl.ac.uk\/proged\/wp-json\/wp\/v2\/posts\/31\/revisions"}],"predecessor-version":[{"id":1056,"href":"https:\/\/blogs.kcl.ac.uk\/proged\/wp-json\/wp\/v2\/posts\/31\/revisions\/1056"}],"wp:attachment":[{"href":"https:\/\/blogs.kcl.ac.uk\/proged\/wp-json\/wp\/v2\/media?parent=31"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.kcl.ac.uk\/proged\/wp-json\/wp\/v2\/categories?post=31"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.kcl.ac.uk\/proged\/wp-json\/wp\/v2\/tags?post=31"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}