[not quoting, because mine is more of a general answer] You made a very interesting set of points, spawning a good discussion. Thanks! The question is for whom you are building the software. At the end, what you want to optimize is the system (stakeholder -- software). In the case of Free Software, the stakeholder is (ideally!) the user; in the case of commercial software, it's the buyer (who isn't necessarily the user: think workplace surveillance). In the case of "Internet freebie software" it's possibly the ad company, or Palantir, or whoever. Not always the user, either. Usually, you have a mixture of things people can't completely agree over (think FSF's GPL: some think it needs that kind of hack to copyright law to protect end user's freedom, some other think end users to be strong enough to protect themselves [1]. So one stakeholder in the Gnu project becomes the FSF, the other is the end user. Now let's assume the ideal first case (stakeholder is user). You want to find an optimum in that system. But the user is a moving target! She learns. Is the system able to move along? It's a complex optimization problem with a moving target! Ideally, the software will entice the user to learn. Over time, the state of new user population (their needs, their knowledge, their preferences) changes as well. We always will end up with many different "solutions" to this optimization problem. Do you address the "new" user ("build to sell")? Or the experienced user ("build to use")? The challenge is to have some adaptability, but that's a very hard problem. Some compromise will be necessary, as you noticed. Cheers [1] This meshes so deeply with other basic convictions that we're going to quibble over it for the rest of our lives :-) -- t