Skip to content
Akhil Joshi, back to top
Résumé

Akhil Joshi · Toronto, ON

Over 7 years building full-stack products in the Payments and Finance domain. I build the backend in Java and Spring Boot or in Node.js and NestJS, and the interface in React and TypeScript, then scale it as distributed systems on Kafka, Elasticsearch and MongoDB, watched through APM and Kibana.

I have engineered end-to-end microservices from scratch, optimised deployment pipelines, and put AWS and GCP to work. I bring a fintech precision mindset, fused with the performance-driven engineering culture Netflix is known for, to craft systems that are as reliable as they are elegant.

  • Java
  • Spring Boot
  • Node.js
  • NestJS
  • TypeScript
  • React
  • Kafka
See my workRésumé ↗
akhil@toronto — zsh

It is a real prompt. Click it and type help.

About

From the first diagram to production, and after.

I started on the front end, building React portals at GlobalLogic, and grew into a full-stack engineer who owns a feature from the interface to the database: telemedicine services on AWS at Deloitte, real-time analytics at Optum, and most recently instant payments and international transfers for Emirates NBD through Synechron.

I teach what I learn, which is why I wrote a Kafka course. Lately I build retrieval systems on locally hosted models, so sensitive data stays on-premise.

Based in
Toronto, ON
Now
Senior Consultant at Synechron, on the Emirates NBD payments platform
Before
Optum Rx, Deloitte, GlobalLogic
Domains
Banking, payments, healthcare
Education
B.Tech, Electronics and Communication, Guru Nanak Dev University

How I work

One service, six stages, one owner.

Agree the boundaries before any code exists.

Bounded contexts, REST and Kafka contracts and service boundaries come first, so the teams on either side of an interface can build without waiting on each other.

  • Domain-Driven Design
  • Event Sourcing
  • CQRS
  • Saga

Where: Card delivery tracking platform, Emirates NBD

Design for the retry.

Every request arrives twice some day. Idempotency keys, idempotent consumers and dead-letter queues belong in the first design.

Try it in the simulator ↓

Contracts before code.

Bounded contexts and REST and Kafka contracts are agreed first, so teams on both sides of an interface can build in parallel.

Seen at Emirates NBD ↓

Measure it, then say what failed.

Driver Ops ships with its eval results, including the thresholds it misses. The Kafka course lists every claim I could not verify.

See the numbers ↓

Private data stays home.

When the data is sensitive, the model runs locally. I prototype retrieval on Ollama so nothing leaves the network.

See Driver Ops ↓

Experience

From React portals to bank payments.

Four employers since 2018. The bar is drawn to scale: pick a stretch to see what I built there.

Synechron

Senior Software Engineer (Senior Consultant)

Client: Emirates NBD

Apr 2024 – Jun 2026

What moved through it

  1. Transfer request
  2. Spring Boot services
  3. Kafka
  4. Core banking

Saga, CQRS and Event Sourcing keep each transfer consistent end to end.

  • Payments platform. Java 17 and Spring Boot microservices for AANI instant payments, international transfers, direct remittances and NIUM integrations. Event Sourcing, CQRS and Saga keep transactions consistent across core banking systems.
  • Java and Node.js services. Some services in Java and Spring Boot, others in Node.js and TypeScript on the bank's in-house framework, which is built on top of NestJS.
  • Event-driven processing. Kafka producers and consumers for real-time transaction streaming, with idempotency keys, retry policies and dead-letter queues.
  • Resilience. Circuit breaker, bulkhead and Redis caching to isolate downstream failures and cut core banking calls.
  • Service design. Bounded contexts, REST and Kafka contracts and service boundaries for a credit card delivery tracking platform spanning Emirates Islamic, Network International and Emirates Post.
  • Delivery. Docker to OpenShift and Kubernetes through Jenkins, with distributed tracing and Grafana and Kibana dashboards behind SLO-based alerting.

B.Tech, Electronics and Communication Engineering, Guru Nanak Dev University, Amritsar (2014–2018). AWS Developer: Building on AWS and Optimizing on AWS (edX). React: The Complete Guide (Udemy).

Tech stack

Grouped by the problem, not the logo.

Pick an employer to see which of these I used there.

56 tools

Moving moneyThe consistency problems
  • Java 8–21
  • Spring Boot
  • Spring Cloud
  • Apache Kafka
  • Event Sourcing
  • CQRS
  • Saga
  • Domain-Driven Design
  • Idempotency
Staying upWhen a dependency fails
  • Circuit breaker
  • Bulkhead
  • Redis
  • Dead-letter queues
  • Distributed tracing
  • Grafana
  • Kibana / ELK
  • Dynatrace
ShippingFrom commit to cluster
  • Docker
  • Kubernetes
  • OpenShift
  • Terraform
  • Jenkins
  • GitLab CI
  • JUnit 5
  • Mockito
StoringWhere state lives
  • PostgreSQL
  • SQL Server
  • MongoDB
  • DynamoDB
  • Cosmos DB
  • Elasticsearch
  • OpenSearch
CloudRun in production
  • AWS ECS
  • Lambda
  • S3
  • RDS
  • API Gateway
  • Cognito
  • Azure Functions
  • Logic Apps
  • App Service
  • GCP
Retrieval and LLMsApplied, local-first
  • RAG
  • LangGraph
  • LangChain
  • pgvector
  • Chroma
  • Ollama
  • MCP
  • Claude and OpenAI APIs
Full stackNode to React, end to end
  • Node.js
  • NestJS
  • TypeScript
  • React
  • Redux
  • Next.js

Mapped from my résumé and repositories. A tool that lights up under no filter is one I list on my résumé without tying it to a specific role.

Projects

Five things I would defend in review.

Three are open source on GitHub, one is a deployed product and one is a private pilot. Each card has something to press.

Agentic RAG · Python

Driver Ops

A compliance assistant for truck drivers. They ask in plain words, by Telegram or a chat page, and get a short answer that cites the regulation or company procedure it came from.

When the documents do not cover the question, it says so and gives a phone number instead of guessing. Refusing is a first-class outcome: every question passes a guardrail, retrieved text is graded, and a miss returns a fixed message that no model writes.

FastAPI · LangGraph · OpenSearch (BM25 + kNN) · Ollama · Docling · Airflow · Postgres · Redis · Langfuse · Docker Compose

My repository, built with Claude Code. The repo carries its CLAUDE.md and workflows.

Read the source ↗

Agent control flow · pick a question to trace its path

Does retrieval find the right document?

24-question eval, 18 answerable

  • BM25 only66.7%

    12 of 18

  • Hybrid BM25 + vectors83.3%

    15 of 18

  • Agent: guardrail, then grading88.9%

    16 of 18

The guardrail earns its place. Plain RAG refused 0 of 3 out-of-scope questions. The agent refused 3 of 3.

Where it still falls short. Citation accuracy is 83.3%, one of three unanswerable questions got an invented answer, and answers took roughly 14 to 23 seconds on a local 4B model. The repo records these misses.

Product · Next.js · deployed

OrganizeFunds

Expense tracking for self-employed Canadians. Personal and business spending are kept apart, sales tax is split out, and business spending is sorted by T2125 line as you go.

T2125 is the form a self-employed Canadian files with their return, so sorting by its line numbers through the year means tax season is a report, not a shoebox of receipts.

Confirmed from the live app
It is deployed and built on Next.js. Sign-in is required, so only the sign-in page is public.
As I describe it on GitHub
PostgreSQL, receipt OCR and auto-categorisation. The source is private, so no code is shown here.

Create an account ↗Sign in ↗

organizefunds.vercel.app/sign-in
The OrganizeFunds sign-in page: a diagram of scattered expenses flowing into five T2125 lines, travel, advertising, meals and entertainment, insurance and office expenses, ending in the word Sorted, beside a sign-in form.
The live sign-in page, captured from the deployed app.

Multi-tenant SaaS · React · Supabase · pilot

Nextvisit

A clinic dashboard for patients, readings, bookings, check-up recalls and analytics, with a public booking link patients can use without an account.

The interesting part is who is allowed to see what. Each clinic's data is isolated in the database with row-level security, three roles see different things, and a script proves that one clinic cannot read or change another's data. The public booking page touches no tables at all: it can only call three database functions that check the link's token.

schema migrations
9
unit test files
24
roles, enforced in SQL
3

React 19 · Vite · TypeScript · Supabase (Postgres, auth, row-level security) · TanStack Query · Tailwind · Vitest · Playwright

Private repository, so there is no source link. It is a pilot on sample data: its own README says not to store real patient data until the compliance work is done. The dashboard layout follows a reference design.

  • Access test

    Creates two clinics and asserts neither can see or change the other’s patients and readings.

  • End-to-end test

    Playwright drives sign-up, adding a patient and recording a reading.

  • Visual check

    A script compares the rendered page with a reference image, pixel by pixel.

  • Demo mode

    With no database configured, it runs on sample data kept in the browser.

Nextvisit · Analytics
The Nextvisit analytics screen on sample data: a patient record card, a performance gauge reading 432 points, a weekly calories bar chart with an 1800 target line, and heart rate, respiration and blood pressure figures.
The analytics view, showing sample data.

Teaching · Apache Kafka 4.3 · KRaft

Kafka knowledge base

A self-study site that takes an engineer from “what is a topic” to the decisions a staff engineer makes: 14 modules, more than 175 activities, failure drills, a mock interview and case studies, with labs on Docker.

Every claim not checked against the Kafka 4.3 documentation or a lab run is marked “unverified” and listed on its own page. Plain HTML, no build step.

  1. 01The log
  2. 02Producers
  3. 03Consumers
  4. 04Replication
  5. 05KRaft and the controller
  6. 06Transactions and exactly-once
  7. 07Kafka Streams
  8. 08Ecosystem
  9. 09Operations
  10. 10Multi-cluster
  11. 11Security lab
  12. 12Monitoring lab
  13. 13CDC and outbox lab
  14. 14Tiered storage lab

Open the site ↗Source ↗

Infrastructure · Terraform

cloudTrails-Alert

AWS CloudTrail logged to S3 and CloudWatch, with metric filters and alarms for IAM user creation, security group changes and Lambda invocations, notifying through SNS. A new alert is one entry in a list.

Known issues, in the README

The README lists what is broken, including a module path that fails terraform init and an old provider pin. I would rather say so than hide it.

Source ↗

Also on GitHub: mutilplePDFs, a Streamlit app for chatting with several PDFs through LangChain, OpenAI embeddings and FAISS. It is a smaller project than the three above.

Follow one transfer

Now inject a failure. Watch what the system refuses to do.

Each switch is a real failure mode of a distributed payment flow, and each one is answered by a pattern from my work: an idempotency key, an idempotent consumer, a circuit breaker with saga compensation and a dead-letter queue. The event log below is the Kafka topic.

Tech Blogs

Tech blogs, newest first.

Practical notes on payments, Kafka and API management. Search and filter by topic on the full page.

Version 2

The other résumé.

A second take on the same work, laid out like a drawing sheet: rulers, measurements and one page per project.

Contact

Building something where correctness is the product?

Open to

Roles in fintech and payment systems, and real-time distributed backends. Remote, or in the Toronto area.