Debezium + Kafka Connect
At Lifepal I handled ordering, deletes, replay and schema change from PostgreSQL sources. The reference keeps capture separate from the publish contract so transport can change.
Lifepal · direct overlapIndependent engineering portfolio / Presented for 73 Strings
01 — FIND THE SIGNAL
One reliable thread from source to valuation.
Fewer duplicate client pipelines. Earlier detection of broken data. A traceable history behind every valuation input.
Follow the thread ↓Built at Lifepal · presented for 73 Strings
I’m Firman Insan Muhammad. You can call me VIM. At Lifepal, I led a financial-services data platform with PostgreSQL change capture, Debezium and Kafka Connect, Azure Databricks, Delta Lake, medallion models and production quality gates. These patterns help 73 Strings turn changing source data into traceable, timely inputs for monitoring and valuation.
Lifepal outcomes come from my CV. This independent 73 Strings case study uses synthetic events to show the mechanics.
Reusable ingestion, source-position replay and publication checks help 73 Strings reduce client-specific pipeline work, surface broken data before it reaches monitoring, and preserve the history behind a valuation. The reference below tests the CDC edge cases.
At Lifepal I handled ordering, deletes, replay and schema change from PostgreSQL sources. The reference keeps capture separate from the publish contract so transport can change.
Lifepal · direct overlapI built Bronze, Silver and Gold layers with PySpark, dbt and dimensional models, and tuned a nightly batch from six hours to 90 minutes.
Lifepal · direct overlapAt Deloitte I delivered Snowflake and dbt warehouses for banking and insurance clients. A tenant-scoped delivery contract and reconciliation record give each destination the same release boundary.
Deloitte · direct overlapTests, review, Terraform-defined deployments, runbooks and incidents were part of my platform work. This repository has a real GitHub Actions test workflow.
Lifepal · direct overlap73 Extract→73 Monitor→73 Value
One traceable data path supports extraction, monitoring and valuation. Explore 73 Intelligence ↗Reviewed metadata maps source fields and keys into a shared loader. A new client feed gets a reviewed configuration instead of another pipeline copy.
Freshness, row-level checks and reconciliation expose missing or invalid updates, with a source position and reason to investigate.
Versioned history links a published valuation input to its source event, accepted change and tenant, so analysts can review how it changed.
Architecture overview
This source-to-client path shows how the Lifepal platform patterns support 73 Strings: preserve change order, reuse feed definitions, hold bad rows, and publish client-scoped data with a traceable history.
A moving pulse follows the publish path
Private-market data arrives with different shapes and clocks.
Decouple capture from the dataset contract.
Azure Databricks joins both cadences on Delta.
A bad row waits; good rows can move.
One contract, approved destinations, tenant scope.
The stack comes from the 73 Strings job description and my CV. The Python reference runs with synthetic events; the Delta SQL and destination interfaces show the corresponding implementation boundaries.
These checks make replay safe, account for each received row and protect client-specific outputs. The reported outcome below belongs to Lifepal; the equations describe this synthetic reference.
Reported reporting delay after the platform work. For 73 Strings, stage-by-stage source-to-client timestamps reveal where freshness is lost.
current(k) = arg maxe:key(e)=k LSN(e)
Order per tenant and entity. Arrival time is not a safe substitute.
load(load(T, B), B) = load(T, B)
Reprocessing the same batch leaves visible state unchanged; the local test checks this.
LSNdelete > LSNupsert ⇒ visible(k) = ∅
A newer tombstone wins over an older update, even after an incident replay.
Nreceived = Napplied + Nreplayed + Nquarantined
A reconciliation failure should stop publication and create an actionable incident.
B = Bvalid ∪ Bquarantine
Good rows can progress while invalid rows retain a reason and source context.
publish(r) ⇔ schema(r) ∧ key(r) ∧ value(r) ∧ tenant(r)
Checks must pass before a record becomes visible to a client destination.
valid_to(vi) = valid_from(vi+1)
An SCD2 update closes the previous version at the next accepted source position.
deliver(t) = { r ∈ published : tenant(r) = t }
Every output path binds to an explicit client tenant before delivery.
F = now − max(event_timevisible)
Measure the age of what clients can query, not just the capture job.
Bt+1 = max(0, Bt + λt − μt)
If incoming changes outpace processing, freshness falls even when jobs succeed.
1 − $11K / $19K ≈ 42%
My CV reports Lifepal spend near $11K per month against a $19K forecast.
Synthetic CDC reference
The repository contains a pure-Python CDC engine and tests for out-of-order events, replay, deletes, row quarantine, tenant isolation and SCD2 intervals. The browser trace illustrates those tested paths; it does not connect to a client system.
Choose a source event
Loading tested scenario…
Arrival order changes; source order decides the visible valuation.
Loading source excerpt…Run python3 -m unittest discover -s examples -p 'test_*.py' -v. GitHub Actions runs the same suite on pushes and pull requests.
Five practical questions about how these patterns help 73 Strings keep data current, trustworthy and safe for each client.
VIM: A versioned envelope carries tenant, entity key, source position, operation, schema version and payload. That lets the capture transport change while replay tests and the publication contract stay stable. I ran Debezium CDC into Azure Databricks at Lifepal; the reference demonstrates the boundary with synthetic events.
VIM: Reviewed feed metadata holds field mapping, keys, load mode, schema and checks. A shared loader then handles each new feed consistently, reducing one-off pipeline copies. I used this pattern at Lifepal with Python and PySpark; the repo includes a feed manifest and adapter.
VIM: Per-row validation preserves a reason and source position for each exception. Reconciliation then checks that every input is applied, replayed or quarantined before client-visible publication. At Lifepal I worked with contracts and 500+ checks; the synthetic test shows an invalid valuation cannot block an unrelated valid row.
VIM: One curated, tenant-scoped product and a common destination contract give all three sinks the same source version, reconciliation total and freshness signal. I built Snowflake/dbt warehouses for financial clients and Databricks/Delta models at Lifepal. The repository shows the delivery boundary; each production sink still needs its platform adapter.
VIM: Source position, failed contract, quarantined rows, last published version and affected tenant identify the impact and recovery point. I have owned GitHub CI/CD, Terraform, runbooks and incident fixes. This repository runs behavior tests in GitHub Actions so the recovery rules remain inspectable.
Production outcomes and career experience come from my CV and cover letter. This independent role-focused reference runs on synthetic events. Learn more about 73 Strings’ valuation and monitoring platform ↗.
Continue the conversation
Happy to walk through how reusable ingestion, CDC recovery and client-scoped delivery support 73 Strings’ extraction, monitoring and valuation work. London based; right to work in the UK without sponsorship.