Intermediate Reading #user-stories #acceptance-criteria #scrum

Reading User Stories

5 exercises on reading user stories in depth — identify scope, analyse acceptance criteria, spot missing information (auth gaps, error states), and understand Definition of Done.

User story anatomy
  • As a [persona] — who the feature serves
  • I want to [goal] — the action or capability they need
  • So that [benefit] — the business or user value delivered
  • Acceptance Criteria — testable conditions that define "it works"
  • Out of Scope — explicit exclusions to prevent scope creep
  • Definition of Done — checklist before the ticket can be closed
0 / 5 completed
1 / 5
📖 User Story DASH-312
TICKET: DASH-312
Type: Story
Priority: Medium
Epic: DASH-200 (Analytics Dashboard — Q2)

Title: Export dashboard data to CSV

User Story:
  As a business analyst,
  I want to export the current dashboard view to a CSV file,
  so that I can perform further analysis in Excel without manually copying data.

Acceptance Criteria:
  AC1. An "Export to CSV" button appears in the top-right corner of the dashboard
  AC2. Clicking the button exports only the data currently visible in the dashboard
       (respecting active filters and date range)
  AC3. The CSV file is named: dashboard-export-YYYY-MM-DD.csv
  AC4. The export includes all columns displayed in the current view, in the same order
  AC5. Large datasets (up to 100,000 rows) must export within 10 seconds
  AC6. The export button is disabled and shows a loading spinner while the export is in progress

Out of Scope (explicitly excluded):
  - Export to Excel (.xlsx) format
  - Scheduled/automated exports
  - Export of hidden or filtered-out columns

Definition of Done:
  - Unit tests cover CSV generation logic
  - E2E test verifies: filter data → click export → file downloaded with correct rows
  - Tested on Chrome, Firefox, Safari (latest)
  - UX reviewed and approved by product designer
Read the user story. A developer proposes also adding an "Export to Excel (.xlsx)" format since it shares most of the same logic. Based on the ticket, should this be included?