iSpeaker Live iSpeaker Live / Docs
Quality

Bug Reporting

Severity and priority scales, lifecycle, report templates and triage process for the iSpeaker Live Testing Phase.

On this page

Overview

A bug report is only as valuable as the information it carries. This page documents how bugs are classified, recorded, triaged, and resolved during the Testing Phase of iSpeaker Live MVP 1.0. Every tester is expected to follow the conventions here so that engineering can reproduce, fix, and verify defects without back-and-forth delays.

ℹ️
Bugs found while executing test cases must reference the failing case ID (e.g. TC-PAY-002) in the report so the link is preserved.

Severity scale

Severity describes the technical impact of the defect — how broken something is, regardless of how often it happens. It is assigned by QA at report time and revised during triage if needed.

S1 — Critical

Blocks a core flow with no workaround. Data loss, security exposure, payment failure, app crash on launch, complete outage of a primary feature.

SLA: Acknowledged within 1 hour, fix targeted same business day.

S2 — High

A major function is broken but a workaround exists, or a non-payment data corruption occurs. Significant degraded UX.

SLA: Acknowledged same day, fix within 2 business days.

S3 — Medium

A secondary feature is broken or behaves incorrectly. Most users can still use the platform normally.

SLA: Triaged within 2 days, fix within the current sprint.

S4 — Low

Cosmetic issues, minor copy issues, off-by-one alignment, edge-case UI defects.

SLA: Backlogged; fix when convenient.

Priority scale

Priority describes the business urgency — how soon a fix should ship, regardless of how broken the thing is. Assigned by the product owner or engineering lead during triage.

LabelMeaningTypical targets
P0Drop everything and fix now. Production-blocker or release-blocker.Hotfix in hours.
P1Must be fixed before the release cut.Current sprint.
P2Should be fixed soon; not a release blocker.Next 1-2 sprints.
P3Nice to fix.Backlog.

Severity × Priority matrix

This is the suggested starting mapping. Triage can override it with documented reasons (for example, a cosmetic bug on the landing page may become P1 if it harms conversion).

S1 S2 S3 S4
Affects all users P0 P1 P2 P2
Affects many users P0 P1 P2 P3
Affects few users P1 P2 P3 P3
Edge case P2 P3 P3 P3

Bug lifecycle

A bug moves through a fixed set of states. Only specific roles can perform each transition.

Step 1 · Tester

New

Tester files the bug using the template below. Initial severity and steps to reproduce are required.

Step 2 · QA Lead

Triaged

QA lead validates reproducibility and confirms severity. Product assigns priority. The bug is routed to a team (frontend / backend / mobile).

Step 3 · Engineer

In Progress

Engineer takes the bug, attaches a branch, and updates the report with a root-cause hypothesis.

Step 4 · Engineer

Code Review

Pull request opened, linked to the bug ID, and reviewed by at least one peer.

Step 5 · Engineer

Merged / On Staging

Merged into the release branch and deployed to staging. Bug status changes to "Ready for QA".

Step 6 · Tester

Verified

Original tester (or another QA) re-runs the failing steps on staging and either passes the bug or re-opens it.

Final · QA Lead

Closed

Bug is closed after verification. If it returns later, a new bug is filed referencing the closed one.

Other terminal states: Won't Fix (intentional behavior), Duplicate (linked to original), Cannot Reproduce (re-open if it happens again with more data), Deferred (moved to a later release).

Bug report template

Copy this template into your issue tracker. Mandatory fields are marked with *.

Title*: [Module] One-line summary in present tense

Bug ID: (auto-generated)
Reporter*: Your name
Date*: YYYY-MM-DD
Build*: app vX.Y.Z (commit / build number)
Environment*: dev | staging | production
Platform*: Web (Chrome 130) | Android 14 (Pixel 7) | iOS 18 (iPhone 14)
Language*: AR | EN
Severity*: S1 | S2 | S3 | S4
Priority: (filled by triage)
Related test case: TC-XXX-NNN (if any)

Preconditions:
- Account: tester01@example.com (Student role)
- Wallet balance: 100 SAR
- Anything else needed to reach the bug

Steps to reproduce*:
1. ...
2. ...
3. ...

Expected result*:
What should happen.

Actual result*:
What actually happens. Include exact error messages.

Frequency*: Always | Most of the time | Sometimes | Once

Workaround:
None | Describe a temporary way around it.

Attachments*:
- Screenshot or screen recording
- Console / network log if relevant
- Backend log timestamp if relevant

Additional notes:
Hypotheses, regression info, related bug IDs.

Good vs. bad reports

Bad report

Title: Doesn't work

Description: I tried to register and it failed. Please fix.

This report can't be acted on: no environment, no steps, no error, no build.

Good report

Title: [Auth] Register fails with "phone has already been taken" when phone is new

Description: Build v1.0.7 on Android 14. Used phone +966500001234 (never registered). Got 422 with field phone. Reproduced 5/5 times. Web works with same number.

Specific, reproducible, and linkable to a test case.

Example bugs

BUG-2026-0142 [Wallet] Top-up amount appears doubled after a failed PayPal cancel-retry sequence S1 P0 Wallet
Environment
Staging · Web Chrome 130 · EN
Build
web v1.0.7
Related case
TC-PAY-001, TC-PAY-002
Steps
  1. Start a 100 SAR top-up via PayPal.
  2. Cancel inside PayPal.
  3. Immediately retry with the same 100 SAR amount and complete payment.
Expected
Balance increases by 100 SAR; one completed transaction; the cancelled one stays in failed.
Actual
Balance increases by 200 SAR; both transactions show completed.
Frequency
3/3 reproductions.
Hypothesis
Webhook for cancel arrives after the second flow completes and is processed against the same wallet row without re-checking transaction state.
BUG-2026-0143 [Feed] Comment count off by one after deleting a reply S3 P2 Feed
Environment
Staging · Android 14 (Pixel 7) · AR
Build
android v1.0.7 (build 218)
Related case
TC-FEED-004
Steps
  1. Open a post with 5 comments.
  2. Add a reply to the top comment.
  3. Delete the same reply.
  4. Pull-to-refresh the post.
Expected
Comment count returns to 5.
Actual
Comment count shows 6 until the next app restart.
Frequency
Always.
BUG-2026-0144 [Live Rooms] RTL layout: end-session button overlaps participants counter on small Android screens S4 P3 Live Rooms
Environment
Staging · Android 13 (Samsung A12, 720×1600) · AR
Build
android v1.0.7
Related case
TC-LR-005, TC-I18N-002
Steps
  1. Open a running live room in Arabic.
  2. Look at the top bar of the room.
Expected
Counter and end-session button do not overlap; both fully tappable.
Actual
End-session button covers the participants counter on screens narrower than 360 dp.

Triage process

Triage happens daily during the Testing Phase. The standing meeting (15-30 min) is attended by the QA Lead, Product Owner, and Tech Leads (web, mobile, backend).

  1. New bugs queue: All bugs in New are walked through.
  2. Reproducibility check: QA confirms the report has enough info; otherwise the bug is moved to Needs Info and assigned back to the reporter.
  3. Severity validation: QA lead adjusts severity if needed.
  4. Priority assignment: Product owner picks priority using the matrix.
  5. Routing: Tech lead assigns to a team.
  6. Release-blocker review: Any open S1/P0 is reviewed at the end and blocks release until resolved.

Quality metrics tracked during testing

🐞 Open bug count By severity Visible on the QA dashboard daily.
⏱️ Time to triage < 24 h From New to Triaged.
🛠️ Time to fix (S1) < 1 business day From Triaged to Verified.
🔁 Reopen rate < 10% Closed bugs that reopen within 14 days.
🎯 Bug find rate Track per cycle New defects opened per test run.
🧹 Aging No S1/S2 > 5 days Older bugs are escalated automatically.

Tooling & channels

  • Issue tracker — All bugs live here with their IDs; this is the single source of truth.
  • Slack #qa-bugs — New S1/P0 bugs are announced automatically. Engineers acknowledge in the thread.
  • Screen capture — Use built-in OS recorders for short clips; long clips compressed to MP4 ≤ 30 MB before uploading.
  • Console / network captures — Web uses Chrome DevTools HAR exports; mobile uses Logcat/Console attached to the bug.
  • Crash reporting — Crashlytics / Sentry IDs included where applicable.
⚠️
Never paste production user data into bug reports. Mask emails, phone numbers, and any payment-related fields before attaching screenshots.