{"id":214,"date":"2013-07-23T11:09:46","date_gmt":"2013-07-23T09:09:46","guid":{"rendered":"https:\/\/blogs.gentoo.org\/mgorny\/?p=214"},"modified":"2013-07-23T13:22:50","modified_gmt":"2013-07-23T11:22:50","slug":"keeping-the-majority-happy","status":"publish","type":"post","link":"https:\/\/blogs.gentoo.org\/mgorny\/2013\/07\/23\/keeping-the-majority-happy\/","title":{"rendered":"Keeping the\u00a0majority happy"},"content":{"rendered":"<p>One of\u00a0the\u00a0major problems that I have faced in\u00a0Gentoo is that whatever I was doing on a\u00a0larger scale made some people really unhappy. I would even say that the\u00a0specifics of\u00a0Gentoo make it even possible for\u00a0users to get outraged (and\u00a0obviously, let all the\u00a0world know how outraged they are) by\u00a0a\u00a0few files they don&#8217;t like having installed.<\/p>\n<p>This brings the\u00a0question whether we should struggle to keep all of\u00a0our users happy, or\u00a0whether keeping majority of\u00a0our users satisfied is\u00a0sufficient.<\/p>\n<p>I don&#8217;t believe that it is actually possible to\u00a0keep everyone happy. It&#8217;s a\u00a0kind of\u00a0never-ending struggle that consumes valuable time and\u00a0demands sacrifices. You work on\u00a0making one user happy, the\u00a0other one doesn&#8217;t like the\u00a0result. You work towards the\u00a0second one, third one is\u00a0unhappy. You satisfy all three of\u00a0them, now fourth comes outraged with the\u00a0net result.<\/p>\n<p><!--more--><\/p>\n<h2>The\u00a0slogan of\u00a0choice<\/h2>\n<p>It is usually impossible to satisfy all the\u00a0needs with a\u00a0single solution. That&#8217;s the\u00a0problem Gentoo tries to solve through the\u00a0slogan of\u00a0\u00abchoice\u00bb. But let&#8217;s not\u00a0fool ourselves, it&#8217;s nowhere near the\u00a0perfection.<\/p>\n<p>Choice helps, that&#8217;s true. But it&#8217;s mostly replacing a\u00a0Swiss Army knife with a\u00a0bag of\u00a0tools, and\u00a0expecting user to\u00a0choose the\u00a0one best suited for\u00a0him. Sometimes it goes even further and\u00a0the\u00a0\u00abmulti-solutions\u00bb that satisfied multiple cases are\u00a0replaced with the\u00a0requirement of\u00a0explicit choice of\u00a0a\u00a0single solution.<\/p>\n<p>To be\u00a0honest, I was never a\u00a0fan of\u00a0having too much choice. It&#8217;s great whenever it really benefits the\u00a0community but then there&#8217;s the\u00a0point when the\u00a0amount of\u00a0choice starts to have negative impact. It starts making things unnecessarily complex.<\/p>\n<p>One of\u00a0the\u00a0resulting problems is\u00a0making Gentoo harder to use. While I agree that it wasn&#8217;t ever suited for users who aren&#8217;t ready to\u00a0deal with various issues, there&#8217;s also the\u00a0\u00abmiddle grade\u00bb of\u00a0users. Those are the\u00a0users who want to customize their Gentoo setup but have a\u00a0limited expert knowledge and\u00a0time. Those users are most likely to\u00a0waste their time playing with various configurations and\u00a0those users are\u00a0most likely to be\u00a0affected by\u00a0various bugs.<\/p>\n<p>Unnecessary complexity means also worse maintainability. The\u00a0ebuilds end up having more branches, some of\u00a0the\u00a0branches used less frequently than the\u00a0others. In\u00a0the\u00a0end, there are\u00a0variants of\u00a0the\u00a0ebuild execution path that are <em>never used<\/em> and\u00a0therefore not tested for\u00a0a\u00a0long time. While at\u00a0first developers often test most of\u00a0reasonable branches, the\u00a0issues arise with version bumps.<\/p>\n<p>In\u00a0the\u00a0end you end up with an\u00a0ebuild that nobody completely understands, users that are unhappy with breakage and\u00a0you have no\u00a0idea how to fix it without making someone unhappy (again).<\/p>\n<h2>Keeping users relatively happy<\/h2>\n<p>The\u00a0alternative is the\u00a0\u00abgood enough\u00bb solution. Since you can&#8217;t keep everyone happy, you go for the\u00a0second best thing. You keep as\u00a0many users happy as\u00a0possible while keeping as\u00a0few users outraged as\u00a0possible. If we moved this to the\u00a0technical matters, this would be keeping the\u00a0most of\u00a0user needs <em>possible<\/em> while optimizing for\u00a0the\u00a0common cases.<\/p>\n<p>I believe that this is <em>exactly<\/em> what Gentoo was designed for, and\u00a0what keeps it the\u00a0best choice for\u00a0many of\u00a0our users. And\u00a0I think that we should keep following this path that keeps us between the\u00a0distributions that keep users behind bars and\u00a0the\u00a0distributions that struggle for\u00a0perfection and\u00a0where all users know one another.<\/p>\n<p>A\u00a0good example of\u00a0this is the\u00a0late process of\u00a0removing some of\u00a0the\u00a0global USE flags in\u00a0favor of\u00a0installing the\u00a0relevant bits unconditionally. The\u00a0truth is that the\u00a0process could be communicated a\u00a0little better and\u00a0a\u00a0bit more fluent but that&#8217;s off-topic here.<\/p>\n<p>It should be noted that we are <em>not removing<\/em> a\u00a0choice nor taking away freedom. We are making it less privileged, say, more low-level. We are replacing one solution with another. We are not moving back or\u00a0forth, we&#8217;re moving sideways.<\/p>\n<p>The\u00a0previous solution was good enough for the\u00a0majority but\u00a0inflicted a\u00a0severe head-ache to some users. The\u00a0new solution is different, yet still good enough for the\u00a0majority (a\u00a0little different majority, though) and\u00a0causes lesser issues to a\u00a0new minority that dislikes it. And\u00a0we can improve it further.<\/p>\n<p>This is how I see Gentoo \u2014 providing the\u00a0right tools depending on\u00a0the\u00a0scope of\u00a0the\u00a0problem and\u00a0the\u00a0impact of\u00a0the\u00a0solutions. We have USE flags to control problematic parts of\u00a0software and\u00a0<code>INSTALL_MASK<\/code> to\u00a0let people remove the\u00a0rest. Then we have USE flags to control important choices and\u00a0<code>EXTRA_ECONF<\/code> to\u00a0let people use the\u00a0remaining switches.<\/p>\n<p>Sadly, there always be an\u00a0outraged minority in\u00a0Gentoo, and\u00a0the\u00a0few people who don&#8217;t have anything better to do but to\u00a0complain and\u00a0expect everyone else to do what they believe is best. But I&#8217;d rather focus on finding a\u00a0good enough solution that helps the\u00a0majority and\u00a0doesn&#8217;t leave the\u00a0minority helpless.<\/p>\n<p>If we try to bend to every minority, we&#8217;ll end up being unable to attend more important bugs. Moreover, we will likely cause even more of\u00a0them due to the\u00a0added complexity and\u00a0fatigue. In\u00a0the\u00a0end, the\u00a0relatively happy users will become unhappy due to\u00a0bugs, and\u00a0the\u00a0mentioned minority will turn outraged anytime their precious features stops working.<\/p>\n<p>In\u00a0this regard, minimalism seems to be\u00a0most advised. Follow the\u00a0QA standards, think well before implementing users&#8217; requests and\u00a0avoid providing features you won&#8217;t be able to support long-term. This way you&#8217;ll get the\u00a0least of\u00a0the\u00a0outrage our minorities have for you. While this is a\u00a0bit ironic, it may also be a\u00a0good way to provide a\u00a0most stable user experience.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>One of\u00a0the\u00a0major problems that I have faced in\u00a0Gentoo is that whatever I was doing on a\u00a0larger scale made some people really unhappy. I would even say that the\u00a0specifics of\u00a0Gentoo make it even possible for\u00a0users to get outraged (and\u00a0obviously, let all the\u00a0world know how outraged they are) by\u00a0a\u00a0few files they don&#8217;t like having installed. This brings &hellip; <a href=\"https:\/\/blogs.gentoo.org\/mgorny\/2013\/07\/23\/keeping-the-majority-happy\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Keeping the\u00a0majority happy&#8221;<\/span><\/a><\/p>\n","protected":false},"author":137,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_publicize_message":"","jetpack_is_tweetstorm":false,"jetpack_publicize_feature_enabled":true},"categories":[3],"tags":[],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/blogs.gentoo.org\/mgorny\/wp-json\/wp\/v2\/posts\/214"}],"collection":[{"href":"https:\/\/blogs.gentoo.org\/mgorny\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.gentoo.org\/mgorny\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.gentoo.org\/mgorny\/wp-json\/wp\/v2\/users\/137"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.gentoo.org\/mgorny\/wp-json\/wp\/v2\/comments?post=214"}],"version-history":[{"count":14,"href":"https:\/\/blogs.gentoo.org\/mgorny\/wp-json\/wp\/v2\/posts\/214\/revisions"}],"predecessor-version":[{"id":228,"href":"https:\/\/blogs.gentoo.org\/mgorny\/wp-json\/wp\/v2\/posts\/214\/revisions\/228"}],"wp:attachment":[{"href":"https:\/\/blogs.gentoo.org\/mgorny\/wp-json\/wp\/v2\/media?parent=214"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.gentoo.org\/mgorny\/wp-json\/wp\/v2\/categories?post=214"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.gentoo.org\/mgorny\/wp-json\/wp\/v2\/tags?post=214"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}