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.
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.
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
- Fork the repo.
- Create your branch from
feat-next-release.
- 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.
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.mdas 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 questionRunning 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::heavy_check_mark::test_tube:broom::mag::blue_book:1️⃣
:<number word>::one: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
Within our repositories we use multiple branches with each serving a different purpose. The following branches are always present:
masterContains the latest release.developmentStaging branch.feat-next-releaseWorking branch for features.Master Branch
Only maintainers can work on this branch. The only way that commits will occur on
masteris by merging fromdevelopmentbranch. 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-releasebranch.The intent is that this branch remain clean so that if required, an immediate bug fix can be released without having to wait.
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
developmentbranch until whatever is being worked on is in a releasable state.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--------------------------- masterFig 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 lineoA commit|Rebase merge/Merge commitTGit TagTicketing / 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
Ensure that launching a dev environment is simple (VSCodium / VSCode)
Setup demo environment
Enables end-users and developers to view product. For the latter also enables visualisation and viewing features.
Re-create the Developer manual
Style Guide
In the meantime look at code from myself to deduce
Repo setup
Branching
feat-*with a PR back to it.FYI: in this repo, CI tests are conditional on branch. if
master,development,feat-*then all tests run (~3hours / ~1hrs otherwise).Templates, inc/usage. (Epics, Features, Stories, Tasks, Bugs and PR)
Language to use
Australian English (Closely follows British English)
Commits
Review development docs
Review testing docs
xfail-> https://github.com/nofusscomputing/centurion_erp/pull/1216/changes#r3701285290Footnotes
Central manual was never migrated when the current iteration of the website was migrated to. ↩