
Ilya founded Nerdy Production and leads its engineering. Before that he was CTO of QIWI, one of Russia's largest payment platforms, where he ran roughly 12 engineering teams spanning web products down to card processing, PCI-DSS scope, and contactless payments — including building contactless card payments on Android via Host Card Emulation over ISO/IEC 14443, with EMV Contactless (Visa PayWave) on top. He was also a principal developer at Yandex, where he worked on Yandex.Auto — taking native Android deep into the vehicle, with heavy CAN-bus integration through a custom CAN shield. He was also a principal at Evotor, whose point-of-sale devices run on a forked AOSP, giving him a low-level view of Android most app developers never touch. He has been building software since 2010 and shipping production Flutter since 2018, and now leads delivery on the agency's flagship apps — from the chart-heavy fintech UI of ExtraETF to the fully custom design system of Arcana. He writes most of the essays on this blog and maintains the agency's open-source work, including the dxpdf DOCX-to-PDF engine. He works across Flutter, Go, Rust, TypeScript, Kotlin, Kubernetes, and Docker, with a focus on app architecture, cross-platform delivery, and building teams that ship.
Recent posts
How AI Agents Struggle with Flutter: 7 Gaps Experience Still Closes
We let agents write a large share of our Flutter code, and we review a lot of Flutter written by agents nobody supervised. The difference is not typing speed — it is seven decisions an unsupervised agent gets wrong every single time: it recomputes derived state instead of keeping one source of truth, ships no tests or benchmarks, wires complex async into if-pyramids instead of streams, treats design tokens as constants instead of a Theme, invents a new UX vocabulary on every screen, concatenates strings where ICU is required, and simplifies uniformly instead of knowing where complexity has to stay. Here is what each one looks like in Dart, why the agent lands there, and what we do instead.
July 26, 2026How We Ship 20+ Branded Apps From One Flutter Codebase — and Survive Apple 4.2.6
Most "white-label" app shops just reskin one binary — and Apple guideline 4.2.6 rejects exactly that. Here is the architecture we use to ship 20+ genuinely distinct branded apps from a single Flutter codebase: per-tenant authentication and server-driven content that make each app a real standalone product, not a duplicate.
July 10, 2026Hire Flutter Developers in 2026: In-House vs Agency vs Staff Augmentation
Three ways to hire Flutter talent in 2026 — in-house, agency, or staff augmentation — compared on cost, speed, and risk, with real rate ranges and a decision framework for founders and CTOs.
July 3, 2026How We Build With AI: Architecture and Flexibility Over Keystrokes
AI now writes a large share of the code in any serious shop — 84% of developers use it daily. We lean into that on purpose. Letting agents produce the code frees our engineers to do the work AI is worst at: architecture, flexibility, and the whole-system decisions that determine whether software survives its second year. Here is how we actually build in 2026, why we moved the human effort up the stack, and how we keep AI-written code from turning into the tangled codebases we audit every week.
June 19, 2026AI Code Audit Findings: 6 Problems in Almost Every AI-Built Codebase
Your AI-built app may already be live, and the security holes are only half the story. As the same six engineering problems pile up — no tests, rampant duplication, no consistent architecture, callback hell, no awareness of the deployment environment, and secrets in plain sight — the codebase gets so tangled that even an AI agent can no longer keep implementing changes safely. That is exactly why an audit is needed: here is what each problem looks like, why AI produces it, and how we fix it.
June 18, 2026