Skip to content
You've joined Adlytic's data team as a mid-level engineer. Bid logs arrive from 3 exchanges at ~50k events/sec. Finance reports double-counted spend and dashboards are 6 hours behind. Your lead, Priya, owns the sprint; Marcus from Finance is the key stakeholder.

Stage 1 of 7 · Requirements analysis

Find the real requirement

Task brief & requirements

Marcus (Finance): "Just make the dashboard real-time. Everything else is fine."

Decision4 options

What should you do first?

Lesson & team handoff3 notes
  • Stakeholders describe symptoms; engineers must find the underlying requirement.
  • Double-counted points to duplicate events — a correctness problem, not a latency one.
  • Senior engineers write requirements as measurable outcomes: e.g. " matches exchange within 0.1%" and "data freshness < 15 min".
Glossary context

Key terms in this lesson (3)

Tell us how familiar you are and we'll tailor the explanation. Open full glossary

Stakeholder

Software Engineering · Process

Anyone affected by or with authority over the work — finance, product, ops, customers.

Spend

Industry · Ad-tech · Jargon

The money an advertiser has paid (or owes) for ads that ran.

Invoice

Department · Finance · Jargon

A bill from a supplier stating what is owed; finance treats it as the source of truth.

Specification & architecture maps

Project documentation

Delivery contract

RequirementAcceptance target
FreshnessLess than 15 minutes
Spend accuracy99.9%
Replay safetyNo additional spend after replaying a batch
Deduplication key(exchange_id, bid_id)

Data contract

exchange_id, bid_id, ts and spend are required fields. Keep the latest timestamp for each natural key. Decide and document a deterministic tie-breaker for equal timestamps.

event = {
    "exchange_id": "exchange_a",
    "bid_id": "bid_042",
    "ts": "2026-01-01T10:00:00Z",
    "spend": 0.12,
}

Acceptance checklist

  • Replayed events do not double-count spend.
  • A five-minute micro-batch completes within the freshness budget.
  • Invalid events are isolated and can be inspected.
  • Row counts, rejected events and freshness are observable.

Architecture decision record

Decision: at-least-once delivery with idempotent warehouse writes.

Trade-off: micro-batching reduces operational complexity for a nine-person team. Revisit streaming when verified consumer needs cannot tolerate the agreed freshness window.

Failure recovery: retry the same batch with the same natural keys; only commit the consumed offsets after a successful load.