Conservancy Primer: Writing Software Development Proposals FLOSS Projects depend on community-minded, voluntary contributions of code, and many FLOSS Projects rely on a small set of committed project leaders to contribute time, resources, code, and coordination efforts to advance those code bases. However, Conservancy has found that many of its projects wish to supplement this great volunteer effort with funded work through Conservancy. Typically, the best way to seek funding for a specific software development effort is publication of a Software Development Proposal ("SDP") that outlines specific objectives the Project wants to accomplish as a means of soliciting donations. A Project that publishes a well-written SDP for interesting work and that successfully delivers on the objectives of multiple proposals often can creates a fundraising engine that can spur continued advancement of the Project and benefit to the public that uses the software. Conservancy is available to work with Project Leadership Committees ("PLCs") to develop a fundraising strategy for their Project. When PLCs wish to begin the process of raising funds, Conservancy recommends that the PLC draft an SDP designed to solicit donations for the furtherance of Project-directed mission work. This primer is designed to give Projects a few tips on how to get started in drafting an SDP. Choose the Right Objectives =========================== PLCs typically hold the responsibility of setting their Project's technical direction. Projects benefit from a clear sense of direction and vision, and PLCs can strategically use an SDP to call attention to and fund development of the specific objectives need to advance in that direction. Be specific ----------- PLCs are welcome to solicit donations for the general furtherance of their Project without a formal SDP. For example, by encouraging donors to use the donation links provided by Conservancy or to send checks earmarked for the project to Conservancy. However, offering prospective donors the opportunity to fund clearly-defined work with specific objectives enables those donors to feel a greater sense of contribution and direct involvement with the Project. Donors also appreciate knowing exactly where their funds are being allocated; some donors that wouldn't give generally to a Project are willing to fund a direct SDP for a specific objective. Moreover, PLCs with SDPs with crisply-articulated deliverables can easily articulate how those specific deliverables will benefit the public. By contrast, PLCs that issue SDPs with vague or shifting objectives may have a difficult time in showing value to the public after the fact. That can dampen enthusiasm and chill future donations. Be realistic ------------ PLCs can and should be ambitious in the technical direction for their Project, as means of promoting continuing innovation. However, PLCs focus SDPs on attainable and verifiable objectives. SDPs should include objectives that the entire PLC agrees can be met should the fundraising succeed. In turn, donors are more likely renew donations to those Projects with an established track record of accomplishing stated objectives within budget. Conversely, donors are often disillusioned with Projects who over-promise and under-deliver in fulfillment of an SDP. In short, successful SDPs are sufficiently ambitious to generate interest, but sufficiently limited to assure completion of objectives on budget. Maintain role as final arbiter of the technical direction --------------------------------------------------------- PLCs can and should ask their Project's community for suggestions as to what software development to prioritize. Many community members (including prospective corporate donors) likely have opinions on the Project's technical direction. However, the PLC is always the final arbiter of the Project's technical direction, and should set an SDP's objectives in the best interests of achieving the Project's technical direction and philanthropic mission. PLCs should always remain independent of the specific desires of any individual private interest, and assure compliance with Conservancy's Conflict of Interest policy in this and all other Project endeavors. When in doubt, invest in the core --------------------------------- As Projects mature, contributors often focus on exciting technical innovations on the periphery of the Project's scope. Innovations on the "bleeding edge" often generate buzz within the Project's community, and SDPs for work in those areas can capitalize on that cachet. However, Projects that place undue focus on that periphery sometimes risk ignoring key maintenance objectives of the core code base. Ignoring the core can jeopardize the long-term viability of the Project. When selecting an SDP's objectives, PLCs should strike a balance between satisfying desires to innovate and reinvesting in core infrastructure development and maintenance. Conservancy encourages PLCs to monitor volunteer development to determine if too much volunteer effort is focused in the "fun areas", which sometimes leaves the core codebase to a certain amount of bitrot. SDPs focused on fundraising for core development can often mitigate the volunteer tendency to focus on the "latest, greatest", by seeking to fund those developers who would focus on the more mundane work "if only" they could be paid to do so. Establish the Budget Necessary to Generate Deliverables ======================================================= While PLCs are ultimately responsible for the technical direction of their Projects, they are (in some respects) ultimately accountable to their community of donors for their ability to advance that technical direction. A SDP should have clear, defensible budget for what's needed to generate deliverables. Example: PyPy's Python 3 SDP ---------------------------- PyPy issued an SDP to fund work on enabling PyPy to support Python 3. (That SDP is can be read here: http://pypy.org/py3donate.html ). PyPy's PLC established a three-step time frame, requiring 10.5 total developer-months to complete the entire proposal. Step 1 has sixteen clearly-articulated objectives and deliverables; Steps 2 and 3 are dependent upon the successful completion of Step 1, and are presented at a higher level. To calculate a budget, PyPy defined a developer wage at $60/hour, and projected the number of developer-hours to complete each step. In the event that the work goes over budget, a prospective donor can look back at the original SDP and compare the estimates to PyPy's actual progress. Conservancy considers PyPy's Python 3 proposal a good example of an SDP and recommends it for use as a template for other Conservancy Projects seeking to write an SDP. Articulate Public Benefit ========================= Since Conservancy is a chartiable non-profit, work done on SDPs via Conservancy must benefit the general public. Every SDP published should articulate how the SDP's objectives benefit the public. At a minimum, each SDP should reinforce the Project's intent to freely license all resulting code to the public. However, a strongly-written SDP should also articulate the benefits to the public unique to the proposed objectives. Example: PyPy's NumPy SDP ------------------------- PyPy issued an SDP to fund work on NumPy, a Python language extension for scientific computing. (That SDP can be read here: http://pypy.org/numpydonate.html ). The NumPy SDP includes a six-paragraph discussion on the ways NumPy development will benefit the public. Here are a few excerpts: * "Numpy support in PyPy will allow for Python's use by... developers and researchers who want the ease of programming that Python provides, the speed of PyPy, and the speedups for numerical work that Numpy can provide." * "[PyPy's Open Source copyright license] allows for academics, for-profit software developers, volunteers and enthusiasts alike to collaborate together to make a better Python implementation for everyone." * "NumPy support can directly help researchers and developers who seek to do numeric computing but want an easier programming language to use than Fortran or C, which is typically used for these applications." PLCs should consider any work they want to fund in the context of the public good and draft SDPs accordingly. Ensure Appropriate Usage of the Funds If Target Isn't Met ========================================================= Kickstarter has become popular in part because it holds funds in escrow for unestablished projects until the entire funds are collected, and does not collect payment until all funds are pledged. The logistics and technical infrastructure for setting up this sort of system are difficult, and sadly Conservancy can't offer this service at this time to its member projects. However, this may not matter. The key benefit to that feature is for Projects that do not already have an established track record of success. All Conservancy Projects have had successful development in the past: it's in fact a requirement for joining Conservancy! Therefore, Conservancy recommends a provision in all SDPs that indicates that funds will be spent in other ways if the target is not reached. This can be done in various ways, but to quote again from the Numpy proposal example: Should we not receive enough donations to complete all stages, we will try our best to make PyPy support NumPy anyway. We however reserve the right to shift any unused funds to other PyPy activities when that date is reached. Of course, since the Conservancy is a 501(c)(3) charitable organization incorporated in NY, USA, all funds will, regardless of their use, be spent in a way that benefits the general public, the advancement of Open Source and Free Software, and in particular the PyPy community and the PyPy codebase. Submitting an SDP to Conservancy ================================ Before fundraising begins, please send a draft of the SDP to Conservancy, using the address so that the entire PLC and Conservancy representatives see the proposals. Conservancy may have edits or comments, but will generally approve posting and beginning fundraising on any SDP that meets the criteria outlined in this primer. Questions And Help ================== If you have any questions, or would like to schedule some time to discuss about ways to start a SDP-based fund-raising strategy, feel free to contact Conservancy. Conservancy is available to help with drafting and creating strategies for fundraising for software development projects through Conservancy.