Why this matters
- Staff+ architects own org design as much as box diagrams — bad team topology produces bad distributed systems.
- Platform teams, stream-aligned teams, and enabling teams (Team Topologies) determine delivery speed and operational quality.
- ShardPay restructured from "backend team" to stream-aligned ledger/fraud/platform teams in 2023 — microservice boundaries followed within two quarters.
- Interviewers probe team topology because systems that ignore Conway accumulate integration pain no amount of tooling fixes.
Conway's law in practice
Melvin Conway observed (1968) that organizations produce designs that copy their communication structures. If ledger and fraud teams talk daily through a shared Slack channel, their services will merge logic informally. If they interact only via quarterly API reviews, boundaries stay strict — but integrations become brittle without investment.
ShardPay's pre-2023 structure had one "Payments Backend" team owning gateway, ledger, fraud, and notifications as a modular monolith. Deploys were weekly and coordinated. Conway predicted: the architecture was a monolith because the team was one unit.
Post-restructure, four stream-aligned teams emerged. Within 6 months, the monolith split along the same seams the teams already owned informally — not because leadership drew microservice boxes, but because ownership drove extraction.
Key points
- Conway's law — architecture reflects communication paths. ShardPay's ledger microservice boundary appeared exactly where the ledger team stopped talking daily to the fraud team.
- Inverse Conway maneuver — deliberately structure teams to produce desired architecture. ShardPay created a platform team before extracting shared K8s/observability — preventing each stream team from building incompatible infra.
- Stream-aligned team — owns a business capability end-to-end (ledger, fraud, merchant API). ShardPay's ledger team owns shards, orchestrator, reconciliation, and ledger on-call — full vertical slice.
- Platform team — provides internal products (CI/CD, K8s abstractions, observability) consumed by stream teams. ShardPay platform team SLO: stream team can deploy in under 15 minutes without platform ticket.
Team Topologies at ShardPay
Team Topologies (Skelton & Pais) defines four team types. ShardPay maps cleanly — with one enabling team for security compliance coaching.
Stream-aligned teams
| Team | Owns | ShardPay scope |
|---|---|---|
| Ledger | Shards, orchestrator, sagas | Transfer correctness |
| Fraud | Scoring models, rules engine | Risk decisions |
| Merchant | API, profiles, webhooks | Merchant experience |
| Settlement | Outbox, network files, recon | Money movement to banks |
Ledger
OwnsShards, orchestrator, sagasShardPay scopeTransfer correctnessFraud
OwnsScoring models, rules engineShardPay scopeRisk decisionsMerchant
OwnsAPI, profiles, webhooksShardPay scopeMerchant experienceSettlement
OwnsOutbox, network files, reconShardPay scopeMoney movement to banks
ShardPay stream-aligned teams
Each team has on-call rotation for their services, own error budget, and deploy independently via platform pipelines.
Platform team
Provides Golden Path templates: Spring Boot starter with OTel, Resilience4j, idempotency middleware pre-configured. Stream teams adopt voluntarily — forced adoption failed in 2022; voluntary Golden Path succeeded at 95% uptake by 2025.
Enabling team
Security and compliance coaches — not permanent owners. They run 6-week engagements helping ledger team implement PCI audit requirements, then exit. Permanent ownership stays with stream team.
// ShardPay Golden Path starter — platform team ships, stream teams consume
@AutoConfiguration
public class ShardPayPlatformDefaults {
@Bean
public OtlpGrpcSpanExporter otelExporter(PlatformConfig config) {
return OtlpGrpcSpanExporter.builder()
.setEndpoint(config.otelEndpoint())
.build();
}
@Bean
public IdempotencyFilter idempotencyFilter(IdempotencyStore store) {
return new IdempotencyFilter(store, Duration.ofHours(24));
}
}
Aligning boundaries with communication
Conway is a constraint, not an excuse. Use it to decide where services split and where teams merge.
Walkthrough: should fraud scoring merge into ledger?
Proposal: embed fraud checks inside ledger service to reduce latency.
Conway analysis: fraud team and ledger team have different release cadences (fraud deploys daily for rule updates; ledger deploys weekly with extra review). Different skills (ML engineers vs database engineers). Communication is API-contract-level, not pair-programming.
Decision: keep separate services. Accept 8ms network hop. Invest in contract tests and shared trace context instead of merging teams or services.
Outcome: fraud team shipped new ML model without ledger deploy — 94ms → 61ms fraud latency improvement independent of ledger release cycle.
Key points
- Cognitive load limit — teams should own a domain they can hold in working memory. ShardPay caps stream team scope at ~8 services; beyond that, sub-teams form (ledger split into orchestrator team and shard team in 2025).
- API as team boundary — strict APIs where communication is infrequent; shared libraries where teams pair daily. ShardPay forbids shared database tables across teams — only API/event contracts.
- Platform thinnest viable — platform team builds abstractions stream teams request, not speculative frameworks. ShardPay platform backlog is 80% stream-team-requested items.
- Re-org triggers architecture change — merging two teams eventually merges their services. ShardPay documents this explicitly in ADRs when reorgs happen so architecture does not drift silently.
Quick recall
Everything you need if you only revisit this box.
- Architecture mirrors communication — align teams to desired boundaries (inverse Conway).
- Stream-aligned teams own vertical slices; platform teams provide Golden Path infra.
- Split services where release cadence, skills, and communication patterns differ.
Test yourself
Answer these before moving on — recall is what makes it stick.