QA & Development Coordination | Shift-Left Testing
Bridge QA and development teams with shared boards, acceptance criteria integration, and feedback workflows. GitScrum catches issues early and reduces rework cycles.
16 min read
Quality assurance works best when integrated throughout development rather than treated as a final gate before release. GitScrum enables close QA-dev collaboration through shared task views, structured acceptance criteria, testing workflows, and feedback mechanisms that catch issues early, reduce rework, and create shared ownership of quality across the entire team.
QA Integration Models
Embedded vs Separate QA
QA TEAM STRUCTURES:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β HOW QA INTEGRATES WITH DEVELOPMENT β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β EMBEDDED QA (Recommended for Agile): β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β ββ
β β DEV TEAM SCRUM ββ
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββ
β β β @dev-maria @dev-carlos @dev-ana @qa-tom β ββ
β β β β ββ
β β β QA is full team member: β ββ
β β β β’ Joins sprint planning β ββ
β β β β’ Participates in refinement β ββ
β β β β’ Same standup, retro β ββ
β β β β’ Tests during sprint, not after β ββ
β β β β ββ
β β β Ratio: 1 QA per 3-5 developers β ββ
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββ
β β ββ
β β Pros: ββ
β β β’ Faster feedback loops ββ
β β β’ QA context on business requirements ββ
β β β’ Bugs fixed same sprint they're found ββ
β β β’ Quality becomes team responsibility ββ
β β ββ
β β Cons: ββ
β β β’ QA may get pressured by sprint deadline ββ
β β β’ Less QA-to-QA knowledge sharing ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β SEPARATE QA TEAM: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β ββ
β β DEV TEAM BOARD QA TEAM BOARD ββ
β β βββββββββββββββ βββββββββββββββ ββ
β β β Dev tasks β βββΊ β QA queue β ββ
β β β β Pass β β ββ
β β β β to QA β β ββ
β β βββββββββββββββ βββββββββββββββ ββ
β β ββ
β β QA tests after dev completes: ββ
β β β’ Handoff when "Dev Done" ββ
β β β’ QA tests in separate phase ββ
β β β’ Bugs go back to dev board ββ
β β ββ
β β Pros: ββ
β β β’ QA specialization and expertise ββ
β β β’ Objective testing (not influenced by dev) ββ
β β β’ Better for compliance/regulated industries ββ
β β ββ
β β Cons: ββ
β β β’ Handoff delays ββ
β β β’ "Throw it over the wall" mentality ββ
β β β’ Bugs found later cost more to fix ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β HYBRID MODEL: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β ββ
β β Embedded QA for in-sprint testing ββ
β β + ββ
β β QA specialists for release validation ββ
β β ββ
β β Best of both: Speed + thoroughness ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Workflow Design
Shared Board Structure
QA-DEV INTEGRATED BOARD:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β WORKFLOW COLUMNS β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β βββββββββββ¬βββββββββββ¬βββββββββββ¬βββββββββββ¬ββββββββββββββββ
β β Backlog β In Dev β In QA β In UAT β Done ββ
β βββββββββββΌβββββββββββΌβββββββββββΌβββββββββββΌβββββββββββββββ€β
β β β WIP: 3 β WIP: 2 β β ββ
β β βββββββ β βββββββ β βββββββ β βββββββ β βββββββ ββ
β β βTask1β β βTask3β β βTask5β β βTask7β β βTask9β ββ
β β βββββββ β β@mariaβ β β@tom β β β@clientβ β β β β ββ
β β βββββββ β βββββββ β βββββββ β βββββββ β βββββββ ββ
β β βTask2β β βββββββ β βββββββ β β βββββββ ββ
β β βββββββ β βTask4β β βTask6β β β βTask10β ββ
β β β β@carlosβ β β@tom β β β β β β ββ
β β β βββββββ β βββββββ β β βββββββ ββ
β β β β β β ββ
β βββββββββββ΄βββββββββββ΄βββββββββββ΄βββββββββββ΄ββββββββββββββββ
β β
β WIP LIMITS: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β In QA column has WIP limit = number of QA people Γ 2 ββ
β β ββ
β β Why: Prevents QA bottleneck, keeps flow moving ββ
β β ββ
β β When QA full: ββ
β β β’ Devs can't move more to QA (blocked) ββ
β β β’ Signal: Either help QA or slow down new dev ββ
β β β’ Consider: Developer assists with testing ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β COLUMN DEFINITIONS: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β In Dev: ββ
β β β’ Developer actively coding ββ
β β β’ Unit tests written ββ
β β β’ Exit criteria: Code complete, self-tested ββ
β β ββ
β β In QA: ββ
β β β’ QA actively testing ββ
β β β’ Using test environment ββ
β β β’ Exit criteria: All test cases pass, no open bugs ββ
β β ββ
β β In UAT: ββ
β β β’ Stakeholder/PM reviewing ββ
β β β’ Business acceptance testing ββ
β β β’ Exit criteria: Approved for release ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Task Transitions
HANDOFF CLARITY:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β WHAT MOVES TASKS BETWEEN COLUMNS β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β DEV β QA TRANSITION: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β Before moving to QA, dev must: ββ
β β ββ
β β β Code complete and merged to dev branch ββ
β β β Unit tests passing ββ
β β β Deployed to test environment ββ
β β β Acceptance criteria reviewed ββ
β β β Test data prepared (if needed) ββ
β β β Brief QA on any technical notes ββ
β β ββ
β β Add checklist to task in GitScrum ββ
β β Must be completed before column move allowed ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β QA β UAT TRANSITION: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β Before moving to UAT, QA must: ββ
β β ββ
β β β All test cases executed ββ
β β β All critical/high bugs fixed and retested ββ
β β β Test summary documented ββ
β β β Environment stable for UAT ββ
β β β UAT stakeholder notified ββ
β β ββ
β β Remaining low-priority bugs: Documented, tracked ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β QA β BACK TO DEV (Rejection): β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β When QA finds blocking issue: ββ
β β ββ
β β 1. Create linked bug task (type: bug) ββ
β β 2. Move original task back to In Dev ββ
β β 3. Assign bug to original developer ββ
β β 4. Include in bug: ββ
β β β’ Steps to reproduce ββ
β β β’ Expected vs actual ββ
β β β’ Screenshots/videos ββ
β β β’ Test environment details ββ
β β ββ
β β Label: qa/rejected for tracking rejection rate ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Acceptance Criteria Integration
Writing Testable Criteria
ACCEPTANCE CRITERIA BEST PRACTICES:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β CRITERIA THAT QA CAN ACTUALLY TEST β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β FORMAT: Given-When-Then β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β Task: User Password Reset ββ
β β ββ
β β Acceptance Criteria: ββ
β β ββ
β β β
TESTABLE: ββ
β β AC1: Given user on login page ββ
β β When they click "Forgot Password" ββ
β β Then email input form is shown ββ
β β ββ
β β AC2: Given valid email entered ββ
β β When they submit form ββ
β β Then reset email sent within 30 seconds ββ
β β And success message displayed ββ
β β ββ
β β AC3: Given invalid email format ββ
β β When they submit form ββ
β β Then validation error shown ββ
β β And no email sent ββ
β β ββ
β β β VAGUE (Don't do this): ββ
β β β’ "Password reset should work" ββ
β β β’ "User-friendly error messages" ββ
β β β’ "Fast email delivery" ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β INCLUDE EDGE CASES: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β AC4: Given email not in system ββ
β β When they submit form ββ
β β Then generic success message shown ββ
β β (security: don't reveal if email exists) ββ
β β ββ
β β AC5: Given reset requested twice in 5 minutes ββ
β β When they submit again ββ
β β Then rate limit message shown ββ
β β And no second email sent ββ
β β ββ
β β AC6: Given reset link clicked after 24 hours ββ
β β When link opened ββ
β β Then "Link expired" message shown ββ
β β And "Request new reset" option offered ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
QA During Refinement
QA PARTICIPATION IN PLANNING:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β SHIFTING QUALITY LEFT β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β QA IN BACKLOG REFINEMENT: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β Before sprint planning, QA reviews stories: ββ
β β ββ
β β QA asks: ββ
β β β’ Are acceptance criteria testable? ββ
β β β’ What edge cases are missing? ββ
β β β’ What test data is needed? ββ
β β β’ Are there integration points to test? ββ
β β β’ What could break in existing features? ββ
β β ββ
β β QA adds: ββ
β β β’ Additional acceptance criteria for edge cases ββ
β β β’ Notes about test environment needs ββ
β β β’ Estimate of QA effort ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β QA IN SPRINT PLANNING: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β QA contributes to: ββ
β β ββ
β β β’ Story pointing (testing effort included) ββ
β β β’ Sprint capacity (QA availability matters) ββ
β β β’ Task breakdown (testing tasks visible) ββ
β β ββ
β β Create explicit QA subtasks: ββ
β β β Write test cases ββ
β β β Prepare test data ββ
β β β Execute test cases ββ
β β β Regression testing ββ
β β ββ
β β This makes QA work visible in sprint ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β THREE AMIGOS SESSION: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β Before coding starts, 15-min meeting: ββ
β β ββ
β β Participants: ββ
β β 1. Developer - how to build it ββ
β β 2. QA - how to test it ββ
β β 3. PO/Business - what we need ββ
β β ββ
β β Outcome: ββ
β β β’ Shared understanding of requirements ββ
β β β’ Edge cases identified early ββ
β β β’ Acceptance criteria refined ββ
β β β’ Everyone aligned before work starts ββ
β β ββ
β β Track in GitScrum: Discussion thread per feature ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Bug Management
Bug Workflow
BUG HANDLING PROCESS:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β FROM DISCOVERY TO CLOSURE β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β BUG TASK TEMPLATE: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β Title: [Component] Brief description ββ
β β ββ
β β **Environment:** ββ
β β Browser: Chrome 120 ββ
β β OS: Windows 11 ββ
β β Test environment: staging.app.com ββ
β β ββ
β β **Steps to Reproduce:** ββ
β β 1. Navigate to /dashboard ββ
β β 2. Click "Export" button ββ
β β 3. Select "CSV" format ββ
β β 4. Click "Download" ββ
β β ββ
β β **Expected Result:** ββ
β β CSV file downloads with data ββ
β β ββ
β β **Actual Result:** ββ
β β Error message: "Export failed" ββ
β β ββ
β β **Attachments:** ββ
β β [Screenshot of error] ββ
β β [Console log errors] ββ
β β ββ
β β **Labels:** type/bug, severity/high, component/export ββ
β β **Linked to:** Task #123 (Export feature) ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β BUG WORKFLOW: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β ββ
β β QA Finds Bug ββ
β β β ββ
β β βΌ ββ
β β βββββββββββ ββ
β β β New Bug β (Created in GitScrum) ββ
β β ββββββ¬βββββ ββ
β β β ββ
β β βΌ ββ
β β βββββββββββ ββ
β β β Triaged β (Severity/priority set, assigned) ββ
β β ββββββ¬βββββ ββ
β β β ββ
β β βΌ ββ
β β βββββββββββ ββ
β β β In Fix β (Developer working on fix) ββ
β β ββββββ¬βββββ ββ
β β β ββ
β β βΌ ββ
β β βββββββββββ ββ
β β β Verify β (QA retests the fix) ββ
β β ββββββ¬βββββ ββ
β β β ββ
β β βββββ΄ββββ ββ
β β β β ββ
β β Pass Fail ββ
β β β β ββ
β β βΌ βΌ ββ
β β Done Reopen ββ
β β ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Bug Metrics
TRACKING QA EFFECTIVENESS:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β METRICS THAT MATTER β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β QUALITY METRICS: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β Defect Escape Rate: ββ
β β Bugs found in production vs found in QA ββ
β β ββ
β β Target: < 10% escape to production ββ
β β ββ
β β Calculate: ββ
β β Label bugs: found/qa or found/production ββ
β β Filter and count in GitScrum ββ
β β ββ
β β Month β Found in QA β Escaped β Escape Rate ββ
β β ββββββββββΌββββββββββββββΌββββββββββΌββββββββββββ ββ
β β January β 45 β 8 β 15% β οΈ ββ
β β February β 52 β 4 β 7% β ββ
β β March β 38 β 3 β 7% β ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β PROCESS METRICS: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β Rejection Rate: ββ
β β Tasks sent back from QA to Dev ββ
β β ββ
β β High rate means: ββ
β β β’ Devs not self-testing ββ
β β β’ Unclear requirements ββ
β β β’ Acceptance criteria gaps ββ
β β ββ
β β Track: Label qa/rejected, analyze trends ββ
β β ββ
β β Average Time in QA: ββ
β β How long tasks stay in QA column ββ
β β ββ
β β Long time means: ββ
β β β’ QA bottleneck (need more QA) ββ
β β β’ Complex features (expected) ββ
β β β’ Bug ping-pong (process issue) ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β SPRINT QUALITY DASHBOARD: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β Create saved filter in GitScrum: ββ
β β ββ
β β Sprint 24 Quality Summary ββ
β β ββββββββββββββββββββββββββ ββ
β β Stories tested: 12 ββ
β β Bugs found: 18 ββ
β β Critical bugs: 2 ββ
β β Bugs fixed: 16 ββ
β β Bugs carried over: 2 (both low priority) ββ
β β Rejection rate: 25% (3/12 rejected first pass) ββ
β β ββ
β β Review in retro: Why 25% rejection rate? ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Communication Patterns
Daily Sync
QA-DEV DAILY COORDINATION:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β KEEPING EVERYONE ALIGNED β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β EMBEDDED QA IN STANDUP: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β QA shares: ββ
β β β’ What I tested yesterday ββ
β β β’ What I'm testing today ββ
β β β’ Blockers (waiting for fix, environment down, etc.) ββ
β β ββ
β β Plus: ββ
β β β’ Bug summary (X new bugs found, Y awaiting fix) ββ
β β β’ Ready for testing (pull from In QA column) ββ
β β β’ Environment status (test env working?) ββ
β β ββ
β β Use GitScrum Team Standup for async standups ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β DEV-QA PAIRING: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β For complex features, pair test: ββ
β β ββ
β β β’ Dev shows QA how it works ββ
β β β’ QA asks questions, explores edges ββ
β β β’ Bugs found fixed immediately ββ
β β β’ Both learn from each other ββ
β β ββ
β β Schedule: 30 min session when moving to QA ββ
β β Track: Time logged by both in GitScrum ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β BUG DISCUSSION: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β When dev disagrees with bug: ββ
β β ββ
β β β Don't: Close bug as "works as designed" ββ
β β β
Do: Discuss with QA and PM ββ
β β ββ
β β Options: ββ
β β 1. Clarify requirements β Update AC, close bug ββ
β β 2. It's a real bug β Fix it ββ
β β 3. It's an enhancement β Convert to story, backlog ββ
β β 4. Won't fix β PM decision, document why ββ
β β ββ
β β Use Discussions in GitScrum for async debates ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Automation Integration
Connecting Manual and Automated Testing
TEST AUTOMATION COORDINATION:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β MANUAL + AUTOMATED TESTING β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β WHAT TO AUTOMATE: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β β
Automate: ββ
β β β’ Regression tests (run every build) ββ
β β β’ Smoke tests (critical path) ββ
β β β’ Data-driven tests (many inputs) ββ
β β β’ API tests (stable, fast) ββ
β β ββ
β β β Keep Manual: ββ
β β β’ Exploratory testing ββ
β β β’ Usability testing ββ
β β β’ New features (not stable yet) ββ
β β β’ Visual/UI verification ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β TRACKING AUTOMATION TASKS: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β When story is done, create follow-up: ββ
β β ββ
β β Task: "Automate tests for [feature]" ββ
β β Labels: type/automation, priority/medium ββ
β β Linked to: Original story ββ
β β Assigned to: QA automation engineer ββ
β β ββ
β β Don't block release, but track automation debt ββ
β β ββ
β β Automation coverage metric: ββ
β β Stories with automated tests / Total stories ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β CI INTEGRATION: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β GitScrum + CI Pipeline: ββ
β β ββ
β β 1. Dev pushes code ββ
β β 2. CI runs automated tests ββ
β β 3. GitHub/GitLab integration updates task ββ
β β 4. Build status visible on task ββ
β β ββ
β β If tests fail: ββ
β β β’ Task stays in Dev (can't move to QA) ββ
β β β’ Dev fixes before QA even looks at it ββ
β β ββ
β β This catches bugs before human QA starts ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ