A Role-Based Software Development Lifecycle Framework for GitHub
• Quick Start • Documentation • Role Guides • Examples
- Overview
- Using as Submodule
- What This Is
- Workflow Flowchart
- Directory Structure
- Quick Start
- Role-Based Prompts
- Multi-Role Testing
- Quick Navigation
- Extending the System
- File Purposes
- Naming Conventions
Provide a structured, AI-assisted software development workflow that transforms idea-to-release cycles into a traceable, role-based process. Designed for teams (or individuals wearing multiple hats) who want to leverage GitHub Copilot and GitHub's native features to maintain discipline without heavy tooling overhead.
Enable consistent, high-quality software delivery by:
- Defining clear responsibilities across 5 key roles (PO, Tech Lead, Implementer, QA, Release)
- Enforcing quality gates through Definition of Ready and Definition of Done
- Maintaining complete traceability from idea → story → PR → release
- Providing AI assistant context for "touchless" or low-touch development
Git Flow inspired, trunk-based flexible approach:
- Issue-driven development: Every change starts with a GitHub issue
- Template-guided creation: Standardized templates ensure completeness
- Role-based review gates: Each stage has specific validation criteria
- Branch strategy: Feature branches → develop → release → main with proper versioning
- AI-augmented workflow: Copilot Chat prompts guide each role's responsibilities
✅ Reduced ambiguity - Clear success criteria for every feature
✅ Faster onboarding - New team members follow templates and role guides
✅ Better quality - Automated checks, required tests, and review checklists
✅ Complete traceability - Know why every line of code exists
✅ Consistent releases - Standardized versioning and changelog generation
✅ AI efficiency - Copilot can generate entire features following your standards
Submodule-based distribution - Add this workflow to any project as a Git submodule in the .github directory. GitHub automatically recognizes issue templates and workflows. Track specific branches (main, develop, release) or pin to exact versions for stability.
Add this workflow system to your project:
# Navigate to your project root
cd your-project/
# Add as submodule directly to .github directory
git submodule add https://github.com/nsin08/github-copilot-sdlc.git .github
git submodule update --init --recursive
# Commit
git add .github .gitmodules
git commit -m "Add SDLC workflow template system"
git pushUpdate submodule to latest version:
cd your-project/
git submodule update --remote --merge .github
# Review changes, then commit
git add .github
git commit -m "Update SDLC workflow template system"
git pushTrack specific branch (e.g., develop, release, or feature):
# Track develop branch for latest features
git config -f .gitmodules submodule..github.branch develop
git submodule update --remote --merge .github
git add .gitmodules .github
git commit -m "Track develop branch for workflow templates"
# Track a release branch for stability
git config -f .gitmodules submodule..github.branch release/v1.2.0
git submodule update --remote --merge .github
# Track a specific feature branch (temporary)
git config -f .gitmodules submodule..github.branch feature/new-templates
git submodule update --remote --merge .github
# Switch back to main (default)
git config -f .gitmodules submodule..github.branch main
git submodule update --remote --merge .githubPin to specific version (commit hash):
# Enter submodule and checkout specific commit
cd .github
git checkout abc1234 # specific commit hash
cd ..
# Commit the pinned version
git add .github
git commit -m "Pin workflow templates to version abc1234"
git push
# To update later, repeat with new commit hashCommon submodule operations:
# Check current submodule status
git submodule status
# Initialize after cloning project with submodules
git submodule update --init --recursive
# Pull latest from tracked branch
git submodule update --remote --merge .github
# Reset submodule to committed state
git submodule update --force .github
# Remove submodule
git submodule deinit .github
git rm .github
rm -rf .git/modules/.githubBenefits of using as submodule:
- ✅ Stay up-to-date with workflow improvements
- ✅ Consistent workflow across multiple projects
- ✅ Track specific branches (main, develop, release)
- ✅ Pin to specific versions for stability
- ✅ Easy to customize locally while tracking upstream changes
- ✅ Revert to previous versions if needed
A standalone, reusable .github directory implementing a role-based software development lifecycle.
Currently Implemented (5 Roles):
- Sponsor/PO → Creates Ideas with success criteria
- Tech Lead → Breaks down into Epic + Stories
- Implementer → Builds features, opens PRs
- Reviewer/QA → Validates against criteria
- Release/DevOps → Tags, releases, closes Epics
flowchart TD
Start([New Idea]) --> PO["<b>Role: Sponsor/PO</b><br/>Create Idea Issue<br/>Define success criteria"]
PO --> |State: Intake| TLReview["<b>Role: Tech Lead</b><br/>Review Idea Issue"]
TLReview --> TLClear{"Requirements<br/>Clear?"}
TLClear -->|No| POClarify["Request Clarification<br/>Ask specific questions"]
POClarify --> PO
TLClear -->|Yes| TLFeasible["Validate Feasibility<br/>with Implementers"]
TLFeasible --> Feasible{"Feasible?"}
Feasible -->|No - Too Risky| POClarify
Feasible -->|Yes| TLCreate["Create Epic + Stories<br/>Add architecture notes"]
TLCreate --> POValidate["Request PO Validation"]
POValidate --> POApprove{"PO<br/>Approves?"}
POApprove -->|No - Needs Adjustment| TLCreate
POApprove -->|Yes + DoR Met| SpecReady[/"State: Spec Ready"/]
SpecReady --> Impl["<b>Role: Implementer</b><br/>Create branch<br/>Implement + Tests + Docs"]
Impl --> |State: In Progress| PR["Open PR<br/>Link to Issue & Epic<br/>Fill template"]
PR --> QA["<b>Role: Reviewer/QA</b><br/>Validate against criteria<br/>Check tests & docs"]
QA --> |State: In Review| Approve{"Approved?"}
Approve -->|No| Changes["Request Changes<br/>Specific feedback"]
Changes --> Impl
Approve -->|Yes| Merge["Merge PR"]
Merge --> |State: Done| Release["<b>Role: Release/DevOps</b><br/>Tag version<br/>Generate release notes"]
Release --> |State: Released| End([Epic Closed])
style PO fill:#e1f5ff
style TLReview fill:#fff4e1
style TLCreate fill:#fff4e1
style TLFeasible fill:#fff4e1
style POValidate fill:#e1f5ff
style SpecReady fill:#d4edda
style Impl fill:#e8f5e1
style QA fill:#ffe1f5
style Release fill:#f5e1ff
style TLClear fill:#fff9e6
style Feasible fill:#fff9e6
style POApprove fill:#f0f0f0
style Approve fill:#f0f0f0
Key Workflow States:
- 🟦 Intake → Idea exists, needs breakdown
- 🟨 Spec Ready → Epic & Stories defined, ready to implement
- 🟩 In Progress → Active development
- 🟪 In Review → PR open, awaiting validation
- ✅ Done → PR merged
- 🎉 Released → Version tagged, Epic closed
.github/
├── README.md # This file
├── copilot-instructions.md # AI assistant context
│
├── ISSUE_TEMPLATE/ # Templates (GitHub required location)
│ ├── 00-pull-request-template.md # (Copy to .github/PULL_REQUEST_TEMPLATE.md for auto-fill)
│ ├── 01-epic.md
│ ├── 02-story-task.md
│ └── 03-review-checklist.md
│
├── workflows/ # CI/CD
│ └── test.yml
│
└── workflow-system/ # Modular documentation (extensible)
├── README.md # System overview
├── rules/ # Workflow rules (7 files)
├── roles/ # Role definitions (7 files)
├── guides/ # User guides (5 files)
└── examples/ # Real examples (5 files)
Option A: Via Submodule (Recommended)
# Add as submodule directly to .github
git submodule add https://github.com/nsin08/github-copilot-sdlc.git .github
git submodule update --init --recursiveOption B: Direct Copy (Fork & Modify)
# Copy directory
cp -r path/to/downloaded/.github your-project/- Edit
copilot-instructions.mdfor your tech stack - Edit
workflows/test.ymlfor your language - Optional: For PR template auto-fill, copy
ISSUE_TEMPLATE/00-pull-request-template.mdto.github/PULL_REQUEST_TEMPLATE.md(GitHub requires this specific location/name for auto-fill)
# Create test issue
gh issue create
# Should show 3 templates (Epic, Story, Review)
# Create test PR
gh pr create
# Manually copy PR template content OR enable auto-fill (see step 2.3 above)Use these prompts in separate VS Code Copilot Chat threads to simulate different roles:
Setup Prompt:
I'm acting as a Product Owner / Sponsor. Load context from @workspace .github/workflow-system/roles/01-sponsor-po.md
I need to create ideas with clear success criteria, validate Epic breakdowns, and approve specifications before implementation.
Action Examples:
- "Create an Idea issue for a personal calendar application"
- "Review Epic #1 and validate if it meets user needs"
- "Approve Story #3 - does it have clear success criteria?"
Setup Prompt:
I'm acting as a Technical Lead. Load context from @workspace .github/workflow-system/roles/02-tech-lead.md
I need to break down Ideas into Epics and Stories, define technical architecture, and ensure Definition of Ready is met.
Action Examples:
- "Break down Idea #2 into an Epic with Stories"
- "Create Story issues for Epic #1"
- "Review Story #5 for technical feasibility"
- "Define architecture approach for the calendar data model"
Setup Prompt:
I'm acting as an Implementer. Load context from @workspace .github/workflow-system/roles/03-implementer.md
I need to implement Stories, write tests, create PRs, and ensure Definition of Done is met.
Action Examples:
- "Implement Story #7 - calendar event data model"
- "Create a PR for Story #8 with all evidence"
- "Write tests for the event persistence feature"
- "Review PR checklist before submitting"
Setup Prompt:
I'm acting as a Reviewer / QA. Load context from @workspace .github/workflow-system/roles/04-reviewer-qa.md
I need to review PRs against success criteria, validate tests, and ensure quality standards are met.
Action Examples:
- "Review PR #12 against Story #8 success criteria"
- "Check if PR #15 meets Definition of Done"
- "Validate test coverage for the calendar UI"
- "Request changes for PR #10"
Setup Prompt:
I'm acting as Release Manager / DevOps. Load context from @workspace .github/workflow-system/roles/05-release-devops.md
I need to tag releases, generate release notes, close Epics, and manage deployment.
Action Examples:
- "Create release v0.1.0 with all merged PRs"
- "Generate release notes for Epic #1"
- "Close Epic #1 after release"
- "Tag and deploy the calendar application"
Using 2 VS Code Windows:
Window 1 - Planning Roles (PO + Tech Lead):
Thread 1: PO - Create Ideas and validate Epics
Thread 2: Tech Lead - Break down into Stories
Window 2 - Execution Roles (Implementer + QA):
Thread 1: Implementer - Build features and create PRs
Thread 2: QA - Review PRs and validate quality
Example Workflow:
- PO (Window 1, Thread 1): "Create Idea issue for personal calendar"
- Tech Lead (Window 1, Thread 2): "Break down Idea #1 into Epic + Stories"
- PO (Window 1, Thread 1): "Review and approve Epic #2"
- Implementer (Window 2, Thread 1): "Implement Story #3"
- QA (Window 2, Thread 2): "Review PR #5 for Story #3"
- Release (either window): "Create release v0.1.0"
Scenario: Build a personal calendar application using the SDLC workflow with role separation.
VS Code Window 1 - Chat Thread 1
Setup:
I'm acting as a Product Owner / Sponsor. Load context from @workspace .github/workflow-system/roles/01-sponsor-po.md
I need to create ideas with clear success criteria, validate Epic breakdowns, and approve specifications.
Action 1 - Create Idea Issue:
Create an Idea issue for a personal calendar application using the Epic template.
Requirements:
- User can view calendar by month
- User can add/edit/delete events
- Events persist across sessions
- Clean, minimal UI
- Works in modern browsers
Use the issue template at .github/ISSUE_TEMPLATE/01-epic.md
Expected Output: Draft issue content with success criteria
Action 2 - Open Issue on GitHub:
# Copy the generated content and create the issue
gh issue create --title "Personal Calendar Application" --body "<paste content>"
# Note the issue number (e.g., #1)VS Code Window 1 - Chat Thread 2
Setup:
I'm acting as a Technical Lead. Load context from @workspace .github/workflow-system/roles/02-tech-lead.md
I need to break down Idea #1 (Personal Calendar) into Epics and Stories with technical architecture.
Review the Idea issue and create:
1. Epic issue with architecture notes
2. Story issues with clear acceptance criteria
Action 1 - Review Idea:
Review Idea issue #1 for technical feasibility. Consider:
- Frontend tech stack (vanilla JS vs framework)
- Data storage (localStorage vs backend)
- Calendar library needs
- Browser compatibility
What questions do I need to ask the PO?
Action 2 - Create Epic + Stories:
Break down Idea #1 into:
- 1 Epic issue
- 4-5 Story issues covering:
* Data model (Event structure)
* Calendar UI (month view)
* Event management (add/edit/delete)
* Data persistence
* Basic styling
Use template at .github/ISSUE_TEMPLATE/01-epic.md for Epic
Use template at .github/ISSUE_TEMPLATE/02-story-task.md for Stories
Include:
- Parent references
- Success criteria
- Estimated complexity
- Technical notes
Expected Output:
- Epic issue content (e.g., "Epic: Personal Calendar MVP")
- 5 Story issue contents
Action 3 - Create Issues:
# Create Epic
gh issue create --title "Epic: Personal Calendar MVP" --body "<paste epic content>"
# Note: #2
# Create Stories
gh issue create --title "Story: Event data model and storage" --body "<paste story>" --label "story"
# Note: #3
gh issue create --title "Story: Month view calendar UI" --body "<paste story>" --label "story"
# Note: #4
gh issue create --title "Story: Add/edit event form" --body "<paste story>" --label "story"
# Note: #5
gh issue create --title "Story: Event persistence (localStorage)" --body "<paste story>" --label "story"
# Note: #6
gh issue create --title "Story: Basic calendar styling" --body "<paste story>" --label "story"
# Note: #7VS Code Window 1 - Chat Thread 1 (switch back to PO)
Action 1 - Review Epic:
Review Epic issue #2. Does it:
- Address all user needs from Idea #1?
- Have clear scope?
- Include all necessary Stories?
Provide approval or request changes.
Action 2 - Approve (or Request Changes):
# If approved
gh issue comment 2 --body "✅ Approved - meets requirements. Moving to Spec Ready."
gh issue edit 2 --add-label "spec-ready"
# If changes needed
gh issue comment 2 --body "❌ Requested changes: [specific feedback]"VS Code Window 2 - Chat Thread 1
Setup:
I'm acting as an Implementer. Load context from @workspace .github/workflow-system/roles/03-implementer.md
I need to implement Story #3 (Event data model) following Definition of Done.
Project: Personal Calendar
Tech Stack: Vanilla JavaScript, HTML, CSS
Action 1 - Create Feature Branch:
git checkout develop
git pull
git checkout -b feature/3-event-data-modelAction 2 - Implement Story:
Implement Story #3 - Event data model and storage.
Create:
1. src/models/Event.js - Event class with properties (id, title, date, time, description)
2. src/services/EventStorage.js - localStorage wrapper
3. tests/Event.test.js - Unit tests
4. Basic HTML harness to test
Requirements from Story #3:
[paste success criteria from issue]
Follow Definition of Done from .github/workflow-system/rules/03-definition-of-done.md
Expected Output: Complete implementation with files
Action 3 - Create Files:
# Copilot generates the code, you create files
mkdir -p src/models src/services tests
# Create files with generated contentAction 4 - Test:
# Run tests (or open HTML test harness)
npm test # or open test.html in browserAction 5 - Commit and Push:
git add .
git commit -m "feat: implement event data model and storage (#3)"
git push -u origin feature/3-event-data-modelAction 6 - Create PR:
Create a PR for Story #3 using the template at .github/ISSUE_TEMPLATE/00-pull-request-template.md
Include:
- Summary of changes
- Files changed
- Evidence of success criteria being met
- Test results
- Screenshots (if applicable)
Base: develop
Closes: #3
Epic: #2
gh pr create --base develop --title "feat(model): Event data model and storage (#3)" --body "<paste PR content>"
# Note PR number (e.g., #8)VS Code Window 2 - Chat Thread 2
Setup:
I'm acting as a Reviewer / QA. Load context from @workspace .github/workflow-system/roles/04-reviewer-qa.md
I need to review PR #8 against Story #3 success criteria and Definition of Done.
Action 1 - Review Code:
# Checkout PR
gh pr checkout 8
# Review files
code src/models/Event.js
code src/services/EventStorage.js
code tests/Event.test.jsAction 2 - Validate Against Criteria:
Review PR #8 for Story #3.
Check:
1. Does it meet all success criteria from Story #3?
2. Are tests present and passing?
3. Is code documented?
4. Follows Definition of Done?
5. No security issues?
Review using template at .github/ISSUE_TEMPLATE/03-review-checklist.md
Action 3 - Provide Feedback:
# If approved
gh pr review 8 --approve --body "✅ LGTM - meets all criteria. Tests pass, code is clean."
# If changes needed
gh pr review 8 --request-changes --body "❌ Requested changes:
- [ ] Add validation for date format
- [ ] Missing test for edge case: empty title"Action 4 - Merge (if approved):
gh pr merge 8 --squash --delete-branch
# PR #8 merged, Story #3 closed automaticallyRepeat Phase 4-5 for remaining Stories:
- Story #4 (Month view UI) → PR #9
- Story #5 (Add/edit form) → PR #10
- Story #6 (Persistence) → PR #11
- Story #7 (Styling) → PR #12
Track Progress:
# Check Epic progress
gh issue view 2
# Should show child issues being closedEither VS Code Window - New Thread
Setup:
I'm acting as Release Manager / DevOps. Load context from @workspace .github/workflow-system/roles/05-release-devops.md
All Stories for Epic #2 are complete. Ready to create release v0.1.0.
Action 1 - Verify Completion:
# Check all PRs merged
gh pr list --base develop --state merged
# Check Epic
gh issue view 2Action 2 - Create Release Branch:
git checkout develop
git pull
git checkout -b release/v0.1.0Action 3 - Prepare Release:
Generate release notes for v0.1.0 including:
- All closed Stories (#3, #4, #5, #6, #7)
- All merged PRs (#8, #9, #10, #11, #12)
- Epic closure (#2)
Format as changelog.
Action 4 - Merge to Main:
# Merge release to main
git checkout main
git pull
git merge release/v0.1.0
git tag v0.1.0 -m "Release v0.1.0 - Personal Calendar MVP"
git push origin main --tags
# Backport to develop
git checkout develop
git merge release/v0.1.0
git push
# Delete release branch
git branch -d release/v0.1.0
git push origin --delete release/v0.1.0Action 5 - Create GitHub Release:
gh release create v0.1.0 --title "v0.1.0 - Personal Calendar MVP" --notes "<paste release notes>"Action 6 - Close Epic:
gh issue close 2 --comment "✅ Released in v0.1.0. All Stories complete."Throughout the workflow, track:
# View all issues
gh issue list
# View Epic with children
gh issue view 2
# View PRs
gh pr list
# Check CI status
gh pr checks <pr-number>
# View release history
gh release list- Separation of Concerns: Each role has specific context and responsibilities
- Clear Handoffs: PO → Tech Lead → Implementer → QA → Release
- Traceability: Issues → Branches → PRs → Releases all linked
- Validation Gates: Each phase has approval/validation before proceeding
- Role Context: Use separate chat threads with role-specific prompts
- GitHub Integration: All work tracked in issues/PRs, not just local files
- Create
workflow-system/rules/07-your-rule.md - Follow template in workflow-system/rules/00-index.md
- Create
workflow-system/roles/06-your-role.md - Follow template in workflow-system/roles/00-index.md
- Create
workflow-system/examples/05-your-example.md - Update index
| File | Purpose | Required By |
|---|---|---|
copilot-instructions.md |
AI context for Copilot | GitHub Copilot |
ISSUE_TEMPLATE/*.md |
Issue/PR templates | GitHub |
workflows/*.yml |
CI/CD automation | GitHub Actions |
workflow-system/ |
Documentation (modular) | Humans & AI |
| Pattern | Example | Usage |
|---|---|---|
NN-name.md |
01-state-machine.md |
Numbered files (ordered) |
00-index.md |
rules/00-index.md |
Directory index |
00-shared-*.md |
00-shared-context.md |
Shared/base content |
kebab-case |
02-quick-start.md |
Multi-word with numbers |
Full documentation: workflow-system/README.md