Senior Software Engineer / Applied AI / Backend & full-stack systems

Prateek Mulye

Prateek sitting beside the Chicago riverwalk.
The riverwalk, Chicago

I build AI applications on 11+ years in software engineering, most of it backend and full-stack systems. At work I built production systems that ran on live traffic, in Java and Elixir. In my own projects I build the parts around the model: streaming, retrieval, routing and evaluation.

Now
Agilent Technologies · Senior Software Engineer, Manufacturing · since Jan 2026
Before
HG Insights, 2021–2025 · Capital One, via Cognizant, 2018–2021
AI work
Python, LangGraph, FastAPI, pgvector, streaming, evaluation
Systems
Java, Spring Boot, Kafka, PostgreSQL, Elixir / Phoenix, TypeScript / React
Based in
Santa Barbara, California
Open to
Roles in the US, Germany and across the EU
Languages
English, Hindi, Marathi · German A1–A2, learning

Applied AI

AI tools you can open today.

Personal projects, live online. Each one leaves the decision with a person and says where the model falls short.

  • Banking operations

    Payment Exception Desk

    Matches incoming credits to expected payments. Exact amount, currency and date checks narrow the candidates first; a local MiniLM model then ranks descriptions for an analyst to confirm.

    LimitNot evaluated on a permissioned payment dataset. Every match needs an analyst decision.

    • Local embeddings
    • Exact money handling
  • Building energy

    Load Review

    Compares a building’s interval electricity readings with its operating schedule, and tests a learned model against simple calendar baselines before flagging anything.

    LimitOn the three real building files tested, the model did not beat the baselines, so the tool withheld model flags.

    • TensorFlow.js
    • Held-out evaluation
  • Media editing

    Caption Review

    Runs Whisper in the browser to find where a caption track disagrees with the recorded speech, then puts each suggestion in a cue editor beside the recording.

    LimitAudio comparison needs PCM WAV input. Accuracy and time savings are not measured.

    • Whisper in the browser
    • SRT / WebVTT

Assay · CP044 community project · personal AI contribution

Research you can inspect and compare.

In Assay, my contribution to the CP044 community project, I built Python and LangGraph workflows that bring analyst, bull, bear and risk perspectives into a streamed research report. The project also includes an evaluation harness that compares the debate workflow with a simpler one, including token use and estimated cost.

The decision and its limits

Decision. Make the extra stages earn their place: compare their outputs and cost with a simpler workflow before claiming they improve the answer.

Limits. A contribution to a community project, not sole authorship. Pinned source review, not a reproduced live-model run. Fixed judge order and excluded failed pairs limit how far the harness results can be read.

A question fans out to analyst, bull, bear and risk stages, which feed a reporter that streams the report; an evaluation harness compares it with a simpler workflow. Question AnalystBullBearRisk Reporter SSE eval harness: debate vs a simpler workflow, tokens, cost
Illustrative. The pinned source shows the stages; no live run is claimed.

This page · System One router

The navigation on this page is a fine-tuned decision model.

Ask a question in the bar above, or paste a role into “Let’s talk”. Laya, an open-weights decision model (Apache-2.0), answers typed questions in one pass instead of writing text: which section fits, is this about hiring, is it off-topic. I fine-tuned it for this page on 1,655 synthetic questions and job descriptions written by a local model, and it runs in a private Hugging Face Space at no cost, answering only requests that carry this site’s keys. A confidence gate decides whether to go, offer two options or decline. If Laya is slow or down, a keyword classifier in your browser answers instead, and the trace says which one did. Every sentence it shows was written in advance and links to its source.

Measured on 60 held-out questions and 10 job descriptions
KeywordsLaya as releasedLaya fine-tuned
Right section (top 1)29/6036 to 61%26/6032 to 56%48/6068 to 88%
Jumped to the right section29/6036 to 61%10/609 to 28%45/6063 to 84%
Jumped to a wrong section5/604 to 18%5/604 to 18%6/605 to 20%
Fit brief: stated requirements172/18092 to 98%63/18028 to 42%175/18094 to 99%

The test set was written by a separate agent that never saw any engine’s answers, in English and other EU languages, and frozen before the first run. Fine-tuned against keywords, paired exact McNemar test: top 1 p = 0.0003, right jumps p = 0.0015, wrong jumps p = 1. Before scoring I set a rule: ship only if wrong jumps were no more frequent than with keywords. At 6 against 5 it missed that rule by 1 case; I shipped it anyway and say so here. The fit brief asks Laya everything except work location, where it scored below the keywords; all 21 brief questions take 1.9 s on the Space. Ranges are 95% intervals.

Visitor text passes a guard, reaches the Cloudflare edge, is classified by fine-tuned Laya on Hugging Face or by the local classifier, passes a confidence gate, and becomes an action: scroll to a section or build a fit brief. Visitor Guard Edgelimit, timeout LayaLocal Hugging Face Gate local runs when the edge is off or fails
How a question travels. The same path appears live in the trace when you ask.

Streaming inference · ChatFormula1 v2, in development

What happens when an event arrives twice?

An LLM answer reaches the user as a stream of events, and streams repeat, skip and arrive out of order. This console runs the original React client reducer from ChatFormula1 v2 on synthetic events in your browser. No model, API or database call is made.

phase idlegap detected false0 / 8 events processed

Ready for synthetic events.

The reducer skips duplicate and replayed events. The source is linked below.

Event trace and checks
  1. No events processed.
  • Expected textNot run
  • No false gapNot run
  • Replay is idempotentNot run

The foundation · 11+ years in software engineering

Measured at work.

  • 15M+

    US and Canadian company records normalized into one canonical shape

    HG Insights

  • 30M+

    PostgreSQL rows partitioned and indexed; dashboard latency down more than 60%

    HG Insights

  • 80K+

    contracts through an idempotent Elixir and Oban Pro pipeline; reporting 60% faster

    HG Insights

  • 12K+

    transactions per second from OpenResty service virtualization, in test environments

    Capital One, via Cognizant

System design

Three systems, drawn out.

Diagrams are illustrative. They show the design, not production traces.

Capital One, via Cognizant · 2018–2021

When a message fails

In production, on live traffic, I owned the Kafka workflows for financial-transaction messages, built with Spring Boot and DynamoDB: dead-letter handling, bounded retries with backoff, and idempotent replay. Operators could recover a bad message without processing a transaction twice.

I also helped split a legacy Java application into contract-first services that teams could release on their own, and built the OpenResty layer that stood in for unavailable downstream systems during performance tests.

The decision and its limits

Decision. Separate retryable failures from work that needs inspection. In an AI application I would assess every tool action before making it retryable, because a repeated request can have a real external effect.

Limits. Career account. Idempotent replay is not a universal exactly-once delivery guarantee.

  • Java
  • Spring Boot
  • Kafka
  • DynamoDB
  • OpenResty
Events flow from a producer through a topic to a consumer. Failures retry with growing backoff, then park in a dead-letter queue, get inspected, and replay into the topic. Producer Topicpartitioned Consumer Retrybackoff, then stop Dead-letterkept, not dropped Inspectand correct replay, idempotent
Bounded retry, then park and replay. Red marks the failure path.

HG Insights · 2021–2025

Tables that outgrew their indexes

I scaled PostgreSQL beyond 30 million rows with partitioning, composite indexes and read replicas. Customer-facing dashboard latency fell by more than 60%.

On the same team I built an idempotent contract-processing pipeline in Elixir and Phoenix with Oban Pro. It handled 80K+ records and cut reporting turnaround by 60%.

A production lesson I still use

A PostgreSQL database ran out of storage and took its application offline. I scaled it to restore service. The team traced the growth to retained Oban job records and added retention, scheduled cleanup and disk-usage alerts. That changed what I checked first in monitoring.

My account of the response and the team changes that followed. No production logs are published.

  • PostgreSQL
  • Elixir / Phoenix
  • Oban Pro
  • Read replicas
Writes go to a primary database split into partitions with composite indexes. Dashboard reads are routed to read replicas. Writes Dashboards Primary partition 1idxpartition 2idxpartition 3idxpartition 4idx Replica Replica
Partition the writes, route the reads.

HG Insights · 2021–2025

One shape for 15M+ records

I owned the architecture and phased rollout of a geo-standardization service with Data Solutions and downstream teams. It normalized 15M+ US and Canadian company records into canonical shapes used by ingestion and interface workflows.

A companion job system ran scheduled, on-demand and event-triggered company-spend refreshes across corporate hierarchies, moving delivery from a manual monthly batch to a weekly cadence.

The decision and its limits

Decision. Standardize at the ingestion boundary. I bring the same discipline to preparing data for retrieval, while evaluating retrieval quality separately.

Limits. Career account. Employer data and implementation are not public.

  • Data contracts
  • Elixir
  • PostgreSQL
  • Phased rollout
Differently written versions of the same city go into a normalizer and come out as one canonical record. Sta. BarbaraSANTA BARBARA CAS Barbara, Calif.santa barbara normalize citySanta BarbararegionCAcountry · US
Illustrative inputs. One canonical output.

Professional record

Built over time.

At Agilent I built internal Gemba reporting and action-tracking apps with Power Apps and Power Automate, support manufacturing operations and recipe authoring, and help colleagues adopt AI.

Employment, most recent first
DatesEmployerRoleCity
2026 – nowAgilent TechnologiesSenior Software Engineer, ManufacturingCarpinteria, CA
2021 – 2025HG InsightsSoftware EngineerSanta Barbara, CA
2018 – 2021Capital One, via CognizantSoftware EngineerVienna, VA
2018TuutkiaSoftware Engineer, part-timeSan Jose, CA
2017 – 2018Illinois Department of Public HealthSoftware Engineer InternSpringfield, IL
2013 – 2015AurionPro SolutionsSoftware EngineerPune, India
Work and study in six cities City-centre markers for Carpinteria, Pune, San Jose, Santa Barbara, Springfield in Illinois, and Vienna in Virginia. Leaders connect labels to markers, not travel routes. Land: Natural Earth, public domain. Equal Earth projection preserves relative areas. All continents included; no national borders. Projection: Equal Earth, spherical; one uniform display scale. Natural Earth SHA256: 9e0729ee253ca7d7a5c4ae9395fb1902264c5377c52e224d13dd85010e2835d9 ATLANTICINDIAN OCEAN Carpinteria01 Pune02 San Jose03 Santa Barbara04 Springfield05 Vienna06
Where the work and study happened. Equal Earth projection; marks show city centres, not travel routes. Land: Natural Earth.

M.S. Computer ScienceUniversity of Illinois at Springfield · 2018

Post-Graduate Diploma, Advanced ComputingC-DAC, Pune · 2013

Generative AI with Large Language Models (non-credit course)DeepLearning.AI and AWS (Coursera) · Feb 2026 · verify ↗

Away from the work

Mostly, outside.

I hike when I travel, and I will walk a city end to end before I take a car through it. Languages are a long-running project: English, Hindi and Marathi from home, some Italian, and German, A1 to A2, learning.

Prateek at the Koko Head summit, with Oahu and the ocean behind him.
Koko Head, Oahu
Prateek standing on a sailboat deck with green mountains and blue water behind him.
On the water
Prateek in a white cap on rocks beside a pool below a waterfall.
After the trail

Contact

Let’s talk

Paste a role and get a sourced fit brief, or write to me directly. Open to roles in the US, Germany and across the EU.

prateekmulye@gmail.com

Privacy choices

Optional analytics counts visits, broad referral sources, country, sections explored and selected link clicks. No identity, typed text or uploaded files enters these counters. Counts are kept for 90 days. Withdrawal stops future collection; earlier totals cannot be separated by visitor. Your choice never limits this site.

Analytics off.

How measurement works

Prateek Mulye uses optional daily totals to improve this portfolio. Cloudflare processes collection requests and stores these totals. Hosting and security services process request metadata separately. Analytics does not store an IP address or visitor identifier. Country means approximate network location. Email-link clicks do not confirm an email was sent.

Your browser can remember this choice for 180 days. GPC or Do Not Track keeps optional analytics off. Withdraw here at any time. Previously combined totals cannot identify your contribution. For privacy questions or rights requests, contact prateekmulye@gmail.com. You can also contact your data-protection authority.

How this page is built

Astro on Cloudflare, self-hosted fonts, optional analytics off by default. Three systems: a Swiss grid for everything you read, liquid glass for everything you operate, and vector drawings for how systems work. Built with Claude Code, reviewed by me. Machine-readable profile

System One router

Ask the portfolio.

A typed classifier picks the part of the page that answers your question and takes you there.

    Your question stays in your browser unless a remote engine is switched on.

    Let’s talk

    Paste the role. Get a sourced fit brief.

    The router detects what the role asks for. Each requirement is matched to evidence from my record, written in advance and linked to its source. It detects; it never writes claims.

      Or go direct:EmailRésuméLinkedIn ↗

      Your text stays in your browser unless a remote engine is switched on.