SAPTARSHI DUTTA · SOFTWARE ENGINEERBUILDING FOR THE REAL WORLD — 2026

Saptarshi
Dutta.

I build the hard part.
Ex-SDE Intern at Bentley Systems.
I build the systems, tools, and products that make the messy stuff work.

SCROLL TO EXPLORE↓
28Mrequests / day20chained APIs10+languages~50%less analysis time
01 — SELECTED WORK

Friction in.
Systems out.

Each project started with something that didn’t work. Here’s what I did about it.

01 / DISTRIBUTED SYSTEMS · BENTLEY SYSTEMS INTERNSHIPPRODUCTION · HIGH THROUGHPUT
THE PROBLEM

One Request.
28M API Invocations.
Reliable System.

One response decided what to request next. A static workflow couldn’t keep up, and one failure shouldn’t mean starting all over.

.NETQueuesRetries + jitterRate limits
READ MORE ON X ↗

I built a queue-based .NET orchestrator to chain 20 interconnected APIs, handling up to 28 million requests per day. Each response determines what runs next. It combines concurrency and rate limits with cancellation propagation, exponential backoff with jitter, and idempotent resumable runs. Read the thread on X ↗

TRACE PREVIEW / RUN 08F2 RESUMABLE RUN MODEL
01Identity
02Accounts
03aLedger
03bRisk
04Decision
02 / AUDIO · MACHINE LEARNING · PROJECTINTERACTIVE PROTOTYPE
THE PROBLEM

The transcript
was right.
The timing wasn’t.

The speech API returned words, not word timings. I needed to know exactly when to bleep a word, so I built forced alignment on top.

PythonSTTForced alignmentAudio
READ MORE ON X ↗

Long digit strings made the aligner lose its place. I normalize digits to their spoken form, align that text against the waveform, then map word timings back to the original transcript. This is a timing visualization, not a recording; a real audio sample can be added when one is available. Read the thread on X ↗

ALIGNMENT TIMING PREVIEWNO AUDIO ASSET
TRANSCRIPT
I01.2ssent02.2s12,45003.2srequests04.2stoday05.2s
Word timings, recovered from audio
THE TWIST

“12,450” → “twelve thousand four hundred fifty” → aligned

03 / AUDIO · PRIVACY · PROJECTLIVE DEMO
THE PROBLEM

Find the
sensitive bits.
Then bleep them.

Transcripts can contain spoken PII. I built a redaction workflow that finds sensitive spans and masks them in both the transcript and audio.

PythonFastAPINext.jsSpeech pipeline
READ MORE ON X ↗

The service builds on the timestamped transcript from my transcription pipeline: it transcribes audio, identifies sensitive spans such as card numbers, and bleeps those spans in the audio while masking them in the transcript. Reusing word-level timing lets the redaction target the spoken segment instead of muting an imprecise chunk. Read the thread on X ↗

PII REDACTION / OUTPUT PREVIEWMASKED
TRANSCRIPT

Please charge my card [REDACTED], thank you.

Sensitive audio span muted 00:02.4 – 00:04.1
04 / REAL-TIME MULTIPLAYER · PROJECTINTERACTIVE DEMO
THE PROBLEM

Two players.
Two boards.
One truth.

Concurrent moves can turn one game into two different stories. I made the server the source of truth, and treated every move as an event worth measuring.

ReactNode.jsWebSocketsAWS
READ THE FULL CASE STUDY ↗

Chessly keeps both players’ boards in sync by validating moves on the server before publishing them. Players send intent; the server checks the current game state, accepts one legal move, and broadcasts the resulting event to both clients. I added latency monitoring on AWS to make slow updates visible before they turn into a confusing player experience. This board is an interaction mock, not a connected live game.

CHESSLY / MOVE PREVIEW DEMO MODE
♜♞♝♛♚♝♞♜♟♟♟♟♟♟♟♟♙♙♙♙♙♙♙♙♖♘♗♕♔♗♘♖
CHESSLY / ROOM 04WAITING FOR PLAYERSMove 00 / 03
05 / DEVELOPER TOOLING · PROJECTTIME SAVED · ~50%
THE PROBLEM

Twelve tools.
One analysis.
One command.

I kept chaining the same programs by hand. I connected the steps into one repeatable pipeline and cut analysis time by about half.

PythonCLIAutomationData pipeline
READ THE FULL CASE STUDY ↗

Analysis meant opening a dozen programs, remembering the right order, and carrying outputs from one step to the next. I automated that chain into one repeatable pipeline with clear inputs and outputs. Fewer manual handoffs mean less time spent on setup and fewer chances to skip a step. The measured outcome: roughly 50% less time spent on analysis.

PIPELINE / WORKFLOWTOOL 01 — 12
BEFORE12manual steps
→
AFTER~50%less analysis time
INPUTPROCESSINSIGHT
02 — HOW I WORK

Breadth
with a spine.

I’m Saptarshi Dutta, a software engineer studying B.Tech CSIT at UEM Kolkata, and a former SDE intern at Bentley Systems. React to Go, Electron to .NET different tools, same thought: make the thing reliable enough to matter.

When my manager was out, I stepped in to coordinate with teams in Michigan and Connecticut. The geospatial network for both states went live. I learned that ownership isn’t a title—it’s making sure the work gets across the finish line.

!

I built AI agents to audit a codebase. They found an SSRF vulnerability; I proposed fixes using domain whitelisting and path sanitization.

↗
03 — NOTES FROM THE FIELD

Things that broke
and what stuck.

01

Retries without jitter synchronized a traffic spike. A little randomness made recovery a lot calmer.

RETRY STORMS → BACKOFF + JITTER
02

Digits that looked obvious to a human sounded different to an aligner. Normalize what is spoken, then restore what is written.

12,450 → “TWELVE THOUSAND…” → TIMESTAMPS
03

Two clients can both be convinced they moved first. The server needs to decide once, then tell everyone.

RACE CONDITIONS → ONE SOURCE OF TRUTH
04 — ENGINEERING NOTES

Thinking out
loud.

Small notes on the decisions that make software hold up.

01Why retries need jitterSYSTEMS · 4 MIN↗

If every client retries at the same interval, a brief outage turns into a thundering herd. Exponential backoff gives a service room to recover; jitter makes sure clients do not all come knocking again together.

02Idempotency, in plain EnglishRELIABILITY · 3 MIN↗

A request can time out after the work has already happened. Idempotency gives retries a safe answer to one question: have I already done this? It is the difference between trying again and accidentally doing it twice.

03Forced alignment for code-mixed speechAUDIO · 6 MIN↗

Word-level timestamps are not always in the transcript API response. A forced aligner can recover them from audio, but number normalization matters: align the words people say, then map those timings back to the digits they meant.

05 — YOUR TURN

Have a hard
problem? Good.

I’m interested in the kind of work that needs curiosity, care, and a stubbornly reliable system.

BACK TO THE TOP ↑