Skip to content

Improve the Contributor/Developer Experience #1194

Description

@jon-nfc

Contributors / Developers are arguably the most important persona when it comes to the Software Development Life Cycle (SDLC). Even more so than the end-user.

Note

Even though this ticket is for us to improve the Contributor / Developer experience, please feel free to comment on this ticket. This includes any difficulties you have found or areas you'd like improved / clarified.

Details

As there can be many levels of experience, making it clear regardless of this level of experience the workflow and dev requirements will be crucial.

Our intent has always been to use the CONTRIBUTING.md as the first point of contact for contributing as was the original intent of the document. We used to have this document setup in such a way that it only included the differences from a central manual1. This manual used to cover the ins and outs of the Development process. So a dev would read the manual first, obtain the info on how we did business. Then read the contribution guide. The contribution guide would only contain the differences from the manual for the repo in question

Running Doc of helpful stuff

Emoji use in ticket titles

We use emojis in ticket titles for an at glance "what" may still need to be done, task wise. Do note they are not mandatory except for completed ✔️ :heavy_check_mark:

Emoji Tag Description
✔️ :heavy_check_mark: Work on the ticket is complete.
🧪 :test_tube Tests to be written.
🧹 :broom: Clean-Up tasks to be completed.
🔍 :mag: Tasks that require confirmation / Checking.
📘 :blue_book: Documentation Task
number
1️⃣
:<number word>:
:one:
How many tasks need to be completed. numbers zero through nine are available.

With the exception of completed. Only tasks that cease being worked on should have emoji's added. This then enables when looking at the backlog of work, what needs to be done. Additionally, as a task is completed, the emoji must be removed from the title.

Branching

TL;DR

  1. Fork the repo.
  2. Create your branch from feat-next-release.
  3. PR comes back to our feat-next-release branch

Within our repositories we use multiple branches with each serving a different purpose. The following branches are always present:

  • master Contains the latest release.

  • development Staging branch.

  • feat-next-release Working branch for features.

Master Branch

Only maintainers can work on this branch. The only way that commits will occur on master is by merging from development branch. When merging to this branch, our auto-bump CI job bumps the version and creates a git tag which matches the version being released.

Development Branch

Considered the staging branch. Commits only ever remain on this branch for as long as required for CI jobs to complete and pass as necessary. Unless the branch is for a bug fix, commits will come from merging from the feat-next-release branch.

The intent is that this branch remain clean so that if required, an immediate bug fix can be released without having to wait.

[!NOTE]

When a commit (this includes all commits from merging a branch) reaches development and said commit contains a "commit footer close command" The issue will close automagicaly.

feat-next-release

This branch is the default working branch. Unless you are working on a bug. This is where your forks merge request must merge to. Normally this branch will remain un-merged from development branch until whatever is being worked on is in a releasable state.

[!IMPORTANT]

Whenever any commit is made to the development branch, This branch must be rebased on the development branch.

Branches Visualisation

Below is a visual representation of how we do branching, with work occurring from right-to-left. Take note that merges only occur down, never up. With the exception of a rebase, this enables the git tree to remain linear.

                o-----o-----o-----o             o-----o-----o-----o----- feat-next-release
               /                  |            /                  |
        T-----o-------------------o-----T-----o-------------------o----- development
       /                               /
-------o-------------------------------o-----o--------------------------- master

Fig 1. Git commit graph illustrating the project's branching model. Development proceeds from right to left, with feature branches periodically integrated into the development branch and selected changes promoted to master.

Key for Fig 1 is as follows:

  • - connecting line

  • o A commit

  • | Rebase merge

  • / Merge commit

  • T Git Tag

Ticketing / Issues

Issues are used within our projects to track from a developers perspective, work that needs to be done. We use a variety of issue types, they are:

  • Epic

  • Feature

  • Story

  • Task

  • Bug

  • RFE

  • Incident

Whilst anyone can raise an issue, it's important that the right issue type is used. With the exception of a Story (which can be upgraded to an Epic if required), choosing the wrong ticket type will only waste peoples time as you will be required to migrate the issue to one of the correct type.

Epic

An Epic (Epic User Story) is an extension to a Story (or User Story). Their intent is for a non-technical person (normally a project Manger) to plan a module (large set of features) or feature set that has many moving parts. Work to be completed as part of an Epic is always broken down into smaller chunks. As the Epic does not capture the finer features as a whole. The work is planned further in sub-issues, Feature or Story.

Feature

A Feature is basically the same as an Epic, this includes their usage. Normally a Feature is added as a sub-issue to either an Epic or another Feature issue as part of a chain. Like an Epic, work is planned further in sub-issues, Feature or Story.

Story

A User Story or Story for short is the same as an epic in so far that a non-technical person is the one who plans / creates the issue. A Story is for one single feature.

Task

A Task is for developers. They are by nature technical and used for work that only a developer can complete. Epics, Features and Stories, don't capture everything required to implement the feature. So as part of the developers workflow, they will use a Task to plan out the technical side of the work to be completed. Where possible we have Task templates available for different workflows. If you find a workflow, that could or possibly should be templated. Please feel free to, Ironically, raise a Task to have this addressed.

Bug

A Bug is for reporting an issue with the software. Its intend is two-fold. It captures the details of what is wrong with the software and provides the mechanism for us to investigate not only the bug itself but our workflow in the case of improving processes so as to reduce re-occurrence.

RFE

An Request for Enhancement or RFE for short is for requesting that an existing feature be improved in some way. Apart from its name, for all intents and purposes is the same as a Story.

Incident

An incident is for use by either a developer or maintainer. They are for tracking service outages in relation to the project itself, this includes CI. As an example, Github actions become unavailable.

Links

Tasks

Footnotes

  1. Central manual was never migrated when the current iteration of the website was migrated to.

Metadata

Metadata

Assignees

Labels

task::documentationDocumentation Tasks to be donetype::quality assuranceType for Issues and Merge Requests. Can also be used in discussion in comments and commits

Type

Projects

Status
Awaiting Feedback

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions