OPEN TO WORK

Humza Noor Sattari

I build LLM systems and measure whether they actually work. Backend services, data pipelines, and the evaluation that tells you the difference between a demo and a product.

Lahore, Pakistan · Remote or relocating · 3.5 years

Four ways coding agents fail

I benchmark coding agents for a living. These are the failure classes that show up again and again on real repositories, ordered by how hard they are to catch.

caught by tests caught by assertions needs a human

Selected work

Three systems, opened up. Expand for the decisions rather than the summary.

AI evaluation data pipelines infrastructure
AI evaluation

Evaluation harnesses for LLM coding agents

python · docker · yaml · claude, qwen · brio

▸

Coding agents are easy to be impressed by and hard to evaluate. A model producing plausible code passes a casual demo and then fails on a real repository in ways nobody catches until it matters.

I design the tasks that catch it: multi-hop, tool-calling scenarios built from real GitHub repositories and APIs, each a specification defining the environment, the time constraint and the assertions determining success, run in isolated containers so every model faces identical conditions. Reference solutions are validated by an Oracle agent first, because a task that isn't solvable measures nothing.

The hard part is writing a task that's difficult enough to discriminate between models and unambiguous enough that correctness isn't a judgement call. A task where a reasonable person could argue the agent succeeded is a task that measures nothing at all.

3 frontier models benchmarked across 3 task categories
data pipelines

LLM pipeline writing into a production CRM

python · azure functions · logic apps · openai · salesforce

▸

A client's team was researching companies by hand into Salesforce. Fifteen minutes a record, inconsistent between researchers, and capped at whatever one person could do in a day. The inconsistency was worse than the slowness: two researchers classified the same company differently, so the data couldn't be trusted downstream.

I built the full path. Scrapers and APIs for ingestion, OpenAI models for normalization and classification against a fixed schema, write-back into Salesforce, orchestrated over Azure Functions so stages scaled independently and a failure isolated instead of killing a run.

The inference was never the hard part. A non-deterministic step was writing into a system of record their sales team used daily, so a confidently wrong classification was worse than a failed run. Schema validation at the boundary with retry instead of write. Idempotent writes, because a duplicate is worse than a skip. And staged rollout of every prompt change across 100 records, then 500, then full volume: a prompt change is a deployment.

What stayed with me: schema validation catches malformed output, not wrong output. Sampled human review stayed permanently in the loop for exactly that reason.

1,270+ companies in production, manual step removed
infrastructure

Rebuilding a GPU-bound service around a queue

python · fastapi · celery · redis · cuda

▸

An image segmentation service worked in testing and fell over in production. Requests ran synchronously: call the endpoint, run inference on the GPU, hold the connection open until done. Under real concurrency, latency climbed and requests timed out. The frustrating part was that the GPUs weren't saturated, because each job held a full device regardless of what it needed.

The decoupling was the insight. A synchronous request-response design cannot absorb bursty, long-running GPU work no matter how fast the model is, so the fix had to be architectural rather than an optimization. Throughput became a function of worker count and GPU partitioning, both tunable, and queue depth stopped affecting API responsiveness.

It generalizes: the interesting problem is usually one layer up from where it appears. This looked like a model performance problem and was a request lifecycle problem. Same instinct applies to LLM systems. When agent output is bad, the fix is more often in retrieval, context construction or the eval loop than in the prompt everyone is staring at.

Stack

Grouped by how far I'd go on it, not by category. The colour is the claim.

Daily
PythonFastAPICelery RedisPostgreSQLDocker OpenAI / Anthropic APIsPandas
Shipped with
Azure FunctionsLogic AppsAWS CI/CDReactMongoDB ScrapyCUDARetool
Learning now
LangGraphLangChainRAG + eval TypeScriptSparkDatabricks

Experience

2025 — now

Data & AI Engineer (LLMs) · Brio

Agent evaluation and validation harnesses. Tool-calling scenarios across Google Workspace, Jira and Zendesk, with the Python validation code and gold-standard trajectories behind them. Review other engineers' scenarios for assertion quality.

2023 — 2025

Software Engineer · Nymble Leap

Production backends and data pipelines. LLM enrichment on Azure, distributed scrapers across large US employers with pay rate and benefits extraction, FastAPI with Celery and Redis, client-facing dashboards in Retool and React.

2023

Business Analyst · Apallo

Requirements and delivery coordination for an international client.

also

250+ client calls this year

Requirements, demos, scoping and the calls where something went wrong. Led the engineering team on PriceNav, a fuel price forecasting platform, and ran that client relationship directly.

Ask me something

>

Ask me something

Answers come from a curated fact base, not from the model's impression of me. If it doesn't know, it says so rather than improvising. That constraint is the point: a portfolio bot that embellishes is worse than no bot.