logo

drewdevault.com

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

FOSS-contributor-tracks.md (4219B)


  1. ---
  2. date: 2019-07-29
  3. layout: post
  4. title: FOSS contributor tracks
  5. tags: [maintainership, free software]
  6. ---
  7. Just like many companies have different advancement tracks for their employees
  8. (for example, a management track and an engineering track), similar concepts
  9. exist in free software projects. One of the roles of a maintainer is to help
  10. contributors develop into the roles which best suit them. I'd like to explain
  11. what this means to me in my role as a maintainer of several projects, though I
  12. should mention upfront that I'm just some guy and, while I can explain what has
  13. and hasn't worked for me, I can't claim to have all of the answers. People are
  14. hard.
  15. There are lots of different tasks which need doing on a project. A few which
  16. come up fairly often include:
  17. - End-user support
  18. - Graphic design
  19. - Marketing
  20. - Release planning
  21. - Reviewing code
  22. - Translations
  23. - Triaging tickets
  24. - Writing code
  25. - Writing documentation
  26. Within these tasks there's room still for more specialization - different
  27. modules have different maintainers, each contributor's skills may be applicable
  28. to different parts of the codebase, some people may like blogging about the
  29. project where others like representing the project at conferences, and so on. To
  30. me, one of my most important jobs is to figure out these relationships between
  31. tasks and people.
  32. There are several factors that go into this. Keeping an eye on code reviews,
  33. social channels, etc, gives you a good pulse on what people are good at now.
  34. Talking with them directly and discussing possible future work is a good way to
  35. understand what they want to work on. I also often consider what they could be
  36. good at but don't have exposure to yet, and encourage them to take on more of
  37. these tasks. The most common case where I try to get people to branch out is
  38. code review - once they've contributed to a module they're put on the shortlist
  39. for reviewers for future changes to nearby code. Don't be afraid to take risks -
  40. a few bugs is a small price to pay for an experienced contributor.
  41. This also touches on another key part of this work - fostering collaboration.
  42. For example, if someone is taking on a cross-cutting task, I'll give them the
  43. names of experts on all of the affected modules so they can ask questions and
  44. seek buy-in on their approach. Many developers aren't interested in end-user
  45. support, so getting people who are interested in this to bubble up technical
  46. issues when they're found is helpful as well.
  47. The final step is to gradually work your way out of the machine. Just like you
  48. onboard someone with feature development or code review, you can onboard people
  49. with maintainer tasks. If someone asks you to connect them to experts on some
  50. part of the code, defer to a senior contributor - who has likely asked you the
  51. same question at some point. Ask a contributor to go over the shortlog and
  52. prepare a draft for the next release notes. Pull a trusted contributor aside and
  53. ask them what they think needs to be improved in the project - then ask them to
  54. make those improvements, and equip them with any tools they need to accomplish
  55. it.
  56. One role I tend to reserve for myself is conflict prevention and moderation. I
  57. keep a light watch on collaboration channels and periodically sync with major
  58. contributors, keeping a pulse for the flow of information through the project.
  59. When arguments start brewing or things start getting emotional, I try to notice
  60. early and smooth things over before they get heated. At an impasse, I'll make a
  61. final judgement call on a feature, design decision, or whatever else. By making
  62. the decision, I aim to make it neither party's fault that someone didn't get
  63. their way. Instead, I point any blame at myself, and rely on the mutual trust
  64. between myself and the contributors to see the decision through amicably. When
  65. this works correctly, it can help preserve a good relationship between each
  66. party.
  67. If you're lucky, the end result is a project which can grow arbitrarily large,
  68. with contributors bringing a variety of skills to support each other at every
  69. level and enjoy the work they're doing. The bus factor is low and everyone
  70. maintains a healthy and productive relationship with the project - yourself
  71. included.