Hướng dẫn

Template Google Sheets Theo Dõi Dự Án IT Và Phần Mềm 2027: Agile Sprint Board Đơn Giản

Tuân HoangTuân Hoang
11 phút đọc
Ảnh minh họa bài viết: Template Google Sheets Theo Dõi Dự Án IT Và Phần Mềm 2027: Agile Sprint Board Đơn Giản

Template Google Sheets Theo Dõi Dự Án IT Và Phần Mềm 2027: Agile Sprint Board Đơn Giản

Đội ngũ IT nhỏ thường phải đối mặt với thách thức lớn: cần quản lý dự án theo Agile nhưng chi phí công cụ như Jira, Linear hay Monday.com quá cao. Một team 3-5 người không thể bỏ ra 200-500 USD mỗi tháng chỉ để theo dõi task và bug. Google Sheets là giải pháp thực tế, miễn phí và đủ mạnh cho team IT có quy mô nhỏ.

Bài viết này hướng dẫn xây dựng Agile Sprint Board bằng Google Sheets, bao gồm backlog, sprint planning, task tracking, bug tracker, velocity chart và burndown chart đơn giản - tất cả trong một file, toàn đội có thể truy cập từ bất kỳ đâu.

Phần 1: Thách Thức Của Team IT Nhỏ Không Có Công Cụ Chuyên Dụng

1.1 Chi Phí Công Cụ Quá Cao So Với Quy Mô

Một team IT 5 người dùng Jira Software tốn khoảng $42.5/tháng (Premium), Linear tốn $40/tháng. Đối với startup hay team IT nội bộ của doanh nghiệp SME, đây là khoản chi phí khó biện minh. Trong khi đó Google Sheets:

  • Hoàn toàn miễn phí với Google Workspace cá nhân
  • Đã có sẵn trong Google Workspace Business mà nhiều công ty đang dùng
  • Không cần cài đặt, chạy trên trình duyệt
  • Collaboration realtime cho cả team
  • API để tích hợp với các hệ thống khác

1.2 Tính Phức Tạp Khi Dùng Nhiều Công Cụ Rời Rạc

Nhiều team IT nhỏ dùng Trello cho task, email cho bug report, Excel cho release tracking và chat app cho communication. Thông tin bị phân mảnh, khó tổng hợp báo cáo, khó theo dõi tiến độ tổng thể. Google Sheets tích hợp tất cả vào một nơi.

1.3 Khó Đào Tạo Thành Viên Mới

Công cụ phức tạp như Jira có learning curve cao. Thành viên mới cần 1-2 tuần để quen. Với Google Sheets, hầu hết mọi người đã biết dùng, có thể bắt đầu ngay trong ngày đầu tiên.

Phần 2: Kiến Trúc Template Agile Sprint Board

2.1 Sheet 1: Product Backlog

Nơi chứa tất cả các tính năng, cải tiến và bug chưa được xử lý:

Cột Trường Mô tả Ví dụ
AStory IDMã unique tự độngUS-2027-001
BLoạiUser Story/Bug/Task/EpicUser Story
CTiêu đềMô tả ngắn gọnThêm tính năng export PDF
DMô tả chi tiếtAs a [user], I want [action], so that [benefit]As a manager, I want to export reports as PDF...
EAcceptance CriteriaĐiều kiện hoàn thànhPDF được tạo trong 3 giây...
FStory PointsƯớc tính độ phức tạp (Fibonacci: 1,2,3,5,8,13)5
GPriorityCritical/High/Medium/LowHigh
HEpicNhóm tính năng lớnReporting Module
ITrạng tháiBacklog/In Sprint/DoneBacklog
JSprintSprint được assign (nếu có)Sprint 5
KNgười tạoAi thêm vào backlogNguyễn Văn A
LNgày tạoNgày tạo item2027-02-01

Công thức tạo Story ID tự động:


=IF(C2="","",
  "US-" & YEAR(L2) & "-" &
  TEXT(COUNTIFS($L$2:L2,"<>"&""), "000")
)

Công thức tổng Story Points trong backlog:
=SUMIF(I:I, "Backlog", F:F)

Công thức lọc backlog theo Priority (ARRAYFORMULA):
=ARRAYFORMULA(
  IF(G2:G="Critical", 1,
  IF(G2:G="High", 2,
  IF(G2:G="Medium", 3, 4)))
)

2.2 Sheet 2: Sprint Planning

Quản lý từng sprint: mục tiêu, capacity, các item được chọn:


Thông tin Sprint:
| Trường | Giá trị |
|--------|---------|
| Sprint Name | Sprint 5 |
| Start Date | 2027-03-03 |
| End Date | 2027-03-14 |
| Sprint Goal | Hoàn thiện Reporting Module |
| Team Capacity | 80 story points (4 người x 2 tuần x 10 điểm/người/tuần) |
| Committed Points | =SUMIF(Sprint!B:B, A2, Sprint!F:F) |
| Completed Points | =SUMIFS(Sprint!F:F, Sprint!B:B, A2, Sprint!M:M, "Done") |
| Velocity | =Completed Points / Total Points * 100 |

Tính Capacity theo từng thành viên:
| Thành viên | Số ngày làm việc | Ngày nghỉ | Hours/ngày | Total Hours | Story Points |
|-----------|-----------------|-----------|------------|-------------|-------------|
| Nguyễn A  | 10              | 1         | 8          | 72          | 18 SP        |
| Trần B    | 10              | 0         | 8          | 80          | 20 SP        |

Công thức Total Capacity:
=SUMPRODUCT(
  (D$2:D$10 - E$2:E$10) * F$2:F$10
) / 4  -- chia 4 vì 4 hours = 1 SP

2.3 Sheet 3: Sprint Task Board (Kanban View)

Hình thức Kanban board trong Google Sheets, cho phép nhìn tổng quan trạng thái task trong sprint hiện tại:


Cấu trúc Task Board cho Sprint hiện tại:

Cột A: Story ID
Cột B: Tiêu đề task
Cột C: Người thực hiện (Assignee)
Cột D: Story Points
Cột E: Status (To Do / In Progress / In Review / Done)
Cột F: Ngày bắt đầu thực tế
Cột G: Ngày hoàn thành thực tế
Cột H: Blocked? (Yes/No)
Cột I: Lý do bị block (nếu có)
Cột J: Link code/PR

Conditional Formatting theo trạng thái:
To Do: Màu xám nhạt
In Progress: Màu xanh dương nhạt
In Review: Màu vàng nhạt
Done: Màu xanh lá nhạt
Blocked: Màu đỏ đậm - ưu tiên xử lý

Công thức tính % hoàn thành sprint:
=COUNTIF(E:E, "Done") / COUNTA(E2:E) * 100

Công thức tính Story Points đã hoàn thành:
=SUMIF(E:E, "Done", D:D)

Đếm task bị block:
=COUNTIF(H:H, "Yes")

2.4 Sheet 4: Bug Tracker

Theo dõi tất cả bug từ khi phát hiện đến khi fix xong:

Cột Trường Mô tả
ABug IDBUG-2027-001
BTiêu đềMô tả ngắn gọn lỗi
CMô tả chi tiếtSteps to reproduce, expected vs actual
DSeverityCritical/Major/Minor/Trivial
EPriorityP1/P2/P3/P4
FMôi trườngProduction/Staging/Dev
GVersionVersion bị ảnh hưởng
HNgười báo cáoAi phát hiện ra bug
INgày báo cáoNgày phát hiện
JAssigneeDev được phân công fix
KTrạng tháiNew/In Progress/Fixed/Verified/Closed
LNgày fixNgày hoàn thành fix
MRoot CauseNguyên nhân gốc rễ của bug
NLink commitLink tới commit fix bug

Công thức phân tích bug theo severity:


Điểm ưu tiên xử lý bug (Bug Severity Matrix):
=IFS(
  AND(D2="Critical", F2="Production"), 1,
  AND(D2="Major", F2="Production"), 2,
  AND(D2="Critical", F2="Staging"), 3,
  AND(D2="Major", F2="Staging"), 4,
  TRUE, 5
)

Thời gian xử lý bug trung bình theo severity:
=AVERAGEIF($D$2:$D$100, "Critical",
  $L$2:$L$100 - $I$2:$I$100
)

Bug count theo tháng (để phát hiện xu hướng):
=COUNTIFS(
  $I:$I, ">="&DATE(YEAR(NOW()),MONTH(NOW()),1),
  $I:$I, "<"&DATE(YEAR(NOW()),MONTH(NOW())+1,1)
)

Tỷ lệ bug được đóng trong SLA (Crit: 24h, Major: 72h):
=COUNTIFS(
  D:D, "Critical",
  L:L-I:I, "<=1"
) / COUNTIF(D:D, "Critical") * 100

2.5 Sheet 5: Velocity Tracking

Theo dõi velocity qua các sprint để dự báo khả năng delivering:


Cấu trúc Velocity Tracker:
| Sprint | Start | End | Committed SP | Completed SP | Velocity | Ghi chú |
|--------|-------|-----|-------------|-------------|---------|---------|
| Sprint 1 | 2027-01-06 | 2027-01-17 | 40 | 35 | 87.5% | |
| Sprint 2 | 2027-01-20 | 2027-01-31 | 45 | 42 | 93.3% | |
| Sprint 3 | 2027-02-03 | 2027-02-14 | 45 | 45 | 100% | |
| Sprint 4 | 2027-02-17 | 2027-02-28 | 50 | 38 | 76% | Tết nghỉ nhiều |
| Sprint 5 | 2027-03-03 | 2027-03-14 | 45 | ? | ? | Đang chạy |

Average Velocity (3 sprint gần nhất):
=AVERAGE(OFFSET(E2, COUNTA(E:E)-4, 0, 3, 1))

Dự báo số sprint cần để hoàn thành backlog:
=CEILING(
  SUMIF('Product Backlog'!I:I, "Backlog", 'Product Backlog'!F:F)
  / F_Average_Velocity,
  1
)

Velocity trend (tăng hay giảm):
=IF(E_Latest > E_Previous, "Tăng", IF(E_Latest < E_Previous, "Giảm", "Ổn Định"))

2.6 Sheet 6: Burndown Chart Data

Dữ liệu cho biểu đồ burndown đơn giản:


Burndown Chart Data - Sprint 5:
| Ngày | Dự kiến còn lại (Ideal) | Thực tế còn lại (Actual) |
|------|------------------------|------------------------|
| 03/03 | 45 | 45 |
| 04/03 | 40.9 | 43 |
| 05/03 | 36.8 | 38 |
| 06/03 | 32.7 | 36 |
| 07/03 | 28.6 | 30 |
| 10/03 | 24.5 | 28 |
| 11/03 | 20.5 | 22 |
| 12/03 | 16.4 | 18 |
| 13/03 | 12.3 | ? |
| 14/03 | 0 | ? |

Công thức Ideal Burndown (giảm tuyến tính theo ngày làm việc):
=C$2 - (C$2 / NETWORKDAYS(B$2, B$12)) * (NETWORKDAYS(B$2, A3))

Công thức Actual Remaining (tính từ Sprint Board):
=C$2 - SUMPRODUCT(
  ('Sprint Board'!E$2:E$100="Done")*
  ('Sprint Board'!G$2:G$100<=A3)*
  'Sprint Board'!D$2:D$100
)

Tạo Sparkline Burndown đơn giản:
=SPARKLINE(
  B3:C12,
  {"charttype","line";
   "linewidth",2;
   "color1","#4CAF50";
   "color2","#f44336"}
)

Phần 3: Hướng Dẫn Sử Dụng Agile Với Google Sheets

3.1 Sprint Planning Meeting (2 tuần/1 lần)


Quy trình Sprint Planning:

BƯỚC 1: Review Product Backlog (15 phút)
- Product Owner trình bày top backlog items
- Team hỏi về Acceptance Criteria
- Đảm bảo mọi người hiểu rõ yêu cầu

BƯỚC 2: Tính Sprint Capacity (5 phút)
- Mỗi thành viên báo ngày nghỉ/off trong sprint
- Tính tổng capacity theo công thức trong sheet

BƯỚC 3: Chọn Items Cho Sprint (30-45 phút)
- Bắt đầu từ items Priority cao nhất
- Vote Story Points theo Fibonacci (dùng Google Forms để vote kín)
- Nếu chênh lệch >2 mức: thảo luận và vote lại
- Dừng khi Committed SP = 90% Capacity

BƯỚC 4: Xác Định Sprint Goal (10 phút)
- Một câu mô tả kết quả chính của sprint
- Nên có thể đo lường được
- Liên quan đến giá trị business

GOOGLE FORMS STORY POINT VOTING:
Tạo form với các câu hỏi:
- Story nào đang vote?
- Story Points của bạn: 1/2/3/5/8/13/21
- Chia sẻ: Responses -> Sheet (Sheet Backlog)

3.2 Daily Standup (15 phút mỗi sáng)


Mỗi thành viên trả lời 3 câu hỏi (update trực tiếp vào Sprint Board):
1. Hôm qua làm gì? (update Status sang Done nếu xong)
2. Hôm nay làm gì? (update assignee/status các task mới)
3. Có gì cần hỗ trợ không? (đánh dấu Blocked nếu có)

Sprint Board Google Sheets - UPDATE HÀNG NGÀY:
- Kéo task từ "To Do" sang "In Progress" khi bắt đầu
- Kéo sang "In Review" khi gửi PR
- Kéo sang "Done" khi merge và deploy
- Đánh dấu "Blocked: Yes" + lý do khi bị chặn

Tạo Slack notification khi có thay đổi (Apps Script):
function onEdit(e) {
  const range = e.range;
  const sheet = range.getSheet();

  if (sheet.getName() === 'Sprint Board' && range.getColumn() === 5) {
    const taskName = sheet.getRange(range.getRow(), 2).getValue();
    const newStatus = range.getValue();
    const assignee = sheet.getRange(range.getRow(), 3).getValue();

    // Gửi webhook tới Slack
    const webhookUrl = 'YOUR_SLACK_WEBHOOK_URL';
    const payload = {
      text: assignee + ' đã chuyển task "' + taskName + '" sang ' + newStatus
    };

    UrlFetchApp.fetch(webhookUrl, {
      method: 'post',
      payload: JSON.stringify(payload)
    });
  }
}

3.3 Sprint Review Và Retrospective (cuối sprint)


Sprint Review Checklist:
[ ] Update Velocity Tracker với kết quả sprint
[ ] Review Burndown chart - sprint có smooth không?
[ ] Demo các tính năng hoàn thành cho stakeholder
[ ] Cập nhật trạng thái backlog items: Backlog -> Done
[ ] Review Bug Tracker: bug mới phát sinh trong sprint

Retrospective - 3 cột Google Sheets:
| Làm Tốt (Keep) | Cần Cải Thiện (Improve) | Thử Nghiệm (Try) |
|----------------|------------------------|-----------------|
| Code review nhanh | Mô tả task chưa rõ ràng | Pair programming |
| Daily standup đúng giờ | Bug report thiếu info | Mob testing |

Metrics Retrospective tự động:
- Velocity: Sprint này so với trung bình 3 sprint trước?
- Bug rate: Số bug phát sinh trong sprint / Story Points
- Cycle time: Thời gian trung bình từ "In Progress" đến "Done"
- Blocked rate: Số task bị block / Tổng task

Công thức Cycle Time trung bình:
=AVERAGEIFS(
  G2:G100 - F2:F100,
  E2:E100, "Done",
  F2:F100, "<>"&""
)

Phần 4: Release Tracker Và Version Management


Sheet "Release Tracker":
| Version | Release Date | Status | Stories Included | Bug Fixes | Release Notes Link |
|---------|-------------|--------|-----------------|-----------|-------------------|
| v2.5.0  | 2027-03-14  | Planned | US-001, US-002  | BUG-011   | [Link]            |
| v2.4.1  | 2027-02-28  | Released | -              | BUG-008, BUG-009 | [Link]    |
| v2.4.0  | 2027-02-14  | Released | US-011-US-015  | BUG-005   | [Link]            |

Go-Live Checklist tự động (Conditional Formatting):
[ ] Unit tests passed
[ ] Integration tests passed
[ ] Staging deployment successful
[ ] Performance test: response time < 500ms
[ ] Security scan: 0 critical issues
[ ] Rollback plan ready
[ ] Monitoring alerts configured

Tổng số bug theo phiên bản (lịch sử chất lượng):
=COUNTIF('Bug Tracker'!G:G, A2)

Bug fix rate trong version:
=COUNTIFS(
  'Bug Tracker'!G:G, A2,
  'Bug Tracker'!K:K, "Closed"
) / COUNTIF('Bug Tracker'!G:G, A2)

Phần 5: Khi Nào Nên Upgrade Lên Jira

Dấu hiệu Google Sheets còn đáp ứng? Giải pháp
Team <10 người Hoàn toàn đủ Dùng GS miễn phí
Team 10-20 người Cần optimization GS + Apps Script automation
Team >20 người Bắt đầu khó khăn Cân nhắc Jira/Linear
>200 task/sprint GS chậm lại Cần công cụ chuyên dụng
Cần workflow tự động phức tạp Giới hạn Jira Automation rules
Tích hợp CI/CD Phải code nhiều Jira + GitHub Actions
Audit trail pháp lý Không đủ Jira với audit logs
Multi-project portfolio Khó quản lý Jira Programs/Plans

5.1 Chi Phí So Sánh: Google Sheets vs Công Cụ Chuyên Dụng


Team 5 người, 2 năm sử dụng:
- Google Sheets (đã có GWS): 0 đồng
- Jira Software (Standard): 3.79 USD x 5 x 24 = 454.8 USD
- Linear: 8 USD x 5 x 24 = 960 USD
- Monday.com (Basic): 9 USD x 5 x 24 = 1,080 USD

Tiết kiệm khi dùng Google Sheets: 454-1080 USD trong 2 năm
(Tương đương 11-27 triệu VND)

Phần 6: Mẹo Nâng Cao Hiệu Quả Sử Dụng

6.1 Dùng Data Validation Cho Trường Trạng Thái


Cài đặt dropdown cho Status trong Sprint Board:
Data > Data Validation > Dropdown from list:
To Do, In Progress, In Review, Done, Blocked

Cài đặt dropdown cho Priority:
Critical, High, Medium, Low

Cài đặt dropdown cho Story Points (Fibonacci):
1, 2, 3, 5, 8, 13, 21

Cài đặt dropdown cho Severity (Bug Tracker):
Critical, Major, Minor, Trivial

6.2 Sử Dụng Named Ranges


Định nghĩa Named Ranges để công thức dễ đọc hơn:
- "CurrentSprint": 'Sprint Planning'!A1 (tên sprint hiện tại)
- "BacklogItems": 'Product Backlog'!A2:L500
- "SprintItems": 'Sprint Board'!A2:J200
- "BugList": 'Bug Tracker'!A2:N500

Cách dùng:
=COUNTIFS(
  INDEX(BacklogItems,0,9), "In Sprint",
  INDEX(BacklogItems,0,7), "High"
)

6.3 Dashboard Tổng Hợp Trên Sheet "Overview"


Dashboard nhìn một nhìn biết mọi thứ:

Sprint hiện tại:
- Tên sprint: =INDIRECT("'Sprint Planning'!A2")
- Số ngày còn lại: =NETWORKDAYS(TODAY(), 'Sprint Planning'!C2)
- % hoàn thành: =COUNTIF('Sprint Board'!E:E,"Done")/COUNTA('Sprint Board'!E2:E)*100
- Story Points còn lại: =SUMIF('Sprint Board'!E:E,"<>Done",'Sprint Board'!D:D)

Bug metrics:
- Open bugs: =COUNTIF('Bug Tracker'!K:K,"New")+COUNTIF('Bug Tracker'!K:K,"In Progress")
- Critical bugs: =COUNTIFS('Bug Tracker'!D:D,"Critical",'Bug Tracker'!K:K,"<>Closed")
- Bug fix rate tháng này: =COUNTIFS(
    'Bug Tracker'!L:L, ">="&DATE(YEAR(NOW()),MONTH(NOW()),1),
    'Bug Tracker'!K:K, "Closed"
  ) / COUNTIF('Bug Tracker'!L:L, ">="&DATE(YEAR(NOW()),MONTH(NOW()),1))

Team workload:
- Task per person: =COUNTIF('Sprint Board'!C:C, B2)
- SP per person: =SUMIF('Sprint Board'!C:C, B2, 'Sprint Board'!D:D)

Phần 7: FAQ - Câu Hỏi Thường Gặp

Q: Template có hỗ trợ Scrum và Kanban không?

Template chính được thiết kế cho Scrum (sprint-based). Để dùng Kanban, bạn có thể bỏ các sheet Sprint Planning và Velocity, chỉ giữ Backlog và Sprint Board (đổi tên thành "Kanban Board"). Thay vì sprint, task chạy từ Backlog -> To Do -> In Progress -> Review -> Done theo flow liên tục.

Q: Làm sao để nhiều project dùng chung một file không bị lộn?

Có hai cách: (1) Thêm cột "Project" vào mỗi sheet và lọc bằng FILTER/QUERY. (2) Tạo file riêng cho mỗi project nhưng dùng IMPORTRANGE để tổng hợp dashboard trên file master. Cách 2 được khuyến nghị hơn cho trên 3 projects.

Q: Làm sao tracking bug từ khách hàng báo cáo (customer bug)?

Tạo Google Form "Báo Cáo Lỗi" cho khách hàng hoặc internal team. Responses tự động vào Bug Tracker. Thêm trường "Nguồn" (Customer/QA/Dev/Monitor) để phân loại nguồn gốc bug. Tích hợp Zapier hoặc Apps Script để tự động cập nhật trạng thái bug vào email cho người báo cáo.

Q: Template có theo dõi technical debt không?

Thêm loại "Tech Debt" vào Product Backlog (bên cạnh User Story, Bug, Task). Thêm tag "Tech Debt" và theo dõi tỷ lệ SP cho tech debt / tổng SP mỗi sprint. Best practice: dành 20% sprint capacity cho tech debt để tiến xử lý dần.

Kết Luận

Google Sheets là công cụ Agile project management miễn phí nhưng đầy đủ sức mạnh cho team IT nhỏ. Với template này, bạn có thể:

  • Quản lý Product Backlog rõ ràng, có priority
  • Chạy Agile Sprint từ planning đến retrospective
  • Theo dõi bug từ phát hiện đến đóng với severity matrix
  • Nhìn burndown chart và velocity để dự báo chính xác
  • Tiết kiệm tối thiểu 454 USD mỗi 2 năm so với Jira

Tải template miễn phí tại SheetStore và bắt đầu sprint đầu tiên ngay hôm nay!

Chia sẻ bài viết:

Tuân Hoang

Tuân Hoang

Đội ngũ SheetStore

Google SheetsGoogle Apps ScriptCRMAutomationPhần mềm quản lý doanh nghiệp

Google Workspace Certified, 5+ years experience

Bạn thấy bài viết hữu ích?

Đăng ký nhận thông báo khi có bài viết mới.

Nhận thông báo khi có bài viết mới. Không spam, hứa luôn! 😊

Bình luận (0)

Vui lòng đăng nhập để tham gia thảo luận