logo

drewdevault.com

[mirror] blog and personal website of Drew DeVault git clone https://hacktivis.me/git/mirror/drewdevault.com.git

How-I-maintain-FOSS-projects.md (7458B)


  1. ---
  2. date: 2018-06-01
  3. title: How I maintain FOSS projects
  4. layout: post
  5. tags: [maintainership, free software]
  6. ---
  7. Today's is another blog post which has been on my to-write list for a while. I
  8. have hesitated a bit to write about this, because I'm certain that my approach
  9. isn't perfect. I think it's pretty good, though, and people who work with me in
  10. FOSS agreed after a quick survey. So! Let's at least put it out there and
  11. discuss it.
  12. There are a few central principles I use to guide my maintainership work:
  13. 1. Everyone is a volunteer and should be treated as such.
  14. 2. One patch is worth a thousand bug reports.
  15. 3. Empower people to do what they enjoy and are good at.
  16. The first point is very important. My open source projects are not the work of a
  17. profitable organization which publishes open source software as a means of
  18. giving back. Each of these projects is built and maintained entirely by
  19. volunteers. Acknowledging this is important for keeping people interested in
  20. working on the project - you can never expect someone to volunteer for work they
  21. aren't enjoying[^1]. I am always grateful for any level of involvement a person
  22. wants to have in the project.
  23. [^1]: Some people do work they don't enjoy out of gratitude to the project, but this is not sustainable and I discourage it.
  24. Because everyone is a volunteer, I encourage people to work on their own
  25. agendas, on their own schedule and at their own pace. None of our projects are
  26. in a hurry, so if someone is starting to get burnt out, they should have no
  27. reservations about taking a break for as long as they wish. I'd rather have
  28. something done slowly, correctly, and by a contributor who is enjoying their
  29. work than quickly and by a contributor who is burnt out and stressed. No one
  30. should ever be stressed out because of their involvement in the project. Some of
  31. it is unavoidable - especially where politics is involved - but I don't hold
  32. grudges against anyone who steps away and I try to shoulder the brunt of the
  33. bullshit myself.
  34. The second principle is closely related to the first. If a bug does not affect
  35. someone who works on the project and the problem doesn't interest anyone who
  36. works on the project, it's probably not going to get fixed. I would much rather
  37. help someone familiarize themselves with the codebase and tooling necessary for
  38. them to solve their own problems and send a patch, even if it takes ten times
  39. longer than fixing the bug myself. I have never found a user who, even if they
  40. aren't comfortable with programming or the specific technologies in use, has
  41. been unable to solve a problem which they were willing to invest time into and
  42. ask questions about.
  43. This principle often leads to conflict with users whose bugs don't get fixed,
  44. but I stick to it. I would rather lose every user who is unwilling to attempt a
  45. patch than invest the resources of my contributors into work they're
  46. uninterested in. In the long term, the health of the project is far better if I
  47. always have developers engaged in and enjoying their work on it than if I lose
  48. users who are upset by my approach.
  49. These first two principles don't affect my day-to-day open source work so much
  50. as they set the tone for it. The third principle, however, constitutes most of
  51. my job as a maintainer, and it's with it that I add the most value. My main role
  52. is to empower people who contribute to do work they enjoy, which benefits the
  53. project, and which keeps them interested in coming back to do more.
  54. Finding things people enjoy working on is the main task in this role. Once
  55. people have made a few contributions, I can get an idea of how they like to work
  56. and what they're good at, and help them find things to do which play to their
  57. strengths. Supporting a contributors potential is important as well, and if
  58. someone expresses interest in certain kinds of work or I think they show promise
  59. in an area, it's my responsibility to help them find work to nurture these
  60. skills and connect them with good mentors to help.
  61. This starts to play in another major responsibility I have as a maintainer,
  62. which is facilitating effective communication throughout the project. As people
  63. grow in the project they generally become effective at managing communication
  64. themselves, but new contributors appear all the time. A major responsibility as
  65. a maintainer is connecting new contributors to domain experts in a problem, or
  66. to users who can reproduce problems or are willing to test their patches.
  67. I'm also responsible for keeping up with each contributor's growth in the
  68. project. For those who are good at and enjoy having responsibility in the
  69. project, I try to help them find it. As contributors gain a better understanding
  70. of the code, they're trusted to handle large features with less handholding and
  71. perform more complex work[^2]. Often contributors are given opportunities to
  72. become better code reviewers, and usually get merge rights once they're good at
  73. it. Things like commit access are a never a function of rank or status, but of
  74. enabling people to do the things that they're good at.
  75. [^2]: Though I always encourage people to work on the things they're interested in, I sometimes have to *discourage* people from biting off more than they can chew. Then I help them gradually ramp up their skills and trust among the team until they can take on those tasks. Usually this goes pretty quick, though, and a couple of bugs caused by inexperience is a small price to pay for the *gain* in experience the contributor gets by taking on hard or important tasks.
  76. It's also useful to remember that your projects are not the only game in town. I
  77. frequently encourage people who contribute to contribute to other projects as
  78. well, and I personally try to find ways to contribute back to their own projects
  79. (though not as much as I'd often like to). I offer support as a sysadmin to many
  80. projects started by contributors to my projects and I send patches whenever I
  81. can. This pays directly back to the project in the form of contributors with
  82. deeper and more diverse experience. It's also fun to take a break from working
  83. on the same stuff all the time!
  84. There's also some work that someone's just gotta do, and that someone is usually
  85. me. I have to be a sysadmin for the websites, build infrastructure, and so on.
  86. If there are finances, I have to manage them. I provide some kind of vision for
  87. the project and decide what work is in scope. There's also some boring stuff
  88. like preparing changelogs and release notes and shipping new versions, or
  89. liaising with distros on packages. I also end up being responsible for any
  90. marketing.
  91. ---
  92. Getting and supporting contributors is the single most important thing you can
  93. do for your project as a maintainer. I often get asked how I'm as productive as
  94. I seem to be. While I can't deny that I can write a lot of code, it's peanuts
  95. compared to the impact made by other contributors. I get a lot of credit for
  96. sway, but in reality I've only written 1-3 sway commits per week in the past few
  97. months. For this reason, the best approach focuses on the contributors, to whom
  98. I owe a great debt of gratitude.
  99. I'm still learning, too! I speak to contributors about my approach from time to
  100. time and ask for feedback, and I definitely make mistakes. I hope that I'll
  101. receive more feedback soon after some of them read this blog post, too. My
  102. approach will continue to grow over time (hopefully for the better) and I hope
  103. our work will enjoy success as a result.