GODAMRI
Systems & Architecture•Mar 2025•8 min read

The Architecture of Simplicity: Why Less Code Scales Better

Most engineering problems aren’t solved by introducing novel abstractions, but by ruthlessly removing unnecessary layers. An operational post-mortem on simplifying our event streaming pipeline while cutting end-to-end latency by 54%.

Verified Benchmark
p99 Latency: -54%Removed 4 microservices · Stable

Most engineering problems aren’t solved by introducing novel abstractions, but by ruthlessly removing unnecessary layers. In late 2024, our real-time event pipeline spanned five microservices, three message queues, and a distributed caching layer. On paper, it was textbook microservices architecture. In production, p99 latency was creeping towards 850ms, and debugging network retries felt like archaeology.

Here is the operational post-mortem on how we consolidated the pipeline into a lean stream worker, reduced complexity, and eliminated failure domains while cutting end-to-end latency by 54%.


The Symptom: Latency by Indirection

When a user triggered a critical event, the transaction traversed:

  1. Ingress API Gateway: Authentication and request validation.
  2. Event Dispatcher Service: Wrote payload to an Apache Kafka ingestion topic.
  3. Enrichment Service: Consumed Kafka, queried user profiles, wrote to an enriched topic.
  4. Validation & State Engine: Consumed enriched topic, checked business rules against PostgreSQL.
  5. Notification & Delivery Worker: Published the result to downstream systems.

Every hop introduced serialization overhead, network I/O, queuing jitter, and a potential failure point requiring timeout recovery.

plain
source
[Ingress Gateway] 
       │ (HTTP)
       ▼
[Event Dispatcher] ──(Kafka)──> [Enrichment Worker] ──(Kafka)──> [Validation Worker]
                                                                        │
                                                                 (PostgreSQL)

During traffic spikes, the consumer group rebalances in Kafka triggered cascading backpressure. We spent more time tuning thread pools and consumer lag alarms than optimizing business logic.


The Pivot: Streamlining Topology

We stepped back and asked: Does an event genuinely need to hop across 3 network boundaries before its invariants are validated?

The answer was an unequivocal no.

We replaced the multi-hop queue hops with a unified streaming pipeline powered by a single Go worker pool reading from a durable partitioned log.

plain
source
[Client / Gateway]
       │ (gRPC)
       ▼
[Unified Stream Pipeline]
 ├─ Token Bucket Rate Limiter
 ├─ Local Cache / Read Replica In-Memory Lookups
 └─ Single-Phase Transaction Commit
       │
       ▼
 [Durable Store & Downstream Broadcast]

1. In-Memory Working Set Lookups

Instead of making external HTTP calls to the Enrichment Service, the new pipeline maintained an in-process LRU cache with an invalidation channel. Over 94% of metadata lookups were served directly from L1 memory in under 5 microseconds.

2. Eliminating Intermediate Queues

Rather than writing intermediate states back to Kafka, workers processed events through synchronous function pipelines with deterministic cancellation tokens:

go
source
func (p *Pipeline) Process(ctx context.Context, evt Event) error {
    ctx, cancel := context.WithTimeout(ctx, 50*time.Millisecond)
    defer cancel()

    if err := p.limiter.Allow(evt.TenantID); err != nil {
        return ErrRateExceeded
    }

    enriched, err := p.cache.Enrich(ctx, evt)
    if err != nil {
        return fmt.Errorf("enrichment failed: %w", err)
    }

    return p.storage.Commit(ctx, enriched)
}

The Empirical Results

Simplifying the architecture delivered immediate, measurable wins:

Metric Multi-Service Pipeline Unified Pipeline Delta
p50 Latency 42ms 11ms -73.8%
p99 Latency 840ms 386ms -54.0%
Service Containers 16 replicas across 4 services 4 replicas of 1 service -75.0%
Infra Compute Cost $3,400 / mo $890 / mo -73.8%

Lessons in System Restraint

  1. Abstractions have interest rates: Every interface, boundary, and queue comes with operational cost. If two services always scale in tandem and deploy together, they are a distributed monolith in disguise.
  2. Network hops are the enemy of deterministic p99: The fastest network request is the one that never happens.
  3. Simplicity is an active discipline: Complexity enters codebases gradually under the guise of "future proofing". Real engineering maturity is knowing when to say: we don't need this layer.