Ilya founded Nerdy Production and leads its engineering. He has been building software since 2010 and shipping production Flutter since 2018.

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, scope, and contactless payments — including building contactless card payments on Android via 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 — and a principal at Evotor, whose point-of-sale devices run on a forked , giving him a low-level view of Android most app developers never touch.

Today he 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, native iOS and Android, Go, Rust, TypeScript, Kotlin, Kubernetes, and Docker, with a focus on app architecture, cross-platform delivery, and building teams that ship.

Recent posts

Software Engineering

Five States That Can't Exist, and Your Code Allows All of Them

We gave an agent an ordinary task — a product list screen with loading, an error and data — and it returned a class with one boolean and two nullable fields. That is eight combinations, three of which mean anything; the other five compile, pass review, ship, and wait. This is what an impossible state is, why it is the same thing as a broken invariant, why the real cost is not runtime bugs but the unwritten conventions every reader has to reconstruct, and how sealed classes plus exhaustiveness turn a whole category of mistakes into a build failure. Also: why an enum plus nullable fields makes it worse, the one line that silently switches the check off, and the four places where algebraic data types do not help at all.

August 31, 2026
Cybersecurity

Your SSL Pinning Probably Isn't Working

Google says certificate pinning "is not recommended for Android apps." Apple says "in most cases, pinning is not necessary and should be avoided." OWASP now says the answer to "should I pin?" is "probably never." Meanwhile pinning ships in roughly half the mobile apps we audit — and on Flutter it usually protects nothing at all, because Dart does not use the platform networking stack, so the pin-set in your network_security_config.xml is never read. Here is what pinning actually buys you in 2026, whether you need it, five rules if you do, why Flutter breaks all of them, and how to find out in half an hour which of those applies to your app.

August 27, 2026
Software Engineering

Everyone Got the Timeline Wrong: AI, Juniors, and Quantum

Two years ago the loudest voices in tech said software engineers would be obsolete by now. They were wrong: developer employment did not collapse. But the same wave that failed to remove developers removed something else — the routine work that turned beginners into seniors. Employment of developers aged 22 to 25 is down roughly 20% since late 2022 while their older colleagues held flat or grew. Meanwhile quantum computing is running the identical hype cycle one lap behind, and the milestone that actually matters is not the one in the headlines. Here is what the evidence supports, what it does not, and how to tell the two apart.

August 18, 2026