Skip to content

ADO Board Setup — Action Plan ​

Status: setup COMPLETE. The Heritage Community Hub ADO project is provisioned — area paths, iterations, columns, and the work-item backlog all exist. This guide is retained as a reference runbook for re-creating the project (e.g. a new tenant) and to document how the board was set up. The area-path array and seed examples below reflect the actual provisioned state (six area paths; decisions already locked in ADRs 0001-0024).

This guide walks through the one-time setup of the Heritage Community Hub ADO project: area paths, iterations, work item types, and board columns. All operations use the Azure CLI (az boards / az devops). Run these steps once when provisioning the project; they do not need to be repeated for normal sprint work.


Prerequisites ​

  1. Azure CLI installed and authenticated:
    powershell
    az login
  2. Azure DevOps CLI extension installed:
    powershell
    az extension add --name azure-devops
  3. AZURE_DEVOPS_EXT_PAT set in your session (loaded via Load-HCSEnvironment.ps1).
  4. Set defaults for the session:
    powershell
    az devops configure --defaults organization=https://dev.azure.com/hybridcloudsolutions project="Heritage Community Hub"

Step 1 — Verify the ADO project exists (5 minutes) ​

powershell
# List projects in the org — confirm "Heritage Community Hub" appears
az devops project list --output table

If the project does not exist, create it:

powershell
az devops project create `
  --name "Heritage Community Hub" `
  --description "Faith-centered community management platform for Heritage Virginia" `
  --process Agile `
  --visibility private

Step 2 — Create area paths (10 minutes) ​

Area paths reflect the platform's internal structure. Create each path below. The format is <project>\<area> — the project root is created automatically.

powershell
$areas = @(
  "Platform",
  "Web",
  "Mobile",
  "Homeschool",
  "Marketplace",
  "Media"
)

foreach ($area in $areas) {
  az boards area project create --name $area
}

Verify:

powershell
az boards area project list --depth 2 --output table

Expected output — each area should appear under the Heritage Community Hub root:

Heritage Community Hub
├── Platform
├── Web
├── Mobile
├── Homeschool
├── Marketplace
└── Media

Calendar, Announcements, Messaging, project-management, and documentation work attach to \Platform (or the most specific feature area) plus the relevant tag — there is no separate \Calendar, \Project Management, or \Documentation area path. Keep depth ≤ 2.


Step 3 — Create iterations (sprints) (10 minutes) &ZeroWidthSpace;

Iterations follow the naming pattern YYYY-Q<n>-S<m>. Each sprint is 2 weeks; 6 sprints per quarter. Create a full year of iterations at project start.

powershell
# Create top-level quarter nodes first, then sprint children

$quarters = @("2026-Q3", "2026-Q4", "2027-Q1", "2027-Q2")

foreach ($q in $quarters) {
  az boards iteration project create --name $q
}

# Create sprint nodes under each quarter
# Adjust start/finish dates to your actual calendar

$sprints = @(
  @{ path="2026-Q3"; name="S1"; start="2026-07-07"; finish="2026-07-20" },
  @{ path="2026-Q3"; name="S2"; start="2026-07-21"; finish="2026-08-03" },
  @{ path="2026-Q3"; name="S3"; start="2026-08-04"; finish="2026-08-17" },
  @{ path="2026-Q3"; name="S4"; start="2026-08-18"; finish="2026-08-31" },
  @{ path="2026-Q3"; name="S5"; start="2026-09-01"; finish="2026-09-14" },
  @{ path="2026-Q3"; name="S6"; start="2026-09-15"; finish="2026-09-28" },
  @{ path="2026-Q4"; name="S1"; start="2026-10-05"; finish="2026-10-18" },
  @{ path="2026-Q4"; name="S2"; start="2026-10-19"; finish="2026-11-01" },
  @{ path="2026-Q4"; name="S3"; start="2026-11-02"; finish="2026-11-15" },
  @{ path="2026-Q4"; name="S4"; start="2026-11-16"; finish="2026-11-29" },
  @{ path="2026-Q4"; name="S5"; start="2026-11-30"; finish="2026-12-13" },
  @{ path="2026-Q4"; name="S6"; start="2026-12-14"; finish="2026-12-27" }
)

foreach ($s in $sprints) {
  az boards iteration project create `
    --name $s.name `
    --path "Heritage Community Hub\$($s.path)" `
    --start-date $s.start `
    --finish-date $s.finish
}

Verify:

powershell
az boards iteration project list --depth 3 --output table

Step 4 — Configure board columns (5 minutes) &ZeroWidthSpace;

The default Agile board columns map work item states. The recommended column set for this project is:

New  →  Active  →  Resolved  →  Closed

For visual clarity, rename the columns in the ADO web UI:

  1. Open dev.azure.com/hybridcloudsolutions/Heritage Community Hub.
  2. Go to Boards > Settings > Columns.
  3. Rename to match the flow below:
ColumnMaps to ADO stateWIP limit
BacklogNew
In ProgressActive5
In ReviewActive (sub-state)3
DoneClosed

WIP limits enforce focus — adjust to actual team capacity.


Step 5 — Create the standard tag vocabulary &ZeroWidthSpace;

Tags cannot be pre-seeded via the CLI; they are created on first use. Apply these tags when creating the first work items in each area so they appear in the tag picker:

TagFirst use on
platformBuild Platform Epic (AB#3074)
identityPlatform auth/RBAC User Story
pipelinePlatform CI/CD User Story
infrastructureAny Bicep / IaC work
mobileiOS App Epic (AB#3077)
calendarCalendar & Announcements Epic (AB#3075)
homeschoolHomeschool work under Additional Features (AB#3076)
marketplaceMarketplace work under Additional Features (AB#3076)
docsAny documentation / ADR work item
securityAny security work
breakingAny change breaking an existing interface
cross-repoAny item spanning repos

Step 6 — Seed the delivery Epics (20 minutes) &ZeroWidthSpace;

Already done in the live project. Phase 0 is complete (ADRs 0001-0024 all Accepted; the ADR Epic AB#3154 is Closed). The delivery Epics below already exist. This step is retained for re-provisioning; create the Epics, then decompose Features → User Stories → Tasks per the work-items standard.

Create the delivery Epics (revised priority order) to populate the board.

powershell
# Example: create the platform Epic
az boards work-item create `
  --type Epic `
  --title "Build Platform" `
  --area "Heritage Community Hub\Platform" `
  --fields "Priority=2" "Tags=platform;identity;infrastructure"

Note the returned id — use it as --parent when creating child Features.

powershell
# Example child Feature
az boards work-item create `
  --type Feature `
  --title "Configure GitHub Actions CI/CD pipeline" `
  --parent <epic-id> `
  --area "Heritage Community Hub\Platform" `
  --fields "Priority=2" "Tags=pipeline;infrastructure"

Delivery Epics (these exist in the live project; AB# ids shown for reference):

Epic titleAB#Area pathTags
Build PlatformAB#3074Platformplatform;identity;infrastructure
Deliver iOS (Apple) AppAB#3077Mobilemobile
Deliver Sermons and Music HubAB#3137Mediaplatform
Deliver Community Calendar and AnnouncementsAB#3075Platformcalendar
Deliver Messaging and NotificationsAB#3138Platformplatform
Deliver Android (Google) AppAB#3139Mobilemobile
Deliver Additional FeaturesAB#3076Platformhomeschool;marketplace
Deliver Signature FeaturesAB#3078Platformplatform

Architectural decisions are already locked (ADRs 0001-0024). When re-provisioning, the ADR Epic "Author detailed ADRs (platform and per-feature)" (AB#3154) is recreated as Closed/historical — the stack is GitHub Actions + Azure Container Apps + PostgreSQL + Clerk auth, not an open research fork.


Step 7 — Verify the board &ZeroWidthSpace;

Open the ADO board in your browser and confirm:

  • [ ] Project Heritage Community Hub exists at dev.azure.com/hybridcloudsolutions
  • [ ] All 6 area paths appear under the project root (Platform, Web, Mobile, Homeschool, Marketplace, Media)
  • [ ] Iterations are created for at least Q3 + Q4 of 2026
  • [ ] Board columns are named (Backlog / In Progress / In Review / Done)
  • [ ] The delivery Epics (AB#3074-3078, AB#3137-3139) are visible in the backlog
  • [ ] Work items carry correct area paths and priority

Step 8 — Configure GitHub Issues sync labels &ZeroWidthSpace;

Apply the 6 standard labels to the GitHub repo so the ADO sync automation can apply them. Run from a session with GITHUB_TOKEN set:

powershell
$labels = @(
  @{ name="ado-tracked";  color="0075ca"; description="Issue has a linked ADO work item" },
  @{ name="in-progress";  color="e4e669"; description="ADO item is actively being worked" },
  @{ name="resolved";     color="0e8a16"; description="ADO item resolved — pending close" },
  @{ name="wont-fix";     color="ffffff"; description="ADO item closed as won't fix" },
  @{ name="needs-triage"; color="e11d48"; description="Issue received, ADO item not yet created" },
  @{ name="cross-repo";   color="7c3aed"; description="Affects more than one repo" }
)

foreach ($label in $labels) {
  gh label create $label.name `
    --color $label.color `
    --description $label.description `
    --repo Heritage-Virginia/heritage-community-hub `
    --force
}

Verification checklist &ZeroWidthSpace;

  • [ ] ADO project Heritage Community Hub created at dev.azure.com/hybridcloudsolutions
  • [ ] 6 area paths created (Platform, Web, Mobile, Homeschool, Marketplace, Media)
  • [ ] Iterations created for 2026-Q3 through 2026-Q4 (12 sprints minimum)
  • [ ] Board columns renamed (Backlog / In Progress / In Review / Done) with WIP limits
  • [ ] Delivery Epics and their Features seeded in the backlog with correct area paths and priority
  • [ ] 6 standard GitHub labels created on the Heritage-Virginia/heritage-community-hub repo
  • [ ] az devops configure --defaults set for this project in your dev session

Heritage Community Hub — Internal. Access restricted via Cloudflare Access + Entra ID.