KognitaKognita.

Blog

Your Team Depends on Their Service. Nobody Can Explain How It Works.

8 min read

Team A calls Team B's recommendation service. They've been calling it for two years. They know the endpoint, the expected response format, and that you shouldn't call it more than about ten times per second — though nobody is sure if that limit still applies since Team B refactored the rate limiter. When the service returns unexpected results or behaves differently than expected, Team A files a ticket to Team B. Team B is two sprints behind. The ticket waits a week.

This is the cross-team dependency knowledge gap: a team that relies on a service they cannot interrogate, built by another team that doesn't have bandwidth to answer every question the first team has. The service is not a black box in principle — the code exists and is technically accessible. It is a black box in practice because reading it requires context Team A doesn't have, and asking Team B requires time Team B doesn't have.

What cross-team opacity costs

Teams that depend on opaque services make worse architectural decisions. They design around limitations they think exist but haven't verified. They avoid calling a service at certain frequencies based on informal guidance that may not reflect the current implementation. They handle errors defensively for scenarios they don't understand, adding complexity to their own codebase to compensate for uncertainty about the dependency.

The cross-team ticket queue is a symptom of this opacity. Every ticket from Team A to Team B that asks "how does X work?" or "is Y expected behavior?" is a question that Team A couldn't answer independently — not because the information is secret, but because they had no way to read Team B's service in a way that made sense for their questions.

Team A's operational knowledge of a service they depend on daily
Team A's knowledge of the recommendation service they depend on:
  -> It exists
  -> The endpoint is /api/v2/recommendations
  -> It returns a ranked list of items
  -> It sometimes returns 429s (rate limited?)
  -> It slows down around month-end (why?)
  -> Changing certain user attributes affects results (how?)
  -> "Don't call it more than ~10 times per second" (is this still true?)

  Team A's knowledge of why it behaves this way: none.
  Team B (who owns it) is two sprints behind and not available.

  When something goes wrong: file a ticket, wait a week.

The API contract is not the service understanding

Knowing an API's contract — the endpoint, the parameters, the response format — is not the same as understanding a service. The contract describes the interface. The service understanding includes the behavior behind the interface: how results are ranked, what signals affect ranking, what the rate limiting logic actually checks, why month-end creates different load patterns, what the retry behavior is on failure.

This level of service understanding is in the code, not in the API docs. API docs are usually written at a level of abstraction that supports integration — they're not designed to answer operational questions about service behavior. For those questions, you need to read the service code.

Making cross-team services readable

The fix for cross-team opacity is codebase access — not to write to the other team's service, but to read it. An engineer on Team A who can ask "how does the recommendation service rank results, and what causes the month-end slowdown?" and get answers from Team B's codebase can diagnose integration issues independently, make better architectural decisions, and stop filing tickets for questions that have codebase answers.

Kognita makes the full codebase queryable across team boundaries. Team A queries Team B's service in plain language and gets behavior answers from the live index. Team B's ticket queue for "how does X work" questions drops. Team A's integration quality improves because their engineers understand what they're integrating with.

What cross-team service opacity costs — and what reading the code resolves
What cross-team service opacity costs:
  -> Feature blocked on understanding how the dependency handles edge case
  -> Performance debugging requires other team's involvement
  -> Integration tests break for unclear reasons
  -> On-call escalates across team boundaries unnecessarily
  -> New engineers learn to avoid touching cross-team integrations
  -> Architecture decisions made without understanding dependency capabilities

  All of these are solved by reading the dependency's code.
  None of these require the other team's time.

Final take

Cross-team service dependencies are often described as organizational problems — teams not communicating enough, APIs not well-documented, service ownership unclear. They're actually information access problems. The code that answers the question exists. The team that needs the answer can't read it. Codebase access across team boundaries solves this where documentation and communication overhead doesn't.

Team B's service is not a black box. It's a codebase that Team A can't query. When they can, the ticket queue drops and the integration quality improves. The teams don't need to communicate more — they need to be able to read each other's code.