Mumbai, India

Girish
Ahirwar

~4 yrs Backend engineering
0% Uptime maintained on-call
0 Orders/month on systems I shipped
0 High-severity incidents owned
01

About

Backend engineer, ~4 years in — Go and Java, distributed systems, systems that hold up under real load. Shipped discounting infra handling 100K+ orders/month, kept it at 99.99% uptime through 30+ incidents, and built the reminder/payments infra behind a core engagement feature. Looking for my next SDE2 role.

02

Experience

Cover SureJul 2026 – Sep 2026

Software Engineer 2

Java · Spring Boot · Microservices · MySQL · AWS S3

  • Owned the unclaimed-policy discovery feature end-to-end — insurer selection, CoverPro payment integration, and a resume-journey status card driving engagement to 50% of DAU
  • Built a secure file-decryption pipeline for password-protected policy uploads, validating credentials in-app and persisting sanitized files to S3
  • Automated a WhatsApp/email call reminder system via dual cron jobs, using Redis idempotency keys to prevent duplicate dispatch across 100% of leads
    See the dedup logic work
    Idempotency-Key: —

    Click "Send request" to fire a reminder. Click again with the same key to see the duplicate get suppressed.

SwiggyFeb 2025 – Nov 2025

Software Engineer

Go · Java · Grafana · Prometheus · Docker · AWS S3 · DynamoDB

  • Architected the Steal Deal discounting feature end-to-end using Go-based distributed microservices — cut discount validation latency 25%, reduced price inconsistencies 90%, lifted feature adoption 43%
  • Shipped a handling-fee flow for MaxxSaver orders, improving profitability across 100K+ monthly orders with zero CX degradation
  • Owned on-call rotations, resolving 30+ high-severity incidents while maintaining 99.99% availability
AccentureJan 2021 – Nov 2023

Software Developer

Java · Spring Boot · MySQL · Salesforce

  • Developed RESTful APIs for CRUD operations across loan and user record systems, supporting thousands of records
  • Built custom Hibernate Validators enforcing business rules on loan data — cut validation errors from 8% to 2%
  • Automated loan update notifications via JavaMailSender/SMTP, processing 800+ emails/month
03

Projects

Live · deployed on Render

Seat Reservation at Scale

A JSON HTTP API that sells assigned seats and stays correct when thousands of buyers hit the same show at once — no seat sold twice, per-user limit enforced, retries counted once, zero 5xx.

Problem

  • At on-sale time thousands of buyers compete for the same seats — a read-then-write check lets two buyers both see a seat as free and both win
  • Clients retry on timeouts, so the same request can arrive twice and still has to count once
  • Under overload the system must degrade into clean declines, never 5xx errors or wrong answers

Approach

  • Atomic sale: one guarded conditional UPDATE (status='available' in the WHERE clause) under a Postgres row lock, rolled back unless every requested seat was taken — no read-then-write window
  • Multi-seat requests are all-or-nothing, with seats locked in a global label order so overlapping requests can't deadlock
  • Per-user limit made race-free with a transaction-scoped advisory lock on (show, user)
  • Exactly-once retries: idempotency key stored under a unique constraint plus an advisory lock; a replay returns the original reservation, a reused key with different seats is a 409
  • Opt-in time-boxed holds whose expiry is enforced in SQL against the database clock, so correctness never depends on a background sweeper
  • Consistency over availability by design: one Postgres primary, readiness fails closed within 2s, and saturation is shed as 429 instead of guessing

Tools

Backend

Java 21 · Spring Boot 3.5 · PostgreSQL 16 · Flyway · Spring Security (JWT)

Testing & load

Concurrency and ops integration tests · 20,000-request burst harness

Observability

Prometheus metrics · health and readiness probes · structured JSON logs with request IDs

Delivery

Docker · Docker Compose · Render

Verification

  • A one-command burst fires 20,000 requests — hot-seat storms, multi-seat pairs, and 10% same-key retries across 2,000 users — against a 500-seat show
  • The run fails on any double-sold seat, any 5xx, or available + held + confirmed ≠ total seats, sampled every 500ms during the burst

Lessons learned

  • Measure before blaming: failures I first pinned on Docker's port proxy turned out to be the app's own connection limits
  • Failure paths need tests too: the readiness check hung during a database outage until a test exposed it, and now fails closed in 2s
04

Skills

Languages

GoJavaSolidity

Cloud & data

AWS LambdaS3DynamoDBMySQLNoSQLGoogle Cloud

Tools

GitDockerSpring BootRedisSalesforce

Observability

PrometheusGrafana
05

Education

Master of Computer Applications — Pune University CGPA 8.0