Skip to content

Hi, I'm Rishi

Software Engineer

Backend & full-stack · Spring Boot + React · secure, observable systems

Open to workBackend & full-stack roles

About

I'm Rishi Murugesan Gopalakrishnan, a software engineer in Toronto with 2+ years of experience building and operating production web platforms end to end, mostly with Spring Boot and React.

Most recently I worked at Zed Digital on a ticketing, seat-booking and payments platform. I re-architected its frontends, standardized 15+ backend services and made payments safe to retry. I started there as an intern, went full-time, and spent time at the India office helping the local team standardize how we build.

I like industry-standard systems, hunting down bottlenecks and building responsibly: observable in production, with a record of every change. Above all, I build securely.

How I build

Principles I build by

Each one links to the work that backs it up.

  • Secure by default

    Authorization is checked on every request and fails closed. Personal data stays out of logs and traces.

  • Industry-standard, not clever

    Conventional layers, consistent error contracts and versioned migrations make a codebase easy to join and safe to change.

  • Fix the cause, not the symptom

    Race conditions, blocking calls and slow feedback loops get fixed at the source instead of worked around.

  • Responsible with money and data

    A retried request must never charge twice, and payment state is reconciled against the gateway's records.

  • Observable from day one

    Requests carry correlation IDs and metrics have alert thresholds, so production explains itself before users have to.

  • Keep a trail of everything

    Versioned schemas, reconciled transactions and recorded decisions mean I can answer what changed, when and why.

Bottlenecks I've broken

Find the constraint, fix the cause

Six problems I tackled on a production ticketing and payments platform at Zed Digital.

  1. Seat double-booking

    Ticketing · Zed Digital

    Problem
    Two customers booking the same seat at the same moment could both succeed: a race condition in the booking flow.
    Fix
    Pessimistic row-level locks on seat records for the whole booking transaction, so simultaneous requests for a seat are serialized.
    Result
    The race is gone. One seat, one booking, even when requests arrive together.
    • Concurrency
    • PostgreSQL
    • Spring Boot
  2. Duplicate charges on retry

    Payments · Zed Digital

    Problem
    Payment calls time out and get retried. Without protection, a retry can charge a customer twice or leave payment and booking state out of sync.
    Fix
    Database-backed idempotency keys across CardKnox/Sola and Stripe, with retryable gateway failures handled separately from terminal declines.
    Result
    A retried request can't create a second charge, and payment and booking state stay consistent through timeouts and partial failures.
    • Idempotency
    • Payments
    • Stripe
  3. Blocking downstream calls

    Ticketing · Zed Digital

    Problem
    Core ticketing operations called downstream services synchronously, so one slow or failing dependency could stall critical ticket operations.
    Fix
    Replaced the synchronous dependencies with Kafka-based event flows.
    Result
    Downstream failures no longer block ticket operations, and the platform is more resilient.
    • Kafka
    • Event-driven
    • Resilience
  4. Unversioned schema changes

    Data · Zed Digital

    Problem
    Hibernate generated the database schema automatically, so production schema changes weren't explicit, versioned or easy to audit.
    Fix
    Replaced schema auto-generation with version-controlled Flyway migrations.
    Result
    Predictable schema changes, reviewed like code, with a full history.
    • Flyway
    • Hibernate
    • PostgreSQL
  5. Limited production visibility

    Observability · Zed Digital

    Problem
    Production issues were hard to detect and hard to trace back to the request that caused them.
    Fix
    Sentry request tracing with correlation IDs, PII scrubbing, and Prometheus and Grafana metrics with threshold-based alerts.
    Result
    Issues surface through alerts and trace back to a specific request, without personal data leaking into telemetry.
    • Sentry
    • Prometheus
    • Grafana
  6. Broken builds

    Delivery · Zed Digital

    Problem
    Failures were caught late, in CI or after, which meant broken builds and a noisy CI signal.
    Fix
    Jenkins CI pipelines that run automated tests on every change, plus pre-commit hooks that catch failures before code reaches CI.
    Result
    Fewer broken builds and a stronger CI signal, supporting 2+ builds a day across frontend and backend.
    • Jenkins
    • CI
    • Git hooks

Experience

  • Zed Digital

    Software Developer · CloserLook Search Services

    –

    Montreal, Canada & Coimbatore, India

    Full-stack development on a production ticketing, seat-booking and payments platform built with React, Spring Boot, PostgreSQL and Kafka, running on GCP and AWS.

    • Designed and implemented the application architecture for customer-facing booking and payment features supporting 500+ bookings per day.
    • Re-architected 5 frontend applications around a clear separation of concerns, with TanStack Query for server state and Zustand for client state.
    • Standardized 15+ backend services around controller, service, repository, DTO and entity layers, with consistent ProblemDetail error contracts and response envelopes.
    • Prevented seat double-booking with pessimistic row-level locking, and made payments across CardKnox/Sola and Stripe idempotent with database-backed keys.
    • Built webhook-driven payment processing and reconciliation for recurring payments, refunds and chargebacks.
    • Decoupled core ticketing operations from downstream services with Kafka-based event flows.
    • Replaced Hibernate schema auto-generation with Flyway migrations, and added Sentry tracing, correlation IDs, PII scrubbing and Prometheus/Grafana alerting.
    • Built Jenkins CI pipelines that test every change and support 2+ builds a day, plus pre-commit hooks that catch failures before CI.
    • Progressed from intern to full-time developer, and relocated briefly to the India office to help establish and standardize engineering practices.
    • Java
    • Spring Boot
    • React
    • TypeScript
    • PostgreSQL
    • Kafka
    • GCP
    • AWS
  • HCL

    Software Engineer

    –

    Chennai, India

    • Completed hands-on corporate training in .NET and C#, building backend components and APIs as part of guided enterprise exercises.
    • Developed dynamic web interfaces using JavaScript, reinforcing core frontend fundamentals within an Agile team.
    • Gained practical exposure to software development workflows, including debugging, version control and Agile ceremonies.
    • .NET
    • C#
    • JavaScript

Projects

Where I go deeper

Personal projects on resilience testing, AI memory and multi-tenant publishing. Each has a case study covering the problem, the design and the trade-offs.

  • Shipwreck

    A chaos-testing CLI that checks whether a web app really recovers from network faults.

    • Node.js
    • TypeScript
    • CLI
    • Fault injection
  • Cerberus

    An AI assistant with a long memory, built on a personal knowledge graph.

    • RAG
    • Knowledge graph
    • Embeddings
    • LLM integration
  • Vernacular

    Multi-tenant publishing for writers who work in regional languages.

    • Spring Boot
    • Fastify
    • React
    • TypeScript
    • Multi-tenancy
    • Sentry

Skills

Languages

  • Java
  • TypeScript
  • JavaScript
  • Python
  • SQL

Backend

  • Spring Boot
  • Spring Security
  • Spring Data JPA
  • Hibernate
  • Node.js
  • Express
  • REST
  • WebSockets
  • gRPC

Messaging & data

  • Kafka
  • RabbitMQ
  • PostgreSQL
  • MySQL
  • MongoDB
  • Redis
  • Flyway

Frontend

  • React
  • TanStack Query
  • Zustand
  • Redux
  • Tailwind CSS
  • Vite

Cloud & delivery

  • AWS
  • GCP
  • Docker
  • Kubernetes
  • Terraform
  • Jenkins
  • GitHub Actions
  • Git
  • Linux

Observability & security

  • Sentry
  • Prometheus
  • Grafana
  • Spring Boot Actuator
  • Snyk

Testing

  • JUnit
  • Mockito
  • Testcontainers
  • Vitest
  • React Testing Library
  • Playwright
  • k6

AI tooling

  • Claude Code
  • Cursor
  • GitHub Copilot
  • RAG
  • Embeddings
  • MCP
  • LLM API integration

Education

Contact

Get in touch

I'm open to software engineering roles, especially backend and full-stack. Email is the quickest way to reach me, or send a message below.

Sent through Netlify Forms and used only to reply to you.