- Core
- 70 min
- 12 min read
- You marked this lesson done
- Updated
After this lesson you can
- Create a label scheme, board and milestone set that shows the seven focus areas
- Write an agent task issue and a merge request template that works as a change record
- Explain which of these features need a paid GitLab plan and what to use instead
Read these first
Dojo programme link: this is the hands-on lesson for the evidence of “complete epic management” in the Product Package (week 6) and the platform module of the Master Developer path. It builds on Issues, milestones and labels and Service management in git.
1. Why this matters
A framework that lives only in a slide deck does not run anything. The Dojo rule is that git is the source of truth. If it is not in git, it did not happen, and nobody else can find it, review it or build on it. See Git is the source of truth.
For a Product Development Manager (PDM) this is also the control panel. When you direct several AI agents at once, you need one place where you can see: which tasks exist, who (or which agent) has each one, what is waiting for your review, what is blocked, and what has shipped. GitLab provides that with plain features: issues, labels, milestones, boards, merge requests, pipelines. This lesson shows how to wire them to the seven ANDROID focus areas.
2. Key ideas, explained
2.1 The vocabulary
| GitLab feature | In plain words | ANDROID Ops use |
|---|---|---|
| Repository | The folder of files with all history | Product code, docs, research, designs, plans |
| Issue | One task or question, with discussion | A unit of work in any focus area; also a hand-off to an agent |
| Label | A coloured tag on issues and merge requests | Focus area, type, status |
| Milestone | A goal with dates that groups issues | A release or a learning goal |
| Epic | A larger piece of work that groups issues across milestones | A roadmap item (written by a person) |
| Board | Columns of issue cards, driven by labels | The view of work by status or by focus area |
| Merge request (MR) | A proposed change to be reviewed and checked before it joins the main branch | The change record |
| Pipeline | Automatic checks and steps that run on a change | The proof for Implement and Deliver |
| Release | A named version with notes | The record of Deliver |
2.2 What is free and what is not
Plans and features change, so read the current documentation for your tier. As a working rule for the Dojo:
- On the free plan you have repositories, issues, labels, milestones, boards (a basic board), merge requests and pipelines. That is enough to run ANDROID Ops.
- Epics and scoped labels (labels that use a double colon, such as
status::in-progress, where only one value can be set at a time) are paid features. The Dojo’s own project uses them because its plan includes them. - If you are on the free plan, use plain labels with a prefix and a dash, such as
focus-advance,status-ready, and use a roadmap file in the repository for epics (see the Epic roadmap template). You lose “only one status at a time” but you keep the idea.
Everything below works with either choice. Where it differs, it says so.
2.3 A label scheme that maps to the seven areas
Use three families of labels.
| Family | Values | Why |
|---|---|---|
| focus | advance, network, design, research, optimize, implement, deliver |
Shows which area the work belongs to |
| type | feature, bug, content, research, ops, agent-task |
Shows what kind of work it is |
| status | ready, in-progress, needs-review, blocked |
Shows where it is in the flow |
On a paid plan write them as focus::advance, type::feature, status::needs-review. On a free plan write focus-advance and so on.
Create them from the command line with glab, so the setup is repeatable and reviewable:
for f in advance network design research optimize implement deliver; do
glab label create --name "focus::$f" --color "#6B8E23" \
--description "ANDROID Ops focus area: $f"
done
for s in ready in-progress needs-review blocked; do
glab label create --name "status::$s" --color "#8B5A2B" \
--description "Work status: $s"
done
Keep the label list short. Ten labels you use beat forty you ignore.
2.4 Milestones and epics
A milestone is a goal with a due date. Name it for the result, not the activity: “Counter returns in two cafés”, not “Sprint 3”.
An epic is a roadmap item. People write it. An epic needs: the problem it solves, the evidence (links to research), a measure, a date range, and a list of issues. Each issue in the epic belongs to one focus area. A healthy epic has issues in several areas: some research, some design, some implementation, some delivery, and one optimisation review.
2.5 Boards
Make two boards.
- Flow board. Columns are the status labels: Ready, In progress, Needs review, Blocked, Done. This is what you open each morning. The column “Needs review” is your queue as PDM. If it is long, agents are waiting for you.
- Focus board. Columns are the seven focus labels. This shows where attention is going. If Implement has twenty cards and Research has none, you are building without learning.
2.6 Pipelines as proof
A pipeline is a set of automatic jobs that run when someone proposes or merges a change. In ANDROID Ops the pipeline is the proof for the last two areas:
- For Implement, run checks on every merge request: format and lint, unit tests, a scan for secrets, a scan for known problems in dependencies.
- For Deliver, run the release steps from the main branch: build, test again, publish, deploy to a small group first, run smoke tests after deployment.
A minimal pipeline file, .gitlab-ci.yml:
stages: [check, test, build, release]
lint:
stage: check
image: node:22
script:
- npm ci
- npm run lint
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
unit-tests:
stage: test
image: node:22
script:
- npm ci
- npm test
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
This is a teaching sketch. Your stack and runner decide the real commands. Read the pipeline documentation and do the first pipeline tutorial once by hand. You will not write most pipeline files from memory in 2030. You must be able to read one and say what it proves and what it does not. Lessons 25 to 28 build on this.
2.7 Merge requests as change records
A change record is a short written record of a change: what, why, how risky, how to undo it, who approved. Old IT service management kept these in separate tools. In ANDROID Ops the merge request is the record, because it already links to the issue, the diff, the review and the pipeline.
Use a description template so every merge request asks the same questions. Put it in .gitlab/merge_request_templates/Change.md. The Change record template gives a full version with a risk assessment, a recovery plan in the fix-forward style, and an AI-use section. See also GitLab’s description templates.
Important rule: an agent may fill in facts. A named person signs the risk decision and the approval.
3. Step by step: set up a repository for ANDROID Ops
- Create the repository and protect the main branch so changes arrive only by merge request.
- Add labels (section 2.3). Use the loop above or the web page.
- Add issue templates in
.gitlab/issue_templates/: one forEpic-item, one forAgent-task(below), one forBug. - Add the merge request template (Change record).
- Create the two boards (flow and focus).
- Create the first milestone with a due date and a result name.
- Write the first epic yourself, in the roadmap file or in GitLab if you have epics. Link the evidence.
- Break the epic into issues, one focus label each, with acceptance criteria in plain sentences.
- Add
.gitlab-ci.ymlwith at least lint and test jobs on merge requests. - Set a weekly Focus Shift (a four-hour block) in your calendar and a recurring issue “Weekly review” with a short checklist.
- Decide who may approve and set the rule: the author of a change (human or agent) is never its only approver.
The agent task issue template
## Task
<One sentence. What must exist when this is done?>
## Focus area
<advance | network | design | research | optimize | implement | deliver>
## Context
- Epic / roadmap item: <link>
- Evidence: <links>
## Acceptance criteria
- [ ] Given ..., when ..., then ...
- [ ] ...
## Scope
- May change: <paths>
- Must not change: <paths>
- Dependencies: no new dependencies without asking
- Data: no personal data, no secrets in output
## Output
- Branch name: <name>
- Merge request description: what changed, how to test, what you are unsure about
## Human review
- Reviewer: <name> (the agent may not approve)
An agent that works from an issue like this has everything it needs, and you have a record of what you asked for.
4. Worked example: TrailMug epic 4 in GitLab
Maya sets up the TrailMug planning project.
- Milestone: “Counter returns in two cafés”, due in six weeks.
- Epic 4: “Return a cup in under ten seconds at the counter.” Written by Maya. Evidence: her observation notes. Measure: median return time. If her plan has no epics feature, she writes this in
roadmap/epics.mdand uses a labelepic-4on the issues. - Issues, with labels:
| # | Issue | Focus | Type | Status |
|---|---|---|---|---|
| 38 | Observe two counters and time a return | research | research | done |
| 39 | Three layouts for the scan screen | design | agent-task | done |
| 40 | Stakeholder note to Leo and two cafés | network | content | in-progress |
| 41 | Record a return (API and tests) | implement | agent-task | needs-review |
| 42 | Counter page | implement | agent-task | in-progress |
| 43 | Log failed scans | implement | agent-task | ready |
| 44 | Release to Leo’s café, with rollback | deliver | ops | ready |
| 45 | Measure after one week and write the review | optimize | ops | ready |
On the flow board she sees one card in Needs review (issue 41). That is her morning. She opens the merge request, reads the diff, checks the pipeline result, and signs the change record. On the focus board she sees that Advance has no open cards: she writes a recurring issue to review the roadmap every second Friday.
5. Working with AI agents on this
What the PDM decides. The label scheme, the board columns, the epic text, who may approve, and the agent scope in each issue.
What agents can do in GitLab. Open issues from your notes, write issue descriptions from a template, apply labels, draft merge request descriptions, summarise a board, and spot issues with no acceptance criteria. Many agents can use the glab command-line tool or the API under a limited token.
Rules for agent access.
- Give each agent its own account or token with the least access the task needs: write access to branches, not to settings, not to the main branch.
- Protect the main branch. Require merge requests and, where your plan allows it, approvals.
- Never place secrets in issues, merge requests or prompts.
- Keep a record of which agent did what, in the merge request.
A brief you can adapt:
Read roadmap/epics.md, epic 4. For each acceptance criterion, draft one
GitLab issue using the Agent-task template. Do not create the issues;
output them as markdown so I can review. Do not change the epic. Mark
any criterion that is not testable as NOT TESTABLE and explain why.
How to check. Read each issue as if you were the agent: could you do the work with only this text? If a criterion cannot be tested, rewrite it yourself.
From delegating to orchestrating. The board, labels, milestones and merge request rules in this lesson are the control surface for a command chain of sessions: each session takes one issue, works on one branch and opens one merge request, and protected branches and approvals bound what it can do. The Agent orchestration track explains the shape.
6. Common mistakes and how to avoid them
- Too many labels. If nobody remembers them, nobody uses them. Start with fifteen at most.
- A status nobody updates. Let the system help: use merge request links and automatic closing with “Closes #N”.
- Epics written by an agent. They will read well and belong to nobody. Write them yourself.
- Giving agents the keys. An agent with admin access is one bad instruction from damage. Least access.
- Changes without a record. Every change that reaches users has a merge request, and every merge request has the template filled in.
- Using the board as a to-do dump. Review it weekly and close what is dead.
7. Practice
Deliverable in git: a repository (or a branch of your product repository) containing:
docs/gitlab-setup.md: your label list, board descriptions and the approval rule, with a screenshot or exported description of each board..gitlab/issue_templates/Agent-task.mdand.gitlab/merge_request_templates/Change.md.roadmap/epics.mdwith one epic you wrote, and at least six issues linked to it covering four or more focus areas.- A
.gitlab-ci.ymlwith at least two checks that run on merge requests. - One merge request, opened from an issue, with the template filled in, your review notes, and a note about any agent help.
8. Checklist
- Labels exist for focus, type and status.
- I have a flow board and a focus board.
- A milestone has a result-style name and a date.
- The epic is written by a person and links evidence.
- Every issue has acceptance criteria and one focus label.
- The main branch is protected; the author is never the only approver.
- A pipeline runs checks on merge requests.
- The merge request template records risk, recovery, checks, AI use and approval.
- No secrets in any issue, merge request or prompt.
Next: the Launch Sequence lessons show how the Implement and Deliver pipeline grows into a full proof of readiness.
Finished this lesson?
This is only for you. It is saved in this browser, on this device, and nothing is sent anywhere. It is not a grade and not a certificate.
Go deeper
Further learning
Free or low-cost material from other publishers. We opened every link; check the cost label before you start.
GitLab
Labels (opens the publisher's site in a new tab)
- Free
- Docs
- Beginner
Explains how to create and use labels to classify issues. Read it to design a small label set (for example epic, bug, blocked) that agents and people both follow.
GitLab
Milestones (opens the publisher's site in a new tab)
- Free
- Docs
- Beginner
Explains GitLab milestones: dated goals that group issues and merge requests, with progress tracking. Milestones are how you give dates to a plan on the free plan.
GitLab
Issue boards (opens the publisher's site in a new tab)
- Free
- Docs
- Beginner
Shows how to turn labels and milestones into a Kanban-style board in GitLab. Use it to make your work visible in one view.
GitLab
Epics (opens the publisher's site in a new tab)
- Free
- Docs
- Intermediate
GitLab's documentation for epics, which group related issues across projects. Check the page for which GitLab tier includes the feature before you rely on it. On the free plan, use labelled issues instead.
GitLab
Description templates (opens the publisher's site in a new tab)
- Free
- Docs
- Intermediate
Explains how to store issue and merge request templates in your repository so each new item starts with the right headings. Use it to ship your epic template with the project.
GitLab
CI/CD pipelines (opens the publisher's site in a new tab)
- Free
- Docs
- Beginner
How pipelines, stages and jobs fit together in GitLab. The base reference for turning a checklist into automatic gates.
GitLab
Merge requests (opens the publisher's site in a new tab)
- Free
- Docs
- Beginner
GitLab's reference for merge requests, the place where an agent's work is reviewed and merged. Read it so you can review agent output through the same door as any other change.
GitLab
Tutorial: Create and run your first GitLab CI/CD pipeline (opens the publisher's site in a new tab)
- Free
- Tutorial
- Beginner
- about 30 minutes
The official first-pipeline tutorial from GitLab: write a .gitlab-ci.yml file, run jobs in stages and read the results. Take it so you can read any pipeline an agent proposes and see which checks guard your product.



