A pipeline that finishes without errors has not proved it loaded everything. That is the central argument of an architecture account by Manohar Halappa, who reports ingesting data from more than 120 school districts and processing more than 25 million records in a typical sync cycle. Both figures are the author’s own, not independently audited benchmarks. The article’s header reads “Posted on Sep 20” with no year.
His framing is about confidence, not raw speed: Did we receive everything the source intended to send? Could we safely retry? How do we detect partial loads? Can we explain exactly what happened to a district’s data days or weeks later? This piece walks through the design controls he describes and why each one exists.
As an Amazon Associate I earn from qualifying purchases.
What was built, and what is actually known
The author describes data flowing from district and student information system sources into a central platform. The domains named are students, enrollments, attendance, courses, sections, staff, and the relationships among them. The flow is: district sources, then scheduled or batch ingestion, schema and integrity validation, idempotent transform and load, source-to-target reconciliation, and finally observability and audit.
Do these 3 things before closing this tab:
1Clear out junk files and repair common Windows errors2Fix the driver behind crashes, sound loss and screen glitches3Repair Windows errors before they cause bigger problemsThe emphasis is on the controls between stages, not on products. The article is tagged with AWS and serverless, but its body names no cloud service, database, queue, transformation framework or monitoring tool. It also gives no batch size, throughput, latency, storage design, quality thresholds, privacy or security controls, recovery-time objective or cost. Treat this as a design philosophy, not a reference deployment. The tables of mismatched counts and the example district with rejected and failed records are illustrations, not production results.
#1 Best Overall
Design principles, one by one
1. Make retries safe with idempotency
Assume any operation can run twice: a timeout, a duplicate schedule, a restarted worker. The author’s answer is stable record identity plus idempotency keys, so a retry converges on the same final state instead of writing duplicates. Without this, every recovery action becomes a risk of corrupting data.
2. Validate early
Checks run before records move deeper into the pipeline: schema, required fields, types, referential integrity (for example, an enrollment pointing to a real student and section), source-specific business rules, and duplicates. Catching a bad record at the door is cheaper than untangling it after load.
3. Process in batches that are visible
A large sync is split into units that can be tracked, retried and run in parallel on their own. When one unit fails, you redo that unit rather than the whole cycle. Progress and retries are represented as explicit states, because a distributed sync is rarely a single success-or-failure event.
Outdated Drivers Are Slowing You Down
One free scan finds every outdated or missing driver and matches the right update for your exact hardware.Free scan · exact hardware matchPC Slower Than It Used to Be?
A free scan shows the junk files, broken settings and background clutter dragging Windows down - then fixes them in one click.Free scan · Windows 10 & 11Rank #2
4. Send failures to a dead-letter path
Records that fail are preserved somewhere visible for investigation and later recovery, while valid records continue. One malformed row should not block a district’s whole sync, and it should not vanish silently either.
5. Reconcile source against target
This is the heart of the argument. Infrastructure success (the job exited cleanly) is different from data completeness (the target holds what the source meant to send). After loading, compare source and target measurements, such as counts per entity and district, and surface mismatches for alerting and investigation instead of accepting a “completed” status.
6. Observe the data’s journey and keep an audit trail
For each sync, capture counts at every stage: received, validated, processed, rejected, failed, retried and loaded. Record the reconciliation result and enough context to answer, weeks later, what happened to a given district’s data.
Design axes for evaluating your own pipeline
The article does not compare products or competing architectures. The axes below are inferred from its argument, not a vendor evaluation, and they work as a checklist for any multi-tenant ETL system.
| Axis | Question to ask | Control described |
|---|---|---|
| Retry safety | Does a rerun give the same end state? | Stable identifiers, idempotency keys |
| Failure isolation | Can one bad record or batch be retried alone? | Batching, dead-letter path |
| Validation coverage | What is rejected before it reaches the target? | Schema, integrity, business-rule and duplicate checks |
| Completeness proof | How do you know nothing was dropped? | Source-to-target reconciliation |
| Data-level visibility | Can you see counts at each stage? | Received/validated/processed/rejected/failed/retried/loaded counts |
| Auditability | Can you reconstruct a past sync? | Per-sync reconciliation status and audit context |
| Partial-failure recovery | Can you resume mid-sync? | Explicit progress and retry states |
Why this matters more than throughput
At 120+ districts, each with its own source quirks, some failure on any given cycle is normal. The useful question is whether the system tells you precisely what failed and lets you fix it without side effects. Speed that cannot be verified just moves errors downstream faster, where a district may find them before you do.
The author’s closing line states the thesis: “Modern ETL isn’t just about moving data. It’s about being able to prove that the data moved correctly.”
What the account leaves out
- The year of publication and the production technology stack.
- Any benchmark, batch size or latency figure.
- Independent corroboration of the 25M+ and 120+ figures.
- Details on privacy and security handling, notable given that student records are sensitive.
Source: Manohar Halappa’s first-person article on the topic; no URL was supplied for linking here.
The Bottom Line
Borrow the pattern, not the numbers: idempotent loads, early validation, isolated batches, a dead-letter path, source-to-target reconciliation and per-stage counts. Together they let you prove a sync was complete, not just that it finished.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

