My goal with this is to imagine a world where
I'm actively trying to create such a world. However, I also feel that the current work practices do not match this world view very well, and there are major problems with all of the above that may make the world a more difficult place to live than a better one. I want to learn how to do things properly so when my career meets the wave, I will be set to be on top of the wave, surfing. -- SunirShah
Software projects often fail.
As a result, software development demands too much (heroism, anti-heroism) from developers' lives.
Software development needs to do more than understand social context. It must be integrated into the very fabric of social activity.
Hughes, J., T. Rodden, V. King, and H. Andersen. (1994). Moving out from the control room: ethnography in system design. In CSCW'94. Greensborough, North Carolina. Available from http://citeseer.ist.psu.edu/hughes94moving.html
Not all software developers are going to fit in:
Since the FreeSoftware and OpenSource movements are populated by the people in computer science, it is unsurprising that both continue to suffer from the same problems. OpenSource is the most vulnerable to this. At least the FreeSoftware movement has always been based in values, principles, and philosophies first. The OpenSource movement however arises from the classic ContentOverCommunity fallacy (vs. CommunityOverContent). It focuses too heavily on the object, the artifact, the output of the process (the source code), rather than the "invisible" social element that powers the process. Still, even the FreeSoftware movement fails to see the full social picture, and thus it still has room to improve.
The people matter more than the code. Only from collaboration does any of this matter. There are many GhostTown projects on SourceForge that have died from programmers keeping too much social power for themselves. The most successful projects have had either a supergenius with the ability to hyperfocus down some technological alley for several years--not something we all can or wish to do ourselves--or a strong collaborating community that includes the end-users in some direct, tangible way.
Free software and open source are means, not ends in themselves. The ends one seeks are freedom from dictatorial control (the RightToFork being a means of supporting that), and reduced bugs (LinusLaw? being a means of achieving that).
Many FreeSoftware/OpenSource projects are amazing successes, but most are dead ends, or at best personal hobby projects with limited appeal. We should look at some of the best projects to see how they are socially organized, administrated, and what values they have. We can then extract patterns of best practices and build a PatternLanguage of what to do. There is no one solution, but there are better solutions and worse solutions.
Because, let's face it, after over three decades, we have figured out a few things.
In a typical OpenSource project, we expect to find BenevolentDictators who know how to lead the whole project. However, the dependence on an enlightened programmer is in the long term unstable, and in the short term highly unlikely. While individual programmers are always encouraged to write and release as much code as they want, a project with the LongView? should recognize that putting too much power in the hands of one person creates conflicts of interest.
In particular, we can identify three roles that need to be split based on the fundamental power structure of an OpenSource project.
Collapsing these roles together results in aberrations in the development of the project, and may ultimately stunt its growth. A developer who is also the community leader will be a GodKing. A community leader who is the community marketer may seek to build a CareerCommunity? and neglect the internal social needs of those who have already committed to the community. A marketer and a programmer will create brochureware with low usability.
The ideal community has these positions in some negotiated tension, since they are all necessary for the survival of the community, but neither one of them alone or no two can support the community in the long term.
The major problems in OpenSource remaining in 2004 (the date this was written) was that most OpenSource projects have poor usability and poor financing, intense feature creep, and sometimes fundamental problems or bugs that nobody seems to be willing to address (see Mozilla for example). If you map those outcomes against the reality that OpenSource projects until 2004 have been primarily led by one self-interested programmer, you will see why (at least) three roles are needed.
In particular, my now defunct resignation was a reaction against the conflict of interest where all three roles had somehow collapsed within one spatial-temporal-spiritual location. My new plan is to try to grow new positions to fill the three and then act as something akin to a CEO. -- SunirShah
The dominant model for OpenSource development today is best reflected by SourceForge, the largest and most popular public repository for open source projects. Roughly speaking, an open source project today
In general, we claim that despite the power of the Internet to reduce the distance between authors and readers, coders and users, the standard tools for open source reflect and preserve and teach the common computer science values of maintaining a strong distance between the developer and the end user. Further, the notion of "many eyes" gets thwarted by the meritocratic social organization (the cathedral) that acts as a bottleneck to individual contributions, as the oligarchy running the project must vett and approve changes to the mainstream codebase. Very rarely do we have a true bazaar, a project of lively exchange (cf. LittleEconomy) between contributors growing an organic mesh of code on top of the commonly maintained StableBase.
Unsuprisingly, we instead see the industrial era values and practices that govern contemporary Western computer science. Open source projects remain hierarchical, distant, system-oriented, and controlling.
For people that do not share these values, the software that grew from these values becomes an albatross to be hacked around, rather than a tool to help. The code as law does limit and direct contributors along an opposite social path. Thus, it is necessary to build new software to facilitate the kind of collaboration that we want to have.
Wikis, since wikis reflect the basic properties of the DigitalNetwork, have long since shown that hierarchical social systems are not necessary on the Internet, and often an incumbrance. Further, they have shown that social distance is a problem, not a solution. Could we not reform the open source tools around the wiki model?
We also need to rethink how software is designed. Let's stop building monoliths. Let's start building HyperCode. The Internet works because there is a NetworkStandard we commonly build, upon which we all can build what we want. Keep software simple, and build it in layers. Allow software to talk to one another through protocols, not through tight binding. Why have only one codebase when we know that software is more powerful when it is an ecosystem of interacting parts?
We may want to develop tools which more capable. So that in the future (now?) software development is:
Jamie Zawinski describes open source development as the CADT (Cascade of Attention-Deficit Teenagers) model:
From the [OneBigSoup:MissionStatement :] "We are integrating existing communication systems, including Wiki, IRC, Instant Messaging, e-mail, and even static web sites. We connect communication systems with protocols, services, clients, anything. We focus on Integration and Pragmatism."
We've been working on precicely what is called here the "HyperCode" model- lots of communication software pieces working with lots of other communication software pieces. We've been working on it consciously and directly. We've just called it "OneBigSoup?" rather than "HyperCode."
We have several efforts to interconnect communications systems.
So far, we have built (and are refining:)
...and we have zillions more ideas in the pipe- [see IntComm:IntegrationOpportunities.]
Note that: We claim ZERO credit for these ideas. These ideas are ancient and obvious. They've been around since at least the 60's. Many people have been saying these ideas for a long time now. So, we are not claiming credit for these ideas.
We are just looking for people to help make them a reality. -- LionKimbro
Sunir, I wonder what the fundamental difference between a software project and an online community (wiki) project really is. Maybe it would just make as much sense to depict FairCommunity?. Why should roles be a necessity in FairSoftware, but a problem in a wiki community. Things don't seem to fit together. -- HelmutLeitner
Answer 1. The difference is at the level of abstraction. Everything is a community (or at least should be). The difference is the output. The city engineers that design and build the sewer system are a community with a specific output: the sewer system. A software project just results in software, and even if socially they might organize in some very archetypical ways. And just like city engineers need T-squares, drafting tables, and laser-sighted surveying equipment, the software developers need specific tools to make that happen. WikiAsSourceControlRepository is my favourite example, but it also goes down to Wiki:CrcCards and Alexander's Patterns. These are all mechanisms, forms, ideas, structures that operationalize one particular set of values in a particular domain for a particular outcome.
That is, to distinguish between various social organizations that organize in socially similar ways, I figure you can simply identify them by their particular "Values in a domain operationalized towards an outcome."
Also, many communities are even communities of communities. For instance, the city is several interlocking communities playing various roles, including the sewer engineers, the politicians, the artists, the public transit workers, the businessmen, the medical community, and so on. Everything may seem to blend together (a city engineer might also be an artist), yet I think there is still meaning in focusing on one specific output.
Finally, my goal is not to build better social organizations, since I think there is an ocean of wisdom in that and I am still learning. My goal is to build better software--or more broadly, to accept the inherent unity of technology and society and then embrace that in a responsible way. I know the world is far from accomplishing that. -- SunirShah
Answer 2. Roles aren't bad in a wiki community; roles are bad in a community of SelfishVolunteers with no feedback loop to measure outcomes against (PowerLoop?). A directionless community cannot justify having roles. After all, when someone makes a decision to go one way, there is nothing to measure their decision against to see if it was the right decision. Rather, for something like Meatball, which is more of an ongoing conversation, it makes a lot more sense to try to be "as large as possible while still remaining coherent." Not quite RadicalInclusiveness (at least as I understand it), but still inclusive and (mostly) unroled. I like conversations where participants feel free to speak when they want to, rather than wait for someone to approve them. Or maybe my point is that every role belongs to every person. Everyone needs to TakeResponsibility?. -- SunirShah
Answer 3. Wikis are like empty rooms (WikiAsRoom); there are no social rules embedded in the walls. The social organization on a wiki depends on the social practices of the people inhabiting the wiki. So, the question is not should a wiki have roles, but rather does this or that organization require roles, of what type, and in embedded in what social structure. A FairSoftware project requires roles because it has various stakes that are conflicts of interest. A project like Meatball also has conflicts of interest, and it was best served when administration and editorialship was split between Cliff and I. Now there is a monetary side to Meatball (or at least my life), so having all three executive roles located in me was a major conflict of interest. The idea of CommunityMembership is another thing altogether; the question is always what would members have over random visitors, why this is a good thing, and how to LimitTemptation of AntiAuthoritarians (i.e. how to do the right thing). -- SunirShah
Meta-answer. This discussion of roles might find a better home. There are obvious contradictions in what I'm saying because I'm mostly just having an allergic reaction to the idea of a formal role system for Meatball rather than offering a strong alternative other than the status quo, but either way, it's off-topic for FairSoftware and I believe on-topic on some other page that has at the moment escaped my mind. I do believe that Meatball needs roles; I don't believe in creating a gigantic formal system to set a solitary direction, since Meatball is not an industry (it has no objective output). I think the MeatballMission needs to be rewritten to be clearer. That concept of Meatball as an inclusive yet coherent conversation is something I just thought of off the cuff, and it makes a certain sense to me. -- SunirShah
I'm pretty sure the best way to implement ethical software is for the company that produces it to be a cooperative with open membership. That's the only feasible way for ordinary people to be able to submit user stories and have them taken seriously. I also think that sticking with interaction design and publishing the user personas is the only way to provide a minimal warning to users. Sortof "yes, this is for you, welcome" versus "no, this software isn't for you, so sorry, please form your own developer coop with all your friends".