
Every year during Ganesh Utsav, the same thing happens in Pune. Somebody stops me on Laxmi Road and asks which Ganpati is nearby, what time the aarti is, or which way the metro station is. Everyone knows the big names. Almost nobody knows what’s two lanes away, or how long the walk actually takes.
That isn’t a hard problem. It’s just one nobody had solved for people standing outside with one bar of signal.
So I built Pune Utsav 2026 — free, ad-free, no sign-up, in English, Marathi and Hindi. I built it in evenings using what’s starting to be called the Agent Development Lifecycle, but more on that further down. First, what it actually does.
What the app does
A real map, not a list. Dagdusheth and the Manache Ganpati are pinned on an actual street map, with metro stations alongside them. Stars for the Manache, circles for other mandals, squares for metro — so the legend works even if you can’t tell the colours apart.
A route planner that respects your time. Tell it you have an hour, how much walking you’re up for, and what you care about, and it ranks the recorded walking routes that genuinely fit. If nothing fits, it says so rather than padding the list.
The boring, useful things. Aarti timings, festival dates in IST, metro service windows, WhatsApp ticket booking, emergency helplines as tap-to-call links. Save places you want to visit, mark them off as you go.
It works when the network doesn’t. Installable, works offline, loads fast on a bad connection. Nothing is tracked — your saved places live only in your browser.

Now, the ADLC part
The naive version of “AI writes code” is: you ask, it types, you ship. That produces something that looks finished and isn’t.
ADLC is the disciplined version. Four beats, repeated:
- State the intent and the constraints — not “build me an app”, but: mobile-first, three languages, no fabricated data, every fact traceable.
- Let the agent do the volume — components, routing, data layer, translation plumbing. Genuinely fast.
- Audit it as if a stranger wrote it. This is the part people skip.
- Fix, verify against something real, repeat.
Step three is where the actual engineering lives.
The audit is the job
I audited the whole thing as unverified work. A sample of what turned up:
- The language switcher did nothing. Clicking मराठी saved the locale and changed not one visible word. It looked like it worked. It never had.
- The route planner invented routes that didn’t exist, linked to blank pages, and printed confident distances computed as stop count × 0.8.
- The service worker would have frozen the app forever — someone who opened it in August would still be reading August’s schedule during the festival.
None of that was visible from the outside.
The rule that mattered most
Never invent data.
The dataset has no coordinates. The easy move is to let an agent guess plausible ones — they’d look right and be wrong. Instead they come from OpenStreetMap, each recording the exact object it came from, each marked unverified. Places OpenStreetMap doesn’t confidently know are listed below the map under a heading saying so.
Twenty-two places are pinned. Thirty-four aren’t. That second number is the honest one, and it stays visible.
An agent will happily fill any gap you leave. Deciding which gaps must stay empty is a human judgement, and it decides whether the thing is trustworthy.
What an evening buys you now
I couldn’t have built this alone in evenings three years ago. Not close.
What changed isn’t that code writes itself. It’s that the distance between an idea and a testable version of it collapsed. I spent my evenings deciding what was true and what was worth showing — almost none of it typing boilerplate.
That’s the real promise of ADLC. Not fewer engineers. Fewer evenings spent on the parts that were never the point.
The festival starts tomorrow. If it helps one person find Tambdi Jogeshwari without asking a stranger, the evenings were worth it. 🪔