Step 1: Choose an issue to work on

Work with your team to determine the right issue to work on

Developers work in an agile framework, where issues are assigned to sprints and developers work on these items over a two-week sprint period.

Step 2: Create a feature branch

  1. Checkout main branch and pull the latest

    git checkout main && git pull origin main
    CODE

  2. Create a new feature branch from main

    git checkout -b feature/12345-issue-title
    CODE

Since most new work derives from a GitHub Issue, it's recommended to prefix your branch name with the issue. For example, if you're working on a feature to collect a veteran's address as detailed in Issue #25, you might call your issue 25-address.

Step 3: Code new functionality

Write the code for the new feature! This is often the fun part. :-)

It's very helpful if you restrict the scope of changes to only the issue/feature that you're working on. For example, you might see some code you can cleanup along the way and decide to change it. However, this increases the scope of your changes and increases risk if your commits/feature need to be rolled back (and the rollback pulls other things with it). It also helps your code reviewer, because they aren't left wondering how a tangential change impacts the feature promised by the pull request.

As you code your changes, commit changes to your feature branch. Commit early. Commit often.

Step 4: Write tests for new functionality

  • Unit: Tests a specific method or very granular piece of the code base.

  • End to end: Tests how your code works when clicked through in a real browser.

  • Accessibility: Tests that run automated checks to catch some basic accessibility mistakes. Typically these are incorporated into end-to-end tests.

These tests are automatically executed during review, but you should run them locally before moving on.

The only way to quickly know if your new change breaks the existing functionality of the application is to have a suite of automated tests that execute whenever new stuff is added. When you add new functionality, new tests are required so that future developers know if they have broken your contributions.

Step 5: Test manually

Test new functionality locally on supported browsers.