Present Findings with Streamlit
Analytics Communication Streamlit, ECS Fargate, ALB
Delivery Constraint & Opportunity Analysis · Updated 1 month, 2 weeks ago
Content
Skill: Present Findings with Streamlit
Capability Domain: Analytics Communication
Technology Stack: Streamlit, ECS Fargate, ALB
When to use
Insights Communicator picked the existing mart as the story surface.
Templates (starter + live lake)
Do not scaffold empty pages. Customize:
- streamlit/pages/0_Delivery_Cycle.py — effort / wall-clock / impact
- streamlit/pages/1_Opportunity_Quadrant.py
- streamlit/pages/2_Deficiency_Register.py — dE/dK/dI
- streamlit/pages/3_Stage_Detail.py — promoted_eda.yaml only
- Tabs 4_Commits.py … 10_Sprints.py (skip-when in tab_pages.py)
- YAML in streamlit/data/
- Dockerfile must COPY data data/
Look-until-trusted: 11_Feature_Cycle_Time.py, 12_Lake_Explorer.py — never first.
Recipe
- Pages on the ECS+ALB mart (never App Runner): reconstructed-cycle swimlane first (three metrics), then the opportunity quadrant, then the deficiency register (Action Register table: finding + decision + dE/dK/dI + receiver), then stage detail.
- Numbers, tags, and routes come from
streamlit/data/*.yaml, not a fresh EDA and not a new classification. Receivers are named only: AI SDLC (dE automate/delegate), process/tooling (other dE), Team Upskill Engine (dK candidates), staffing (dI). Do not author modules on the mart. - After the story pages, instantiate the Starter mart tabs below. A tab is a drill-down, not the opening visual. Skip via
tab_is_skippedagainst contract views. - Stage-detail and tab charts use skill Metric Render Catalog pairings. Label units. Issue lead/cycle (business days) and MR cycle (hours) stay on separate charts.
- Contributor charts: name the role (author / integrator / reviewer). Show n. Do not treat assignment counts as approvals.
- Exec duration KPIs: median + n. Do not caption a mean of daily averages as "the" cycle time.
- Browser-verify the story path end to end (cycle → quadrant → register → a stage), then each tab that was instantiated. A loading-skeleton screenshot is not verification.
Starter mart tabs
A portable inventory. Skip a tab when every required Scope Contract view for that tab is absent. Do not invent joins across sources without an explicit key (issue key, change number, commit SHA). Do not hard-code a tenant, board, repo, project key, or status list — read those from the contract.
Skip-when vs query. Skip-when is for missing views. If the view exists, run Athena (shared streamlit/tab_athena.py), pin QueryExecutionId, empty cohort names the window. Do not leave print("Instantiate: …") as the tab body.
Live GitHub-only lake (opsdl). Instantiate Commits, Work items (volume only — omit lead/cycle without jira_status_segments), Changes (MR hours, not issue days), Pipelines (top failing = workflow name; job-level extract is not in the lake), Load (risk signal). Skip Defects and Sprints unless those views exist.
Shared rules (all tabs)
- Windows: 7 / 14 / 30 calendar days (sprint tab may use closed-sprint count instead).
- Period-over-period: fetch 2 × window and split, or use an explicit prior offset. Inverse color when lower is better.
- Zero-fill missing calendar days on daily series. Empty state: say what cohort is empty (“no resolved work items in window”). Do not draw a zero duration as if work finished.
- Duration KPIs: per-item median + n (optionally min/max). A mean of daily averages is unweighted by volume.
- Definitions for issue clocks: skill Jira Flow Extract. Render pairings: skill Metric Render Catalog.
Tab: Commits
Required views. Commit / author facts from the VCS extract.
Skip when. No commit view is scoped.
| Metric | Compute |
|---|---|
| Commits / day | Count commit rows with committed_at (or equivalent) in the day. Zero-fill the window. |
| Active authors | Distinct author identities in the window (use the contract identity key, not display name alone). |
| Author share | Author commit count / window commit count. Donut or ranked bar. |
| Type mix | If messages follow a conventional-commit convention, bucket by type prefix; otherwise omit. |
Do not treat commit volume as delivery of a change. Bots: apply the contract filter; do not guess.
Tab: Work items
Required views. Issue facts plus changelog-derived status segments (skill Jira Flow Extract).
Skip when. No issue view is scoped. If segments are missing, show volume KPIs only — omit lead, cycle, and time-in-status.
| Metric | Compute |
|---|---|
| Closed / day | Count items with resolutiondate on that calendar day. |
| Touched / day | Count items with updated on that calendar day (not a substitute for closed). |
| Lead time | Cohort = resolved in window. Business days created → resolutiondate. Show count, avg, median, min, max. |
| Cycle time | Same cohort, exclude never-started. Business days first Started segment → resolutiondate. Started set is parameterized (contract / workflow), not a hardcoded name. |
| Time-in-status | Calendar hours per status; the open segment ends at now. Journey strip in configured workflow order — not a Pulse KPI. |
Do not use board sprint reports as this clock. Do not plot lead/cycle on the same unlabeled axis as MR hours.
Tab: Changes
Required views. Merge-request or pull-request facts (opened, merged, timestamps, actors).
Skip when. No MR/PR view is scoped.
| Metric | Compute |
|---|---|
| Opened / day | Count changes with created_at on that day. |
| Merged / day | Count changes with merged_at on that day. |
| MR / PR cycle | Cohort = merged in window. Wall-clock hours created_at → merged_at. Median, mean, min, max, n. |
| Source → trunk band | Optional. When the contract names a trunk / default-branch convention, group cycle by source-branch pattern; show avg + min/max. Omit if no convention is recorded. |
| Integrators | Distinct merge-clicker (or merge-commit author) counts. Label the role integrator. |
| Reviewers | Assigned-reviewer counts. Assignments, not approvals. Empty series usually means the extract never stored assignees. |
Author of the change ≠ integrator ≠ assigned reviewer. Do not combine those counts into one “contributor” bar.
Tab: Pipelines
Required views. Workflow / pipeline / job runs.
Skip when. No CI view is scoped.
| Metric | Compute |
|---|---|
| Failure rate | Failed runs / all terminal runs in the window (exclude cancelled if the contract says to). Inverse KPI color. |
| Status-by-day | Stacked counts of terminal status per calendar day. Zero-fill days. |
| Duration trend | Per-run duration (start → terminal). Line of daily median or p50; optional min–max. Label the unit. |
| Top failing jobs or reasons | Rank by failure count in the window. Horizontal bar. On a GitHub-only lake, top failing = workflow name; job-level extract is not in the lake. |
Do not treat a red pipeline as a work-item cycle-time input.
Tab: Load
Required views. Commit timestamps (same commit view as Commits is enough).
Skip when. No commit timestamps are scoped.
| Metric | Compute |
|---|---|
| Long-day share | Sessions (or commit clusters) whose local span exceeds the contract long-day threshold; share of authors or of sessions. |
| Weekend share | Commits (or sessions) on the contract weekend definition. |
| Names under load | Rank identities by long-day / weekend volume. Risk signal only. |
Caption as a risk signal, not a performance score. Do not open the mart on this tab.
Tab: Defects
Required views. Work items typed as bug/defect or an equivalent defect view in the contract.
Skip when. The scoped issue types / views do not distinguish defects.
| Metric | Compute |
|---|---|
| Opened vs closed | Created vs resolved counts in the window (daily or totals). |
| Time-to-target-status | Business days or hours from created (or first Seen) to the contract target status (e.g. Done). Parameterize the target; do not hard-code it here. |
| Open-age buckets | Still-open items: now − created (or now − first Seen), bucketed. Inverse color on aging KPIs. |
Same clock rules as Work items when using issue timestamps. Do not mix with MR hours.
Tab: Sprints
Required views. Agile sprint snapshots (committed vs completed points, dates).
Skip when. No sprint snapshot was extracted. A board name in Jira is not enough — you need snapshot rows.
| Metric | Compute |
|---|---|
| Completed points | Sum of completed (or delivered) points on closed sprints in the lookback. |
| Committed vs delivered | Side-by-side per closed sprint. |
| Rolling average | Mean completed points over the last N closed sprints (N from the window control). |
| Unestimated share | Items without points / items in the sprint snapshot. |
Separate from issue lead/cycle. Do not use sprint reports as the flow clock.
Story vs tabs
The reconstructed delivery cycle (all stages, effort / wall-clock / impact) is the opening story page. Next: opportunity quadrant, then the deficiency register, then stage detail. The register is not a starter tab. Tabs are look-until-trusted and stakeholder drill-down. Do not reorder the mart so Commits or Changes loads first.
Pitfalls
- Mart tabs must query Athena when contract views exist. Skip-when is for missing views. If the view exists, run Athena (shared
streamlit/tab_athena.py), pinQueryExecutionId, empty cohort names the window. Do not leaveprint("Instantiate: …")as the tab body. streamlit/data/promoted_eda.yamlrows: []is still correct until activity 398 promotes Look-until-Trusted survivors. TSY floor is still cycle + quadrant + deficiency register. Do not dump Metric Render Catalog. Do not treat empty promoted-eda as a bug in activity 254.- Leading with Feature Cycle Time detail instead of the reconstructed cycle.
- Implementing new agent products on the dashboard.
- A contributor leaderboard as the first screen.
- Mixing clocks or omitting sample size.
- Instantiating a tab whose contract views do not exist.
- Hard-coding one tenant's repos, boards, issue types, or status names into the mart.
- Re-tagging dE/dK/dI or turning dK rows into lesson outlines.
Details
- Capability Domain:
- Analytics Communication
- Technology Stack:
- Streamlit, ECS Fargate, ALB
- Created:
- 1 month, 3 weeks ago
- Updated:
- 1 month, 2 weeks ago
Playbook
Activities Using This Skill 1
- Present Findings Tell the Data Story