Mohan Kumar - Backend / Platform Engineer in New Delhi

I build post-trade data pipelines, observability and alerting at a high-frequency trading firm.

I am a backend and platform engineer in New Delhi. I studied computer engineering at NSIT (now NSUT), and I have spent the last five years on data pipelines and infrastructure, first at Orange and Samsung R&D and now at a trading firm.

  • 5+ years
  • New Delhi
  • Mathisys · trading infrastructure
  • Open to senior backend, platform and data-infrastructure roles
readoutpost-trade systemsMathisyssettled
  1. ingest1,600,000 rows/secokpost-trade rows, batched inserts via Telegraf
  2. insight latency< 1 soksource host to Grafana, end to end
  3. alert dispatch< 60 sokprocess crash to Zoom / email
  4. daily volume500+ GB/dayokpost-trade data through Airflow
  5. settled4 bounds from production, replayed once; not a live feed

Selected systems

01 / systems

Five pieces of work I would talk through first. Internal names are left out.

Post-trade observability pipeline

Telegraf agents batch post-trade records into ClickHouse and InfluxDB. Grafana shows them in under a second.

How the ClickHouse ingest pipeline works

Stack
Telegraf
ClickHouse
InfluxDB
PostgreSQL
Grafana
fig. 1data flow, left to rightsource to Grafana: < 1 s end to end
post-trade sourcesTelegraf agentsbatchingClickHousepost-trade rowsInfluxDBmetricsGrafanaquery + visualcollectbatched insertsmetricsqueryquery
Ingest rate
1.6M rows/sec
Rows written per second into ClickHouse across the ingest tier, as counted at the database. Sustained, not a peak. Node count on request.
Insight latency
< 1 s
End to end: from a record leaving the source host to it being queryable from Grafana. Grafana reads the stores directly and adds no ingest step.
Problem

Trading and operations teams needed to see post-trade activity while the session was still running, not in an end-of-day report.

Constraints
  • Write volume rises and falls with market activity. Ingest has to absorb the bursts without dropping rows.
  • Collection runs next to trading processes and must stay light on those hosts.
Built
  • Telegraf agents on the source hosts collect post-trade records and metrics and write them in batches.
  • High-volume post-trade rows go to ClickHouse (columnar), time-series metrics to InfluxDB. PostgreSQL is part of the stack as well.
  • Grafana reads from the stores. It is the query and visual layer only, never in the write path.

Strategy-crash alerting

Detects trading-process crashes and connector anomalies and notifies people within 60 seconds.

How a strategy crash reaches a person in 60 s

Stack
Linux
Zoom
Email
fig. 2data flow, left to right
strategy processeslatency-sensitivehostwatcherlow footprintalert dispatchZoomemailcrash / anomalyevent< 60 s< 60 s
Alert dispatch
< 60 s
From a crash or anomaly to a Zoom / email notification. This is time to notify, not time to resolve.
Problem

If a strategy crashes and nobody notices, we lose money. People are not always watching Grafana, and the alert had to reach them wherever they were.

Constraints
  • Runs on latency-sensitive hosts. It must not compete with trading processes for CPU or cache.
Built
  • A small watcher that notices strategy-process crashes and connector anomalies and posts them to Zoom and email.
  • It shares hosts with trading processes and is designed to minimise interference with them: a small CPU and cache footprint.

Post-trade data pipelines on Airflow

Airflow pipelines process 500+ GB of post-trade data a day, and teams define new pipelines in YAML instead of Python.

Airflow pipelines built from YAML

Stack
Apache Airflow
Python
YAML
Linux
fig. 3data flow, left to right
YAML specsDAG parserAirflow scheduleredge workerslatency-sensitivehostspost-trade outputsreconciliationreportsdefineDAGstasks500+ GB/day
Daily volume
500+ GB/day
Post-trade data read and written by the Airflow edge workers over a day. Host and file counts on request.
Pipeline authoring
YAML
DAGs are generated from YAML specs by an in-house parser.
Problem

Reconciliation, context generation and reporting depend on post-trade data spread across many hosts. Every new pipeline used to need an engineer to write Airflow code.

Constraints
  • Workers run on latency-sensitive hosts close to the data and must stay out of the way of trading.
  • Some pipeline authors are not engineers.
Built
  • Airflow pipelines with edge workers on latency-sensitive hosts, feeding reconciliation, context generation and reporting.
  • Wrote a YAML-to-DAG parser so non-engineers can add an Airflow pipeline without writing Python.

Exchange and regulator circulars tracker

Collects circulars from 16 exchange and regulator sites, summarises them with a local LLM and alerts the people they affect.

Tracking exchange circulars with a local LLM

Stack
FastAPI
PostgreSQL
Meilisearch
Ollama
Next.js
Playwright
scikit-learn
Docker Compose
fig. 4data flow, left to rightall models run locally, no external LLM API
source sites16 exchangesand regulatorsscrapersscheduledbrowser workerbot-protectedsitesextractiontext + tablesmemory-cappedlocal LLMsummary + severityclassifiertriagestore + searchPostgreSQLMeilisearchalertsemailchatHTTPheadlessPDF / HTMLPDF / HTMLtexttextsummarieslabelsallowlisted
Sources
16
Exchange and regulator sites scraped on a schedule. Site names on request.
Backend tests
100+ files
Test files in the backend pytest suite, counting the characterization tests I added before refactoring. Pass rate and coverage on request.
Problem

Exchanges and regulators publish rule changes as PDFs, each on its own site. Someone had to read every one of them and spot the deadlines by hand.

Constraints
  • Several of the sites block plain HTTP scrapers.
  • A summary must not invent content when a circular has no readable body.
  • Everything runs on our own hardware, with no external LLM API.
Built
  • Scrapers for 16 sources, plus a headless-browser worker for the sites that block bots. Text and tables come out of PDF and HTML attachments in a memory-capped child process, so one bad file cannot take the parser down.
  • Summaries and severity come from a local LLM. When a circular has no text, a rule-based summary is used instead and the model never sees it.
  • Deadline extraction, theme tracking, relevance scoring per team, and email and chat alerts behind allowlists.
  • A triage classifier. I wrote the labelling guidelines and checked agreement between labellers. Then I compared TF-IDF with logistic regression against a fine-tuned transformer, and the better model ran in shadow mode before anyone relied on it. Most of the gains came from better labels.

Command-allowlisted operator shell (prototype)

A prototype shell for trading hosts that runs only approved commands and keeps a tamper-evident audit log.

Inside the allowlisted shell prototype

Stack
Python
OpenSSH certificates
sudo
inotify
Docker Compose
fig. 5data flow, left to rightsandbox prototype, not in production
operatorcert CA + TOTPshort-lived certsuser disablerevocation listallowlisted shellsigned policytrading hostssandboxaudit loghash-chainedloginsessionapproved commandsevery action<= 5 s
User disable
<= 5 s
Requirement checked in the sandbox: from disabling a user to every session ended and new logins blocked on every sandbox host.
Acceptance tests
105
Sandbox acceptance tests. Each has passed at least once on the final build. One clean run of the whole suite is still to do.
Problem

Operators need a shell on trading hosts, but full sudo is too much. Every action has to be auditable, and access has to be revocable at once.

Constraints
  • Disabling a user must end their sessions on every host within 5 seconds.
  • An emergency kill must never wait on an approval, the CA or the logs.
Built
  • Login with short-lived SSH certificates from an internal CA, plus password and TOTP. A revocation list blocks a disabled user everywhere.
  • A signed command catalogue and policy. Risky commands need a second approver. A kill never does.
  • A hash-chained audit log with an offline verifier. A file guard puts back tampered policy and sshd files in under a second.
  • All of it runs in a Docker sandbox with mock credentials, alongside security and compliance reviews, runbooks and a user handbook. It is a prototype and has not gone to production.

Experience

02 / experience
  1. - Present

    New Delhi, India

    Mathisys

    Software Engineer · high-frequency trading firm

    I do not work on order execution. I build the tooling around it: post-trade data, monitoring, alerts and internal tools.

    • Built the post-trade observability pipeline, the strategy-crash alerting and the Airflow pipelines with their YAML-to-DAG parser. All three are written up under Selected systems above.
    • Built broker dashboards for portfolios, open and cancelled orders and PnL, with audit controls on actions like cancelling orders or setting instrument limits.
    • Wrote an internal access-control service for permissions across servers, strategies and dashboards, and put auth wrappers in front of a few open-source tools we use.
    • Built an internal circulars tracker for exchange and regulator notices, and prototyped a command-allowlisted operator shell in a sandbox. Both are written up above too.
    • Automated Amazon DCV remote desktops: sessions start on request and shut down after 30 min idle, which stopped idle desktops running up the bill.

    Stack: PythonAirflowClickHouseInfluxDBPostgreSQLTelegrafGrafanaAmazon DCVAWSLinux

  2. -

    1 year 8 months

    Noida, India

    Samsung R&D Institute Delhi

    Software Engineer · MagicInfo digital-signage platform

    Backend work on MagicInfo, Samsung's digital-signage platform. While I was there it ran tens of thousands of devices.

    • Owned several MagicInfo modules: Web-Author, the Layout Editor and the Auth server, for both on-premise and cloud installs.
    • Reworked queries, caching and indexes (Java, Spring Boot, MyBatis, MySQL on AWS) and cut API response time by about 60%.
    • Loading device info and schedules for tens of thousands of devices used to take 10+ minutes. I refactored the legacy loading and query code and got it under 3 minutes.
    • Built an internal support chatbot POC that summarised recurring issues and suggested fixes.
    • Looked after the team's Jenkins CI/CD pipelines.

    Stack: JavaSpring BootMyBatisMySQLAWS EC2AWS S3AWS SQSAWS Secrets ManagerJenkins

  3. -

    11 months

    Gurugram, India

    Orange Business Services

    Software Engineer · telecom and payments

    Payment integrations and reporting pipelines.

    • Built Orange Money payment integrations for merchant partners taking online payments.
    • Migrated and extended a handful of system add-ons and plugins.
    • Wrote reporting and data-generation pipelines in Python, Java and Spring on MariaDB.

    Stack: JavaSpringPythonMariaDB

Open source & demos

03 / open source

Side projects. Start with CodeArena.

flagship

CodeArena

A browser-based coding-practice platform: 20 problems across 11 categories, with JavaScript, Python and C++ runners and no backend of its own.

Each problem is a folder with its own test cases, picked up automatically at build time. JavaScript runs off the UI thread in a Web Worker, so an infinite loop gets killed instead of freezing the tab.

  • 20 problems across 11 categories, auto-discovered at build time with import.meta.glob. Only 5 of the 20 have Python and C++ starter code so far.
  • JavaScript runs in a Web Worker per test case; a main-thread timer terminates it to report Time Limit Exceeded.
  • Python runs in the browser via Pyodide, on the main thread and without the time-limit guard. Only the JavaScript runner enforces TLE today.
  • C++ is compiled and run through the Judge0 API.
  • Monaco editor, pluggable answer comparators, editorials, and progress saved in localStorage.

Stack: React 19 · Vite · Monaco Editor · Web Workers · Pyodide · Judge0 API

URL shortener backend

A Spring Boot REST service that creates, resolves, updates and deletes short URLs and tracks access counts.

The roadmap.sh URL-shortening exercise: controller, service and repository layers with DTOs, Spring Data JPA over SQLite. It is here because it is my only public Java.

Stack: Java · Spring Boot · Spring Data JPA · SQLite · Maven

npm packages

03.1 / npm
9 packages in 7 rows, published as mohan.kmr on npm (opens in a new tab)
namewhat it doesnpmsource
express-api-mockrExpress middleware for mock routes with request-aware responses and per-route latency.v1.0.1 of express-api-mockr on npm (opens in a new tab)Source for express-api-mockr: api-mock (opens in a new tab)
express-api-mockerStandalone Express server to mock REST endpoints over HTTP or HTTPS, with CORS and custom headers.v1.0.4 of express-api-mocker on npm (opens in a new tab)Source for express-api-mocker: express-api-mocker (opens in a new tab)
cachelite familyTTL in-memory cache for Node.js that can report remaining time-to-live. One cache, three publishes: memcachelite, the scoped @mohan.kmr/cache, and the earlier memstashjs.memcachelite v1.0.2 of memcachelite on npm (opens in a new tab)@mohan.kmr/cache v1.0.0 of @mohan.kmr/cache on npm (opens in a new tab)memstashjs v1.0.1 of memstashjs on npm (opens in a new tab)Source for cachelite family: cachelite (opens in a new tab)
morph-dataConverts CSV and JSON, and renders JSON as YAML or Markdown tables.v1.0.1 of morph-data on npm (opens in a new tab)Source for morph-data: morph-data (opens in a new tab)
vfs-treejsTree-structured virtual file system with CRUD, move and optional localStorage persistence.v1.0.1 of vfs-treejs on npm (opens in a new tab)Source for vfs-treejs: vfs-tree (opens in a new tab)
seo-metaGenerates meta, Open Graph and Twitter tags plus JSON-LD snippets.v1.0.1 of seo-meta on npm (opens in a new tab)Source for seo-meta: seo-meta (opens in a new tab)
react-scroll-motionsReact hooks for scroll reveal, count-up and parallax effects.v1.0.1 of react-scroll-motions on npm (opens in a new tab)Source for react-scroll-motions: scroll-motion (opens in a new tab)

Currently building

04 / building
  1. in progress

    Project Euler · 3 channels

    Problems 1-150 each solved separately in Python, Java and C++. An answer counts only when all three agree.

    • 450 standalone programs using only each language's standard library.
    • Per-language benchmarks: median run time for every problem.
    • Static dashboard to compare the three solutions and their timings.

    Stack: Python 3.12 · Java 21 · C++17

  2. in progress

    Engineering notes and labs

    16 modules of notes on data structures, system design, concurrency, databases and distributed systems, each with a lab.

    • Java 21 and Python 3.12 reference labs with tests.
    • Builds to a static site and a single offline file.

    Stack: Java 21 · Python 3.12 · Markdown

  3. in progress

    Claude Code cost tooling

    Prices Claude Code sessions from their transcripts, per model and per day.

    • Token-level pricing per model, including cache reads and cache writes.
    • Subagent usage attributed back to the parent session.
    • Messages de-duplicated by id before totalling.
    • Daily totals per model, read straight from the transcript files.

    Stack: Python 3.12

  4. in progress

    Local issue tracker

    A Jira-style tracker that runs locally from one Python file and one HTML page, with no dependencies.

    • REST API on the Python standard library over SQLite, with board, backlog, timeline, calendar and reports as plugin views.
    • A small JQL-like query language with a server-side parser and self-tests.

    Stack: Python 3.12 · SQLite · JavaScript

Toolbox

05 / toolbox

What I actually use, and where.

Languages

Java
Samsung MagicInfo backend; URL shortener
Python
Airflow pipelines and YAML-to-DAG parser; Orange reporting
JavaScript
CodeArena; published npm packages
SQL
ClickHouse analytics; MySQL query tuning at Samsung

Backend

Spring Boot / Spring Security
MagicInfo APIs and Auth server; URL shortener
Node.js / Express
express-api-mockr and express-api-mocker
REST APIs
MagicInfo APIs (response time down about 60%); URL shortener
OAuth2 / SAML
MagicInfo Auth server; auth wrappers for internal tools

Data

ClickHouse
Post-trade observability pipeline
InfluxDB
Metrics store behind the observability pipeline
PostgreSQL / MySQL
Mathisys services; MagicInfo with MyBatis

Infra

AWS (EC2, S3, SQS)
MagicInfo cloud; Amazon DCV session automation
Airflow
500+ GB/day post-trade pipelines
Grafana / Telegraf
Collection and dashboards for the observability pipeline
Jenkins, Linux, Git
CI/CD at Samsung; latency-sensitive hosts at Mathisys

also worked with: Docker

Recognition and education

06 / recognition
  • 2017 - 2021New Delhi, India

    B.E. Computer Engineering

    Netaji Subhas Institute of Technology, NSIT (now NSUT)

  • May 2023Google

    Google Foobar, Level 5

    Completed all five levels of Google's invitation-only coding challenge.

  • Sep 2022Samsung

    Samsung SWC Professional

    Professional level of Samsung's Software Competency certification in algorithms and data structures.

Contact

07 / contact

Hiring for a backend or platform role? Email me. The form goes to the same inbox.

Message

The role title is enough.