Backfill Historical Jira Issues and Status History
BPE-3 Order: #3 Datalake Formation Has Dependencies
Updated 1 month, 2 weeks ago
Guidance
Purpose
When jira is in the Scope Contract, pull historical issues plus a status timeline into the raw bucket so Constraint and Flow Analysis can compute lead time and cycle time. A poller that only sees current status cannot reconstruct cycle start.
Skip when
Scope Contract sources does not include jira. Do not stand up Jira Lambdas or views "just in case". Do not copy jira_flow.py.example onto a GitHub-only lake.
Inputs
- Lake Scope Contract (
sources, project keys from skill Scope the Operations Lake → Jira flow keys,views, Started status set, watermark / secret names). - Starter stub
infra/lambdas/jira_flow.py.example— copy toinfra/lambdas/jira_flow.pyonly if jira is scoped. - CDK Application (
JiraPollFn/ Jira backfill function already declared when jira is scoped). - Skill Jira Flow Extract → Extraction recipe.
- Skill Serverless Data Ingestion (handler wiring only).
Steps
- If jira is scoped: copy
infra/lambdas/jira_flow.py.example→jira_flow.py. Open skill Jira Flow Extract → Extraction recipe. Implement that contract — do not invent a different clock. Secretops-lake/jira-api-token; base URL from contract Jira flow keys. - Persist both issue snapshots (
closed_at=resolutiondate) and status segments (status,entered_at,exited_at). - JQL is scoped and bounded (
updatedDate). Cloud: cursor pagination. Server/DC:startAt. Page size about 100. - Build the timeline from changelog
field == status. Paginate per-issue changelog when search expand truncates. - Record the Started status set on the contract. Compute lead and cycle from the landed columns (business days). Do not re-query Jira in EDA for those clocks.
- Incremental cursor in DynamoDB keyed by
source. Periodic bounded backfill for tickets older than the watermark. Populate-lake today is GitHub-shaped — if you add a Jira invoke job, put it in the same workflow; do not laptop-invoke shared env. - Write unmodified JSON to
s3://{raw}/jira/{yyyy}/{mm}/{dd}/{event-id}.json. Parquet is the next activity.
Done when
- Glue (or the contract views) contain resolved rows (
closed_atnot null), not only open issues. jira_status_segments(or the named contract view) has at least one closed segment per resolved issue that has changelog.- Athena proof LIMIT 10 succeeds for every jira view that has Parquet.
- Lead/cycle can be computed from curated columns without another Jira call.
Feeds
Store Compressed and Partitioned in S3, then Glue/Athena. Constraint analysis may use these clocks as measured touch/wait inputs; it does not replace impact scoring.
Honesty
Sprint/velocity board reports are out of scope here. Do not treat them as lead or cycle.
Details
- Order:
- #3
- Phase:
- Predecessor:
- BPE-1 Stand Up Serverless Ingestion from Scoped Sources
- Created:
- Sep 16, 2026
- Last Updated:
- Sep 17, 2026
Workflow
Build the Operational Data Lake Pipeline
Pull operational history from the systems people actually work in into the lake, including closed work, so duration and wait …
View WorkflowAssigned Agent
Data Platform Engineer
Agent: Data Platform Engineer Role Owns Datalake Formation: Scope Contract → Python CDK (DeployStack + …
Required Skills
- Jira Flow Extract Data Engineering Jira REST, JQL, Changelog
- Serverless Data Ingestion Data Engineering AWS CDK, Lambda, EventBridge, API Gateway, Kinesis Firehose
Rules
No rules linked.
Input Artifacts 1
-
Lake Scope Contract
Document
Required
Produced by: Scope Sources, Org, and Environment
Output Artifacts 1
- Jira Flow Extract Contract Document