Development Workflow
====================
Overview
--------
The Open Inwoner project uses **GitHub as the single source of truth** for development
work. Issues originate from multiple sources but must be converted to GitHub issues
before implementation begins.
Issue Sources
-------------
Issues come from three primary channels:
**Taiga**
Customer support and incident response. Triaged by product owners and Maykin support
staff. Most issues will be reported to the main open inwoner project
(https://taiga.maykinmedia.nl/project/open-inwoner), though some issues might be
reported in client-specific environments as well.
**Jira (Dimpact)**
Feature specifications created and refined by product owners.
**GitHub Issue Tracker**
Developer-driven technical improvements and issues.
.. important::
All work destined for development must be tracked as a GitHub issue in the
`Open Inwoner Development `_
project board, regardless of origin.
**An issue is not scheduled for work until it has been explicitly added to this
project board.** Creating an issue in the GitHub issue tracker alone does not queue
it for developmentāit must be moved to the project board during refinement or
planning.
Workflow Stages
---------------
The project board follows a standard Kanban flow:
.. mermaid::
graph TB
subgraph "Issue Sources"
H[Taiga]
I[Jira]
GH[GitHub Issue Tracker]
end
subgraph "Project Board"
NS[No Status
Refinement Queue]
subgraph "Scheduled Work"
TD[Todo]
IP[In Progress]
IR[In Review]
DN[Done]
end
end
H -.->|PO creates
GitHub issue| GH
I -.->|PO creates
GitHub issue| GH
GH -->|Anyone adds
to project| NS
H -->|Anyone adds
to project| NS
I -->|Anyone adds
to project| NS
NS -->|Approved in
refinement| TD
NS -.->|Rejected in
refinement| GH
TD --> IP
IP --> IR
IR --> DN
GH -.->|External Issue URL| H
GH -.->|External Issue URL| I
**No Status**
Issues can be added here by anyone for discussion during refinement or weekly
meetings. The team and PO will decide whether to schedule the issue for implementation
and move it to the Todo column.
**Todo**
Approved work ready to be picked up by developers.
**In Progress**
Actively being worked on by the assigned developer.
**In Review**
Implementation complete, awaiting code review and approval.
**Done**
Completed and merged.
Responsibilities
----------------
Issue Creation
~~~~~~~~~~~~~~
**Product Owners**
* Migrate features from Jira to GitHub with descriptions and acceptance criteria
* Add issues to the development board
* Confirm bugs and create corresponding GitHub issues
**Customer Support**
* Work with PO to verify and confirm bugs and ensure these are pushed to the
development board for discussion during refinement.
**Developers**
* Create technical issues in GitHub tracker when problems are encountered
* Issues must be approved in refinement before moving to the development board
Issue Management
~~~~~~~~~~~~~~~~
Issues must have their type and attributes set at creation or during refinement before
moving to Todo.
**Issue Types** *(set at creation/refinement)*
* **Feature**: User-facing functionality, generally mapping to features/user stories
from Jira
* **Bug**: Verified defects requiring fixes
* **Task**: Developer-driven chores, cleanups, and technical improvements
* **Epic**: Currently not in use
**Issue Attributes** *(set at creation/refinement)*
* **Milestone**: Issues should be assigned to one of the active milestones, virtually
always the upcoming release
* **External Issue URL**: Use this custom field to link back to the originating Taiga
or Jira ticket
**Assigned Developer**
* Move the issue through board columns
* Create sub-issues for implementation details
* Raise questions or mark as blocked if problems arise (use GitHub's "blocked by"
feature to reference the blocking issue)
* Responsible for overall issue progress
.. note::
Assignment typically happens during weekly planning or standup meetings.
Issue Structure
---------------
**Features**
Follow the principle: **1 Feature = 1 GitHub Issue**. Use sub-issues to organize
implementation work and track progress.
**Technical Issues**
The main issue captures the goal or objective. Implementation details go in sub-issues
when needed.
Milestones and Labels
---------------------
Milestones
~~~~~~~~~~
In general, most features are scheduled for the upcoming release milestone as part of an
active sprint. In some cases, there may be overarching milestones that span multiple
sprints and releases and have their own milestone. Tag issues with the appropriate
milestone to track release scope.
Labels
~~~~~~
Labels are not officially used for project management purposes. The first-class
attributes (issue types, milestones, assignees) provide the primary organizational
structure.
However, developers are free to use their own labelling system to help track and filter
issues according to their needs.
The one exception is:
``needs-backport``
**Special case**: This label marks issues that should be applied to an earlier release
after completion. Mainly used for bug fixes that need to be backported to stable
branches.