Open Source Workflow

Below is the process that Systers uses to plan, create, test, and deploy our various projects within GitHub. These are the steps that should be taken whenever contributing to any of our repositories.

Development Life Cycle

Requirements Analysis

Project Requirements Document Create Issues Approved by Mentor or Maintainer


Create Mock-Ups for the Issue Reviewed by Mentor or Maintainer Adjust Mock-Up Based on Feedback Approved by Mentor or Maintainer

Development & Testing (TDD)

Fix the Issue Open a Pull Request Reviewed by Mentor or Maintainer Adjust Based on Feedback Approved by Mentor or Maintainer


Create Issues that Test the Applications in Production (i.e. User Tests, Feature Tests, etc.) Reviewed by Committer Submit PRs that Contain Documentation on Tests to Suggest Improvements for Next Release Approved by Committer


Create Issues that Fix Errors, Improve Implementation, or Upgrade the Current Language Approved by Mentor, Maintainer, or Committer

Before Merging a Pull Request

Even when starting with a rebased branch, it’s possible to encounter merge conflicts.

  1. Ensure the PR was sent to the correct branch.
  2. If there are unnecessary merge commits squash and merge, or ask the contributor to do it again by rebasing (removing the merge commit).
    1. If the PR is from a new contributor explain that it will be rebased, then do a squash and merge. We don’t want people to be discouraged.
    2. If someone has unnecessary merge commits frequently, do not merge until they send a PR with merge commits removed.

Squash Commits

Systers’ workflow is based around squashing PR’s into a single commit before merging. This can be done on the GitHub interface or, if you prefer, in the command line using Git.

When you select the Squash and merge option on a pull request on GitHub, the pull request's commits are squashed into a single commit. Instead of seeing all of a contributor's individual commits from a topic branch, the commits are combined into one commit and merged into the default branch.