akshatdhiman.in

Akshat Dhiman

Backend engineer in Lucknow

For almost two years at Deliveroo I wrote the Go services that decide which restaurants you can order from, and the tools that catch delivery zones overlapping when they shouldn't.

Most of what I've built since stays close to that: routing, geometry, and backend systems that have to be right about where things are. I also make small tools I want to exist, like a PDF editor that never uploads your files.

I'm looking for a backend role. The easiest way to reach me is email.

The map is a real 15-minute scooter delivery zone around Hazratganj, generated from the OpenStreetMap road network by my isochrone project. Each ring is five more minutes of riding.

15-minute scooter delivery zone around Hazratganj, Lucknow Three nested areas reachable by scooter in 5, 10 and 15 minutes, drawn over Lucknow's main roads. They cover 10.3, 63.1 and 150.4 square kilometres. Hazratganj 15 min10 min5 min
Hazratganj, Lucknow · 26.8505°N 80.9462°E 5 min · 10.3 km²10 min · 63.1 km²15 min · 150.4 km²

Work

Tanla Platforms

Software Engineer I · Hyderabad · Jun – Sep 2025

Wrote the unit tests that took our Go microservices past 75% coverage, and a validator that checks incoming requests against their Swagger spec, so a malformed payload fails at the edge instead of three services later.

Deliveroo

Software Engineer I · Hyderabad · Jul 2023 – Mar 2025

I owned two Go services. One picks the restaurants near a customer; the other hides restaurants in areas that don't have enough riders. Both held 99.9% reliability, and both were written test-first.

Delivery zones are polygons, and polygons drift. I built a Rails and PostGIS tool that pre-filters by bounding box and then finds zones overlapping when they shouldn't, which cut data discrepancies by 80%. Alongside it: an ops tool for hiding partners during market outages, and a Go CLI that pulls zone data from S3 into Aurora so zones can be regenerated on demand.

Samsung R&D Institute India

Software Engineer Intern · Bangalore · May – Jul 2022

Worked on flash / no-flash image fusion: taking a flash photo and a no-flash photo of the same scene and keeping the lighting of one with the detail of the other. I later rebuilt the pipeline from the original paper myself (below).

Things I've built

PDF Studio

JavaScript · pdf-lib · pdf.js · WebAssembly · source

Merge, split, compress, lock, unlock, fill in and annotate PDFs, and resize passport photos, all inside the browser. Your files are never uploaded anywhere. The HEIC decoder is 3 MB of WebAssembly, so it only loads when you drop in an iPhone photo, and everything except page previews works offline.

PDF Studio's merge tool, with the list of tools in a sidebar

CodeReflections

Node.js · Express · MongoDB · Vercel · source

A practice journal for Codeforces. Paste in problem codes and it fetches names, ratings and tags from the Codeforces API. You solve against a stopwatch, answer five short questions about what finally unlocked the problem, and the dashboard shows which tags keep slowing you down.

CodeReflections dashboard with today's stats, recent reflections and slowest tags

Isochrone delivery areas

Python · OSMnx · NetworkX · Shapely · SciPy

The code behind the map at the top. It downloads a city's road network from OpenStreetMap, runs a Dijkstra search that stops once the time budget runs out, and wraps the reachable points in an alpha shape. That's a concave hull, so the zone follows the roads instead of pretending to be a circle. There are profiles for scooter, car, bike and walking.

Flash / no-flash image fusion

Python · NumPy · SciPy

A rebuild of Petschnigg et al. (SIGGRAPH 2004). A joint bilateral filter cleans up the noisy no-flash photo using the flash photo as a guide. Detail from the flash photo is then copied back, except where flash shadows or highlights make it untrustworthy. Results are measured with PSNR, SSIM and sharpness.

Smaller things

Papers

Background