> {{ kickerTyped }}

Formalize the domain. Constrain the system. Then let the model in.

I build AI systems for domains that resist automation — agents that need less trust, not more. Blind trust in an LLM is Morty trusting Rick: fine, right up until the episode turns dark.

View my work Read writing  →
Google
ex-Yandex ex-Huawei ex-Altium ex-Citi
Forever Ph.D.
Dmitry Grishchenko
{{ stickerTyped }}
ENGINEER // OPTIMIZER // POWERLIFTER
Trajectory
TWO ARCS · THE DESK AND THE BAR
Arc I · from theory to practice
▶
OCT 2017 — NOV 2020 · UGA
Math optimization

PhD on proximal methods that reduce dimension on their own. Main takeaway: if the math isn't provable, the algorithm may fail somewhere — no matter how many experiments converged.

AUG 2020 — NOV 2021 · HUAWEI
Applied math → R&D

Tech lead of a PCB-router team built from zero: hiring, delegating, an integer geometry library from scratch. Exact science — no floating-point slack, and every algorithm judged on speed and optimality. Not a high-RPS service; the first time math had a deadline and a team.

NOV 2021 — DEC 2022 · YANDEX
R&D → users

Driver-position prediction on the road graph — the first thing I built that I could watch working from the back seat. −20% wrong assignments, −15% cancellations. Learned to listen to the business, take their metric and translate it into one the algorithm can optimise — no cost or cancellation counts inside the model.

JAN 2023 — NOW · GOOGLE
SRE → agents

Automation for reliable resource use across internal services. On-call, incident management, postmortems — failure turns out to be a domain like any other, and it formalizes. Lately that meant removing a single point of failure across ~2,000 services — an N+1 fix I designed and rolled out after agreeing it with seven teams — and an agent skill that keeps my service's operational knowledge in one place. Someone still has to own the outcome.

Arc II · under the bar
▶
2020 — NOW · ATHLETE
Trained with a coach

Lifting since 2020, first meet in 2021. Long cycles, slow progress, and the cost of over-reacting to one bad day.

2025 — NOW · COACH
Trained as a coach

Coaching one athlete since 2025 — competing since the same year. First on my own programmes adapted to his life, then on plans written with ChatGPT from the literature. The real work is the adjusting — his schedule, his sleep, what actually happened in the session, and whether last week's change was the right call. Read the case →

2026 — NOW · FOUNDER
Built the coach

PowerliftME — for people who chase the weight on the bar, not the abs in the mirror. It started as the tool I wanted for coaching: programmes, progression and honest logging, usable with no model installed. In progress: wiring the periodization engine to the live planner, and the plan linter. Coding agents are what made building it alone realistic.

Selected work
PowerliftME cockpit — 225 kg on the bar, plates per side, target RPE
PowerliftME — Today
CoachON-DEVICE
{{ m.text }}
Tell the coach how today feels…
PowerliftME
iOS · solo — engine to app

The app's live planner generates sessions and adapts future training from your logs. A separate 16-week periodization engine is implemented and tested, but is not yet integrated with that planner. An on-device model explains values supplied by the app, with output checks for unsupported numbers. The Lab tracks the bridge and the unfinished plan linter.

Swift MLX · llama.cpp Gemma 4
powerlift.me  →

Research archive

Peer-reviewed, unlike this website. The optimisation years — where the habit of formalising first comes from.

Citationsh-indexi10 17375 Google Scholar →
Papers Talks Teaching
{{ holding }}{{ utc }} LOCAL
{{ t.name }} {{ t.n }}
IDTitleYearVenueTopicCitedLink
{{ p.id }} {{ p.title }}
{{ p.authors }}
{{ p.year }} {{ p.venue }} {{ p.topic }} {{ p.citedText }} {{ p.linkLabel }} · PDF
Record
{{ recTitle }}
Venue
{{ recVenue }}
Note
{{ recNote }}
Keywords
{{ recKeywords }}
DateTalkWhereMaterial
{{ t.date }} {{ t.title }} {{ t.where }} {{ t.slidesLabel }} · Video

Links go to the talk pages of the 2016–2021 site (abstracts, dates, venues). Slide PDFs were never committed to the repo — they return once the files are added to /files/.

YearsCourseWhereWhatMaterials
{{ c.years }} {{ c.course }} {{ c.where }} {{ c.what }} Course page—

Three years as a teaching assistant at UGA: numerical optimisation, convex and distributed optimisation, and the pre-MSc refresher. Before that, calculus at HSE and five years grading the Tournament of Towns.

Custodian: D. Grishchenko
Institute: Université Grenoble Alpes
Interests
optimization · sparsification · distributed algorithms
Writing
Archive/Notes/Ideas
AI systems
{{ nAI }}
On-device models, fine-tuning, and the boundary between code and model.
+
Optimization
{{ nOpt }}
Control loops, lookup matrices — where the PhD still earns its keep.
+
Agents
{{ nAgents }}
Building agents that reason, act, and stay inside their limits.
+
Reliability
{{ nRel }}
Systems, SRE, and agents that get paged so people don't have to.
+
Method
{{ nMethod }}
How a messy domain becomes an engine with validators.
+
Not published yet
{{ p.date }} {{ p.title }} {{ p.read }} {{ p.cat }}
View all posts  →{{ shown }}
How these are written

Notes on things I built, tested, or got wrong. Where there is a result, the setup and the test come with it, and so does whatever is still unresolved — every experiment has its registry entry in the Lab. Published pieces are dated. Everything below the line in that list is a plan, not a draft I am hiding.

← Writing

{{ essay.title }}

{{ essay.date }}·{{ essay.read }}·{{ essay.tagline }}

{{ essay.dek }}

{{ b.t }}

{{ b.t }}

‹{{ b.t }}›

{{ b.t }}
{{ r.n }}
{{ r.l }}
CAN'T TELL YOU
{{ b.cant }}
CAN TELL YOU

CV

One page, A4. This is the print layout — the PDF is the same file. On a phone use Print, then Save as PDF; the browser's Share → PDF captures the screen instead, chrome and all.

Print → Save as PDF
Dmitry Grishchenko
AI engineer for production-critical domains

Optimization PhD turned SRE turned applied-AI builder. I take folklore-heavy expert domains, formalize them into engines with validators, and put fine-tuned models to work inside — most recently a fully on-device AI coach, built and shipped solo. Reliability discipline from production SRE; mathematical rigor from a PhD in optimization. Where the work is public, the claim below links to it.

Projects
PowerliftME — AI powerlifting coach, founder2026 — now
  • Formalized the domain: implemented and tested a separate 16-week periodization engine with a class-by-weight-category matrix; integration with the app's live planner is still in progress
  • Validators before AI: a plan linter, rules-first like the engine — one check written, five detectors and the planner bridge still ahead; documented the spec/code gap in public rather than hide it
  • Fine-tuned 3 models (Gemma 4 E2B + two Qwen3), one shipped on-device (GGUF · llama.cpp, quantized to 3.18 GB) as a translator only — the app is fully functional without it; trained with LoRA on MLX; coach-gemma-e2b live on HuggingFace
  • Swift monorepo: iOS app + shared SPM packages (IronQueueCore, DesignSystem, LocalInference) — module boundaries the compiler enforces
Experience
SWE-SRE — Google, MunichJan 2023 — now
  • Removed a single point of failure across ~2,000 internal services: designed the N+1 redundancy fix, rolled it out with large-scale-change tooling, aligned 7 teams
  • Built an LLM agent skill that holds my service's operational knowledge, so on-call no longer hunts for the right playbook · on-call, incident response, postmortems
Senior Software Developer — Yandex, MoscowNov 2021 — Dec 2022
  • Driver positioning on the road graph: snapped noisy GPS traces, predicted future positions, built the quality metrics for both
  • Cut erroneous trailing-order assignments 20% — ride cancellations dropped 15%
Senior Software Developer, team lead — Huawei, MoscowAug 2020 — Nov 2021
  • Built the C++ team from zero and shipped the router's integer geometry library from scratch (contractor from Aug 2020, team lead from Feb 2021)
PhD researcher & teaching assistant — Université Grenoble AlpesOct 2017 — Nov 2020
Software Developer — Altium, Moscow2016 — 2017
Selected publications
Skills
algorithms & optimization C++ Go reliability / SLOs incident response evals & validators LoRA fine-tuning MLX · llama.cpp · on-device Swift · SwiftUI Python distributed systems
Education

PhD, applied mathematics — Université Grenoble Alpes, 2020

MSc, applied mathematics — HSE, Moscow, 2017

BSc, mathematics — HSE, Moscow, 2015

Languages
Russiannative
Englishfluent
GermanB1, progressing toward B2
Also

Competing powerlifter & coach
World Puzzle Championship — Russia first team when I can make the trip
Codeforces Candidate Master, earned pre-AI

LAB // EXPERIMENT REGISTRYUNDER CONSTRUCTION
NODE: M5 / 32GB · MLX (train) · llama.cpp (device)API SPEND: 0STATIC · LAST BUILD {{ buildDate }}
WIP — entries are being written up from notes. Numbers here are working figures, not published results; the essays are the checked version. registry v0 · ordered, not dated
STATUS · SNAPSHOT AT BUILD
{{ l.prompt }}{{ l.text }}
dmitry@lab:~$ {{ labCmdTyped }}
RUNNING NOW
{{ x.id }}{{ x.title }} →
THE RULE OF THIS PLACE

Nothing here is a claim until it has been through the harness. Killed experiments stay in the registry — a negative result is still a result.

EXPERIMENTS · {{ nAll }} · GROUPED BY ESSAYj/k = next · click id = jump
SHIPPED
{{ nShipped }}
RUNNING
{{ nRunning }}
SHELVED
{{ nShelved }}
KILLED
{{ nKilled }}
{{ notShipLine }} · NOTHING RETRACTED FROM THE LOG
{{ x.num }}
{{ g.label }} · {{ g.n }} read the essay → essay in draft registry entry only — the write-up is the queue
dmitry@lab:~$ cat {{ x.file }}
EXP {{ x.num }} {{ x.status }} {{ x.tag }}
{{ x.title }}
HYPOTHESIS{{ x.hypothesis }} METHOD{{ x.method }} RESULT{{ x.result }} VERDICT{{ x.verdict }} COST{{ x.cost }}
HARNESS · HOW EVERY EXPERIMENT GETS JUDGED

There is no reference API to compare against. So the instrument is checked before the model, and three independent loops have to agree.

1 gate→ 2 fact scorer→ 3 hard holdout→ manual read
1 · gate51 parser fixtures + 8 chat probes. Field accuracy EN ≥ 90%, RU ≥ 80%. Chat: Cyrillic share · no markdown · 1–4 sentences · non-degenerate. Relevance is judged by hand — and the harness says so.
2 · scorerAn answer counts only if the language matches, every kg-number traces to ground truth or the fact block, and the key number is within one plate (2.5 kg; weeks exact or ±1).
calibrationThe scorer runs on the gold answers first and must score ~100%: 99.7 / 100 / 100 / 99.4. A model well below that line has a real failure, not a parser quibble.
3 · holdoutSplit by programme, never by pair — a programme cannot sit on both sides. The earlier set reached 80/80 and stopped distinguishing the current candidates. It could still detect regressions; a harder set was added to evaluate remaining failure modes.
manualStill finds what no check does. Three corpus holes on holdout v2 came from reading, not from metrics.
WHY THIS MUCH

A finite run of good results is evidence, not proof — the PhD lesson. Generation got cheap; verification did not. This page is where that bill gets paid.

POSTMORTEMS · {{ nPm }} · BLAMELESSclick = open

Every killed or shelved experiment gets the same report an SRE writes after an incident. Same headings, same rule: no blame, only causes and actions.

{{ p.id }}{{ p.status }}{{ p.title }}{{ p.sev }}
summary{{ p.summary }}
impact{{ p.impact }}
root cause{{ p.root }}
trigger{{ p.trigger }}
detection{{ p.detection }}
lessons{{ p.lessons }}
action items{{ p.actions }}
LOG · NEWEST FIRST
{{ e.tag }}{{ e.t }}
DMITRY(1)USER COMMANDSDMITRY(1)
NAME
dmitry — AI engineer for production-critical domains
SYNOPSIS
dmitry [--formalize DOMAIN] [--constrain] [--verify] [--model LAST]
DESCRIPTION
Optimization PhD, production SRE, and the solo author of a training app that ships a model it will not trust with arithmetic. Refuses to call a result proven on experiments alone. Ships alone when needed; prefers a team with clear roles.
OPTIONS
--formalizeTurn expert knowledge into rules code can run. Default; cannot be disabled. --constrainBound what the model may decide before it decides anything. Not one number from the model. --verifyGate → scorer → hard holdout → manual read. Instrument calibrated before the model. --offlinePrefers on-device. API spend on the current project: 0. --metricTranslates a business question into something an algorithm can optimise, and back. --oncallHas been paged. Writes the postmortem.
EXIT STATUS
0shipped · in harness · with a receipt 1killed · with a postmortem 2shelved · by a constraint, not by the data
BUGS
Over-tightens correctness when "good enough, on time" was the goal.
ENVIRONMENT
M5 / 32 GB · MLX for training · llama.cpp on the phone · Munich
SEE ALSO
cv(1), essays(7), experiments(8), mail(1)
grishchenko.org{{ buildDate }}DMITRY(1)
dmitry@lab:~$ {{ promptLine }}
terminal is navigation, not a shell · exit to site