Sign in

Oleksandr Leushchenko 🇺🇦

@olexale.bsky.social
569 followers 87 following 72 posts

I help Flutter teams scale · AI agents, architecture & testing · Google Developer Expert in Flutter & Dart

PostsRepliesMedia
Oleksandr Leushchenko 🇺🇦 @olexale.bsky.social · 21h
bdd_widget_test is now a semi-official Cucumber implementation 🥒 Semi-official means it’s built on Cucumber’s own components, in this case the official Gherkin parser. Thanks to everyone who used it and sent PRs! cucumber.io/docs/install...
cucumber.io
Installation | Cucumber
Cucumber is available for most mainstream programming languages.
000
Oleksandr Leushchenko 🇺🇦 @olexale.bsky.social · 09/10/2026
I'm a huge fan and a big believer in local AI. But "Opus at home" posts make me sad. The smart numbers come from one model, the fast numbers come from another, and the post on X glues them together. So I spent two nights on benchmarks myself. leushchenko.com/writing/smar...
leushchenko.com
Smart numbers, fast numbers — Oleksandr Leushchenko
But "Opus at home" posts take the smart numbers from one model and the fast numbers from another.
000
Oleksandr Leushchenko 🇺🇦 @olexale.bsky.social · 07/10/2026
Another app added a chatbot to replace search. And honestly, I don't think it's the right thing. "Hey, what's in this carbonara?" chat with LLM? Come on, in a real restaurant you get a menu and point your finger at a picture. No more chatbots, please 👇 leushchenko.com/writing/no-m...
leushchenko.com
No more chatbots, please — Oleksandr Leushchenko
Another company has added a chatbot to its app. I don't think it's the right thing to do. The AI I want in an app is the kind I don't notice.
000
Oleksandr Leushchenko 🇺🇦 @olexale.bsky.social · 15/09/2026
Two ways to lose a small model. Tell it too little and it guesses. Tell it too much and it never reaches the part that mattered. Your prompt is small. What the model reads before it almost never is. And the smaller the model, the more it matters. leushchenko.com/writing/smal...
leushchenko.com
Smaller model, smaller room — Oleksandr Leushchenko
The same model scored 8.3% and 37.2% on the same benchmark. The only thing that changed was the harness around it.
000
Oleksandr Leushchenko 🇺🇦 @olexale.bsky.social · 31/08/2026
I have a small AI box in the closet that runs open-weight models. I used it less than I could, because for real work you still go to a real model. A new model just dropped, and it reviewed my code better than everything I pay for. leushchenko.com/writing/the-...
leushchenko.com
The reviewer I don't pay for — Oleksandr Leushchenko
A local model found five real bugs in my code, with repro steps. My subscriptions called the same code an A-minus.
010
Oleksandr Leushchenko 🇺🇦 @olexale.bsky.social · 28/08/2026
Seneca wrote about a rich man who wanted to sound educated, so he bought a slave for each poet he wanted to quote, counted their knowledge as his (and still broke down in the middle of a line). I have the same household for $20 a month. leushchenko.com/writing/sabi...
leushchenko.com
Sabinus with a $20 subscription — Oleksandr Leushchenko
A rich Roman bought slaves to memorize Homer for him. The same setup now costs twenty dollars a month.
020
Oleksandr Leushchenko 🇺🇦 @olexale.bsky.social · 24/08/2026
I run my own workflow with pieces of BMAD, SpecFlow, SPDD, and @codewithandrea.com's spec-driven flow. Haven't tried superpowers myself. Thanks for the recommendation.
000
Oleksandr Leushchenko 🇺🇦 @olexale.bsky.social · 23/08/2026
SDD is what I already do. ~85% of my time goes into the plan, refined for hours. The spec is detailed enough, it just stops being followed halfway through a long session. The Sonnet model is for sure skilled enough too, but it feels tuned for people who don't have a spec.
100
Oleksandr Leushchenko 🇺🇦 @olexale.bsky.social · 22/08/2026
Thanks! I've been playing with small local models a lot lately, and the open-weight side already does this split. Qwen has Qwen3-Coder, DeepSeek has DeepSeek-Coder, Mistral has Devstral, etc. I wouldn't be surprised if the big labs end up doing the same and charging us separately for the coding one.
110
Oleksandr Leushchenko 🇺🇦 @olexale.bsky.social · 21/08/2026
You ask for one component for one screen, and get a whole design system. You ask for a table, and mid-session the model adds search, filters and column reordering. Nobody asked 🙄 Sonnet 5 got bold. My colleague Jack has a theory about why. leushchenko.com/writing/we-a...
leushchenko.com
We are not the audience anymore — Oleksandr Leushchenko
Ask for one UI component, get a whole design system. Fine for people without a spec, ridiculous for engineers with one.
120
Oleksandr Leushchenko 🇺🇦 @olexale.bsky.social · 10/08/2026
I opened someone else's demo and recognized the website. I was showing Claude Design to a friend, and we vibecoded a stub site for their company. Not "it looks familiar". Same color scheme, same font, same layout, same vibe. One to one. leushchenko.com/writing/i-ha...
leushchenko.com
I had already seen that website — Oleksandr Leushchenko
A hackathon demo looked exactly like the stub I'd vibecoded a month earlier. Same colors, same font, same vibe.
000
Oleksandr Leushchenko 🇺🇦 @olexale.bsky.social · 04/08/2026
Big models don't fit into 128GB. DeepSeek V4-Flash is one more proof: great model, needs two DGX Sparks. So I moved on. Then someone shipped a 2-bit port that fits on a single box. Two bits. I expected broken tool calls and confident nonsense. I was wrong. leushchenko.com/writing/two-...
leushchenko.com
Two bits shouldn't be enough — Oleksandr Leushchenko
A 2-bit port of DeepSeek-V4-Flash runs on a single DGX Spark clone, and I was wrong about almost everything except the speed.
000
Oleksandr Leushchenko 🇺🇦 @olexale.bsky.social · 27/07/2026
A US client I worked with had a mobile app that was a mess. One engineer rebuilt it from scratch in two months, on the side. A whole team had spent a year on the version he replaced. That rebuild is the reason he never got promoted again. leushchenko.com/writing/comp...
leushchenko.com
Competence turns into a cage — Oleksandr Leushchenko
Park your best people on maintenance long enough and they stop being your best people. The "not ready" label has a way of making itself true.
000
Oleksandr Leushchenko 🇺🇦 @olexale.bsky.social · 24/07/2026
Ten years ago I named our Mac Mini CI build machines after Disney princesses. Cinderella, Ariel, and... one I had to sit and think about. Our IT folks didn't get it. Then the machines started having characters. This year my AI agents named themselves. leushchenko.com/writing/nobo...
leushchenko.com
Nobody remembers ci-runner-2 — Oleksandr Leushchenko
Why I've been naming build machines for ten years, and why my AI agents named themselves.
010
Oleksandr Leushchenko 🇺🇦 @olexale.bsky.social · 21/07/2026
Successful companies go blind like cave fish. Stop fighting to survive, and you stop needing sharp eyes. Ian Reppel nails it. I ran mobile at a big Ukrainian outsourcer and watched it hit client after client. Staying small is the way out. leushchenko.com/writing/how-...
leushchenko.com
How good companies go blind — Oleksandr Leushchenko
Politics moves in the moment a company stops fighting for its life. Small teams stay sharp because they can still feel the market — and AI just made it possible to stay that small for a lot longer.
010
Oleksandr Leushchenko 🇺🇦 @olexale.bsky.social · 16/07/2026
I wrote my own "Windows" at 13. My teachers made me optimize matrix multiplication instead. Guess how many times I've multiplied a matrix by hand at work since. Zero. My reply to Doug Turnbull's case for writing code by hand. leushchenko.com/writing/the-...
leushchenko.com
The details moved up a level — Oleksandr Leushchenko
Your clients aren't paying for the pleasure of watching you hand-craft a for-loop.
000
Oleksandr Leushchenko 🇺🇦 @olexale.bsky.social · 06/07/2026
Someone argued AI made writing software cheap, so domain knowledge is the only moat left. It keeps showing up in my feed, so here's my take: the pencil got cheap, not the skill. leushchenko.com/writing/vibe...
leushchenko.com
Vibecoders don't skip the auth layer on purpose — Oleksandr Leushchenko
They skip it because they don't know it belongs there. The pencil got cheap. The skill didn't.
010
Oleksandr Leushchenko 🇺🇦 @olexale.bsky.social · 01/07/2026
A new open model dropped this week. Benches right next to Opus 4.7, runs on my own AI box. I already had it swapped into my agents and called it permanent. Then I gave it a tiny coding task. 15 minutes later, I pulled the plug. ☹️ The full story is here: leushchenko.com/writing/tiny...
leushchenko.com
Tiny tasks tell more than benchmarks — Oleksandr Leushchenko
The story of a benchmark star that couldn't rename two variables.
000
Oleksandr Leushchenko 🇺🇦 @olexale.bsky.social · 29/06/2026
I bought an Asus GX10. Everyone says it's too slow for real work, but after 1.5 months, I'm loving it still! Recently performance seemed to have dropped, so I dug in. The reason and the fix are funny 😁 (also, I have a website now! 🙌) leushchenko.com/writing/Fixi...
000
Oleksandr Leushchenko 🇺🇦 @olexale.bsky.social · 17/12/2025
u24.gov.ua - United 24 savelife.in.ua/en/ - Come back alive prytulafoundation.org/en - Prytula Foundation yellow-tape.com.ua/home-eng - Yellow Tape Foundation koloua.com/en/ - KOLO
111
Oleksandr Leushchenko 🇺🇦 @olexale.bsky.social · 17/12/2025
As usual, if you enjoy the article, the best way to show your appreciation now is by supporting my country - Ukraine 🇺🇦If you can afford it, I encourage donations to well-established charity foundations (except for the Red Cross), here are a few:
100
Oleksandr Leushchenko 🇺🇦 @olexale.bsky.social · 17/12/2025
I’ve seen many strong teams slowed down by code they wrote themselves. Not because it was bad, but because it was “good enough” at the time. I wrote about why this happens in settled teams, and how I try to reason about it: olexale.medium.com/when-good-en...
olexale.medium.com
When “Good Enough” Is Neither Good nor Enough
Why shortcuts compound unpredictably in long-lived codebases
100
Oleksandr Leushchenko 🇺🇦 @olexale.bsky.social · 29/08/2025
But Dart’s Records make this so much nicer: 𝘧𝘪𝘯𝘢𝘭 (𝘢, 𝘣, 𝘤) = 𝘢𝘸𝘢𝘪𝘵 (𝘰𝘱𝘦𝘳𝘢𝘵𝘪𝘰𝘯𝘈(), 𝘰𝘱𝘦𝘳𝘢𝘵𝘪𝘰𝘯𝘉(), 𝘰𝘱𝘦𝘳𝘢𝘵𝘪𝘰𝘯𝘊()).𝘸𝘢𝘪𝘵; ✨ No casts. ✨ No hidden index dependencies. ✨ Much cleaner, safer, and more readable. And now you know it too 😁
1121
Oleksandr Leushchenko 🇺🇦 @olexale.bsky.social · 29/08/2025
Example: 𝘧𝘪𝘯𝘢𝘭 𝘳𝘦𝘴𝘶𝘭𝘵𝘴 = 𝘢𝘸𝘢𝘪𝘵 𝘍𝘶𝘵𝘶𝘳𝘦.𝘸𝘢𝘪𝘵([𝘰𝘱𝘦𝘳𝘢𝘵𝘪𝘰𝘯𝘈(), 𝘰𝘱𝘦𝘳𝘢𝘵𝘪𝘰𝘯𝘉(), 𝘰𝘱𝘦𝘳𝘢𝘵𝘪𝘰𝘯𝘊()]); 𝘧𝘪𝘯𝘢𝘭 𝘢 = 𝘳𝘦𝘴𝘶𝘭𝘵𝘴[0] 𝘢𝘴 𝘛𝘺𝘱𝘦𝘈; 𝘧𝘪𝘯𝘢𝘭 𝘣 = 𝘳𝘦𝘴𝘶𝘭𝘵𝘴[1] 𝘢𝘴 𝘛𝘺𝘱𝘦𝘉; 𝘧𝘪𝘯𝘢𝘭 𝘤 = 𝘳𝘦𝘴𝘶𝘭𝘵𝘴[2] 𝘢𝘴 𝘛𝘺𝘱𝘦𝘊;
100
Oleksandr Leushchenko 🇺🇦 @olexale.bsky.social · 29/08/2025
Today I learned a neat #Dart trick for running multiple async operations in parallel. I used to rely on 𝗙𝘂𝘁𝘂𝗿𝗲.𝘄𝗮𝗶𝘁(), but that meant: • Casting results manually (𝘢𝘴 𝘛𝘺𝘱𝘦𝘈, 𝘢𝘴 𝘛𝘺𝘱𝘦𝘉 … 😩) • The logic depended on the order of operations (easy to break, especially with LLMs 😅).
291
Oleksandr Leushchenko 🇺🇦 @olexale.bsky.social · 25/08/2025
u24.gov.ua - United 24 savelife.in.ua/en/ - Come back alive prytulafoundation.org/en - Prytula Foundation yellow-tape.com.ua/home-eng - Yellow Tape Foundation koloua.com/en/ - KOLO
000
Oleksandr Leushchenko 🇺🇦 @olexale.bsky.social · 25/08/2025
If you like the package, the best way to show your appreciation now is by supporting my country - Ukraine 🇺🇦If you can afford it, I encourage donations to well-established charity foundations (except for the Red Cross), here are a few:
100
Oleksandr Leushchenko 🇺🇦 @olexale.bsky.social · 25/08/2025
Just updated bdd_widget_test! ⚠️ Heads up: This release includes a breaking change. I had to remove some functionality. If you miss it, please reach out! 📊 Mind-blowing: 61K+ downloads last week! Happy to see that so many of you find it useful. Check it out: pub.dev/packages/bdd...
pub.dev
bdd_widget_test | Dart package
A BDD-style widget testing library. Generates Flutter widget tests from *.feature files.
131
Oleksandr Leushchenko 🇺🇦 @olexale.bsky.social · 06/08/2025
u24.gov.ua - United 24 savelife.in.ua/en/ - Come back alive prytulafoundation.org/en - Prytula Foundation yellow-tape.com.ua/home-eng - Yellow Tape Foundation koloua.com/en/ - KOLO 6/6
020
Oleksandr Leushchenko 🇺🇦 @olexale.bsky.social · 06/08/2025
As usual, if you enjoy the talk, the best way to show your appreciation now is by supporting my country - Ukraine 🇺🇦If you can afford it, I encourage donations to well-established charity foundations (except for the Red Cross), here are a few: 5/6
110
Oleksandr Leushchenko 🇺🇦 @olexale.bsky.social · 06/08/2025
If you’re interested in more details, I just published an article on the topic: olexale.medium.com/0a95cef1dd63 4/6
olexale.medium.com
Why Experts Struggle With Known Problems in Software Architecture
How past experience holds you back
100
Oleksandr Leushchenko 🇺🇦 @olexale.bsky.social · 06/08/2025
4/ When complexity grows, we add MORE complexity instead of simplifying the problem. 💡 The solution: Start small. Break big problems into small ones. Let your app guide you to what's actually needed. 3/6
100
Oleksandr Leushchenko 🇺🇦 @olexale.bsky.social · 06/08/2025
2/ We build emotional attachments to past solutions. They become our default, and we get defensive when challenged. 3/ Context changes, but our solutions don't. A banking app ≠ calculator ≠ social network, yet we apply Clean Architecture universally. 2/6
100
Oleksandr Leushchenko 🇺🇦 @olexale.bsky.social · 06/08/2025
🧵 Just published an article on why solving NEW problems is easier than KNOWN ones (especially for experts): olexale.medium.com/0a95cef1dd63 TL;DR 👇 1/ We fall into the pattern-matching trap. Solved it before? Must use the same solution again. 1/6
olexale.medium.com
Why Experts Struggle With Known Problems in Software Architecture
How past experience holds you back
132
Oleksandr Leushchenko 🇺🇦 @olexale.bsky.social · 17/07/2025
u24.gov.ua - United 24 savelife.in.ua/en/ - Come back alive prytulafoundation.org/en - Prytula Foundation yellow-tape.com.ua/home-eng - Yellow Tape Foundation koloua.com/en/ - KOLO
010
Oleksandr Leushchenko 🇺🇦 @olexale.bsky.social · 17/07/2025
If you enjoy the talk, the best way to show your appreciation now is by supporting my country - Ukraine 🇺🇦If you can afford it, I encourage donations to well-established charity foundations (except for the Red Cross), here are a few:
120
Oleksandr Leushchenko 🇺🇦 @olexale.bsky.social · 17/07/2025
In this talk, I cover: ✅ When on-device AI makes sense (and when it doesn’t) ✅ How to integrate AI models into your Flutter apps ✅ Live demos to kickstart your own AI-powered features If you’re building #Flutter apps and thinking about #AI - this is for you.
111
Oleksandr Leushchenko 🇺🇦 @olexale.bsky.social · 17/07/2025
🚀 Just published my "Integrating On-Device #AI Models into #Flutter Apps" talk from FGS! In a world obsessed with LLMs and chatbots, it’s easy to forget the power of running AI locally - no servers, no latency, and better privacy. www.youtube.com/watch?v=tRNr...
youtube.com
"Integrating On-Device AI Models into Flutter Apps" talk by Oleksandr Leushchenko on FGS'25
YouTube video by Oleksandr Leushchenko
121
Reposted by Oleksandr Leushchenko 🇺🇦
Talsec @talsecofficial.bsky.social · 20/06/2025
Podcast: iOS Keychain vs Android Keystore. Whether you’re building for Android, iOS, or both, you’ll get practical tips and clear explanations to help you choose the right approach for your next project. www.youtube.com/watch?v=nB4h...
youtube.com
iOS Keychain vs Android Keystore
YouTube video by Talsec
021
Oleksandr Leushchenko 🇺🇦 @olexale.bsky.social · 30/05/2025
That reminded me of my childhood - my friends and I used to clone each other’s toys by making aluminum copies. Not because we didn’t have toys, but just because it was fun to create molds and pour in melted aluminum 🙂
110
Oleksandr Leushchenko 🇺🇦 @olexale.bsky.social · 21/05/2025
🚀The MiniClient series is complete! Want more? I might stream about CI/CD, testing, or on-device AI. Drop your ideas in the replies or YouTube comments! 🎤 Next stop: #FlutterGlobalSummit. Don’t miss it! 📺 Catch all 3 streams here: youtube.com/playlist?lis...
youtube.com
MiniClient Flutter tutorial - YouTube
Ever wondered how experienced developers structure their Flutter projects? In this hands-on tutorial series, we build a Flutter app from scratch, breaking do...
000
Oleksandr Leushchenko 🇺🇦 @olexale.bsky.social · 19/05/2025
It’s all about balance. Knowing when to try new things is just as important as what to try. By the way, the final stream of the MiniClient tutorial is happening tomorrow. I hope you’ll learn something new you’ll want to try in your own experiments. Don’t miss it! (4/4) youtube.com/live/bHxqnyB...
youtube.com
Live Coding: MiniClient Flutter Tutorial #3
🔴 Live Coding: MiniClient Tutorial #3 In this second part, I walk through the "navigation" and "testing" parts of the MiniClient tutorial — a hands-on introduction to how we build and scale large real...
031
Oleksandr Leushchenko 🇺🇦 @olexale.bsky.social · 19/05/2025
But when I’m working on something production-critical or for a client, I rely on well-tested tools and familiar approaches. That’s not the time for experiments - that’s when reliability matters most. (3/4)
120
Oleksandr Leushchenko 🇺🇦 @olexale.bsky.social · 19/05/2025
When I’m experimenting or building a proof of concept, I intentionally change one or two things: a new dependency or a new architectural idea. Small changes keep things manageable and help me learn without derailing the project. (2/4)
110
Oleksandr Leushchenko 🇺🇦 @olexale.bsky.social · 19/05/2025
After my first two streams, I’ve been asked a few times: ❓“Do you always structure your projects this way?” ❓“Do you always use the same dependencies?” The short answer is no. Every project is a chance to learn, refine, and grow. (1/4) youtube.com/live/bHxqnyB...
youtube.com
Live Coding: MiniClient Flutter Tutorial #3
🔴 Live Coding: MiniClient Tutorial #3 In this second part, I walk through the "navigation" and "testing" parts of the MiniClient tutorial — a hands-on introduction to how we build and scale large real...
121
Reposted by Oleksandr Leushchenko 🇺🇦
Talsec @talsecofficial.bsky.social · 14/05/2025
How to Block Screenshots, Screen Recording, and Remote Access Tools in Android and iOS Apps - watch our newest podcast featuring @olexale.bsky.social & @mhadaily.bsky.social www.youtube.com/watch?v=ZHhs...
youtube.com
How to Block Screenshots, Screen Recording, and Remote Access Tools in Android and iOS Apps
YouTube video by Talsec
041
Oleksandr Leushchenko 🇺🇦 @olexale.bsky.social · 14/05/2025
u24.gov.ua - United 24 savelife.in.ua/en/ - Come back alive prytulafoundation.org/en - Prytula Foundation yellow-tape.com.ua/home-eng - Yellow Tape Foundation koloua.com/en/ - KOLO
010
Oleksandr Leushchenko 🇺🇦 @olexale.bsky.social · 14/05/2025
If you enjoy the streams, the best way to show your appreciation now is by supporting my country - Ukraine 🇺🇦If you can afford it, I encourage donations to well-established charity foundations (except for the Red Cross), here are a few:
210
Oleksandr Leushchenko 🇺🇦 @olexale.bsky.social · 14/05/2025
🚨 Final MiniClient stream – 📅 May 20 🕓 4 PM UTC We covered utility, feature & application layers. Now it's time for: 🧭 Navigation 🧪 Testing Wrapping up this comprehensive guide to building complex Flutter apps www.youtube.com/live/bHxqnyB...
youtube.com
Live Coding: MiniClient Flutter Tutorial #3
🔴 Live Coding: MiniClient Tutorial #3 In this second part, I walk through the "navigation" and "testing" parts of the MiniClient tutorial — a hands-on introduction to how we build and scale large real...
210
Oleksandr Leushchenko 🇺🇦 @olexale.bsky.social · 14/05/2025
u24.gov.ua - United 24 savelife.in.ua/en/ - Come back alive prytulafoundation.org/en - Prytula Foundation yellow-tape.com.ua/home-eng - Yellow Tape Foundation koloua.com/en/ - KOLO
000