Sankar

Software & Data Engineer

Sankar Kalyanakumar

I build systems where bad data can't hide.

6 years designing pipelines that validate before they propagate, fail loud instead of silent, and let humans approve before anything irreversible runs.

PythonSQLAWSRedshiftGlueDynamoDBSpring BootTerraformAzure SynapseTableau

// how I think about engineering

Validate at the boundary

Bad data shouldn't travel far. Catch it at ingestion, log exactly what failed and why, and stop the pipeline before the corruption spreads downstream.

Pause before irreversible

Automation is most dangerous right before it does something permanent. Build the gate first — approval, confirmation, timeout — then build the action.

Fail loud, not silent

A pipeline that swallows errors and marks rows 'processed' is worse than one that crashes. If something is wrong, scream and stop. Silent failures cost weeks.

$ ls ~/projects

Open source

github.com/Sankartk
ops-copilot-bedrock

Ops Copilot

FAISS · sentence-transformers · Ollama · Bedrock · Step Functions · SNS · ECS

RAG over Markdown runbooks. Ask it what the alarm means and it quotes the exact runbook section — with the filename, so you can verify in 30 seconds, not 10 minutes.

For incidents needing action: a Step Functions pipeline proposes an ECS rollback, then stops. Operator gets an email with Approve/Reject. Nothing runs until someone clicks.

// RAG path

RunbooksFAISS indexQuestionembed + searchTop-K chunksranked contextLLMgrounded answerAnswer+ source file

// Approval-gated remediation

CW AlarmJSON inputTriage λclassify + context⏸ SNS gatePAUSEAPI callbackoperator clicksECS rollbackAPPROVE only
ledger-reconciler

Ledger Reconciler

Python · SQLite · pandas · Streamlit · pytest

Multi-pass engine that compares internal ledger exports against bank statement feeds. Four match strategies — exact, amount+date, reference+amount, fuzzy — tackle SWIFT truncation, FX rounding, and posting-day drift in that order.

Every unmatched transaction is root-cause classified before a human sees it. Break aging, daily match-rate trends, and open break drill-down in a live Streamlit dashboard.

// 4-pass matching pipeline

Feed IngestCSV / JSONPass 1ExactPass 2Amt + DatePass 3Ref + AmtPass 4Fuzzy Amt

// live monitoring dashboard

Match Rate

94.7%

Matched

341

Breaks

37

daily match rate — 30 days

open breaks by category

missing_ext
13
timing
9
duplicate
8
amt_mismatch
5