Someone on the internet said that open source will become the default way of developing software. This begs the question: What is open source software development? What about other forms of development? And why would open source be the default way?
Open source software development
There is no one way of developing open source software. Projects follow very different practices. Some projects, for example, within a foundation, carry best practices from project to project, but in general, open source lets a thousand flowers bloom. The best we can do is identify core principles, which in my book are the principles of open collaboration: Open source software development is
- egalitarian (everyone can potentially join and contribute, no barriers to access exist)
- meritocratic (decisions are made based on the merits of arguments, not status), and
- self-organizing (people choose their processes and aren’t made cogs in a machine).
Relationship to other processes
Open source software development is the appropriate way of developing, well, open source software; the key difference to other processes is that open source software development, to work for a community, should not be creating something competitively differentiating. Therefore, whether to use open source processes depends on how open you can and want to be. The following graphics of increasing openness shows which methods match which scenario.
In closely knit situations, where you know everyone, you can use agile or other traditional approaches. Make it a bit larger and you’ll probably be using product-line engineering. As soon as you go across silo boundaries within your organizations, you’ll be using inner source software development. Common to the methods just mentioned is that they are applied within the company, to develop competitively differentiating software.
No default way of developing software
If some software component does not help you win in the market, you should not be developing the component alone, and hence you should take to the open source world. Software that is not competitively differentiating should be developed collaboratively by companies and other interested parties. This is different, again, from competitively differentiating software, which should be developed with an approach that matches the firm-internal situation: Agile, waterfall, inner source, you name it.