This is the title of a paper by Wolfgang Bangerth and Timo Heister, which appeared in Computational Science and Discovery, 6 (2013) (you may need an account with IOP to download it). They are mathematicians with many years experience in delivering Open Source libraries, especially numerical analysis libraries. They reason that a considerable time investment is needed to make software successful, and requires skills that extend beyond competence in programming. Success is determined by far more than whether the application is interesting and whether it has been developed by competent people. In particular, the way users interact with the program, through installation, documentation etc are of crucial importance, as is the response of the software (and its developers) to changing environments and needs. They point out too that development of the necessary skills are often not included in curricula, and they surmise that this is likely because of the absence of concrete metrics to measure the impact of software.
They describe in detail what they believe are the reasons why software libraries are successful, and I will simply summarize them in this post. The top three reasons are:
- Utility and quality – it must do something useful, it must do what it is promises it will do, it must build out of the box, and it should contain components that can be combined with other components, especially those written by users.
- Documentation – it should be developed concurrently with the code. The following documentation should be provided (quoted from the paper)
3. Building a community – Encourage users to become developers, and this requires that the project is welcoming and provides a low barrier for user contributions, as follows:
There are other reasons for success too. Timing can be crucial: it is standard business intelligence that products are most easily taken up as a field is maturing but when there is still little competition. The project should be actively supported by its developers, it should (as far as is possible) be backwards compatible, it should manage complexity (modular design, standardized code) and be accurate, and there should be considerable thought put into selecting the best license.
I think anyone wishing to release open source libraries will find this paper worth reading – there is a lot of hard-earned wisdom set forth, and this wisdom will help keep our eyes open.