Domain 1 · 10–15%

Design and implement processes and communications

Making work visible and traceable from idea to production, measuring the flow of delivery, and wiring the tools together so that humans find out what they need to know without drowning in noise.

Three objectives:

This domain is tool-agnostic in principle but tool-specific in the questions. Expect to be asked whether a capability belongs to Azure Boards, GitHub Projects, or both.

1.1 Traceability & flow of work

GitHub Flow and the other flow models

GitHub Flow is a lightweight, branch-based workflow for teams that deploy continuously. There is exactly one long-lived branch (main), which is always deployable.

flowchart LR A[Create a branch
from main] --> B[Add commits] B --> C[Open a pull request] C --> D[Review & discuss
+ automated checks] D --> E[Deploy from the branch
to validate] E --> F[Merge to main] F --> G[Delete the branch] D -->|changes requested| B
GitHub Flow: branch → commit → PR → review → deploy → merge. Main is always releasable.
ModelLong-lived branchesDeploy modelFits
GitHub Flowmain onlyDeploy from the branch, then mergeWeb apps, SaaS, continuous delivery
Trunk-basedmain onlyDeploy from main; feature flags hide unfinished workHigh-maturity CD teams
Git Flowmain, develop (+ release/, hotfix/, feature/)Scheduled releases cut from developVersioned/boxed software
Release Flow (Microsoft)main + release/*Branch per release, cherry-pick fixes forwardMultiple supported versions in production

Caveat — GitHub Flow vs Git Flow

The single most reliable discriminator is the number of long-lived branches. GitHub Flow has one (main); Git Flow has at least two (main + develop). If the scenario says "release regularly / continuously deploy / keep it simple" → GitHub Flow. If it says "support multiple released versions / scheduled releases / QA hardening period" → Git Flow or release branching.

Feedback cycles

A "feedback cycle" is any loop that gets information back to the person who can act on it — the shorter the loop, the cheaper the fix.

MechanismPurposeLives in
GitHub IssuesBugs, features and tasks tied directly to code; labels, milestones, assigneesGitHub
GitHub DiscussionsOpen-ended Q&A and announcements that are not actionable work itemsGitHub
PR reviews & required reviewersInline code feedback as a hard gate before mergeBoth
CODEOWNERSAuto-request the right reviewers based on the paths a PR touchesBoth
Status checksCI results surfaced on the PR itselfBoth
Notifications / subscriptionsRoute events to people and channels; tune to avoid alert fatigueBoth
Azure BoardsPlanning-level feedback: epics, stories, sprints, boardsAzure DevOps

Issues vs Discussions

An issue represents work that someone will eventually close by doing something. A discussion is a conversation with no defined completion. If a question asks where to put "community questions and feature brainstorming without cluttering the backlog", the answer is Discussions.

Integration for tracking work

Azure Boards work item hierarchy

LevelAgile processScrum processBasic process
Portfolio (top)EpicEpicEpic
PortfolioFeatureFeatureIssue
RequirementUser StoryProduct Backlog Item (PBI)Issue
TaskTaskTaskTask
DefectBugBugIssue

Azure DevOps ships four inherited process templates: Basic (default, simplest), Agile, Scrum and CMMI (adds formal change requests and risks). You customise by creating an inherited process — you cannot edit the system processes directly.

Linking commits and PRs to work items

The AB# syntax is the glue between GitHub and Azure Boards, and it is heavily tested.

git commit message / PR title / PR description
# Link only (no state change)
git commit -m "Refactor the payment gateway AB#1234"

# Link AND transition the work item to its "completed" state on merge
git commit -m "Fix null reference on checkout fixes AB#5678"
git commit -m "Closes AB#199, implements AB#204"

Caveat — AB# vs #

From a GitHub commit/PR to an Azure Boards work item → AB#1234. From within Azure Repos to a work item → #1234. A GitHub #1234 refers to a GitHub issue, not a work item. Getting this backwards is a classic distractor.

Azure Boards ↔ GitHub connection

  1. In Azure DevOps: Project Settings → GitHub connections → Connect your GitHub account.
  2. Authenticate — the Azure Boards GitHub App is the recommended method (scoped permissions, no personal token). OAuth and a PAT are the fallbacks.
  3. Select the repositories to connect. One GitHub repo can only be connected to one Azure DevOps project at a time.
  4. Use AB#ID in commits, PR titles/descriptions and branch names to create links automatically.

Once connected you get: work-item links visible from the Development section of the work item, GitHub PR status shown on the Kanban card, and automatic state transitions on merge.

GitHub Projects

Boards or Projects?

Choose Azure Boards when you need a formal process template, portfolio-level rollup across many teams, rich query language (WIQL), Analytics/OData reporting or Test Plans linkage. Choose GitHub Projects when the work is code-centric, the team already lives in GitHub, and lightweight planning next to the repo is enough.

Source, bug and quality traceability

End-to-end traceability means you can start from any artefact and reach every other one:

flowchart LR W[Work item
requirement / bug] --> B[Branch] B --> C[Commit] C --> P[Pull request] P --> R[Build run] R --> T[Test results
+ coverage] T --> D[Deployment
to environment] D -.-> W
The traceability chain — each hop is a link you must configure, not something you get for free.
TypeHow you implement it
Source traceabilityLink commits/PRs to work items (AB#); enforce with the branch policy "Check for linked work items"
Bug traceabilityCreate bugs directly from failing test results; link the bug to the failing build and the fixing PR
Quality traceabilityPublish test results and code coverage from the pipeline; gate merges on build validation and coverage thresholds
Release traceabilityDeployment records per environment; auto-generated release notes listing the work items and commits in each release

Caveat — enforcing traceability

If a question asks how to guarantee that every change is tied to a requirement, the answer is a branch policy (Check for linked work items) in Azure Repos — not a convention, not documentation. Policies are the enforcement mechanism; AB# is just the syntax.

1.2 Metrics & queries for DevOps

DORA metrics — the four keys

MetricMeasuresElite performanceCategory
Deployment frequencyHow often you successfully release to productionOn demand / multiple per dayThroughput
Lead time for changesCommit → running in productionLess than one dayThroughput
Change failure rate% of deployments causing a degradation needing remediation0–15%Stability
Time to restore service (MTTR)Incident start → service restoredLess than one hourStability

Caveat — throughput vs stability

Two DORA metrics measure speed (deployment frequency, lead time) and two measure stability (change failure rate, time to restore). The research finding the exam leans on: high performers improve both together — speed and safety are not a trade-off. If a scenario says "we deploy faster but break more", the fix is better automated testing and smaller batches, not slowing down.

Flow metrics — cycle time vs lead time

flowchart LR A[Request created
New] --> B[Work started
Active] B --> C[Work done
Closed] A -. lead time .-> C B -. cycle time .-> C
Lead time spans the whole wait; cycle time only spans active work. Lead time ≥ cycle time, always.
MetricDefinitionImprove it by
Lead timeCreated → closed (includes backlog waiting time)Reducing queue depth; prioritising ruthlessly
Cycle timeStarted (first active state) → closedReducing handoffs, batch size and review latency
Throughput / velocityItems (or points) completed per time periodRemoving blockers; stable team capacity
Work in progress (WIP)Items currently activeEnforcing WIP limits on board columns
Flow efficiencyActive time ÷ total elapsed timeEliminating wait states between columns

Little's Law

Cycle time = WIP ÷ throughput. This is why capping WIP is the fastest lever on delivery speed: with throughput roughly constant, halving work in progress halves cycle time. Expect a scenario phrased as "items sit in progress for weeks" — the answer is WIP limits, not more people.

Dashboards, widgets and Analytics

Azure DevOps reporting is built on the Analytics service, a read-optimised store fed from work-tracking and pipeline data. It is exposed three ways:

SurfaceUse for
Dashboard widgetsAt-a-glance team metrics; configured in the UI, no query needed
Analytics viewsA curated, filtered dataset published for Power BI consumption
OData queriesAd-hoc/custom reporting against the Analytics endpoint (analytics.dev.azure.com)
WIQL (Work Item Query Language)Querying current work item state — flat lists, tree and direct-links queries

Caveat — WIQL vs Analytics/OData

WIQL answers "what does the backlog look like right now". Analytics/OData answers "how did this change over time" — trends, historical snapshots, burndown, cumulative flow. Any question containing "trend", "over the last N sprints", or "historical" points to Analytics, not a work item query.

WidgetAnswers
VelocityHow much did we complete per sprint (planned vs actual)?
Burndown / BurnupAre we on track to finish the sprint or release?
Cumulative Flow Diagram (CFD)Where is work piling up? (band widening = bottleneck)
Lead time / Cycle timeHow long does delivery take, and how variable is it?
Test results trendIs quality improving or decaying?
Code coverageIs test coverage trending in the right direction?
Deployment status / Release pipeline overviewWhat is deployed where, right now?
Pipeline duration & pass rateIs CI getting slower or flakier?

Reading a Cumulative Flow Diagram

Each coloured band is a board column. A band that widens over time is accumulating WIP — that column is the bottleneck. The vertical distance between the top and bottom of the bands at a point in time is WIP; the horizontal distance between the same two lines is approximate cycle time.

Metrics by discipline

The skills measured list metrics for seven areas explicitly. Know a couple of representative metrics for each.

AreaRepresentative metricsSource
Project planningVelocity, sprint burndown, epic/feature progress, WIP, planned vs completedAzure Boards Analytics
DevelopmentPR turnaround time, PR size, review depth, code churn, active branch countRepos / GitHub Insights
TestingPass rate, flaky test rate, code coverage (line/branch), test duration, MTTDPipelines / Test Plans
SecurityOpen vulnerabilities by severity, mean time to remediate, secret-scanning alerts, Dependabot alert ageGHAS / Defender for Cloud
DeliveryDeployment frequency, deployment success rate, lead time, rollback ratePipelines / Environments
OperationsMTTR, availability/uptime, incident count by severity, change failure rate, error budget burnAzure Monitor
Flow of workCycle time, lead time, throughput, flow efficiencyAzure Boards Analytics

1.3 Collaboration & communication

Wikis and process diagrams

Project wikiCode wiki (publish as code)
Backing storeA dedicated Git repo created for you (hidden from Repos)A folder in an existing repo you choose
EditingIn the wiki UI, or by cloning the repoNormal code workflow — branch, PR, review
VersioningSingle versionMultiple versions — one per branch/tag
Best forTeam notes, onboarding, meeting recordsDocs that must ship and be reviewed with the code

Caveat — which wiki?

If the requirement includes pull-request review of documentation, versioned docs per release branch, or "docs live with the code", the answer is publish code as wiki. Only one project wiki can exist per project; you can publish many code wikis.

Mermaid in wikis — the syntax differs by platform

Both platforms render Mermaid, but Azure DevOps wikis do not use fenced code blocks — they use a colon-delimited container. This distinction is directly examinable.

Azure DevOps wiki page
::: mermaid
graph TD
    A[Developer] --> B[Push code]
    B --> C{PR review}
    C -->|Approved| D[Merge to main]
    C -->|Changes| A
:::
GitHub Markdown / issue / PR
```mermaid
graph TD
    A[Developer] --> B[Push code]
    B --> C{PR review}
    C -->|Approved| D[Merge to main]
    C -->|Changes| A
```
DiagramOpening keywordUse for
Flowchartgraph TD / flowchart LRProcess and decision flows
SequencesequenceDiagramService/API interactions over time
GanttganttRelease timelines and schedules
ClassclassDiagramDomain/system design
StatestateDiagram-v2Work item or entity state machines
User journeyjourneyExperience mapping
PiepieSimple proportional breakdowns

Other wiki markup worth knowing

Azure DevOps wikis also support [[_TOC_]] (auto table of contents), ::: mermaid, work item mentions with #ID, @ person mentions, and ::: query-results embedding. GitHub Markdown adds task lists, footnotes, alerts (> [!NOTE]) and native Mermaid/GeoJSON rendering.

Release documentation

Auto-generated release notes

GitHub Actions release with generated notes
permissions:
  contents: write

steps:
  - uses: actions/checkout@v4
    with: { fetch-depth: 0 }

  - name: Create release
    env:
      GH_TOKEN: ${{ github.token }}
    run: |
      gh release create "${{ github.ref_name }}" \
        --generate-notes \
        --title "Release ${{ github.ref_name }}"
GitHub .github/release.yml — categorise notes
changelog:
  exclude:
    labels: [ignore-for-release]
  categories:
    - title: ⚠️ Breaking changes
      labels: [breaking-change]
    - title: ✨ Features
      labels: [enhancement, feature]
    - title: 🐛 Fixes
      labels: [bug]
    - title: Other changes
      labels: ["*"]

API documentation

Automating documentation from Git history

Automated changelogs depend on machine-readable commit messages. The Conventional Commits convention is the standard the tooling assumes.

spec Conventional Commits
<type>[optional scope][!]: <description>

[optional body]

[optional footer(s)]   # e.g. BREAKING CHANGE: <what changed>

# Types: feat, fix, docs, style, refactor, perf, test, build, ci, chore, revert

# Examples
feat(auth): add SSO via Entra ID          → MINOR version bump
fix(api): handle null order id             → PATCH version bump
feat(api)!: drop support for v1 endpoints  → MAJOR version bump

Caveat — commit type drives the version bump

With semantic-release or standard-version: fix:patch, feat:minor, and a ! after the type/scope or a BREAKING CHANGE: footer → major. This is the link between Domain 1 (documentation from history) and Domain 3 (SemVer strategy).

bash changelog straight from git log
# All commits since the last tag, as a markdown list
git log $(git describe --tags --abbrev=0)..HEAD --pretty=format:"- %s (%h)"

# Tools that do this properly:
#   semantic-release  — full release automation (version, tag, notes, publish)
#   standard-version  — local versioning + CHANGELOG.md
#   git-cliff         — highly configurable changelog generator (Rust)
#   GitHub native     — "Generate release notes" from PR titles

Webhooks and service hooks

A webhook is an outbound HTTP POST that the platform sends to your endpoint when an event occurs — push-based, so no polling.

GitHub webhooksAzure DevOps service hooks
Configured atRepository, organization or GitHub App levelProject Settings → Service hooks
Common eventspush, pull_request, issues, workflow_run, release, check_runBuild completed, release created/completed, PR created/updated, work item created/updated, code pushed
PayloadJSON (application/json or form-encoded)JSON, with resource-version selection
SecuritySecret → HMAC signature in X-Hub-Signature-256; verify before trustingBasic auth headers / HTTPS endpoint; restrict by filters
Built-in targets— (raw HTTP only; Apps for richer integrations)Teams, Slack, Jenkins, Trello, Azure Service Bus, generic webhook, and more

Caveat — always verify the signature

A webhook endpoint is a public URL that anyone can POST to. The correct answer to "how do you ensure the payload really came from GitHub" is configure a secret and validate the X-Hub-Signature-256 HMAC-SHA256 digest — not IP allow-listing alone, and definitely not "use HTTPS".

Integration with Microsoft Teams

IntegrationHowTypical subscriptions
Azure DevOps → TeamsInstall the Azure DevOps app in Teams and sign in, or configure Project Settings → Service hooks → Microsoft TeamsBuild/release completed or failed, PR created, work item updated, code pushed
Azure Boards → TeamsAzure Boards app for Teams — create and manage work items from the channelWork item created/updated, plus @azure boards commands
GitHub → TeamsInstall the GitHub app for Teams, then @github subscribe owner/repoPRs, issues, commits, releases, deployments, workflow runs

Signal, not noise

Every integration question that mentions "without overwhelming the team" wants filtered subscriptions — subscribe only to failures, only to a specific branch, or only to a specific pipeline. Blanket subscriptions are always the wrong answer when the scenario complains about notification volume.

Domain 1 rapid recap

The requirement says…Answer
Link a GitHub commit to an Azure Boards work itemAB#<ID> in the commit message / PR
Close the work item automatically when the PR mergesTransition keyword + AB#ID (e.g. fixes AB#42)
Guarantee every PR is tied to a requirementBranch policy: Check for linked work items
Auto-assign reviewers by file pathCODEOWNERS
Render a process diagram in an Azure DevOps wiki::: mermaid block (not triple backticks)
Version documentation alongside release branchesPublish code as wiki
Report a work-item trend over the last six sprintsAnalytics / OData (not WIQL)
Find the bottleneck column on the boardCumulative Flow Diagram — look for the widening band
Reduce cycle time quicklyWIP limits (Little's Law)
Generate a changelog automatically from commitsConventional Commits + semantic-release / GitHub generated notes
Notify a Teams channel when a pipeline failsService hooks → Microsoft Teams, filtered to failures
Prove the webhook payload is authenticShared secret + verify X-Hub-Signature-256