Back to Posts

The Dependency Tax You Can't Architect Away

Posted on July 12, 2026

This week, a pipeline I was working on got stuck because we couldn’t access an upstream team’s Confluence page. A Jira ticket was opened, but the response was basically “check back next week.”

I’ve spent a good chunk of my career building large-scale platforms, setting up things like data contracts, schema registries, and data catalogs. I’ve even mapped out data lineage. But the team owning that Confluence page is on a completely different roadmap, in a different department, with different priorities. You can build a technically clean architecture, but the actual dependencies can become a tangled mess. And no matter how senior you are, you can’t always escape these kinds of waits.

The Tax Is Structural

This “tax” is really baked into how organizations are structured. Think about Conway’s Law: the way your data systems are set up often just mirrors the communication patterns within your company. A vendor might release data on their own timeline, or you might rely on a team three departments away that you’ve never even spoken to. Maybe it’s a legacy system managed by a team that’s been reorganized twice. Things like contracts, catalogs, and CI checks only really work when everyone involved is actively participating. You can’t just draw up a contract to bypass organizational boundaries.

What Seniority Changes

What changes as you gain seniority is how you handle these roadblocks. Junior folks might get stuck, escalate, and just wait. Seniors, on the other hand, learn to build workarounds.

This means creating defensive transformations in your code - like parsing enums loosely, providing default values for nulls, or logging any unexpected data. You might also keep assumption logs detailing what you guessed about the data, why, and when that assumption expires. Feature flags can be used for incoming data, preventing new fields from breaking your production environment. And you’ll set up observable “unknowns” - metrics that track things like unexpected enum values or high null rates on required fields, so you get alerted before anyone else notices a problem. A risk register becomes crucial, detailing dependencies like:

“Depends on Team X’s Confluence page. No access. Risk: HIGH. Mitigation: retry + manual override.”

The Communication That Works

When it comes to communication, instead of just asking for access, it’s more effective to say, “Here’s what I need, here’s why it matters for my work, and here’s what I’ll do if I can’t get it.” Making these dependencies visible to leadership as a genuine risk, rather than just a complaint, is key. Building relationships with upstream teams before you hit a roadblock pays off. A quick 15-minute chat with an upstream tech lead can save you a lot of headaches later.

The Work

This dependency tax isn’t going away. No amount of architectural planning can fix underlying organizational structures. The goal isn’t to eliminate it, but to figure out how to deliver reliably in spite of it. Next week, I’ll probably get that Confluence access, the pipeline will unblock, and then this whole dance will happen again. That’s just part of the job.

Amit Channagiri

© 2026 Amit Channagiri

LinkedIn X GitHub Email