> {{ kickerTyped }}

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

SRE in the agentic world: validators, postmortems and on-call discipline, applied to systems that include agents.

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.

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  →

Blameless postmortems of my own AI-coach project (not employer work), in the usual SRE format: summary, impact, root cause, detection, lessons, action items.

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 and SRE.
+
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
SRE & AI engineer

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 (the app's core module, 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, with agreement from 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 student & teaching assistant — Université Grenoble AlpesOct 2017 — Nov 2020
Software Developer — Altium, MoscowJan 2016 — Sep 2017
  • Wrote the topological tracer library in C++ for PCB design software; built and maintained the geometric library; Boost C++ libraries, unit tests
Intern, Decision Management Unit — Citibank, MoscowJul 2014 — Feb 2015
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
Also

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

LAB // EXPERIMENT REGISTRYOWN PROJECT
NODE: M5 / 32GB · MLX (train) · llama.cpp (device)API SPEND: 0STATIC · LAST BUILD {{ buildDate }}
Lab notebook of my own projects (not employer work): experiments, a test harness and blameless postmortems. 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

My PhD taught me this: a finite run of good results is evidence, so I don't call it a proof. 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 — SRE & AI engineer
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