About
Most of what I know came from systems that could not be rolled back casually.
For three years I built account-servicing and payment APIs on a global bank’s core banking platform. In that environment you do not ship first and find out later: the thing on the other end of the endpoint is somebody’s account.
The same problem keeps turning up in different clothes: what happens when the thing you depend on fails halfway through. A retry that runs twice. A message redelivered after the handler committed. An upload that reports success with half the file. A text chunk that embeds as garbage. I look for those on purpose now.
History
Jul 2023 – Sep 2026
Senior Analyst, Backend Engineering
A global bank · Chennai
Account-servicing and payment APIs on a core banking platform, where behaviour has to be provably unchanged before anything ships. Joined as a Development Engineer and was promoted to Senior Analyst in February 2025.
- Moved 17+ endpoints off SOAP onto a standard REST stack, test-first, about 35% of the programme
- Raised coverage on the migrated surface to 80%; legacy maintenance overhead down about 25%
2026
Open source
Upstream fixes, two tools of my own
Fixes sent to libraries I use: Prometheus, Keycloak, LangChain4j, rclone, docling, unstructured and others, each with a regression test that fails before the patch. Primary contributor to raged, a code-retrieval engine for agents. Author of splitlint and Plumb.
Evidence →2026
Credit-card onboarding pipeline
Personal capstone
A five-stage event-driven onboarding service in Spring Boot, RabbitMQ and PostgreSQL, built to make every failure end in a defined, audited state. Seven ADRs, 138 tests, alerting and dashboards.
Evidence →2019 – 2023
B.Tech, Mechanical Engineering
National Institute of Technology Karnataka · Surathkal
Moved into backend work because the problems were more interesting. Led technical workshops for 20+ students with the IET NITK chapter.
How I work
Four habits, each with somewhere to check it.
01
The test fails first
A fix arrives with a regression test that fails on main and passes with the patch. It is the only kind of “I fixed it” a reviewer can check in a minute.
Upstream ledger →02
Every failure ends in a named state
Retry, breaker, dead-letter, terminal status, alert. If a failure can strand work silently, the design is not finished.
Failure lab →03
Write down what is not handled
The ADRs record the gaps next to the decisions. A design document that lists only strengths is a pitch.
Known gaps →04
Measure before claiming
The retrieval on this site ships with its own evaluation set and reports where it misses.
Retrieval eval →
Stack
- Services
- Java 17Spring Boot 3Spring Data JPAHibernateRESTOpenAPIgRPC
- Bank APIs, onboarding pipeline
- Data & messaging
- PostgreSQLFlywayRabbitMQApache KafkaRedis
- Onboarding pipeline
- Reliability
- Resilience4jTransactional outboxIdempotency keysMicrometerPrometheusGrafana
- Onboarding pipeline
- Testing
- JUnit 5MockitoTestcontainerspytestTDD
- Everything here
- Retrieval & LLM tooling
- Tree-sitterNeo4jQdrantEmbeddingsBM25LangChain4jUnicode segmentationClaude Code hooks
- raged, splitlint, Plumb, this site
- Platform
- DockerKubernetesAWSJenkinsGitHub ActionsAzure DevOps
- Bank, CI for every repo
- Also write
- PythonGoTypeScript
- Upstream fixes, tools
- Certified
Oracle Certified Java SE 8 Programmer
AWS Certified Cloud Practitioner
Open to backend and platform roles.
Happiest where the failure modes matter: payments, messaging, data pipelines, and the retrieval side of AI systems. Based in Chennai, India; available now.