Overdue BTS Ticket Alert Automation
An Airflow pipeline that groups unresolved BTS tickets past their SLA by assignee and alerts them on Slack every morning
- ~10,000Unresolved tickets checked daily
- -21%Overdue count with business-day logic
- 21Unit tests, mutation-checked
- No read access to the ticket table behind the original dashboard SQL, so tickets come from JIRA REST (JQL) and are joined with SLA and store tables in Trino
- Counts elapsed time in business days instead of calendar days and skips weekends and holidays to avoid duplicate alerts
- Mentions assignees without any user lookup API by relying on Slack usernames matching JIRA email local parts
- Assignee workloads were highly skewed (median 4, max 597 tickets) and overflowed Slack's text limit; solved with a parent message plus threaded replies
- Separated core, task and DAG layers; verified with 21 unit tests that call the deployed code directly, plus mutation checks
- Traced the first production failure to a Slack bot swap made while the PR was open, and added a check for sibling-DAG config changes to the deploy checklist