Defining Project Levels and Their Scopes for `plasmapy`

In this topic I’m trying to define the scope for different “Project Levels.” I’m hoping this is the first step in setting up the structure that allows us to create “Project Issues” that outline desired features in such a way that contributors can easily find projects they can contribute with.

How would “Project Levels” be implemented…

  1. Each “Project Level” would get its own GitHub label.
    • These labels do not replace the “good first contribution” label.
    • I think the “good first contribution” label would often be paired with Project Lv1 & Lv2
    • Label description would define the scope of the level.
  2. A titled “Project” issue is created a pinned to the top of the issues page.
    • This issue will outline the goals of this structure, define the “Project Levels”, link to the issue search for a given level (e.g. “is:open label:Formulary”), etc.
    • instructions on how to submit a new project (via opening an issue and/or submitting to the suggestion box)
  3. “Project Issues” should properly outline the desired feature, including things like references, a brief API discussion, etc.
    • They should NOT be a quick reference to another comment made during an issue/PR discussion.
    • I see an issue would be written like a homework problem, where there’s enough information for the contributor to launch from.
    • We have to get into the habit of writing these issues!!!

The Levels:

  1. Novice
    • Label: “Project Lv1”
    • Scope:
      • Project can be done by contributors with little to no knowledge of Python or plasma physics.
      • Projects would include things like refactoring simple docstrings, re-ordering imports, declaring __all__ dunders, etc.
      • Would not require defining functions, classes, or tests, or creating new modules/files.
  2. Beginner
    • Label: “Project Lv2”
    • Scope:
      • Projects require limited familiarity with python and at most an undergraduate level of physics/math knowledge.
      • Projects include things like refactoring multiple files and defining well-focused functions that are limited in scope.
      • Simple documentation and/or tests may be required.
  3. Intermediate
    • Label: “Project Lv3”
    • Scope:
      • Projects require familiarity with python and at least knowledge of upper division undergraduate math and/or physics.
      • Projects could require research and/or investigation to design and write functions and/or classes from scratch, but should not encompass the need for framework designs.
      • Development could last a few months.
      • Likely require non-trivial writing of documentation and/or tests.
  4. Proficient
    • Label: “Project Lv4”
    • Scope:
      • Requires extensive knowledge of Python, package management, and/or physics/math knowledge.
      • Would require investigation/research to define project’s functionality.
      • UI and API would be significant components of the development and may require design of minor scale frameworks (e.g. Abstract Base Classes).
      • Time frame is open-ended.
  5. Expert
    • Label: “Project Lv5”
    • Scope:
      • These projects are consider epics, that is the project is composed of several lower level projects.
      • These projects require extensive knowledge in developing frameworks, APIs, and UIs; specialized knowledge of plasma physics; and extensive knowledge in project/package management.
      • Time frame is open-ended.


  1. Should these labels only be applied to issues, or PRs as well?
  2. Are there any other thoughts on the label names? “Project Lv3” is not very creative, but it is explicitly, even if a contributor does not find them through the title “Project” issue.