Architecture
Stop Letting the Tail Wag the Dog

If your teams spend more time maintaining reports than building product, your reporting system isn’t supporting delivery—it’s competing with it.
Every Monday morning, the release lead pulled data from Jira, reshaped it in a spreadsheet, and built a slide deck—all to describe work that Jira already knew about. One week, the deck didn’t match a Confluence tracker maintained by another team. The conversation didn’t start with “let’s reconcile.” It started with “why isn’t this done?” Two hours later, she’d proven that finished work was finished—time that came straight out of the sprint.
The work was done. The system just couldn’t see it.
If that sounds familiar, it should. Most engineering organizations carry some version of this tax—hours lost every week to duplicating, reformatting, and defending information that already exists in the system of record. It compounds quietly. No single instance looks like a crisis, but across teams and sprints, the drag on delivery is real and measurable.
This isn’t a tooling issue. It’s a data flow problem—the path between the system where work happens and the systems where work gets reported has forked, and nobody maintained the bridge.
The Anti-Pattern: A Second System for the Same Work
Someone needs visibility into delivery, so they build a report. Instead of deriving it from the existing workflow, they create a parallel layer—extra fields, labels, naming conventions, or documents that sit outside the day-to-day work.
Now engineers aren’t just doing the work. They’re maintaining a second system that describes it.
Over time, the reporting layer becomes the thing leadership sees. The workflow becomes something teams use locally. When the two drift—and they always do—the report wins. Work that’s finished shows up as missing. Teams are asked to explain gaps that don’t exist.
Two systems. Two truths. One credibility gap.
Why It Happens (And Why It’s Predictable)
Workflows evolve over years. Fields get added and rarely removed. Reporting needs change faster than the underlying system can adapt. Workflow tools are built for the people doing the work, not for the people consuming reports about it. And the people who need visibility often aren’t the same people who know how to extract it from the system.
So they build something they can control—documents, decks, and dashboards outside the workflow. A Confluence page that mirrors what already lives in Jira. A recurring slide deck that takes hours to manually assemble by reshaping data that Jira already has.
Each workaround makes sense on its own. Together, they create a reporting layer that is manual, delayed, duplicative, and easy to get wrong.
Then the direction of effort flips. Instead of reports reflecting the work, the work starts bending to satisfy the reports. Engineers context-switch to maintain metadata that exists solely for a downstream consumer. The cognitive tax is real. The accuracy drops. The trust erodes.
There’s also a dynamic that rarely gets named: reporting flows upward, but the burden of maintaining it flows downward. The people who produce the reports often have the context to know they’re redundant—but not the leverage to push back. That asymmetry turns a reasonable request for visibility into a standing tax on the people closest to the work. Solving this requires leaders who recognize that the cost of a report includes the engineering time it displaces.
The Principle: Reports Follow the Work
The reporting layer must be a read-only projection of the system where the work actually happens.
If a report depends on data that isn’t in that system, the answer isn’t to create a parallel process. It’s to fix the system so the data exists where the work is already being done.
Everything else is a workaround—and workarounds accumulate.
From that principle, a few practical shifts follow—each one learned the hard way.
Treat metadata like a contract, not a suggestion
If a field is required for visibility, it should be enforced in the workflow itself—not something people are expected to remember. I’ve watched teams maintain an ad hoc labeling convention for months before anyone realized a third of the values were misspelled variants of each other. The dashboard looked authoritative. The data underneath was noise. If it matters enough to report on, it matters enough to validate at the point of entry.
Stop copying data into documents
If a report requires manual transcription, it’s already out of date. Native dashboards and filters within your workflow tool can surface most of what teams manually replicate in static pages—in real time, from a single source. The barrier is usually familiarity, not capability. I’ve replaced multi-hour weekly deck-building rituals with a saved Jira filter and a shared dashboard that took an afternoon to configure. The data was better, and the team got Monday back.
Generate recurring reports instead of rebuilding them
If something gets assembled the same way every cycle, it should be produced directly from the underlying data. If that’s not possible, either the data structure or the report format needs to change—not the overhead of producing it. The question to ask isn’t "how do we make this report easier to build?" It’s "why are we building it at all instead of reading it?"
Make the system queryable by the people who need answers
Most shadow reporting exists because extracting the right view from the system feels harder than recreating it manually. That’s a solvable problem—but it’s a shared one. Engineering owns making the data clean and structured. Program management and ops own defining what they need to see. A few focused working sessions where both sides sit together and build the views will eliminate more duplication than any process document.
Start with the Work
This isn’t about one function getting it wrong. Everyone involved is trying to create visibility. The question is whether that visibility is generated from the system where work is planned and completed, or maintained alongside it—and whether the people asking for it understand what it costs to produce.
Start with the work. Make it observable. Let everything else follow.








