NixCon Governance track: resource allocation (discussion draft)
The goal of this discussion is to address a core issue affecting the long-term sustainability, scalability and effectiveness of the NixOS community: the allocation of resources. As we grow, we can clearly see the benefits of having a predictable model for resource allocation. The teams are effective in principle, but constrained by the lack of stable, ongoing funding and available time that is provided by the community at large.
There are numerous efforts running across the community with varying degrees of impact, funding, and resources. While some work has been started to enable allocating more structured resources across the community, there is still a lot of room for improvement.
There are many areas, teams, and initiatives that are widely viewed as needed (and uncontroversial). With the proper funding and accountibility they could greatly amplify their positive impact on the commmunity and ecosystem.
Key Pain Points
- Inconsistent Funding: Some teams have some budget, but it’s not predictable or sustainable.
- Time constraints: Many maintainers and contributors are juggling multiple roles and cannot dedicate focused time to any particular project, hindering progress.
- The capacity and authority of individuals who take on particular responsibilities are not always aligned or unclear, resulting in friction and frustration
- Lack of strategic allocation: Resources are not always allocated in line with the community’s strategic goals, where they are known.
- (Brought up this week) Funding criteria for donors and sponsors
- There are many uncontroversial improvements that just need the work getting done.
- Contributions are welcome, but there is no guarantee that they will be reviewed or accepted.
- One scarce resource is maintainers’ attention. Therefore:
- Maintainers should be consulted when planning significant contributions.
- Maintainer effort required to guide contributions should be accounted for when raising funds for larger projects
- Another scarce resource is dedicated time to solve hard problems.
- Maintainer time is limited even when paid for. Therefore:
- Allocate part of each budget for knowledge transfer and onboarding potential successors
- There is great potential for conflict of interest with paying for privileged access to maintainers’ attention. Therefore:
- Priorities differ among stakeholders. End users have different needs than ecosystem developers.
- Currently anyone who has the time or money can direct effort according to their priorities.
- The most prolific contributors are on some company’s payroll, self-employed working on things related to Nix, or have a lot of free time on their hands.
- Some work is very likely to get done by volunteers, some is hard to even get paid talent for; some requires extensive onboarding because it’s specific to the ecosystem
- There is a spectrum of involvement and degrees of availability required for different activities.
- Some activities demand attention once, some repeatedly. Some increase the amount of available attention. There is an economics to that, with long-term investments and ongoing liabilities.
- There are foundational, long-term needs that have to be addressed to ensure sustainable operations, but they are very hard to get funding for
- Provide easily discoverable documentation, knowledge sharing, and active support for specifying projects or bounties, organising fundraisers, or applying for funding
- This is likely to have the longest leverage. Anyone who is demonstrably knowledgeable should be able to request resources from external sponsors and receive practical support for that.
- Needs continuous funding for collecting and maintaining documentation, office hours, work sessions for writing
- Provide teams that meet certain conditions with a fixed annual budget at their disposal
- This primarily allows distributing chores, which can serve as first steps for potential maintainers
- It raises awareness of accountability and encourages effective use of time
- Possible requirements:
- Time commitment by the person responsible for the budget (e.g. team lead)
- A project plan to measure results against
- See Empowering Community Teams for first attempts at clarification
- It is more lightweight than paid maintainers, but likely won’t help addressing hard problems or deep issues; also additional overhead
- Pay at least one full-time developer per problem domain
- It will likely help solve the hard problems in the mid-term as opposed to indefinitely postponing them
- This is the most expensive option, and requires the greatest accountability
- The amount of funding required translates to another full-time job
- There is a risk for individuals to stall out or getting bogged down in concurrent tasks due to the pacing we observe in globally distributed development where many activities see spurious progress
We propose to implement these measures in sequence in order to alleviate the most pressing short-term problems given the current constraints. We expect early success stories to enable us to scale up and invest strategically to aim at long-term benefits.
Teams already work in principle, but need stable, sustainable funding, ideally for at least one person doing at least part-time ongoing work: guide contributions, take care of administrative tasks, keep coherence.
We need to supply those resources at the strategic level and allocate them according to an explicit agenda in a predictable manner. We have to align the good ideas that are out there with the means to implement them and the people to do the work required.
- Documentation team made significant progress with 5h/week leadership, 17kEUR of budget and countless volunteer hours
- Nixpkgs Architecure Team designed and implemented a large change within a year, essentially carried by @infinisil alone and supported by various volunteers
- Nix maintainers do part-time work to keep the pipeline running, but are clearly constrained with actually implementing things by neither having more time allocated nor a budget to spend
- Summer of Nix is capable of delivering tangible results with 90kEUR within a few months, having a proper set of goals and oversight and administrative support
We’re collectively quite good at making localised technical decisions, but lack effective tactical and, most importantly, strategic leadership with the trust, authority, and capacity to set agendas, allocate resources, break ties, and follow through with execution.
A proposal for a similar role has been signed off by the foundation board in February 2023. These tasks could be added to its responsibilities.
- Sketch basic guidelines for the funding and spending lifecycle
- Request community feedback
- Initiate pilot program to raise money
- Initiate pilot program to deploy existing resources
- Raise money: The foundation board should invest foundation money to ramp up developing bounties or project proposals and run fundraisers
- Spend money: The foundation board should install an executive to develop programs or agendas, to allocate available funds accordingly, and oversee implementation
Examples of uncontroversial proposals
- Accepted RFCs that are not implemented yet:
- Most popular issues and pull requests
ZHF 23.05 Developer workshop results
- Ease user onboarding
- Increase user retention
- Better tooling for software developers
- Improve Nix ecosystem developer experience
- Satisfy the needs of commercial users
2022 Community Survey results
- Improve documentation
- Better debugging and error messages
- Lower barriers to contribution
There are more, rather foundational, ideas that seem to have broad consensus but are not far evolved, well-documented, or widely communicated. Examples include allowing secret handling in the Nix language and the store, formalising the Nix remote builder protocol, making the module system more performant, native Windows support, and others.
Examples of successfully funded initiatives
Conflict of interest disclosure:
This discussion draft was developed by @fricklerhandwerk, assisted by @tomberek, @proofconstruction, and @ron.
@proofconstruction is a volunteer member of the Nix documentation team.
@tomberek works at flox, and is a member of the Nix maintainer team.
@ron is CEO of flox, and member of the NixOS Foundation board.
I, @fricklerhandwerk, participated in or developed many the examples provided here. I am currently working part-time at Tweag and part-time self-employed for the NixOS Foundation. I lead the Nix documentation team and am a member of the Nix maintainer team, and I collaborate closely with some Nixpkgs maintainers and Nix contributors, many of which work at Tweag or flox. I am certainly biased by my experiences and social circle.
Developing this proposal was sponsored by Tweag’s OSPO that also runs the Tweag Nix Technical Group. Opinions are my own. My motivation is to make the Nix ecosystem more useful for myself and everyone, and keep doing that for a living.