How does one "get involved with a SIPB project"? I’ve had countless prospective SIPB members ask me this question, but I have never really had a good answer for them. It’s a complicated, ill-defined process that even recent new members have difficulty describing. Even worse, no two people ever have the same experience, and what worked for one person may not work for another. This essay is an attempt to describe this process. Not as a series of step-by-step instructions, because such a recipe doesn’t exist, but as a philosophy, an identification of a mindset that will get you asking the right questions, talking to the right people, and working on the right problems. We’ll take the huge task “Get involved with a SIPB project”, and continually divide it into smaller, more well-defined problems, until we are left with tasks that you can tackle head-on. Let’s get started. You may also be interested in this document: https://etherpad.mozilla.org/process Level 0: Motivation ------------------- How do you pick a SIPB project to contribute to? One way to look at this problem is finding a project whose goals and community align with yours, so that contributing to the project is engaging and fun. * Does the project solve a problem that you also want to solve? * Does the project offer opportunities to learn technical skills that you would like to acquire? * Does the project have a good way for you to start contributing, e.g. it is written in a programming language you already know or want to learn, or it is running a system you have some familiarity with? Level 0: Milestones ------------------- What does it mean to have joined a project? The most important aspects are soft and hard to quantify, but there are some hard and unambiguous technical milestones you can achieve. Most projects have the following two: * Commit access (or “commit bits”), which indicate that you have permission to directly push source code changes to the repository of the project. * Administrative access (also called “root bits” or just “root”), which indicate that you have access to the ``root`` account on production hardware and can install software, do system maintenance, etc. On some projects, commit bits is equivalent to root, while on other projects, you may be able to commit code, but cannot deploy it without root. But even if you don’t have commit access, your level of involvement can vary. As you become more involved with the project, you will start to be able to check off more things off this list: * Do you know all of the maintainers involved with the project? * Can you describe the project to an interested outsider? * Have you used the project yourself as an enduser? * Do you know (roughly) what all of the components of the project do? * Have you setup an instance of the project’s software and/or configuration from scratch? * Have you answered a user question? * Have you submitted a patch and gotten it accepted? * Have you written documentation for the project? * Have you discovered a security vulnerability in the project? * Do the project maintainers trust you? * (probably more) All of these exercise different dimensions of involvement with the project, and you don’t have to do all of them to get root! But there are a lot of ways to contribute without having bits, so don’t get discouraged if you haven’t gotten them yet. Level 1: Getting in touch ------------------------- The single most important first step is setting up lines of communication with the current set of project maintainers. This can be tricky, because in general every project has a different preferred medium of communication, and a different set of social conventions around this medium. ... Level 1: Fixing bugs -------------------- Level 1: Helping users ---------------------- Level 1: Writing new software ----------------------------- Level 1: System administration ------------------------------ Level 2: Learning infrastructure -------------------------------- Level 2: Identifying problems ----------------------------- Level 2: Understanding problems ------------------------------- Level 2: Getting code --------------------- Level 2: Navigating code ------------------------ Level 2: Modifying code ----------------------- Level 2: Running code --------------------- Level 2: Submitting code ------------------------