Frontend & Backend Coordination | API-Aligned Teams
Align frontend and backend teams with task dependencies, API contract tracking, and integration milestones. GitScrum prevents blocking and reduces integration friction.
12 min read
Frontend and backend teams working in parallel often face coordination challenges: blocked work waiting for APIs, integration surprises, inconsistent priorities, and finger-pointing when timelines slip. GitScrum provides the visibility and structure to coordinate these parallel tracks, ensuring smooth handoffs and reduced integration pain.
Common Coordination Problems
When frontend and backend teams work separately:
| Problem | Symptom | Impact |
|---|---|---|
| API not ready | Frontend blocked, using mocks indefinitely | Integration delays |
| API changes without notice | Frontend breaks after integration | Rework, frustration |
| Different priorities | Teams working on unrelated features | Misaligned delivery |
| Unclear contracts | Both teams assume different behaviors | Bug-filled integration |
| No shared visibility | Each team blind to other's progress | Late surprises |
| Blame culture | "We were waiting on them" | Low trust, poor collaboration |
GitScrum Coordination Structure
Shared Board Setup
Board Configuration for Cross-Team Work:
OPTION 1: UNIFIED BOARD
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β FEATURE DEVELOPMENT β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β Backlog β Backend β Frontend β Integra- β Testing βDoneβ
β β Dev β Dev β tion β β β
β ββββββββββββΌβββββββββββΌβββββββββββΌβββββββββββΌββββββββββΌβββββ
β [User β [API: β β β β β
β Profile] β Profile]β β β β β
β β BE: Alex β β β β β
β β β β β β β
β [Dash- β [API: β [UI: β β β β
β board] β Stats] β Stats β β β β
β β BE: Sam β Widget] β β β β
β β β FE: Kim β β β β
β β β β β β β
β β β [UI: β [Int: β β β
β β β Charts] β Charts] β β β
β β β FE: Pat β FE+BE β β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
OPTION 2: LINKED BOARDS
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β BACKEND BOARD FRONTEND BOARD β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β To DoβIn ProgβReviewβDone β To DoβIn ProgβReviewβDone β
β ββββββΌββββββββΌβββββββΌββββ β ββββββΌββββββββΌβββββββΌββββ β
β [API:β β β β [UI: β β β β
β Userβ β β β Userβ β β β
β βββββΌββββββββΌβββββββΌβββββββ¬ββββββββΌββββββββΌβββββββΌββββ β
β Blocks: UI: User Profile] β Blocked by: API: User] β
β β β
β Links show dependencies between boards β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Task Dependency Setup
Configuring Cross-Team Dependencies:
TASK DEPENDENCY CONFIGURATION:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β TASK: UI - User Profile Page β
β Team: Frontend β
β Assignee: Kim β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β DEPENDENCIES: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β Blocked By (must complete first): ββ
β β ββ
β β βββ [β] API: User Authentication (Done) ββ
β β βββ [β] API: User Profile CRUD (In Progress) ββ
β β β Assignee: Alex ββ
β β β ETA: Tomorrow ββ
β β β Status: 80% complete ββ
β β βββ [β] API: Profile Image Upload (To Do) ββ
β β Assignee: Sam ββ
β β ETA: Next sprint ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β Blocks (waiting on this): ββ
β β ββ
β β βββ [β] Integration: User Profile E2E Tests ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β WORK MODE: β
β β Wait for all dependencies β
β β Start with mocks, integrate when ready β
β β Start only after blockers done β
β β
β MOCK STATUS: β
β Using mock API: Yes β
β Mock endpoint: /mocks/user-profile.json β
β Real API ready: Partial (2 of 3 endpoints) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
DEPENDENCY VISUALIZATION:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β DEPENDENCY GRAPH β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β [API: Auth] βββββΊ [API: Profile] βββββΊ [UI: Profile] β
β β β β β
β β β β
β βΌ βΌ β
β [API: Image] ββββββββΊ [Integration] β
β β β β
β β
β Legend: β Done β In Progress β Waiting β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
API Contract Management
API Specification as Tasks
API Contract Tracking:
API SPECIFICATION TASK:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β API CONTRACT: User Profile Endpoints β
β Type: Contract β’ Status: Approved β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β SPECIFICATION: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β GET /api/v1/users/:id/profile ββ
β β ββ
β β Response: ββ
β β { ββ
β β "id": "uuid", ββ
β β "email": "string", ββ
β β "name": "string", ββ
β β "avatar_url": "string | null", ββ
β β "created_at": "ISO8601", ββ
β β "preferences": { ββ
β β "theme": "light | dark", ββ
β β "notifications": "boolean" ββ
β β } ββ
β β } ββ
β β ββ
β β Errors: ββ
β β 401: Unauthorized ββ
β β 404: User not found ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β APPROVAL STATUS: β
β βββ Backend: β Approved (Alex) β
β βββ Frontend: β Approved (Kim) β
β βββ Date: Jan 15, 2024 β
β β
β IMPLEMENTATION STATUS: β
β βββ Backend: β Implemented, deployed to staging β
β βββ Frontend: β Using in development β
β βββ Integration tested: Pending β
β β
β CHANGELOG: β
β v1.1 (Jan 20): Added preferences object β
β v1.0 (Jan 15): Initial contract β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Contract Change Workflow
Managing API Changes:
CHANGE REQUEST FLOW:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β Backend Contract Frontend β
β proposes βββΊ review βββ reviews β
β change task impact β
β β β
β βΌ β
β βββββββββββββββ β
β β Discussion β β
β β in task β β
β βββββββββββββββ β
β β β
β ββββββββββββΌβββββββββββ β
β βΌ βΌ βΌ β
β [Approve] [Negotiate] [Reject] β
β β β β β
β βΌ β βΌ β
β Update spec β Keep current β
β Implement β β
β β β β
β βΌ βΌ β
β Notify affected teams β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
CONTRACT CHANGE TASK:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β CONTRACT CHANGE REQUEST β
β API: User Profile β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β PROPOSED CHANGE: β
β Add "last_login" field to profile response β
β β
β REASON: β
β Security audit requires displaying last login time β
β β
β IMPACT ASSESSMENT: β
β βββ Backend: Low (add field from existing data) β
β βββ Frontend: Medium (add display component) β
β βββ Timeline: Can ship with current sprint β
β β
β DISCUSSION: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β @Alex (BE): "Field ready, just need approval" ββ
β β @Kim (FE): "Can we make it optional for now? ββ
β β We're mid-sprint on profile page" ββ
β β @Alex: "Yes, will be null for users who ββ
β β haven't logged in since migration" ββ
β β @Kim: "Perfect, approved β" ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β STATUS: Approved β
β Implement by: Sprint 24 β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Integration Milestones
Feature Integration Points
Integration Milestone Planning:
FEATURE: User Dashboard
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β INTEGRATION MILESTONES β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β Week 1 β
β βββ API: Authentication ββββ β
β β ββββΊ INT-1: Auth works β
β βββ UI: Login flow ββββ with real API β
β Date: Jan 22 β
β Status: β Done β
β β
β Week 2 β
β βββ API: Dashboard stats ββββ β
β β ββββΊ INT-2: Stats display β
β βββ UI: Stats widgets ββββ Date: Jan 29 β
β Status: β Today β
β β
β Week 3 β
β βββ API: Chart data ββββ β
β β ββββΊ INT-3: Charts live β
β βββ UI: Chart components ββββ Date: Feb 5 β
β Status: β Scheduled β
β β
β Week 4 β
β βββ Full integration testing βββββΊ INT-4: E2E complete β
β Date: Feb 12 β
β Status: β Scheduled β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Integration Testing Tasks
Integration Task Structure:
INTEGRATION TASK:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β INT-2: Stats Widget Integration β
β Type: Integration β’ Sprint: 23 β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β COMPONENTS: β
β βββ Backend: API-45 Stats Endpoint (Alex) β β
β βββ Frontend: UI-89 Stats Widget (Kim) β β
β βββ Integration: This task (Kim + Alex) β
β β
β CHECKLIST: β
β β Both components individually complete β
β β Deploy backend to staging β
β β Connect frontend to staging API β
β β Verify data flows correctly β
β β Test error handling β
β β Performance acceptable (< 200ms) β
β β Cross-browser testing β
β β Mobile responsive β
β β
β ENVIRONMENT: β
β Staging URL: staging.app.com β
β API Base: staging-api.app.com/v1 β
β β
β ATTENDEES: β
β Integration session: Jan 29, 2pm β
β @Kim @Alex @QA-Jordan β
β β
β NOTES: β
β "Found edge case with empty data - Alex adding β
β empty state response. ETA: 30 min" β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Cross-Team Visibility
Standup Coordination
Using Team Standup for Cross-Team Updates:
COMBINED STANDUP VIEW:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β DAILY STANDUP - Jan 29, 2024 β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β BACKEND TEAM β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Alex: β
β Yesterday: Completed stats API endpoint β
β Today: Adding empty state handling β
β Blockers: None β
β π "Stats API ready for integration @ 3pm" β
β β
β Sam: β
β Yesterday: Image upload research β
β Today: Starting implementation β
β Blockers: Need S3 bucket access β
β β
β FRONTEND TEAM β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Kim: β
β Yesterday: Stats widget UI complete β
β Today: Integration with real API β
β Blockers: Waiting on stats API β
β π "@Alex - ready when you are for integration" β
β β
β Pat: β
β Yesterday: Chart library evaluation β
β Today: Chart component scaffolding β
β Blockers: None β
β β
β CROSS-TEAM SYNC ITEMS: β
β βββ INT-2: Stats integration scheduled 2pm β
β βββ API change: last_login field approved β
β βββ Next integration: Charts (Feb 5) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Progress Dashboard
Cross-Team Progress View:
FEATURE PROGRESS: User Dashboard
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β BACKEND PROGRESS β
β ββββββββββββββββββββββββββββββ 65% β
β βββ Auth API ββββββββββββββββββββ 100% β β
β βββ Stats API ββββββββββββββββββββ 100% β β
β βββ Charts API ββββββββββββββββββββ 60% β β
β βββ Export API ββββββββββββββββββββ 0% β β
β β
β FRONTEND PROGRESS β
β ββββββββββββββββββββββββββββββ 55% β
β βββ Login UI ββββββββββββββββββββ 100% β β
β βββ Stats Widgets ββββββββββββββββββββ 100% β β
β βββ Chart Display ββββββββββββββββββββ 40% β β
β βββ Export UI ββββββββββββββββββββ 0% β β
β β
β INTEGRATION PROGRESS β
β ββββββββββββββββββββββββββββββ 33% β
β βββ INT-1: Auth ββββββββββββββββββββ 100% β β
β βββ INT-2: Stats ββββββββββββββββββββ 60% β Today β
β βββ INT-3: Charts ββββββββββββββββββββ 0% β Feb 5 β
β βββ INT-4: E2E ββββββββββββββββββββ 0% β Feb 12 β
β β
β OVERALL: 51% complete β
β Target: Feb 15 (Beta) β
β Status: β On Track β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Communication Patterns
Slack/Teams Integration
Automated Cross-Team Notifications:
NOTIFICATION RULES:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Cross-Team Notification Setup β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β WHEN: API task moves to "Done" β
β NOTIFY: #frontend-team channel β
β MESSAGE: "π’ API ready: [Task Title] β
β Staging: [URL] β
β Docs: [Link] β
β Blocks: [Linked FE tasks]" β
β β
β WHEN: API contract created/updated β
β NOTIFY: #frontend-team + #backend-team β
β MESSAGE: "π Contract update: [API Name] β
β Change: [Summary] β
β Review needed: [Assignees]" β
β β
β WHEN: Integration task created β
β NOTIFY: Both team channels β
β MESSAGE: "π Integration scheduled: [Task] β
β Date: [Date/Time] β
β Participants: [Names]" β
β β
β WHEN: Blocker added to task β
β NOTIFY: Blocking team's channel β
β MESSAGE: "π« Blocked: [Task] is waiting on [Blocker] β
β Owner: [Assignee] β
β Impact: [Blocked tasks list]" β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Sync Meetings
Coordination Meeting Structure:
WEEKLY CROSS-TEAM SYNC:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β AGENDA (30 min max) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β 1. INTEGRATION STATUS (5 min) β
β - What integrated this week? β
β - Any integration issues? β
β β
β 2. COMING HANDOFFS (10 min) β
β - APIs completing this week β
β - Frontend needs from backend β
β - Backend needs from frontend β
β β
β 3. CONTRACT UPDATES (5 min) β
β - Any pending contract changes? β
β - Breaking changes coming? β
β β
β 4. BLOCKERS (5 min) β
β - Cross-team blockers β
β - Resolution owners β
β β
β 5. NEXT INTEGRATION (5 min) β
β - Date, time, participants β
β - What to prepare β
β β
β OUTPUT: β
β - Updated task statuses in GitScrum β
β - Action items assigned β
β - Next integration scheduled β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Best Practices
For Smooth Coordination
Anti-Patterns to Avoid
AVOID THESE:
β "Big bang" integration at the end
β Verbal API agreements (no written contracts)
β Waiting for perfect APIs before starting frontend
β Separate backlogs with no visibility
β Integration as "someone else's problem"
β Changing APIs without notifying consumers