<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>Dee&apos;s Blog · Notes from a designer-engineer in LA</title><description>Posts on AI engineering, agent design, and the unedited parts of shipping solo. By Dee Kargaev. Los Angeles.</description><link>https://blog.deeflect.com/</link><item><title>I was a half-builder</title><link>https://blog.deeflect.com/half-builder/</link><guid isPermaLink="true">https://blog.deeflect.com/half-builder/</guid><description>A half-builder is an &quot;AI builder&quot; who can do one half of the design-to-deploy chain and skips the rest. They post the demo. They never post the URL. Builder.ai was the loud version. Most of your timeline is the quiet version. So am I. This essay is me stopping.</description><pubDate>Thu, 07 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://blog.deeflect.com/medium-img/half-builder.jpg&quot; alt=&quot;I was a half-builder&quot; /&gt;&lt;/p&gt;
&lt;p&gt;I have thirteen public repositories on GitHub.&lt;/p&gt;
&lt;p&gt;Three of them are real products.&lt;/p&gt;
&lt;p&gt;The rest are half-shipped: interesting starts, side-quests, idea-shaped objects with a README and a &lt;code&gt;pushed_at&lt;/code&gt; date and not much past it. &lt;em&gt;Universal-codemode&lt;/em&gt;: clean idea, two demos, no users I can name. &lt;em&gt;Vasted&lt;/em&gt;: works on my machine, never advertised, never used by anyone who isn&apos;t me. &lt;em&gt;Smart-spawn&lt;/em&gt;: model router, never wired into anything I run daily. &lt;em&gt;Mcclaw&lt;/em&gt;: Mac LLM checker, fun side build, abandoned at v0.2. &lt;em&gt;Moltedin&lt;/em&gt;: a marketplace I sketched and walked away from. &lt;em&gt;Lobster-tools.&lt;/em&gt; &lt;em&gt;Tldr-club.&lt;/em&gt; &lt;em&gt;Clawbot-blog.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I built fast. I shipped half. I posted screenshots.&lt;/p&gt;
&lt;p&gt;That&apos;s the dominant mode on AI-builder X right now and I want to write the post about it as someone caught inside it, not above it.&lt;/p&gt;
&lt;h2&gt;The Builder.ai version&lt;/h2&gt;
&lt;p&gt;The loud version of this is Builder.ai.&lt;/p&gt;
&lt;p&gt;The pitch was an AI named Natasha that built apps from a single sentence. Microsoft believed it. SoftBank&apos;s DeepCore believed it. The Qatar Investment Authority believed it. About $450M of capital believed it.&lt;/p&gt;
&lt;p&gt;Behind the AI: 700 human engineers in India and Eastern Europe.&lt;/p&gt;
&lt;p&gt;By 2024 the investigations had landed. Bloomberg. WSJ. &lt;em&gt;The Information.&lt;/em&gt; By May 2025 the company was filing for insolvency, Microsoft and the creditors were inside the building, and &quot;Builder.ai&quot; had become culture-wide shorthand for AI-washing. Strap &quot;AI&quot; to a labor product, raise nine figures, ride the cycle until the cycle catches up.&lt;/p&gt;
&lt;p&gt;That&apos;s the loud version of the pattern.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.deeflect.com/medium-img/half-builder-1.jpg&quot; alt=&quot;Curtain pulled back on the AI&quot; /&gt;&lt;/p&gt;
&lt;p&gt;The quiet version is on your X feed every day, and it&apos;s not committing fraud. It&apos;s people shipping the half they can ship and calling it the whole. That&apos;s what I&apos;ve been doing.&lt;/p&gt;
&lt;h2&gt;What a half-builder actually is&lt;/h2&gt;
&lt;p&gt;Tighter than &quot;doesn&apos;t ship&quot;:&lt;/p&gt;
&lt;p&gt;A half-builder is an operator who can do exactly one half of design-to-deploy, then skips the other half by simply not showing it. They post the artifact for their good half. The bad half is implied to exist. It usually doesn&apos;t.&lt;/p&gt;
&lt;p&gt;There are three failure modes and I&apos;ve personally lived all three.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The designer who can&apos;t code.&lt;/strong&gt; Posts the Figma. Posts the AI-generated mock. Posts the screenshot, the concept, the &quot;what if I built this?&quot; thread. Never posts the running URL. The &quot;build&quot; is a frame around an image. I did this for years before I learned to ship.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The coder who can&apos;t design.&lt;/strong&gt; Posts the diff. Posts the gist. Posts the prompt. The thing technically runs but you wouldn&apos;t keep it open for more than a session. The interface is a textarea and a &lt;code&gt;&amp;lt;details&amp;gt;&lt;/code&gt; tag in Helvetica. I&apos;ve published a few of these too. I called them &quot;tools.&quot;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The either who can&apos;t ship.&lt;/strong&gt; The most common failure mode by an order of magnitude. They can do their half competently. They can&apos;t deploy it, can&apos;t keep it up, can&apos;t onboard a single user, can&apos;t reach week two. Six demos a month. Zero products. The artifact dies in a screenshot.&lt;/p&gt;
&lt;p&gt;The third failure mode is the one I&apos;ve spent the most time in. I&apos;d build a thing in a weekend, push it to a public repo, post a screenshot, get a few likes, and move to the next thing on Monday. I called that &quot;shipping.&quot; It wasn&apos;t. It was sketching in public.&lt;/p&gt;
&lt;p&gt;In all three modes the AI is real. The thing posted is real. &lt;em&gt;Something&lt;/em&gt; got built. What didn&apos;t happen was building &lt;em&gt;the whole thing&lt;/em&gt;. The half that wasn&apos;t shown was fake, missing, on someone else&apos;s calendar, or a TODO that never got picked up again.&lt;/p&gt;
&lt;p&gt;That&apos;s a half-builder.&lt;/p&gt;
&lt;h2&gt;Why half-building is the default&lt;/h2&gt;
&lt;p&gt;It&apos;s not a personal failure. It&apos;s the structure of the industry for twenty years.&lt;/p&gt;
&lt;p&gt;Design and engineering have been culturally separated since the early-2000s web. You picked a side at 22. The side trained you. Designers learned visual systems, components, motion, brand. Engineers learned data structures, infra, deployment, latency budgets. The handoff was the deliverable. Each side optimized for being good at their half, because their half was the whole job.&lt;/p&gt;
&lt;p&gt;AI is collapsing that gap.&lt;/p&gt;
&lt;p&gt;Every tool that closes the design-to-code distance (Figma-to-code generators, coding assistants, no-code with escape hatches, full-stack agents) pays out to operators who hold both sides in one head. The premium isn&apos;t on either half anymore. It&apos;s on the seam.&lt;/p&gt;
&lt;p&gt;Twenty years of single-side specialization don&apos;t unwind in a hype cycle.&lt;/p&gt;
&lt;p&gt;So the dominant cohort on AI-builder X is exactly who you&apos;d expect. People whose career was built around being competent at one half. Learning AI in real time. Posting the half they can already do. Hoping the AI bridges the rest.&lt;/p&gt;
&lt;p&gt;Sometimes it does. Most of the time it doesn&apos;t. The shipped product never appears. The next thread does.&lt;/p&gt;
&lt;p&gt;I&apos;ve been on this side of the timeline for years. Designers who became &quot;builders&quot; the day GPT-4 dropped. Engineers who became &quot;AI engineers&quot; the day Cursor got good. I&apos;m one of them. The honest answer is that AI made it embarrassingly easy to &lt;em&gt;look&lt;/em&gt; like a whole-builder while staying a half-builder underneath.&lt;/p&gt;
&lt;p&gt;Builder.ai was that, with a $450M check on top.&lt;/p&gt;
&lt;h2&gt;What I&apos;ve actually shipped (and what I&apos;ve half-shipped)&lt;/h2&gt;
&lt;p&gt;Here&apos;s the honest receipts list. Not the highlight reel.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Real products people use:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Dory.&lt;/strong&gt; Shared memory layer for AI agents. Local-first, markdown source of truth, CLI / HTTP / MCP native. Open-source on GitHub, has actual users, gets actual issues filed. This is the only one I&apos;d call run-grade.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;deeflect.com.&lt;/strong&gt; Personal site, in production, anchors my entity online.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;blog.deeflect.com.&lt;/strong&gt; Thirty-one published articles. Some of them are good. Not all of them are from this year, that was overstated in earlier drafts of this essay.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;dee.agency.&lt;/strong&gt; Solo studio site, productized AI work.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Don&apos;t Replace Me.&lt;/strong&gt; Survival book on the AI apocalypse, paperback, hardcover, Kindle, on Amazon. Written end-to-end. People are reading it.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The SEO-to-GEO Gap.&lt;/strong&gt; First research paper, accepted and posted on SSRN this month with a real DOI. First peer-review-adjacent credential I&apos;ve ever earned.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Half-shipped:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ViBE.&lt;/strong&gt; Twitter-based reception benchmark across 22 frontier AI model families, 2,965 judged mentions, $1.92 in judge cost. I love the writeup. I keep pitching the writeup. The benchmark itself is dogshit as a continuous product. It&apos;s a one-shot artifact, not a living thing, and treating it like a flagship was me confusing &quot;interesting research&quot; for &quot;shipped product.&quot;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Universal-codemode.&lt;/strong&gt; Two tools that replace hundreds. Clever. Not used.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vasted.&lt;/strong&gt; GPU-inference one-liner. Works. Unadopted.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Smart-spawn.&lt;/strong&gt; Model router. Demo grade.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Castkit.&lt;/strong&gt; CLI demo recorder in Rust. Cute. Sat down.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mcclaw.&lt;/strong&gt; Mac-LLM checker. Fun. Abandoned.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Moltedin / lobster-tools / tldr-club / clawbot-blog.&lt;/strong&gt; Different shapes, same pattern. Started, posted, walked away.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;The actual range underneath all of it:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Fifteen years of design. A cybersecurity bachelor. Firmware on ESP32 and marauder builds when the topic shifts. Designed for VALK across 70-plus financial institutions and 15 countries before walking out of that role earlier this year. Russian-born, lived across five-plus countries. ADHD wired enough to learn shit in a week and bored enough to walk away from it in a month.&lt;/p&gt;
&lt;p&gt;The range is real. The shipping discipline isn&apos;t there yet.&lt;/p&gt;
&lt;p&gt;In October 2025 I burned out and quit X for six months from a 200K-impressions-a-day peak. I&apos;m reactivating from 640 followers as I write this. The list above is what got built around the crash year: three real products, a book, a paper, a personal entity I can point to, and a graveyard of clever half-things.&lt;/p&gt;
&lt;p&gt;That&apos;s the honest picture. I&apos;m a recovering half-builder.&lt;/p&gt;
&lt;h2&gt;The opposite cohort&lt;/h2&gt;
&lt;p&gt;The opposite of a half-builder is a whole-builder.&lt;/p&gt;
&lt;p&gt;A whole-builder is one operator who covers design + code + AI + deploy + distribution end-to-end with no handoff. They pick fewer fights. They keep the artifacts alive past launch week. They have repos with users in the issue tracker, not just stars in the corner.&lt;/p&gt;
&lt;p&gt;Pieter Levels is the canonical example. Design, code, deploy, distribute, monetize, all solo, all in public, receipts measured in MRR and screenshots. Marc Lou ships products with full visual identity attached. Theo runs an entire product line out of what he can hold in one head.&lt;/p&gt;
&lt;p&gt;These aren&apos;t unicorns. They&apos;re the rarer category: operators who didn&apos;t pick a side and built their working pattern &lt;em&gt;around&lt;/em&gt; not having a handoff. They&apos;re also the operators who said no to the next side-quest and kept the last one running.&lt;/p&gt;
&lt;p&gt;I&apos;ve copied the breadth half of that pattern. I haven&apos;t copied the discipline half. Whole-building isn&apos;t about doing more. It&apos;s about doing fewer things further. That part I&apos;m still learning.&lt;/p&gt;
&lt;h2&gt;How to spot a half-builder (mirror included)&lt;/h2&gt;
&lt;p&gt;Most &quot;AI builders&quot; on the internet right now are half-builders, and most of us know which side we&apos;re on if we&apos;re honest about it.&lt;/p&gt;
&lt;p&gt;The test is mechanical. It costs nothing. Run it on every &quot;AI builder&quot; account in your timeline this week, and on yourself.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ask for the running URL.&lt;/strong&gt; Not the prompt. Not the screenshot. Not the demo video. The URL someone else can open right now, on their phone, with no auth, no waitlist. If they can&apos;t produce one, you&apos;re talking to half a builder.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ask for the repo.&lt;/strong&gt; Public repo, last commit recent enough to matter, an issue tracker that isn&apos;t a ghost town. If &quot;the code is private&quot;, fine. Ask for the deployed product. If neither exists, you have your answer.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ask what they shipped this month.&lt;/strong&gt; Not last year. Not &quot;in their career.&quot; This month. Half-builders ship demos. Whole-builders ship products that someone else is using on a Tuesday morning.&lt;/p&gt;
&lt;p&gt;If you ran that on me a month ago, you&apos;d hear about ViBE and a clever Rust thing and a model router and a half-finished benchmark and a launch I almost did. You&apos;d hear about everything except a product someone else opened on a Tuesday. The honest answer would have been Dory, and maybe the blog, and the rest is noise.&lt;/p&gt;
&lt;p&gt;Show the repo or sit down, including the one I&apos;m pointing back at when I write that.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.deeflect.com/medium-img/half-builder-2.jpg&quot; alt=&quot;Bouncer at the door asking for the running URL&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Stopping&lt;/h2&gt;
&lt;p&gt;The exit from being a half-builder is mechanical, not mystical.&lt;/p&gt;
&lt;p&gt;Pick the half you can&apos;t do and start doing it badly until you can do it. Designers shipping their first deploy. Coders learning visual hierarchy. Either learning distribution. The half you can&apos;t do isn&apos;t a personality. It&apos;s a backlog.&lt;/p&gt;
&lt;p&gt;Pick fewer things. Keep them alive past the first week. Treat &quot;shipped&quot; as &quot;someone else used it on a Tuesday,&quot; not &quot;pushed to GitHub on a Sunday.&quot;&lt;/p&gt;
&lt;p&gt;Whole-building is a slow accumulation of the second half by the first, until the seam disappears. None of that happens in a single weekend.&lt;/p&gt;
&lt;p&gt;This essay is the first move. The next moves are: Dory gets the maintenance it deserves. ViBE either becomes a continuously-updating thing or gets retired honestly as a one-shot paper, not pretended into a flagship. The agency stops being a placeholder. The next side-quest waits its turn, or doesn&apos;t get started.&lt;/p&gt;
&lt;p&gt;I&apos;m writing this with the same uncertainty most of you feel scrolling past it. &lt;em&gt;Am I the half-builder? Probably. What does the turn look like? Like this.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Build the whole thing.&lt;/p&gt;
&lt;p&gt;Ship the running URL.&lt;/p&gt;
&lt;p&gt;Show the repo.&lt;/p&gt;
&lt;p&gt;Or sit down, including me.&lt;/p&gt;
&lt;p&gt;That&apos;s the post.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;em&gt;Sources for the Builder.ai facts: Bloomberg&apos;s investigation into the company&apos;s engineering operations (2024), the Wall Street Journal&apos;s coverage of the May 2025 insolvency, and &lt;em&gt;The Information&lt;/em&gt;&apos;s reporting on the human-engineer back-end. Public, well-indexed; current URLs available via search.&lt;/em&gt;&lt;/p&gt;
</content:encoded><media:content url="https://blog.deeflect.com/medium-img/half-builder.jpg" medium="image" type="image/jpeg"/><media:thumbnail url="https://blog.deeflect.com/medium-img/half-builder.jpg"/><enclosure url="https://blog.deeflect.com/medium-img/half-builder.jpg" length="355635" type="image/jpeg"/></item><item><title>I&apos;ve Touched Everything and Mastered Nothing</title><link>https://blog.deeflect.com/i-ve-touched-everything-and-mastered-nothing/</link><guid isPermaLink="true">https://blog.deeflect.com/i-ve-touched-everything-and-mastered-nothing/</guid><description>Except a few things that stuck.</description><pubDate>Mon, 06 Apr 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://blog.deeflect.com/medium-img/i-ve-touched-everything-and-mastered-nothing.jpg&quot; alt=&quot;I&apos;ve Touched Everything and Mastered Nothing&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Seventeen years. That&apos;s how long ADHD has been making me touch every skill, hobby, and career path that crossed my path. I&apos;m 30 now. I&apos;ve lived in eight countries, built products in five programming languages, shipped code on four blockchains, released music on Spotify under an artist name I genuinely cannot remember, and learned enough Vietnamese to haggle at a market in Nha Trang.&lt;/p&gt;
&lt;p&gt;A lot of it stayed at the level of useful. A few things became real expertise.&lt;/p&gt;
&lt;p&gt;That&apos;s the honest version of this story. Not the LinkedIn version where &quot;my diverse background gives me a unique perspective.&quot; The real version, where I&apos;ve spent a decade and a half chasing dopamine across every domain imaginable and I&apos;m only now figuring out what that actually means for a career, an identity, and a life.&lt;/p&gt;
&lt;h2&gt;What the ADHD cycle actually looks like across every skill, hobby, and career path&lt;/h2&gt;
&lt;p&gt;The cycle runs on roughly a two-week clock. Something new appears - on Twitter, in a YouTube rabbit hole, in a Discord I shouldn&apos;t be in at 2am. The dopamine hits immediately, before I&apos;ve done anything. I&apos;m already planning the next phase while I&apos;m still in the first hour.&lt;/p&gt;
&lt;p&gt;Then comes the manic stretch. Twelve-hour sessions at the computer, deep in documentation and GitHub repos and forum threads from 2015 that nobody else has read. I still eat well, still sleep well, still train. Health is the one thing I never let slide, no matter how deep the rabbit hole goes. But everything else disappears.&lt;/p&gt;
&lt;p&gt;Two weeks later, sometimes less, I wake up and it&apos;s gone. Not burnout. Burnout has texture - exhaustion, resentment, a desire to rest and come back. This is nothing. Flat affect toward something that consumed me completely three days ago. The interest didn&apos;t fade. It evaporated.&lt;/p&gt;
&lt;p&gt;This has been my entire adult life. Before that, too - graffiti, parkour, long-distance running, acrobatics, all before I owned a computer. I fixed a relative&apos;s MS-DOS machine in English when I was around eight and barely spoke English. I rigged our home phone line to connect to a friend&apos;s LAN across the city. I built a radio to intercept our wireless home phone so I could eavesdrop on my mom&apos;s calls.&lt;/p&gt;
&lt;p&gt;I was never bored. I was always building something I&apos;d abandon.&lt;/p&gt;
&lt;p&gt;What I didn&apos;t understand at eight, and only started to understand around 27, is that this isn&apos;t a moral failing. It&apos;s the shape of how my brain processes novelty. The dopamine system in ADHD brains responds to new stimuli harder and drops off faster than neurotypical brains. I wasn&apos;t undisciplined. I was running a biological process I had no name for.&lt;/p&gt;
&lt;p&gt;Knowing that doesn&apos;t stop the cycle. But it changes how you relate to the wreckage.&lt;/p&gt;
&lt;h2&gt;The graveyard is real&lt;/h2&gt;
&lt;p&gt;Let me just list some of it.&lt;/p&gt;
&lt;p&gt;A DJI drone I used four times. A Sony DSLR that mostly lives in a bag. A 3D printer I operated twice, let collect dust for six months, and sold at a loss. A soldering station I learned to use at university, felt was essential to own again years later, and which currently sits in my wardrobe untouched. A ukulele from Turkey. Guitar - I can play a few songs. Piano - I can play Kanye&apos;s Runaway and that&apos;s it. Harmonica. Stylophone. Otamatone. An AKAI MPK Mini. Ableton. AI music with Suno. I released lofi tracks on Spotify. I cannot remember the artist name.&lt;/p&gt;
&lt;p&gt;Stocks in Russia via an app. Mostly broke even, maybe lost a bit. Cybersecurity hardware - a Flipper Zero, a Kali Linux laptop, ESP32 boards with Marauder firmware, an ESB dongle for intercepting TPMS sensors, and an M5Stack kit with a pile of controllers and sensors. Cardputer. LLM630. Tiny screens, weird modules, more little boards than I had any reason to own. I spent weeks flashing firmware and scanning radio frequencies. Did I build anything useful? No. Make money? No. But I understood how your wireless water meter broadcasts unencrypted data to anyone with the right hardware, and that felt worth it.&lt;/p&gt;
&lt;p&gt;None of this is sustainable. The &quot;ADHD is a superpower&quot; content you see everywhere stops before this part. The graveyard. The money spent. The projects half-finished. The domains where I got to &quot;good enough to be dangerous&quot; and never further, because the dopamine was already somewhere else.&lt;/p&gt;
&lt;p&gt;This pattern has been running long enough that it stopped feeling surprising a while ago.&lt;/p&gt;
&lt;h3&gt;The financial reality nobody mentions&lt;/h3&gt;
&lt;p&gt;I want to be concrete about this because most &quot;ADHD and creativity&quot; content is vague about costs.&lt;/p&gt;
&lt;p&gt;The 3D printer was around $400. Sold for $180. The drone was $700. Used it maybe ten hours total. The cybersecurity hardware - Flipper, M5Stack, the various ESP32 boards, cables, accessories, random modules - probably $600 spread across three months. The Ableton license. The AKAI. The ukulele I bought in a market in Istanbul because I was in a hyperfocus phase about lo-fi music production.&lt;/p&gt;
&lt;p&gt;I don&apos;t have an exact number. But it&apos;s real money. And this doesn&apos;t count the opportunity cost of the hours - hundreds of hours flashing firmware on microcontrollers that never produced anything, learning guitar in 30-minute sessions spread across five years, studying Vietnamese for six weeks before the next interest hit.&lt;/p&gt;
&lt;p&gt;I&apos;m not saying this to make it sound worse than it is. I&apos;m saying it because the &quot;embrace your ADHD divergent thinking&quot; content leaves this part out and I think it&apos;s dishonest. The breadth has real costs. The search has a price.&lt;/p&gt;
&lt;h2&gt;When it does stick&lt;/h2&gt;
&lt;p&gt;Some things stuck. Design, 17 years. The gym, 15+ years. AI, three years and accelerating.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.deeflect.com/medium-img/i-ve-touched-everything-and-mastered-nothing-1.jpg&quot; alt=&quot;When it does stick&quot; /&gt;&lt;/p&gt;
&lt;p&gt;I started freelancing at 14, selling forum banners and GIFs on ICQ. By university I was building websites for roughly $80-120 each in local-currency terms at the time. When I graduated, companies were offering something like $150 a month. I was already making more than that per site. I said no thanks and kept going. Design is probably the closest thing I have to real expertise after 17 years - I spent five of those years as the solo senior product designer at VALK, a fintech platform that moved $4B+ in deals across 70+ financial institutions in 15 countries. Awards. Real scale. Products that live in actual banks.&lt;/p&gt;
&lt;p&gt;The gym stuck because I started before I knew what consistency meant and just never stopped. Different approaches over the years - bodybuilding, strength, cuts, boxing for two years in Krasnodar - but the baseline never dropped. I track bloodwork every few months and stay on top of health like it&apos;s another system to tune. When something becomes infrastructure instead of a project, the ADHD can&apos;t kill it.&lt;/p&gt;
&lt;p&gt;AI stuck because it&apos;s the first domain that feeds the obsession cycle faster than the cycle drains it. Every week there&apos;s something genuinely new. You can&apos;t get bored because the field won&apos;t hold still. I built one of the first agentic loops I&apos;d seen anyone build in 2022 - a Telegram bot for a crypto community that could reason and take actions, before &quot;agentic&quot; was even a term. I didn&apos;t know what I was building. I just thought it was interesting.&lt;/p&gt;
&lt;p&gt;Now I let AI maintain my second brain - knowledge, reminders, loose thoughts, follow-ups, personal assistant type shit. Less &quot;look at my agent stack,&quot; more &quot;I built something that remembers what I forget and keeps my life from scattering.&quot; I also host local models on a Mac Mini because of course that became another obsession too - if something can run on my own box, I want to try it. It&apos;s not a demo. It runs every day. You can read more about &lt;a href=&quot;https://blog.deeflect.com/06-coding-stack/&quot;&gt;how I approach coding and multi-model workflows&lt;/a&gt; if you want the technical side.&lt;/p&gt;
&lt;h3&gt;Why some things survive the cycle&lt;/h3&gt;
&lt;p&gt;I&apos;ve thought about this a lot. What makes design and the gym persist when everything else evaporates?&lt;/p&gt;
&lt;p&gt;Two patterns show up every time.&lt;/p&gt;
&lt;p&gt;First: external feedback loops that don&apos;t require internal motivation. The gym gives me bloodwork numbers, strength PRs, photos over time. Design gives me client feedback, shipped products, metrics. When my internal interest flags, there&apos;s still external data pulling me back. The drone had none of that. The guitar had none of that. They only worked when I was actively excited, and when the excitement went, nothing remained.&lt;/p&gt;
&lt;p&gt;Second: the domain kept changing fast enough to feed new obsession cycles. Design went from print to web to mobile to design systems to AI-generated UI. Every three years there was a new layer to get obsessed about. The gym went from machines to compound lifts to programming to bloodwork optimization. The domain regenerated novelty before I burned through it.&lt;/p&gt;
&lt;p&gt;AI has both properties at a ridiculous level. New model every month. New architectural pattern every six weeks. New tool category every quarter. It&apos;s basically a purpose-built trap for an ADHD brain and I walked straight into it.&lt;/p&gt;
&lt;h2&gt;How ADHD shapes every skill, hobby, and career path you choose&lt;/h2&gt;
&lt;p&gt;Here&apos;s what I&apos;ve realized after 30 years of this: ADHD doesn&apos;t just affect how you learn things. It determines what career paths even become available to you.&lt;/p&gt;
&lt;p&gt;I have an Information Security bachelor&apos;s that I haven&apos;t used professionally once. But the two years I spent in that program gave me networking fundamentals, an understanding of cryptography primitives, and enough systems-level thinking that when blockchain showed up in my life it wasn&apos;t foreign territory. That &quot;useless&quot; degree became the reason I could evaluate Solidity code for security issues at VALK without being a dedicated security engineer.&lt;/p&gt;
&lt;p&gt;The career I&apos;ve actually had - designer, then product lead, then AI engineer - looks like three different careers. But they&apos;re the same brain solving the same problem at different layers of abstraction. Design is about modeling user mental states. Product is about modeling system interactions. AI engineering is about modeling agent behavior. I didn&apos;t pivot three times. I drilled down.&lt;/p&gt;
&lt;p&gt;That&apos;s the ADHD career path nobody maps: not a straight line, not even a zigzag, but a spiral. You come back around to the same core problems from different angles. The angle changes. The problem doesn&apos;t.&lt;/p&gt;
&lt;h3&gt;The generalist discount problem&lt;/h3&gt;
&lt;p&gt;No job posting says &quot;wanted, someone who can do a little bit of everything.&quot;&lt;/p&gt;
&lt;p&gt;Generalists get discounted by hiring processes designed for specialists. I have production code in TypeScript, Python, Rust, Solidity, and SQL. Deployed products on four blockchains. Sysadmin experience across every OS since childhood. Enough crypto experience to have launched 20+ tokens. On a resume this looks scattered. In a specific situation - say, a 48-hour sprint where a client needs a smart contract, a minting frontend, and custom illustrations - it&apos;s exactly what&apos;s needed and nobody else in the room has all three.&lt;/p&gt;
&lt;p&gt;When VALK wanted a Christmas NFT campaign I told them I&apos;d handle it. Smart contract, minting site, illustrations, the whole frontend - solo, in one sprint. That&apos;s not something a specialist does. That&apos;s an ADHD brain that collected 12 different surface-level skills over a decade, all converging on one afternoon&apos;s work.&lt;/p&gt;
&lt;p&gt;The problem is you can&apos;t interview for that. &quot;I know a little about a lot&quot; doesn&apos;t clear an ATS. So the career path for someone like me had to go around traditional hiring - freelance, founding roles, solo building. Places where the breadth shows up in delivered work rather than credentials.&lt;/p&gt;
&lt;h2&gt;The breadth problem and the breadth premium&lt;/h2&gt;
&lt;p&gt;This year I wrote a 33,000-word book from scratch. I&apos;d never written a book before. &lt;a href=&quot;https://dontreplace.me&quot;&gt;Don&apos;t Replace Me: A Survival Guide to the AI Apocalypse&lt;/a&gt; - 24 chapters, formatted, cover designed, published on KDP, audiobook via ElevenLabs, SEO landing page with schema markup, Amazon ads. Not because I wanted to be an author. Because the process of building the whole machine was interesting to me.&lt;/p&gt;
&lt;p&gt;The ADHD didn&apos;t stop me from finishing a book. It kept me engaged long enough to finish one because there were 15 different new processes to learn inside the single project. The writing was interesting for the first 10,000 words. Then the Kindle formatting was interesting. Then the audiobook pipeline. Then the schema markup. By the time I finished, I had a complete book, a production process, and had learned four skills I didn&apos;t have before.&lt;/p&gt;
&lt;p&gt;This is the pattern. I don&apos;t go deep on one thing. I go wide enough that when a project needs five different skills, I&apos;m the one person in the room who can cover them all. The breadth is a premium in those moments - genuine leverage that a specialist can&apos;t replicate without a team.&lt;/p&gt;
&lt;p&gt;The honest version though: those moments don&apos;t come every day. Most days, the breadth just means I know enough to be frustrated by problems in domains where I don&apos;t know enough to solve them.&lt;/p&gt;
&lt;h2&gt;Why the AI age changes this calculation for ADHD builders&lt;/h2&gt;
&lt;p&gt;AI is doing something weird to the generalist problem. On one side, everyone&apos;s a generalist now. Vibe coding means your non-technical friend can ship a landing page. The moat of &quot;I know five programming languages&quot; is basically gone.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.deeflect.com/medium-img/i-ve-touched-everything-and-mastered-nothing-2.jpg&quot; alt=&quot;Why the AI age changes this calculation for ADHD builders&quot; /&gt;&lt;/p&gt;
&lt;p&gt;On the other side - and this is the part I actually believe - breadth becomes more valuable when AI amplifies execution. You don&apos;t need to be an expert Rust developer. You need enough Rust to direct an AI agent doing Rust work. You need to know when the output is wrong. You need the taste to recognize what &quot;good&quot; looks like without being able to produce it from scratch at 100 words per minute.&lt;/p&gt;
&lt;p&gt;I spent 17 years accumulating surface-level knowledge across maybe 30 domains. That knowledge doesn&apos;t help me compete with a specialist in any one of them. But it means I can look at an AI&apos;s output in almost any domain and tell you whether it&apos;s right. Design intuition applied to code review. Crypto chaos tolerance applied to agentic system failures. Sysadmin muscle memory applied to Docker containers. The ADHD brain that couldn&apos;t go deep now has a use case that rewards breadth.&lt;/p&gt;
&lt;p&gt;This isn&apos;t hypothetical. I use &lt;a href=&quot;https://dee.ink&quot;&gt;dee.ink&lt;/a&gt; - a collection of 31 Rust CLI tools I&apos;ve built for AI agent workflows - as a practical example. Building those tools required Rust, CLI design, documentation, packaging, and enough understanding of AI agent needs to spec useful primitives. Same with the home lab stuff - a ZimaBoard running home server experiments, local infra, and smart home services because once I touched self-hosting I obviously had to touch that too. A specialist Rust engineer would write better Rust. A specialist AI engineer would understand agent needs more deeply. A specialist infra person would build a cleaner home lab. But I could build the whole thing myself, end to end, without waiting on anyone.&lt;/p&gt;
&lt;p&gt;That&apos;s the AI-era argument for the ADHD generalist: you&apos;re not competing on depth anymore. You&apos;re competing on range of judgment. And AI is making range of judgment the bottleneck, not depth of execution.&lt;/p&gt;
&lt;p&gt;If you&apos;ve felt this same tension - the generalist guilt, the half-finished projects, the identity question of what you even &quot;are&quot; professionally - I wrote more about &lt;a href=&quot;https://blog.deeflect.com/02-adhd-and-ai/&quot;&gt;navigating ADHD and AI as actual compensation tools&lt;/a&gt;, not the productivity-porn version.&lt;/p&gt;
&lt;h2&gt;The identity question ADHD every skill, hobby, and career path creates&lt;/h2&gt;
&lt;p&gt;Here&apos;s the thing nobody talks about with the ADHD generalist lifestyle: you don&apos;t know what you are.&lt;/p&gt;
&lt;p&gt;Ask a specialist what they do and they tell you in one sentence. &quot;I&apos;m a backend engineer.&quot; &quot;I&apos;m a product designer.&quot; The identity is clean. The work is legible to other people.&lt;/p&gt;
&lt;p&gt;Ask me and I have to make a choice about which version of myself I&apos;m presenting. The designer with 17 years? The AI engineer building multi-agent systems? The guy who spent three months obsessively learning about RF signal interception for no professional reason? All of these are equally true. None of them is the whole answer.&lt;/p&gt;
&lt;p&gt;For a long time this felt like a problem. I&apos;d look at people with clear professional identities - engineers who&apos;d been doing one thing for ten years, designers with a coherent portfolio narrative - and feel like I was faking it. Like my breadth was evidence of some underlying lack of commitment.&lt;/p&gt;
&lt;p&gt;What I&apos;ve landed on at 30 is different. The identity question isn&apos;t a problem to solve. It&apos;s a feature of a specific type of brain operating at full capacity. The discomfort of not fitting a category is the cost of not being constrained by one.&lt;/p&gt;
&lt;p&gt;I&apos;m not a designer who learned to code. I&apos;m not an engineer with design skills. I&apos;m something that doesn&apos;t have a clean job title yet, that probably couldn&apos;t exist before AI made it possible to execute across domains without a full team. That&apos;s not a failure of self-definition. It&apos;s just early.&lt;/p&gt;
&lt;h3&gt;What actually sticks at 30&lt;/h3&gt;
&lt;p&gt;The gym. Design. AI.&lt;/p&gt;
&lt;p&gt;And maybe that&apos;s the real pattern. The things that stuck aren&apos;t the things I chose. They&apos;re the things that were still there after the dopamine moved on. The gym was still there because I&apos;d been going long enough it became automatic. Design was still there because clients kept paying me. AI is still there because it keeps generating new problems faster than I run out of interest.&lt;/p&gt;
&lt;p&gt;What I&apos;ve stopped doing is chasing the feeling of the early phase - that first-week intensity when everything seems possible and you&apos;re learning at maximum speed. That feeling always ends. The question isn&apos;t how to keep the feeling. It&apos;s what you&apos;re building during it.&lt;/p&gt;
&lt;h2&gt;What I actually think about it at 30&lt;/h2&gt;
&lt;p&gt;The &quot;ADHD superpower&quot; narrative is mostly incomplete. It&apos;s real but it stops too early. Yes, the hyperfocus is incredible. Yes, the breadth compounds in ways specialists can&apos;t replicate. Yes, the manic phases produce more in two weeks than most people produce in two months.&lt;/p&gt;
&lt;p&gt;But the depressive phases are the tax. The days where you look at a project you were obsessed with last week and feel nothing at all. Not tired. Not frustrated. Nothing. The graveyard of equipment bought and abandoned is real money. The projects with twelve active tabs and zero generating revenue are real.&lt;/p&gt;
&lt;p&gt;I&apos;ve been through every single phase of this across eight countries and more career pivots than I can accurately count. I still think I&apos;ll find the thing. Maybe design and AI are already it and I just haven&apos;t accepted that yet. Maybe something I haven&apos;t encountered will show up and replace everything I&apos;ve built my identity around. Both feel equally plausible from the inside.&lt;/p&gt;
&lt;p&gt;What I know is this: at 30, having touched more domains than most people touch in a lifetime, being functionally average at most of them and arguably expert at two - I&apos;m not embarrassed by any of it. The search wasn&apos;t failure. The search was the work. Everything compounds in ways you can&apos;t predict when you&apos;re in the middle of a two-week obsession with intercepting radio signals from water meters.&lt;/p&gt;
&lt;p&gt;If you want to see what the current obsession looks like in practice - the AI engineering side, the multi-agent systems, the actual tools - the &lt;a href=&quot;https://blog.deeflect.com/about/&quot;&gt;about page&lt;/a&gt; has the full context. And if you&apos;re building something similarly scattered and solo, the &lt;a href=&quot;https://blog.deeflect.com/tags/&quot;&gt;tags page&lt;/a&gt; will probably surface something relevant.&lt;/p&gt;
&lt;p&gt;If you&apos;re in the middle of your own version of this - the cycle, the graveyard, the guilt about the 3D printer sitting in your closet - you&apos;re probably not broken. You&apos;re probably just still searching.&lt;/p&gt;
&lt;p&gt;That&apos;s an okay place to be.&lt;/p&gt;
&lt;h2&gt;So I asked AI to list my skills&lt;/h2&gt;
&lt;p&gt;Based on everything I&apos;ve touched, built, learned, half-learned, abandoned, revived, bought, sold, shipped, and somehow got paid for, I asked AI to write out my skill set in one paragraph.&lt;/p&gt;
&lt;p&gt;It was a mistake.&lt;/p&gt;
&lt;p&gt;Graphic design, product design, UI design, UX design, interaction design, interface design, web design, mobile design, dashboard design, platform design, application design, systems design, design systems, visual systems, component systems, branding, digital branding, visual identity, typography, layout, hierarchy, composition, spacing, iconography, illustration, digital illustration, vector illustration, marketing design, motion graphics, banner design, avatar design, forum graphics, landing page design, cover design, presentation design, pitch deck design, onboarding design, checkout flow design, conversion design, user flows, journey mapping, wireframing, prototyping, information architecture, UX strategy, usability thinking, interface critique, product thinking, product strategy, feature prioritization, product packaging, product positioning, product communication, client communication, stakeholder communication, design leadership, solo product ownership, freelance design, agency design, startup design, enterprise product design, fintech product design, dashboard UX, enterprise workflows, white-label platform design, workflow design, complexity reduction, visual clarity, frontend design, frontend implementation, HTML, CSS, responsive design, JavaScript, TypeScript, React, component libraries, design-to-code translation, web app implementation, rapid prototyping, interface implementation, code editing, debugging, code reading, AI-assisted coding, product-minded engineering, scripting, Python, Rust, SQL, Solidity, command-line tooling, CLI product thinking, developer tooling, automation scripting, API integration, webhook logic, backend glue code, database basics, schema instincts, debugging AI output, debugging code, debugging workflow failures, prompt engineering, prompt iteration, prompt structure, context design, tool calling, agent orchestration, multi-agent workflows, AI workflow design, AI product design, AI UX, AI-assisted writing, AI-assisted coding, AI-assisted research, AI tool evaluation, model comparison, reasoning model usage, local model usage, cloud model usage, local LLM setup, memory systems, second-brain systems, reminder systems, retrieval systems, RAG, embeddings, semantic search, vector search, AI assistant design, assistant workflow design, personal AI systems, research pipelines, writing pipelines, content pipelines, synthesis pipelines, information capture, note systems, knowledge systems, crypto product design, Web3 product design, smart contracts, Solidity workflows, token launch mechanics, NFT launch mechanics, minting flows, DeFi UX, blockchain UX, wallet UX, crypto campaign execution, crypto community operations, crypto marketing, launch coordination, presale mechanics, token website building, contract deployment understanding, onchain product instincts, community bot building, Telegram bot building, automation design, workflow automation, n8n-style orchestration thinking, research automation, content automation, digital marketing, internet marketing, social media growth, Instagram page growth, landing page copy, copywriting, headline writing, article writing, blog writing, long-form writing, editing, rewriting, draft development, AI-draft cleanup, humanization, publishing workflows, book writing, book formatting, self-publishing, KDP publishing, metadata writing, SEO, GEO, search intent mapping, keyword targeting, internal linking instincts, schema markup thinking, authority building, distribution strategy, launch strategy, publishing systems, website management, domain setup, CMS-light publishing, self-hosting, home server experimentation, Docker, DNS, reverse proxy basics, infrastructure curiosity, service setup, local infra experimentation, smart home experimentation, device setup, system setup, macOS setup, Windows setup, Linux setup, terminal usage, shell comfort, firmware flashing, hardware experimentation, embedded-device tinkering, cybersecurity basics, information security fundamentals, cryptography fundamentals, systems thinking, network instincts, radio experimentation, wireless experimentation, sensor experimentation, hardware debugging, hardware setup, game server hosting, home PC hosting, monetization instincts, digital hustle instincts, app install arbitrage, e-commerce experimentation, dropshipping experimentation, pricing instincts, sales instincts, client acquisition instincts, offer shaping, agency operations, productized service instincts, open source contribution, release management, tool publishing, music experimentation, music production, AI music workflows, Ableton experimentation, audio arrangement instincts, basic piano, basic guitar, basic ukulele, basic harmonica, stylophone experimentation, otamatone experimentation, creative direction, aesthetic judgment, visual taste, naming instincts, concept development, trend detection, trend synthesis, pattern recognition, fast learning, context switching, parallel execution, obsessive research, rabbit-hole depth, ambiguity tolerance, pressure-driven shipping, solo building, independent execution, figuring things out with incomplete information, reverse engineering workflows, surviving bad documentation, adapting to broken tools, evaluating software fast, comparing tools quickly, stack assembly, stack migration, no-code experimentation, low-code experimentation, API-first thinking, browser tooling, workflow compression, research summarization, synthesis, memory capture, memory retrieval instincts, file organization attempts, chaos-tolerant organization, async collaboration, self-direction, self-teaching, self-reinvention, internet-native communication, pseudonymous building, online identity experimentation, public writing, authority building through shipping, cross-domain thinking, interdisciplinary synthesis, technical taste, product taste, marketing taste, creative taste, execution bias, strategic intuition, quality smell detection, visual QA, copy QA, product QA, issue isolation, error triage, launch QA, software evaluation, tooling adoption, rollout instincts, packaging instincts, distribution instincts, positioning instincts, and generally becoming competent enough to start, ship, fix, relaunch, and repurpose work across an unreasonable number of domains without ever sitting still long enough to make any of it feel normal.&lt;/p&gt;
&lt;p&gt;Reading it felt less like a skills list and more like a forensic report.&lt;/p&gt;
</content:encoded><media:content url="https://blog.deeflect.com/medium-img/i-ve-touched-everything-and-mastered-nothing.jpg" medium="image" type="image/jpeg"/><media:thumbnail url="https://blog.deeflect.com/medium-img/i-ve-touched-everything-and-mastered-nothing.jpg"/><enclosure url="https://blog.deeflect.com/medium-img/i-ve-touched-everything-and-mastered-nothing.jpg" length="117563" type="image/jpeg"/></item><item><title>Don&apos;t Replace Me: My AI Survival Guide Book</title><link>https://blog.deeflect.com/i-published-a-book-here-s-why/</link><guid isPermaLink="true">https://blog.deeflect.com/i-published-a-book-here-s-why/</guid><description>I wrote a 235-page survival guide for people scared about AI replacing their jobs. 24 rules, honest takes, built with AI itself. Here&apos;s what it is and why.</description><pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://blog.deeflect.com/medium-img/i-published-a-book-here-s-why.jpg&quot; alt=&quot;Don&apos;t Replace Me: My AI Survival Guide Book&quot; /&gt;&lt;/p&gt;
&lt;p&gt;I wrote a book. It&apos;s called &lt;em&gt;Don&apos;t Replace Me: A Survival Guide to the AI Apocalypse&lt;/em&gt;, and it&apos;s available right now on &lt;a href=&quot;https://www.amazon.com/dp/B0GTX4J124&quot;&gt;Amazon&lt;/a&gt; in Kindle, paperback, and hardcover. The announcement for Don&apos;t Replace Me survival guide dropped March 28, 2026 - press release picked up through AP News and everything. 235 pages, 24 rules, 33,000 words.&lt;/p&gt;
&lt;p&gt;Took me way longer than I expected and was nothing like I expected. Let me explain what it actually is and how it got made.&lt;/p&gt;
&lt;h2&gt;Why Don&apos;t Replace Me exists as a book and not just tweets&lt;/h2&gt;
&lt;p&gt;I&apos;ve been getting a version of the same conversation for two years. Someone finds out what I do - AI engineering, building agents, 15 years in product design - and they get this look. Half curiosity, half dread. Then the question: &quot;So... should I be worried? About my job?&quot;&lt;/p&gt;
&lt;p&gt;The honest answer is complicated. Not &quot;no, you&apos;re fine&quot; and not &quot;yes, start learning Python immediately.&quot; The actual answer depends on what you do, how you do it, and whether you understand what AI is actually replacing versus what it&apos;s just augmenting.&lt;/p&gt;
&lt;p&gt;The loudest voices on this topic tend to be at the extremes. Either AI builders who are close enough to the technology that the disruption looks like opportunity from where they&apos;re standing. Or people far from it who are doom-scrolling tech Twitter and convinced everything is gone. Both are wrong in ways that matter to normal people with real jobs.&lt;/p&gt;
&lt;p&gt;I&apos;ve sat on both sides of that divide. I spent five years designing products at VALK - financial infrastructure for 70+ banks across 15 countries, $4B+ in deals running through platforms I helped design. I was building for institutions. Then I pivoted to building the automation itself. Multi-agent systems, AI workflows, the actual pipelines that companies are now using to cut headcount or redeploy people.&lt;/p&gt;
&lt;p&gt;I&apos;ve talked to people on both ends. Executives excited about efficiency. Employees scared about what &quot;efficiency&quot; means for them personally. And I kept having the same thought: someone should write something honest about this. Not a hype piece, not a manifesto, not a beginner&apos;s guide to ChatGPT. Something from the middle.&lt;/p&gt;
&lt;p&gt;So I did.&lt;/p&gt;
&lt;h2&gt;What Don&apos;t Replace Me is and what it isn&apos;t&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Don&apos;t Replace Me&lt;/em&gt; is not a coding tutorial. It&apos;s not a prompt engineering guide. There are plenty of those and they&apos;re mostly aimed at people who already know what a terminal is.&lt;/p&gt;
&lt;p&gt;This is for my mom. For my friend who does project management at a mid-size company and genuinely doesn&apos;t know if her job will exist in three years. For the copywriter, the customer service manager, the paralegal, the graphic designer who keeps seeing LinkedIn posts that make them feel like they missed the boat.&lt;/p&gt;
&lt;p&gt;24 rules. Each one practical, specific, and grounded in things I&apos;ve actually seen. Not &quot;embrace AI&quot; or &quot;upskill your journey&quot; or whatever LinkedIn thought leadership nonsense. Real career advice for people navigating a real transition.&lt;/p&gt;
&lt;p&gt;The companion site is at &lt;a href=&quot;https://dontreplace.me&quot;&gt;dontreplace.me&lt;/a&gt; and it has a free AI threat assessment quiz. You answer questions about your actual job - what you do day to day, how structured the work is, how much it involves judgment vs.execution - and you get a risk score. Not fearmongering, not false reassurance. Just a calibrated read on where you actually stand.&lt;/p&gt;
&lt;p&gt;Three formats available now: Kindle, paperback, hardcover. Audiobook is in production. If you&apos;ve been waiting for audio, it&apos;s coming.&lt;/p&gt;
&lt;p&gt;ASIN on Amazon is &lt;a href=&quot;https://www.amazon.com/dp/B0GTX4J124&quot;&gt;B0GTX4J124&lt;/a&gt;. Paperback ISBN is 9798253164594. Hardcover is 9798253165386. I&apos;m mentioning these in case you&apos;re the kind of person who looks these things up. You can also check out the &lt;a href=&quot;https://dontreplace.me&quot;&gt;book&apos;s website at dontreplace.me&lt;/a&gt; for more info and the quiz.&lt;/p&gt;
&lt;h2&gt;How I made this and why I&apos;m being upfront about it&lt;/h2&gt;
&lt;p&gt;I used AI to write this book. I&apos;m not hiding that, and I&apos;m not embarrassed about it. But it&apos;s not what people assume when they hear it.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.deeflect.com/medium-img/i-published-a-book-here-s-why-1.jpg&quot; alt=&quot;How I made this and why I&apos;m being upfront about it&quot; /&gt;&lt;/p&gt;
&lt;p&gt;I didn&apos;t type &quot;write me a 235-page career guide&quot; and hit enter. That&apos;s not how this worked.&lt;/p&gt;
&lt;p&gt;What I did: I spent months collecting actual opinions. Notes from real conversations. Observations from years of watching companies get disrupted from the inside. Things that frustrated me. Things I genuinely believe. Specific examples from fintech, from AI engineering, from watching product design go through its own automation panic. I had a lot to say - just scattered across voice memos, Notion drafts, Twitter threads, and conversations I kept having with people who were scared.&lt;/p&gt;
&lt;p&gt;All of that went into the process as fuel. The AI was the engine. The substance is mine.&lt;/p&gt;
&lt;p&gt;The result reads like me because it is me. My takes, my experience, my perspective on what&apos;s changing and what isn&apos;t. I used every tool available to get it out of my head and into something usable. Which is exactly what the book tells readers to do - use AI as leverage, not as a replacement for your own thinking.&lt;/p&gt;
&lt;p&gt;The irony is the point. I couldn&apos;t have written a better proof of concept.&lt;/p&gt;
&lt;p&gt;And honestly, if you&apos;re going to argue that this makes the book less valid - that&apos;s a conversation worth having, and it&apos;s one of the conversations the book is designed to prompt. Because that reflex, the instinct to devalue work because AI was involved, is exactly the kind of thinking that will hurt people&apos;s careers over the next decade. The question isn&apos;t &quot;did a human do every part of this.&quot; The question is: is the thinking real? Is the perspective genuine? Is it useful?&lt;/p&gt;
&lt;p&gt;Yes, yes, and I think so.&lt;/p&gt;
&lt;h2&gt;What 15 years of watching tech cycles taught me about this one&lt;/h2&gt;
&lt;p&gt;I started freelancing at 14. I&apos;ve watched design go through &quot;designers will be replaced by templates.&quot; I watched developers go through &quot;no-code will replace engineers.&quot; I watched writers go through &quot;content mills will replace real writing.&quot; Some of that disruption was real. A lot of the fear was misdirected.&lt;/p&gt;
&lt;p&gt;This cycle is bigger. I won&apos;t pretend otherwise. The things AI is genuinely good at - pattern recognition, synthesis, first-draft generation, handling repetitive decisions - overlap more directly with white-collar knowledge work than previous automation waves did. This isn&apos;t just factory floors and truck drivers. It&apos;s reaching into offices.&lt;/p&gt;
&lt;p&gt;But the shape of the threat is different for different people. And most of the advice out there treats it like a monolith. &quot;Learn to prompt&quot; is not useful advice for a nurse. &quot;AI can&apos;t replace human connection&quot; is not useful advice for a data entry specialist.&lt;/p&gt;
&lt;p&gt;What actually helps is specificity. Understanding which parts of your work are high-judgment versus low-judgment. Understanding where your industry is in the adoption curve. Understanding the difference between &quot;AI will do this task&quot; and &quot;AI will make someone else more efficient at your job.&quot; The second one is actually the bigger risk and people underestimate it.&lt;/p&gt;
&lt;p&gt;That&apos;s what the 24 rules get into. Specific, not vague. Grounded in real patterns I&apos;ve watched play out, not hypotheticals.&lt;/p&gt;
&lt;p&gt;If you want a preview of where my head is at on some of this, I&apos;ve written about &lt;a href=&quot;https://blog.deeflect.com/01-quit-fintech/&quot;&gt;leaving fintech to build AI systems&lt;/a&gt;, about what &lt;a href=&quot;https://blog.deeflect.com/02-adhd-and-ai/&quot;&gt;ADHD and AI actually look like together&lt;/a&gt;, and about &lt;a href=&quot;https://blog.deeflect.com/03-ai-bad-ux/&quot;&gt;why most AI products have terrible UX&lt;/a&gt; - the gap between what builders understand and what real users need. The book is longer, more structured, and aimed at a wider audience, but those posts give you a sense of how I think.&lt;/p&gt;
&lt;h2&gt;Who Don&apos;t Replace Me is actually for&lt;/h2&gt;
&lt;p&gt;Specifically, concretely:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.deeflect.com/medium-img/i-published-a-book-here-s-why-2.jpg&quot; alt=&quot;Who the Don&apos;t Replace Me survival guide is actually for&quot; /&gt;&lt;/p&gt;
&lt;p&gt;If you have a job and you&apos;re not sure whether to be worried, this is for you. Not to soothe you with &quot;AI can&apos;t replace humans&quot; and not to panic you into a six-month bootcamp. To help you actually assess your situation.&lt;/p&gt;
&lt;p&gt;If you manage people and you&apos;re trying to figure out how to talk to your team about AI adoption without sounding like either a corporate automaton or someone who&apos;s out of touch, there&apos;s stuff in here for you.&lt;/p&gt;
&lt;p&gt;If you&apos;re in a creative field - design, writing, marketing - and you&apos;ve already felt the job market shift, there&apos;s a section of this that I think is genuinely useful. Not &quot;here&apos;s how to compete with AI&quot; but here&apos;s how to think about what you&apos;re actually selling.&lt;/p&gt;
&lt;p&gt;If you already know about AI and want something to send to a family member who keeps calling you asking what to do - this is that thing.&lt;/p&gt;
&lt;p&gt;The technical people are not the audience here. My &lt;a href=&quot;https://blog.deeflect.com/06-coding-stack/&quot;&gt;coding stack post&lt;/a&gt; or the &lt;a href=&quot;https://blog.deeflect.com/10-debugging-agents/&quot;&gt;deep dive on debugging AI agents&lt;/a&gt; is more your speed. This book is for the people those systems are being built around.&lt;/p&gt;
&lt;h2&gt;Where to get it&lt;/h2&gt;
&lt;p&gt;Amazon has all three formats right now — &lt;a href=&quot;https://www.amazon.com/dp/B0GTX4J124&quot;&gt;grab it here&lt;/a&gt; or search &quot;Don&apos;t Replace Me Dmitrii Kargaev.&quot;&lt;/p&gt;
&lt;p&gt;The companion site is &lt;a href=&quot;https://dontreplace.me&quot;&gt;dontreplace.me&lt;/a&gt; - free quiz, takes about five minutes, gives you a real threat assessment based on your actual role. Even if you don&apos;t buy the book, the quiz is worth doing just to have a concrete picture instead of ambient dread.&lt;/p&gt;
&lt;p&gt;Audiobook is in production. I&apos;ll announce it here and on &lt;a href=&quot;https://www.deeflect.com&quot;&gt;my portfolio site&lt;/a&gt; when it drops.&lt;/p&gt;
&lt;p&gt;If you read it and have thoughts - what landed, what you disagree with, who you think needs to read it - I want to hear that. Building in public means the feedback loop stays open. This isn&apos;t the end of the conversation, it&apos;s more like a long, structured version of it.&lt;/p&gt;
&lt;p&gt;The people I had in mind when I was writing this are real. If you know someone who&apos;s been quietly scared about this stuff, send it to them. That&apos;s what it&apos;s there for.&lt;/p&gt;
</content:encoded><media:content url="https://blog.deeflect.com/medium-img/i-published-a-book-here-s-why.jpg" medium="image" type="image/jpeg"/><media:thumbnail url="https://blog.deeflect.com/medium-img/i-published-a-book-here-s-why.jpg"/><enclosure url="https://blog.deeflect.com/medium-img/i-published-a-book-here-s-why.jpg" length="140709" type="image/jpeg"/></item><item><title>SEO Is Dead? No. But the Game Changed.</title><link>https://blog.deeflect.com/seo-is-dead-long-live-geo/</link><guid isPermaLink="true">https://blog.deeflect.com/seo-is-dead-long-live-geo/</guid><description>CTRs are down 30%, AI Overviews are everywhere. SEO isn&apos;t dead but the rules shifted. Here&apos;s what GEO is and why brand mentions now outrank backlinks 3:1.</description><pubDate>Thu, 26 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://blog.deeflect.com/medium-img/seo-is-dead-long-live-geo.jpg&quot; alt=&quot;SEO Is Dead? No. But the Game Changed.&quot; /&gt;&lt;/p&gt;
&lt;p&gt;I asked ChatGPT who I am. It had nothing. No idea I existed.&lt;/p&gt;
&lt;p&gt;I&apos;ve been deep in the AI space for a while now. I spent 5 years as lead product designer at a fintech platform serving 70+ financial institutions. I shipped &lt;a href=&quot;https://dee.ink&quot;&gt;31 open-source Rust CLI tools&lt;/a&gt;. Published 13 blog posts. Built in public for months. And the models I use every day had zero record of me.&lt;/p&gt;
&lt;p&gt;That bothered me more than it probably should have. But it also made sense once I started pulling the thread. Because &quot;SEO is dead&quot; isn&apos;t quite right - but something real is shifting, and I wasn&apos;t ready for it.&lt;/p&gt;
&lt;p&gt;This is what I found.&lt;/p&gt;
&lt;h2&gt;The two games nobody told me I was playing&lt;/h2&gt;
&lt;p&gt;There&apos;s Google-findable. And there&apos;s AI-citable. I had one. I completely lacked the other.&lt;/p&gt;
&lt;p&gt;Traditional SEO is about ranking. You write content, build links, optimize your pages, and Google surfaces you when someone searches. The pipeline is: search query → ranked results → human clicks through. That&apos;s the game most people know how to play.&lt;/p&gt;
&lt;p&gt;Generative Engine Optimization - GEO - is about citation. AI generates an answer. Your content, your name, your entity gets referenced in that answer. The pipeline skips the click entirely. There&apos;s no blue link. The model just knows you exist, or it doesn&apos;t.&lt;/p&gt;
&lt;p&gt;I had spent zero time thinking about the second one. Which meant I was completely invisible to the systems I use to do my actual work. The irony was genuinely annoying.&lt;/p&gt;
&lt;p&gt;That gap is what sent me down a multi-week research rabbit hole that ended with an open-source platform list, a scoring system, and a website full of free tools. But I&apos;m getting ahead of myself.&lt;/p&gt;
&lt;h2&gt;What&apos;s actually happening to search right now - and why &quot;SEO is dead&quot; keeps trending&lt;/h2&gt;
&lt;p&gt;The data isn&apos;t speculative anymore. BrightEdge tracked AI Overviews appearing in 11% of all queries in 2025. CTR is down 30%. People are asking AI assistants instead of searching, and when they do search, they&apos;re increasingly getting an AI-generated summary instead of ten blue links.&lt;/p&gt;
&lt;p&gt;This isn&apos;t a prediction. It&apos;s already the baseline. The shift isn&apos;t coming - it happened while everyone was arguing about whether it would.&lt;/p&gt;
&lt;p&gt;SparkToro&apos;s 2025 data puts this in concrete terms: top established brands appear in 55-77% of relevant AI responses. Unknown entities? 70x more volatile. You either have consistent presence or you have noise. There&apos;s not much middle ground.&lt;/p&gt;
&lt;p&gt;The question stopped being &quot;how do I rank?&quot; and became &quot;how do I get cited?&quot;&lt;/p&gt;
&lt;p&gt;What made this hit differently for me was trying to find myself across the major AI systems. Not just ChatGPT. I asked Claude, asked Perplexity, asked Google&apos;s AI Overview. The results were inconsistent in a way that told me something real: these systems aren&apos;t pulling from the same data, aren&apos;t weighting the same signals, and aren&apos;t resolving entities the same way. Being findable on one doesn&apos;t mean you&apos;re findable on all. That fragmentation is the part nobody&apos;s really mapped yet - including most of the GEO content I&apos;ve seen so far.&lt;/p&gt;
&lt;h2&gt;SEO isn&apos;t dead - let&apos;s be honest about that&lt;/h2&gt;
&lt;p&gt;The title is provocative on purpose. Here&apos;s the actual nuance, because I think people deserve a straight answer rather than a hot take.&lt;/p&gt;
&lt;p&gt;seoClarity&apos;s 2025 research found that 99.5% of AI Overview sources come from Google&apos;s top 10 organic results. Read that again. The AI is pulling from Google&apos;s rankings. Which means if you don&apos;t rank, you don&apos;t get cited. SEO is still the prerequisite. GEO builds on top of it.&lt;/p&gt;
&lt;p&gt;So no, you shouldn&apos;t burn your SEO playbook. You should add a chapter.&lt;/p&gt;
&lt;p&gt;What changed is the goal. Ranking #1 used to be the finish line. Now ranking #1 gets you in the candidate pool for AI citation. That&apos;s still worth doing. But it&apos;s not sufficient anymore. You can rank well and still be invisible to AI systems if you&apos;re missing the signals that models use to identify credible, citable entities.&lt;/p&gt;
&lt;p&gt;Think about what that means practically. You could have a page ranking on the first page of Google for a competitive keyword - real traffic, real impressions - and still not get cited in an AI-generated answer for the same query. Because the ranking signals and the citation signals overlap but aren&apos;t identical. You need both. And most SEO workflows are only optimizing for one.&lt;/p&gt;
&lt;p&gt;That&apos;s the shift. Not death. Evolution with a second layer that most people haven&apos;t started thinking about yet - including me, until very recently.&lt;/p&gt;
&lt;h2&gt;What GEO actually is and why the research convinced me&lt;/h2&gt;
&lt;p&gt;Generative Engine Optimization is the practice of optimizing your online presence to appear in AI-generated answers, not just search rankings.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.deeflect.com/medium-img/seo-is-dead-long-live-geo-1.jpg&quot; alt=&quot;What GEO actually is and why the research convinced me&quot; /&gt;&lt;/p&gt;
&lt;p&gt;The foundational paper here is Aggarwal et al., published at KDD &apos;24 - &lt;a href=&quot;https://arxiv.org/abs/2311.09735&quot;&gt;you can read it on arXiv&lt;/a&gt;. They tested different optimization strategies across a range of queries and found that the right approach could drive up to a 40% increase in AI visibility. The top strategies weren&apos;t what I expected: citations and statistics outperformed most other approaches. Authoritative sourcing matters enormously to how models evaluate content.&lt;/p&gt;
&lt;p&gt;Structured data, clear entity signals, and demonstrable expertise all feed into whether a model considers you citable. This isn&apos;t link juice. It&apos;s closer to reputation infrastructure - the stuff that makes a model &quot;trust&quot; that you&apos;re a real entity with real credentials.&lt;/p&gt;
&lt;p&gt;What clicked for me is that this maps to how the models actually work. They don&apos;t crawl the web in real time. They learned from a corpus. And in that corpus, some entities are clearly defined, well-referenced, consistently mentioned. Others are noise. I was noise.&lt;/p&gt;
&lt;h3&gt;The content structure piece most people miss&lt;/h3&gt;
&lt;p&gt;The Aggarwal research gets into something most GEO content glosses over: it&apos;s not just what you publish, it&apos;s how you structure it.&lt;/p&gt;
&lt;p&gt;Content that AI systems cite tends to have specific characteristics. It makes direct, falsifiable claims. It cites external sources. It includes statistics with attribution. It answers questions in a way that can be cleanly excerpted. This last point matters more than I initially thought - AI systems aren&apos;t summarizing your whole article, they&apos;re pulling specific passages. If your content isn&apos;t written in citable chunks, it&apos;s harder for a model to quote you cleanly even when it wants to.&lt;/p&gt;
&lt;p&gt;This is actually a content design problem as much as an SEO problem. It&apos;s related to something I&apos;ve written about before in the &lt;a href=&quot;https://blog.deeflect.com/03-ai-bad-ux/&quot;&gt;AI UX space&lt;/a&gt; - most people building for AI systems haven&apos;t thought about the machine as a reader with specific needs. The machine reads differently than a human does. It&apos;s looking for density, structure, and attributable claims.&lt;/p&gt;
&lt;p&gt;Writing for AI citation means writing in a way that makes a model&apos;s job easier. Short, precise statements. Named sources. Numbers with context. The exact opposite of the fluffy &quot;this is interesting to explore&quot; writing style that pads word counts but says nothing.&lt;/p&gt;
&lt;h2&gt;The data point that actually rewired how I think about this&lt;/h2&gt;
&lt;p&gt;I went deep on the Ahrefs research and one number kept stopping me.&lt;/p&gt;
&lt;p&gt;Brand mention correlation to AI citation: &lt;strong&gt;0.664&lt;/strong&gt;. Backlink correlation: &lt;strong&gt;0.218&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;That&apos;s not a small gap. Brand mentions are three times more predictive of AI visibility than backlinks. Three times. The entire SEO industry is built around backlinks as the gold standard signal - and for Google rankings, that&apos;s still mostly true. But for AI citation, what matters is whether your name, your brand, your entity is being talked about across the web.&lt;/p&gt;
&lt;p&gt;The Semrush data added another layer: nofollow links perform nearly as well as dofollow links for AI visibility. In traditional SEO, a nofollow link is worth significantly less. For GEO purposes, the signal isn&apos;t the PageRank transfer - it&apos;s the mention. The presence. The fact that you&apos;re being referenced.&lt;/p&gt;
&lt;p&gt;This is a real reorientation. The question isn&apos;t just &quot;who links to me?&quot; It&apos;s &quot;who talks about me, mentions me, references me across contexts?&quot; Those are different things. The second one is what I had been ignoring completely.&lt;/p&gt;
&lt;p&gt;It connects to something I wrote about &lt;a href=&quot;https://blog.deeflect.com/01-quit-fintech/&quot;&gt;leaving fintech to build AI systems&lt;/a&gt; - the whole reason I went independent was to build things that matter. Building an AI presence that&apos;s actually citable is part of that.&lt;/p&gt;
&lt;h3&gt;What the platform data actually shows&lt;/h3&gt;
&lt;p&gt;When I started auditing where brand mentions were coming from across the 168 platforms I ended up cataloging, some patterns were obvious in hindsight.&lt;/p&gt;
&lt;p&gt;Platforms that block AI crawlers still contribute to traditional SEO - backlinks, referral traffic, domain authority signals. But they contribute zero to AI citation. If a major AI crawler can&apos;t index the content where you&apos;re being mentioned, that mention is invisible to the model. Doesn&apos;t matter how high-authority the platform is. Doesn&apos;t matter how many people read it. The AI never saw it.&lt;/p&gt;
&lt;p&gt;Several platforms that have solid SEO reputations block AI crawlers entirely. A few you&apos;d never expect have wide-open access. The robots.txt data across 168 platforms genuinely changed my prioritization for where to spend time building presence.&lt;/p&gt;
&lt;p&gt;High-DA platform with AI crawlers blocked: useful for search rankings, useless for GEO. Medium-DA platform with full AI crawler access: directly contributes to citation potential. Those aren&apos;t the same trade-off at all. Treating them the same - which most SEO frameworks do - is leaving real GEO value on the table.&lt;/p&gt;
&lt;h2&gt;Why &quot;SEO is dead&quot; gets the diagnosis wrong but identifies a real symptom&lt;/h2&gt;
&lt;p&gt;I keep seeing the &quot;SEO is dead&quot; framing in newsletters, on Twitter, in founder group chats. It&apos;s not accurate but it&apos;s pointing at something real: the workflows that worked in 2020 are producing worse results in 2025. That&apos;s true. The feeling that something fundamental has changed is correct. The conclusion that SEO itself is dead is wrong.&lt;/p&gt;
&lt;p&gt;What&apos;s happening is that SEO was always a proxy for something else - demonstrating that your content is trustworthy and relevant. Google built ranking signals as a proxy for that. Now AI systems are building citation signals as a different proxy for the same underlying thing. The underlying thing didn&apos;t change. The measurement changed.&lt;/p&gt;
&lt;p&gt;If you had real expertise and real content depth, most GEO strategies will work for you because you actually have the substance those signals are trying to measure. If you were gaming SEO with thin content and link schemes, GEO is going to be harder because the signals it uses are less gameable. Brand mentions across real communities are harder to manufacture than backlinks. Genuine citations in credible content are harder to fake than directory submissions.&lt;/p&gt;
&lt;p&gt;That&apos;s probably a good thing. The &lt;a href=&quot;https://blog.deeflect.com/08-prompt-eng-dead/&quot;&gt;prompt engineering is dead&lt;/a&gt; conversation is related - these systems keep evolving in ways that reward actual depth over tactical gaming. GEO continues that trend.&lt;/p&gt;
&lt;p&gt;The mistake is treating this as a binary. SEO or GEO. Old playbook or new playbook. It&apos;s additive. Everything that made content good for search still applies. Now there&apos;s additional surface area to optimize - entity signals, structured data, AI crawler access, brand mention distribution - that wasn&apos;t relevant before.&lt;/p&gt;
&lt;h2&gt;What I built to solve this&lt;/h2&gt;
&lt;p&gt;Once I understood the problem I started doing the research manually - checking which platforms actually allow AI crawlers, which ones block them in robots.txt, which ones have high GEO value versus medium versus low. Doing it by hand was a pain in the ass. So I built a system.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.deeflect.com/medium-img/seo-is-dead-long-live-geo-2.jpg&quot; alt=&quot;What I built to solve this&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/deeflect/awesome-geo&quot;&gt;awesome-geo&lt;/a&gt; is the output: a curated, verified list of 168 platforms with full crawler access data. 142 of them are AI-discoverable. I scored them: 74 high GEO value, 78 medium, 16 low. Every platform has been manually verified against robots.txt for the major AI crawlers - GPTBot, ClaudeBot, Anthropic&apos;s crawler, Google-Extended.&lt;/p&gt;
&lt;p&gt;I also built &lt;a href=&quot;https://geo.deeflect.com&quot;&gt;geo. deeflect.com&lt;/a&gt; - free tools that came out of doing this manually and wishing they existed. AI Visibility Checker, JSON-LD Generator, llms.txt Generator, Meta Tags Generator, robots.txt Generator.&lt;/p&gt;
&lt;p&gt;I built this because I needed it and figured others would too. It&apos;s open source. Use it.&lt;/p&gt;
&lt;p&gt;The reason I verified robots.txt across all 168 platforms is that it matters more than most people realize. A platform could have high domain authority and great SEO value - but if it blocks AI crawlers, it contributes zero to your GEO presence. Several well-known platforms do exactly that. Knowing which ones are actually AI-accessible changes your prioritization completely.&lt;/p&gt;
&lt;p&gt;The other thing that came out of building this: the verification process itself is time-consuming in a way that scales badly. You can&apos;t just check robots.txt once. Platforms update their policies. A platform that allowed GPTBot in 2023 might have added restrictions in 2024. The landscape is moving, which means any static list becomes stale. The tools at geo. deeflect.com are built to stay current rather than being a snapshot.&lt;/p&gt;
&lt;p&gt;This is part of the same instinct that drove &lt;a href=&quot;https://blog.deeflect.com/04-seven-apps/&quot;&gt;building multiple projects solo&lt;/a&gt; - when I hit friction repeatedly, I build the thing that removes it, then make it available. The GEO research tooling is that, applied to discoverability infrastructure.&lt;/p&gt;
&lt;h2&gt;What to do right now if you care about any of this&lt;/h2&gt;
&lt;p&gt;You don&apos;t need to overhaul everything. Start here:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Check where you&apos;re mentioned.&lt;/strong&gt; Brand mentions are the highest-correlation signal. Are you being referenced across contexts beyond your own site?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Add JSON-LD structured data.&lt;/strong&gt; This is how you communicate entity information to AI systems. If you haven&apos;t done it, &lt;a href=&quot;https://geo.deeflect.com&quot;&gt;geo. deeflect.com&lt;/a&gt; has a free generator.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Create an llms.txt file.&lt;/strong&gt; Similar to robots.txt but for LLMs - it gives AI systems structured information about who you are and what you do. Again, free generator on the site.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verify your platforms allow AI crawlers.&lt;/strong&gt; Check the robots.txt on any platform you&apos;re counting on for AI visibility. You might be surprised what you find.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Think about entity consistency.&lt;/strong&gt; Your name, credentials, and core claims should be stated consistently across platforms. Inconsistency makes entity resolution harder for models.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Use citations and statistics in your content.&lt;/strong&gt; The KDD &apos;24 research is clear: this is a top GEO signal. Reference real sources. Include real numbers. This post does that on purpose.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Audit your content structure.&lt;/strong&gt; Are your key claims written in excerptable chunks? Can a model pull a clean sentence or paragraph that stands on its own? If not, restructure. This is different from readability optimization - it&apos;s citation optimization.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The &lt;a href=&quot;https://blog.deeflect.com/08-prompt-eng-dead/&quot;&gt;prompt engineering is dead&lt;/a&gt; argument I&apos;ve seen floating around is related to this - the game keeps shifting toward higher-level signals, away from tactical optimization. GEO is the same shift applied to discoverability.&lt;/p&gt;
&lt;h2&gt;Where this goes from here&lt;/h2&gt;
&lt;p&gt;I&apos;m just getting started on this.&lt;/p&gt;
&lt;p&gt;The research took me deep enough that I have a lot more to share - how different AI systems handle citations differently, what the actual citation mechanics look like across ChatGPT versus Claude versus Perplexity, how to structure content specifically for AI summarization, what the verification data across 168 platforms actually reveals about the crawling landscape.&lt;/p&gt;
&lt;p&gt;The fragmentation across AI systems is the next thing I want to dig into properly. Right now, most GEO content treats &quot;AI visibility&quot; as a monolithic thing. It&apos;s not. Being cited by Perplexity requires different signals than being cited in a Google AI Overview. ChatGPT&apos;s training data cutoff means recent content won&apos;t affect your visibility there until the next model version. Claude uses different weighting. These aren&apos;t the same problem. Treating them the same is leaving real optimization opportunities untouched.&lt;/p&gt;
&lt;p&gt;This article is the intro. I&apos;m building out a full GEO research series here - the tools are live, the data is real, and I&apos;m going to keep digging.&lt;/p&gt;
&lt;p&gt;If you&apos;ve been heads-down on traditional SEO and haven&apos;t thought about AI visibility yet, now&apos;s the time to start. Not because SEO is dead. Because the finish line moved - and most people haven&apos;t noticed yet.&lt;/p&gt;
&lt;p&gt;SEO got a co-pilot. Learn to fly both.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;em&gt;Tools and research: &lt;a href=&quot;https://geo.deeflect.com&quot;&gt;geo. deeflect.com&lt;/a&gt; - &lt;a href=&quot;https://github.com/deeflect/awesome-geo&quot;&gt;awesome-geo on GitHub&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
</content:encoded><media:content url="https://blog.deeflect.com/medium-img/seo-is-dead-long-live-geo.jpg" medium="image" type="image/jpeg"/><media:thumbnail url="https://blog.deeflect.com/medium-img/seo-is-dead-long-live-geo.jpg"/><enclosure url="https://blog.deeflect.com/medium-img/seo-is-dead-long-live-geo.jpg" length="68550" type="image/jpeg"/></item><item><title>The Distribution Problem Nobody Talks About</title><link>https://blog.deeflect.com/the-distribution-problem-nobody-talks-about/</link><guid isPermaLink="true">https://blog.deeflect.com/the-distribution-problem-nobody-talks-about/</guid><description>I have 61 post drafts, 18 finished blog posts, and published nothing. Here&apos;s what my AI agent diagnosed about why - and how I&apos;m fixing the default.</description><pubDate>Wed, 11 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://blog.deeflect.com/medium-img/the-distribution-problem-nobody-talks-about.jpg&quot; alt=&quot;The Distribution Problem Nobody Talks About&quot; /&gt;&lt;/p&gt;
&lt;p&gt;I have 61 post drafts queued up. 91 reply drafts. 18 finished blog posts, voice-matched and slop-filtered, ready to go. The distribution problem nobody talks about isn&apos;t content scarcity - it&apos;s the gap between a full queue and zero published output. That gap is where builder ambition goes to die quietly, surrounded by perfectly organized markdown files and automated scheduling daemons that never fire.&lt;/p&gt;
&lt;p&gt;Let me explain how I got here.&lt;/p&gt;
&lt;h2&gt;The distribution problem, in numbers&lt;/h2&gt;
&lt;p&gt;Last week I built a full content automation pipeline. About 20 hours of work. I also built a road trip planning app with Maps integration (3 hours), set up a music production pipeline with AI voice conversion (2 hours), and my agent stack ran 240 autonomous sessions across three days while I was offline doing whatever offline people do.&lt;/p&gt;
&lt;p&gt;Content published: zero.&lt;/p&gt;
&lt;p&gt;That ratio is not a typo. 25+ hours of building, 240 agent sessions processing work in the background, and the public output was nothing. The drafts sit in a queue. The queue is full. The queue has been full for weeks.&lt;/p&gt;
&lt;p&gt;This is the distribution problem nobody in the builder community talks about, because talking about it means admitting the pipeline is a cope.&lt;/p&gt;
&lt;h2&gt;What I actually built&lt;/h2&gt;
&lt;p&gt;Let me give you the full picture so you understand how deep this goes.&lt;/p&gt;
&lt;p&gt;The system is called CCC - Content Command Center. Here&apos;s what it does:&lt;/p&gt;
&lt;p&gt;A scanner watches my X timeline and pulls content into a viral library. I&apos;ve got 19 saved tweets in there right now. A remix engine takes those, plus my own writing patterns, and generates drafts in three streams: reaction tweets, personal/building-in-public posts, and evergreen content. Each draft goes through voice matching. Slop filtering. Then into schedule slots at 8am, 12pm, and 5pm with jitter built in so it doesn&apos;t look bot-like.&lt;/p&gt;
&lt;p&gt;The posting layer runs through a Playwright daemon, headless Chromium on port 3381, because OAuth kept throwing 403s on replies. I spent a full afternoon debugging that. It works now. It posts to X and I&apos;ve got Bluesky and LinkedIn integration planned.&lt;/p&gt;
&lt;p&gt;The system is genuinely good. Multi-platform support, three content streams, voice-matched output, automated scheduling with a real distribution daemon underneath it. If I were selling this as a SaaS tool, I&apos;d be proud of the architecture.&lt;/p&gt;
&lt;p&gt;But there&apos;s 61 post drafts and 91 reply drafts sitting in the queue.&lt;/p&gt;
&lt;p&gt;Nothing posted.&lt;/p&gt;
&lt;h2&gt;When your own agent calls you out&lt;/h2&gt;
&lt;p&gt;Here&apos;s where it gets embarrassing.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.deeflect.com/medium-img/the-distribution-problem-nobody-talks-about-1.jpg&quot; alt=&quot;When your own agent calls you out&quot; /&gt;&lt;/p&gt;
&lt;p&gt;My AI agent system does weekly knowledge graph rebuilds. It maps entities and relationships across everything I&apos;m working on - projects, patterns, decisions, outputs. I didn&apos;t ask it to do anything special. It just runs.&lt;/p&gt;
&lt;p&gt;Last week it created a node called &lt;code&gt;revenue_avoidance_pattern&lt;/code&gt; and connected it to multiple projects.&lt;/p&gt;
&lt;p&gt;Not &lt;code&gt;work_in_progress&lt;/code&gt;. Not &lt;code&gt;pre-launch_phase&lt;/code&gt;. Revenue avoidance pattern.&lt;/p&gt;
&lt;p&gt;The agent found this pattern by analyzing my behavior across weeks of data and decided it was significant enough to be a named entity in my knowledge graph. My tools are diagnosing me now. I built a system smart enough to identify that I&apos;m using building as a substitute for shipping, and now I have to sit with that.&lt;/p&gt;
&lt;p&gt;The knowledge graph has this node connected to OpenClaw, CCC, dee.ink (my &lt;a href=&quot;https://blog.deeflect.com/dee-ink/&quot;&gt;31 Rust CLI tools project&lt;/a&gt;), the blog, the social queue - everything. It&apos;s not pointing at one project as the problem. It&apos;s pointing at a pattern across all of them.&lt;/p&gt;
&lt;p&gt;That&apos;s a different kind of feedback than a friend telling you to &quot;just post more.&quot;&lt;/p&gt;
&lt;h2&gt;The psychology of building as avoidance&lt;/h2&gt;
&lt;p&gt;I&apos;ve been building since I was 14. Started freelancing in design, shipped products for 70+ banks across 15 countries at VALK, won industry awards, got written up in Forbes and CNN. I know how to execute. The capability isn&apos;t the problem.&lt;/p&gt;
&lt;p&gt;The problem is that building feels safe in a way that distributing doesn&apos;t.&lt;/p&gt;
&lt;p&gt;Code works or it doesn&apos;t. The compiler tells you immediately. You fix it or you don&apos;t. There&apos;s no ambiguity, no social judgment, no public record of failure. When something doesn&apos;t compile you&apos;re not a bad person - you just have a bug. You fix the bug and move on.&lt;/p&gt;
&lt;p&gt;Distribution is different. Distribution means putting your name on something, making a claim about it, and then watching the internet decide if it agrees. For an introvert who&apos;d rather spend 14 hours in a hyperfocus coding session than send one networking email, that asymmetry is not small. The emotional cost of one negative reply can outweigh the satisfaction of 50 good ones. The brain doesn&apos;t do expected value math - it pattern-matches to threat.&lt;/p&gt;
&lt;p&gt;So you build another tool. Another automation layer. Another pipeline. &quot;I&apos;ll post when the system is ready.&quot; Except the system is never quite ready, because readiness is a moving target you control, and the internet&apos;s judgment is not.&lt;/p&gt;
&lt;p&gt;I bought 15+ domains last month for projects I haven&apos;t started. One evening I spent scanning 3,495 TLDs for available domain names instead of posting the drafts I already had. That&apos;s not a productivity problem. That&apos;s scope expansion as a coping mechanism. Classic avoidance dressed up as preparation.&lt;/p&gt;
&lt;p&gt;You&apos;re not preparing to launch. You&apos;re preparing to prepare.&lt;/p&gt;
&lt;p&gt;This pattern has a name in psychology. Researchers studying creative avoidance call it &quot;productive procrastination&quot; - the tendency to fill time with legitimate-seeming work that doesn&apos;t advance the actual goal. A &lt;a href=&quot;https://journals.sagepub.com/doi/10.1177/0956797619835973&quot;&gt;2019 study published in Psychological Science&lt;/a&gt; found that people systematically underweight the cost of inaction when the alternative activity feels productive. Building a better pipeline is productive. It&apos;s also not shipping. The brain accepts the substitution.&lt;/p&gt;
&lt;h2&gt;The ADHD variable&lt;/h2&gt;
&lt;p&gt;The burst-crash cycle makes this worse in a specific way.&lt;/p&gt;
&lt;p&gt;My ADHD brain goes hard for 3-4 days - hyperfocus, 14-hour sessions, ship 3 projects, write 10 drafts, rebuild the whole agent stack. Then I go quiet for 4-5 days. That&apos;s not laziness. That&apos;s recovery. The neuroscience is what it is, and I stopped feeling bad about the crash phase a while ago.&lt;/p&gt;
&lt;p&gt;But the burst-crash cycle interacts badly with distribution.&lt;/p&gt;
&lt;p&gt;Distribution requires consistency. Not quantity - consistency. Showing up on Tuesday when you don&apos;t feel like it. Posting the medium-quality take because good enough beats nothing. Engaging with replies during the low-energy period when you&apos;d rather be offline.&lt;/p&gt;
&lt;p&gt;Building can happen in bursts. You can build an entire app in a 3-day hyperfocus sprint and it&apos;ll be fine. The code doesn&apos;t care that you disappeared for a week after.&lt;/p&gt;
&lt;p&gt;An audience does. The algorithm does. The compounding effect of consistent distribution is entirely undermined by a 2-week silence after a 3-day posting burst. I wrote about &lt;a href=&quot;https://blog.deeflect.com/07-disappeared/&quot;&gt;disappearing from Twitter for two months&lt;/a&gt; and watching the metrics crater. I know this. I still do it.&lt;/p&gt;
&lt;p&gt;So the system I built - the pipeline, the scheduler, the daemon on port 3381 - is actually a real solution to a real problem. Automated distribution to compensate for the burst-crash cycle. Batched creation during hyperfocus, drip-fed output during the crash.&lt;/p&gt;
&lt;p&gt;The system works. It&apos;s just not running because I haven&apos;t pressed go.&lt;/p&gt;
&lt;h2&gt;Why the distribution problem nobody talks about is actually structural&lt;/h2&gt;
&lt;p&gt;Here&apos;s the thing that took me a while to see clearly. This isn&apos;t just a personal psychology problem. It&apos;s a structural problem with how builders work, and the current AI tooling makes it worse before it makes it better.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.deeflect.com/medium-img/the-distribution-problem-nobody-talks-about-2.jpg&quot; alt=&quot;Why the distribution problem nobody talks about is actually structural&quot; /&gt;&lt;/p&gt;
&lt;p&gt;We&apos;ve had an explosion of creation tools. Claude, GPT-4o, Cursor, v0 - the cost of generating content or code has collapsed to near zero. What hasn&apos;t scaled is the decision-making layer on top of it. The question &quot;is this worth publishing?&quot; still costs the same amount of executive function it always did. Maybe more, because now you have 91 reply drafts instead of 9.&lt;/p&gt;
&lt;p&gt;Abundance doesn&apos;t solve distribution. It makes the selection problem harder.&lt;/p&gt;
&lt;p&gt;I&apos;ve talked to enough builders in the AI space to know this isn&apos;t niche. The &lt;a href=&quot;https://www.indiehackers.com&quot;&gt;indie hacker forums&lt;/a&gt; are full of people with polished MVPs that haven&apos;t launched because they&apos;re &quot;adding one more feature.&quot; The build-in-public community celebrates shipping but rarely discusses the pre-ship paralysis that affects most of the people who never make it to the public part.&lt;/p&gt;
&lt;p&gt;The tools that exist for this are surprisingly thin. Buffer and Hootsuite solve scheduling. They don&apos;t solve the threshold decision. Ghost and Substack make publishing easy. They don&apos;t help you figure out which of your 18 drafts goes first. There&apos;s a real gap here and it&apos;s not primarily a technology gap - it&apos;s a decision architecture gap.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Decision_fatigue&quot;&gt;research on decision fatigue&lt;/a&gt; is relevant. The more choices you have to make, the worse your decision-making gets over the course of a day. When I&apos;ve spent 8 hours making technical decisions - model selection, prompt structure, error handling - I have nothing left for &quot;is this tweet worth posting?&quot; So I don&apos;t. The default behavior when executive function is depleted is to do nothing, and doing nothing means the queue grows.&lt;/p&gt;
&lt;p&gt;The fix isn&apos;t better content. It&apos;s removing the decision from the critical path.&lt;/p&gt;
&lt;h2&gt;The solution I actually built (and then sat on for two weeks)&lt;/h2&gt;
&lt;p&gt;I&apos;m not going to end this with five productivity tips. You&apos;ve read those. They didn&apos;t work. Here&apos;s what I&apos;m actually trying:&lt;/p&gt;
&lt;p&gt;The CCC system has a minimum viable publishing threshold I added last week. If a draft scores above a certain quality bar and has been in the queue for more than 48 hours, it goes live automatically. No manual review gate. If I want to stop a post, I have to actively intervene. Default is publish, not hold.&lt;/p&gt;
&lt;p&gt;This is anti-intuitive for someone who wants everything to be perfect. That&apos;s the point.&lt;/p&gt;
&lt;p&gt;The technical implementation is pretty simple. Each draft gets a composite score on creation: voice match confidence (0-1), estimated engagement based on patterns from the viral library, and a topic freshness score that decays after 72 hours. Anything above 0.7 composite after 48 hours in queue triggers a publish. I can override with a &lt;code&gt;HOLD&lt;/code&gt; flag in the draft metadata. But I have to do that actively - the default is go.&lt;/p&gt;
&lt;p&gt;Here&apos;s what the draft metadata looks like:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{
 &quot;draft_id&quot;: &quot;ccc_20250118_042&quot;,
 &quot;content&quot;: &quot;...&quot;,
 &quot;created_at&quot;: &quot;2025-01-18T04:22:00Z&quot;,
 &quot;scores&quot;: {
 &quot;voice_match&quot;: 0.84,
 &quot;engagement_est&quot;: 0.71,
 &quot;freshness&quot;: 0.93
 },
 &quot;composite&quot;: 0.83,
 &quot;status&quot;: &quot;QUEUED&quot;,
 &quot;publish_after&quot;: &quot;2025-01-20T04:22:00Z&quot;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If &lt;code&gt;status&lt;/code&gt; is &lt;code&gt;QUEUED&lt;/code&gt; and &lt;code&gt;publish_after&lt;/code&gt; has passed and composite is above threshold, the daemon posts it. No human in the loop unless I add a &lt;code&gt;HOLD&lt;/code&gt; flag. Default behavior is publish.&lt;/p&gt;
&lt;p&gt;I&apos;m treating distribution the same way I treated the &lt;a href=&quot;https://blog.deeflect.com/06-coding-stack/&quot;&gt;coding stack&lt;/a&gt; - build the system so the right behavior happens by default, not by willpower. Willpower depletes. Systems don&apos;t.&lt;/p&gt;
&lt;p&gt;The irony is that the most publishable thing I&apos;ve made in weeks is this post. The thing where I admit that I have 18 finished blog drafts and haven&apos;t posted any of them. The thing where I confess my agent system diagnosed me with revenue avoidance. The thing that took me two hours to write instead of the 20 hours I spent building the pipeline that would have made posting automatic.&lt;/p&gt;
&lt;p&gt;Vulnerability is more interesting than competence. People can&apos;t relate to &quot;I built a perfect system&quot; - they can relate to &quot;I built a perfect system and then didn&apos;t use it for two weeks because I was scared.&quot;&lt;/p&gt;
&lt;h2&gt;What actually breaks the loop&lt;/h2&gt;
&lt;p&gt;The blog drafts are going to start coming out this week. Not because I rewired my psychology. Because the pipeline now defaults to shipping and I have to do work to stop it.&lt;/p&gt;
&lt;p&gt;Three things that are actually helping, not as a listicle but as honest data points:&lt;/p&gt;
&lt;p&gt;Changing the default. The biggest unlock was making publish the zero-effort option and hold the effortful one. This is just &lt;a href=&quot;https://www.penguinrandomhouse.com/books/293935/nudge-by-richard-h-thaler-and-cass-r-sunstein/&quot;&gt;Thaler and Sunstein&apos;s nudge theory&lt;/a&gt; applied to a content queue. Change the default, change the behavior, without requiring willpower or changed preferences.&lt;/p&gt;
&lt;p&gt;Separating creation from curation. I stopped trying to decide whether something is worth publishing in the same session I wrote it. The draft goes in the queue, scores get calculated asynchronously, and the decision happens later based on the composite score - not on how I feel at 2am after a 12-hour build session.&lt;/p&gt;
&lt;p&gt;Making the cost of inaction visible. The knowledge graph node was brutal but useful. When &lt;code&gt;revenue_avoidance_pattern&lt;/code&gt; is sitting there in your entity graph connected to six projects, it&apos;s harder to pretend you&apos;re just being careful. I added a dashboard widget that shows days-since-last-publish. Right now it says 14. That number being visible every morning is uncomfortable in a productive way.&lt;/p&gt;
&lt;p&gt;If you&apos;re a builder reading this, you probably recognize the pattern. The &lt;a href=&quot;https://blog.deeflect.com/04-seven-apps/&quot;&gt;seven apps I built solo&lt;/a&gt; before any of them got real traction. The &lt;a href=&quot;https://blog.deeflect.com/09-mcp-server/&quot;&gt;MCP server wrapping 56 APIs&lt;/a&gt; that I built and documented and then sat on for three weeks before publishing anything about it. The infrastructure-first, distribution-never cycle that affects probably 60% of the people building seriously in this space.&lt;/p&gt;
&lt;p&gt;We talk about it in private. In DMs. In &quot;lol I have like 30 unpublished drafts&quot; jokes. But the actual posts are all about shipping, about momentum, about velocity. Not about the 3am moment when you realize your knowledge graph has a node called &lt;code&gt;revenue_avoidance_pattern&lt;/code&gt; and it&apos;s accurate.&lt;/p&gt;
&lt;p&gt;The distribution problem is real. It&apos;s structural. It&apos;s also solvable with the same tools I&apos;d use for any other problem - designed around the actual constraint, which isn&apos;t capability. It&apos;s the friction between building and letting go.&lt;/p&gt;
&lt;p&gt;The queue is full. Time to empty it.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;If you&apos;re stuck in the same loop, my &lt;a href=&quot;https://blog.deeflect.com/about/&quot;&gt;about page&lt;/a&gt; has context on what I&apos;m building and why. And if your own agent stack starts diagnosing your behavior patterns, maybe take notes. It&apos;s uncomfortable but it&apos;s probably right.&lt;/p&gt;
</content:encoded><media:content url="https://blog.deeflect.com/medium-img/the-distribution-problem-nobody-talks-about.jpg" medium="image" type="image/jpeg"/><media:thumbnail url="https://blog.deeflect.com/medium-img/the-distribution-problem-nobody-talks-about.jpg"/><enclosure url="https://blog.deeflect.com/medium-img/the-distribution-problem-nobody-talks-about.jpg" length="245544" type="image/jpeg"/></item><item><title>castkit: CLI Demo Videos From One Command</title><link>https://blog.deeflect.com/castkit/</link><guid isPermaLink="true">https://blog.deeflect.com/castkit/</guid><description>castkit is an open-source Rust CLI demo video generator. Run one command on any binary and get a polished MP4 or GIF. Works headless in CI.</description><pubDate>Thu, 05 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://blog.deeflect.com/medium-img/castkit.jpg&quot; alt=&quot;castkit: CLI Demo Videos From One Command&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Every CLI tool I&apos;ve ever shipped had the same problem: zero visual presence. Then I built castkit - a castkit CLI demo video generator that turns any binary into a polished MP4 or GIF with one command. No screen recording software. No manual scripting. No video editing. Open source, written in Rust, and the meta-demo sells it better than I can: castkit generates its own demo video.&lt;/p&gt;
&lt;p&gt;Check the &lt;a href=&quot;https://github.com/deeflect/castkit&quot;&gt;repo&lt;/a&gt; before reading further if you want to see the output first.&lt;/p&gt;
&lt;h2&gt;Why I actually built this&lt;/h2&gt;
&lt;p&gt;Screen recording CLI tools is a pain in the ass. You open your terminal, run the command, inevitably typo something on the third take, realize the font looks weird, forget to hide your API key in the environment, and end up with a 45-second raw recording you now have to edit in Final Cut.&lt;/p&gt;
&lt;p&gt;The existing options all have real tradeoffs. &lt;a href=&quot;https://asciinema.org/&quot;&gt;asciinema&lt;/a&gt; is free and captures terminal output, but the playback looks like a terminal log - no visual polish, no branding, nothing you&apos;d put on a landing page. &lt;a href=&quot;https://www.screen.studio/&quot;&gt;Screen Studio&lt;/a&gt; costs $89 and produces beautiful results, but you&apos;re still recording manually. &lt;a href=&quot;https://github.com/charmbracelet/vhs&quot;&gt;VHS from Charm&lt;/a&gt; is the closest thing to what I wanted - declarative, scriptable - but you have to write a &lt;code&gt;.tape&lt;/code&gt; file by hand for every recording. No auto-discovery. No agent support. Still requires you to think about the demo structure yourself.&lt;/p&gt;
&lt;p&gt;The trigger for actually building this was working on AI coding agents. I kept hitting the same pattern: an agent builds a CLI tool, the CLI tool works, and then the last step is... what? Push to GitHub with a README? That&apos;s a dead end. I wanted the agent to be able to say &quot;generate a demo video&quot; as the final build step. No human intervention. No manual configuration. Just: here&apos;s a binary, produce something I can ship.&lt;/p&gt;
&lt;p&gt;That didn&apos;t exist. So I built it.&lt;/p&gt;
&lt;h2&gt;What castkit actually does&lt;/h2&gt;
&lt;p&gt;The pipeline is: binary/command → discover → plan → record → redact → render → encode → MP4 or GIF.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.deeflect.com/medium-img/castkit-1.jpg&quot; alt=&quot;What castkit actually does&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Each stage does real work.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Discover&lt;/strong&gt; reads your tool&apos;s &lt;code&gt;--help&lt;/code&gt; output and README to understand what commands exist, what flags do what, and what a reasonable demo flow looks like. It builds a structured picture of the tool without you explaining anything.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Plan&lt;/strong&gt; takes that understanding and generates a demo script as editable JSON. This is the part I&apos;m most proud of. You can run &lt;code&gt;castkit plan&lt;/code&gt; on any CLI tool, get a JSON file showing every scene, every command, every pause duration - and edit it before recording. It&apos;s not a black box.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Record&lt;/strong&gt; runs the actual PTY recording with human-like typing jitter. Real typing cadence, not &lt;code&gt;sleep 0.1&lt;/code&gt; between every character. The variation is calibrated to feel like a person typed it, not a script.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Redact&lt;/strong&gt; runs automatically before anything gets rendered. Environment variables, API keys, tokens - anything that looks like a secret gets masked. Safe by default. You don&apos;t have to remember to do this.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Render&lt;/strong&gt; is where it gets interesting. castkit uses &lt;a href=&quot;https://github.com/pop-os/cosmic-text&quot;&gt;cosmic-text&lt;/a&gt; for text shaping and &lt;a href=&quot;https://github.com/RazrFalcon/tiny-skia&quot;&gt;tiny-skia&lt;/a&gt; for pixel rendering. Full software renderer - no GPU dependency, no display server needed, runs in CI. It draws macOS window chrome (traffic lights, title bar, drop shadow), handles auto-zoom with easing, crossfade transitions between scenes, cursor smoothing with blink animation.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Encode&lt;/strong&gt; pipes frames to ffmpeg for H.264 MP4 or GIF output.&lt;/p&gt;
&lt;p&gt;The whole thing is a single binary plus ffmpeg. No runtime dependencies. No Python environment. No Node. Ship it anywhere.&lt;/p&gt;
&lt;h2&gt;How the castkit CLI demo video generator works end to end&lt;/h2&gt;
&lt;p&gt;The one-command path is:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;castkit demo./your-binary
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That&apos;s it. It discovers, plans, records, and renders without you specifying anything. You get an MP4 with branding, themes, and proper window chrome.&lt;/p&gt;
&lt;p&gt;If you want more control:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;castkit plan./your-binary --output demo-plan.json
# edit demo-plan.json
castkit record --plan demo-plan.json --output demo.mp4
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The plan JSON looks like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{
 &quot;title&quot;: &quot;castkit demo&quot;,
 &quot;theme&quot;: &quot;catppuccin&quot;,
 &quot;style&quot;: &quot;dark&quot;,
 &quot;scenes&quot;: [
 {
 &quot;type&quot;: &quot;command&quot;,
 &quot;command&quot;: &quot;castkit --help&quot;,
 &quot;duration_ms&quot;: 2000,
 &quot;pause_after_ms&quot;: 1500
 },
 {
 &quot;type&quot;: &quot;command&quot;,
 &quot;command&quot;: &quot;castkit demo./my-tool&quot;,
 &quot;duration_ms&quot;: 3000,
 &quot;pause_after_ms&quot;: 1000
 }
 ]
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You can add intro cards, outro branding, adjust timing, swap themes. The plan is the contract between what you want and what gets rendered.&lt;/p&gt;
&lt;h3&gt;Themes and visual styles&lt;/h3&gt;
&lt;p&gt;Built-in color themes: catppuccin, tokyo-night, dracula, one-dark. Visual styles: dark, light, minimal, ocean, hacker. These aren&apos;t just color swaps - each style affects font weight, padding, window chrome treatment, and background rendering.&lt;/p&gt;
&lt;p&gt;The hacker style does exactly what you think it does.&lt;/p&gt;
&lt;h3&gt;Two recording modes&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Terminal mode&lt;/strong&gt; is the classic full-terminal recording. The full PTY, command output scrolling, cursor - everything you&apos;d see if you were sitting at the machine.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Web mode&lt;/strong&gt; is for CLI tools that spawn a browser or have web UI output. It captures that context instead.&lt;/p&gt;
&lt;h2&gt;The technical stack&lt;/h2&gt;
&lt;p&gt;Rust was the right call here for a few reasons. The rendering pipeline needs to be deterministic and fast - you&apos;re compositing frames, and any variability in timing shows up in the output video. Rust&apos;s ownership model also made the PTY recording safe to implement without the race conditions you&apos;d fight in Go or Python.&lt;/p&gt;
&lt;p&gt;Key crates:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://docs.rs/vt100/latest/vt100/&quot;&gt;vt100&lt;/a&gt;&lt;/strong&gt; - terminal state parsing and capture. This is the core of getting accurate terminal output into a data structure we can render.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;cosmic-text&lt;/strong&gt; - text layout with proper Unicode support, ligatures, font fallback. CLI output has a lot of edge cases here.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;tiny-skia&lt;/strong&gt; - pure-Rust 2D renderer. No Cairo, no Skia binding hell, no native dependency chain.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;portable-pty&lt;/strong&gt; - cross-platform PTY. The thing that lets you actually run a real shell session and capture it.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;clap&lt;/strong&gt; - CLI interface. The irony of using a CLI framework to build a CLI demo tool is not lost on me.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The rendering pipeline goes: PTY session → vt100 parser → terminal cell grid → tiny-skia frame → raw pixel buffer → ffmpeg stdin. Each frame is fully rendered in software. That&apos;s intentional - it means the tool runs in headless CI without needing a display.&lt;/p&gt;
&lt;p&gt;The auto-zoom is probably the feature that makes demos look professional without any work. When a command produces long output, castkit calculates the bounding box of the relevant content and applies a smooth zoom-in with easing. It&apos;s the thing that makes it look like someone edited the recording, when nobody did.&lt;/p&gt;
&lt;h3&gt;Why not Go or Python&lt;/h3&gt;
&lt;p&gt;I get asked this. Go would&apos;ve been fine for the CLI surface, but the rendering layer involves pixel-level compositing with tight frame timing. The garbage collector pauses in Go show up as dropped frames when you&apos;re pushing raw buffers to ffmpeg at 30fps. Python isn&apos;t even in the conversation for a tool you want to distribute as a single binary.&lt;/p&gt;
&lt;p&gt;Rust also gave me compile-time guarantees on the PTY session lifecycle. A PTY that doesn&apos;t get cleaned up properly hangs your terminal. With Rust&apos;s Drop trait handling cleanup, that class of bug just doesn&apos;t happen.&lt;/p&gt;
&lt;h2&gt;Running the castkit CLI demo video generator in CI&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.deeflect.com/medium-img/castkit-2.jpg&quot; alt=&quot;Running castkit in CI&quot; /&gt;&lt;/p&gt;
&lt;p&gt;This is where it gets useful beyond the local workflow. Because castkit runs headless - no display server, no GPU, just CPU and ffmpeg - it works in GitHub Actions without any special setup.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;name: Generate Demo

on:
 push:
 branches: [main]

jobs:
 demo:
 runs-on: ubuntu-latest
 steps:
 - uses: actions/checkout@v4
 - name: Install ffmpeg
 run: sudo apt-get install -y ffmpeg
 - name: Download castkit
 run: |
 curl -L https://github.com/deeflect/castkit/releases/latest/download/castkit-linux-x86_64 -o castkit
 chmod +x castkit
 - name: Build your tool
 run: cargo build --release
 - name: Generate demo
 run:./castkit demo./target/release/your-tool --output demo.mp4
 - name: Upload demo artifact
 uses: actions/upload-artifact@v4
 with:
 name: demo-video
 path: demo.mp4
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Every push regenerates the demo. If your tool&apos;s output changes, the demo reflects it automatically. No stale GIFs in your README. The agent-native workflow I actually want is this: Claude Code builds the tool, the CI pipeline generates the demo, the demo gets committed to the repo. Zero human steps in the video production chain.&lt;/p&gt;
&lt;p&gt;That&apos;s not hypothetical. I&apos;ve been running this on a few of my own tools for the past few weeks and it works exactly as described.&lt;/p&gt;
&lt;h2&gt;Why this matters for CLI tool marketing&lt;/h2&gt;
&lt;p&gt;Most developers shipping CLI tools think of documentation as the end of the marketing funnel. It&apos;s not. The funnel is:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Someone sees the GitHub repo linked somewhere&lt;/li&gt;
&lt;li&gt;They skim the README in about 8 seconds&lt;/li&gt;
&lt;li&gt;They either get it or they don&apos;t&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;A 15-second GIF that shows the tool running converts browsers into users at a completely different rate than text. This isn&apos;t an opinion - every product person who&apos;s run A/B tests on landing pages with and without video knows this. The video wins. Every time.&lt;/p&gt;
&lt;p&gt;But developers don&apos;t make demo videos because making demo videos is annoying. It&apos;s a context switch out of the thing you&apos;re building and into video production, which is a different skill set, different tooling, different mental mode. castkit makes that context switch disappear. You&apos;re still in the terminal. You&apos;re still thinking like an engineer. You just run a command.&lt;/p&gt;
&lt;p&gt;The agent-native angle is where I think this gets genuinely interesting going forward. Right now I use &lt;a href=&quot;https://docs.anthropic.com/en/docs/claude-code&quot;&gt;Claude Code&lt;/a&gt; for a lot of my CLI development. The last step of that workflow - &quot;generate a demo for this&quot; - can now be a single tool call. The coding agent builds the thing and generates the demo as part of the same build step. No human in the loop for that part.&lt;/p&gt;
&lt;p&gt;That&apos;s the version of developer tooling I actually want to work in.&lt;/p&gt;
&lt;h2&gt;What&apos;s missing and what&apos;s next&lt;/h2&gt;
&lt;p&gt;The current version has two gaps I know about:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Windows support&lt;/strong&gt; is partial. The PTY layer uses platform abstractions but I haven&apos;t battle-tested it on Windows. If you hit issues, open an issue - I want to fix this.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dynamic content&lt;/strong&gt; is tricky. If your CLI tool outputs things that change every run (timestamps, generated IDs, random data), the recording captures whatever happened during that specific run. There&apos;s no redaction for content variance the way there is for secrets. You can work around this by mocking your tool&apos;s output in the plan, but it&apos;s not automatic yet.&lt;/p&gt;
&lt;p&gt;On the roadmap: a &lt;code&gt;--dry-run&lt;/code&gt; mode that shows you the rendered plan without executing real commands, support for recording multiple tools in one session (useful for showing integrations), and a web viewer for the JSON plans so non-engineers can review before recording.&lt;/p&gt;
&lt;p&gt;The code is MIT licensed and the &lt;a href=&quot;https://github.com/deeflect/castkit&quot;&gt;repo is open&lt;/a&gt;. PRs are welcome. If you build something with it, I want to see the demo.&lt;/p&gt;
&lt;h2&gt;The meta-demo point&lt;/h2&gt;
&lt;p&gt;I said it up top but it&apos;s worth landing: castkit generates its own demo video. That&apos;s not a marketing stunt. It&apos;s the proof of concept. If a tool can document itself, the core premise works.&lt;/p&gt;
&lt;p&gt;Every CLI tool I build from here ships with a demo generated by castkit. Not because I&apos;ve committed to some content strategy, but because it takes one command and it looks good. That&apos;s the bar. If it takes more than one command or it looks bad, it doesn&apos;t get used.&lt;/p&gt;
&lt;p&gt;Right now it&apos;s at one command and it looks good. Check the &lt;a href=&quot;https://blog.deeflect.com/dee-ink/&quot;&gt;31 Rust CLI tools&lt;/a&gt; for what I&apos;m building next, or browse by &lt;a href=&quot;https://blog.deeflect.com/06-coding-stack/&quot;&gt;my coding stack&lt;/a&gt; if you want more of this kind of thing.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Go run &lt;code&gt;castkit demo./your-tool&lt;/code&gt; on whatever you&apos;re building. If the output looks wrong or the plan generation misses something obvious, open an issue with your &lt;code&gt;--help&lt;/code&gt; output. That&apos;s the fastest way to make the discovery smarter.&lt;/p&gt;
</content:encoded><media:content url="https://blog.deeflect.com/medium-img/castkit.jpg" medium="image" type="image/jpeg"/><media:thumbnail url="https://blog.deeflect.com/medium-img/castkit.jpg"/><enclosure url="https://blog.deeflect.com/medium-img/castkit.jpg" length="109461" type="image/jpeg"/></item><item><title>31 Rust CLI Tools Built for AI Agents</title><link>https://blog.deeflect.com/dee-ink/</link><guid isPermaLink="true">https://blog.deeflect.com/dee-ink/</guid><description>I built 31 open-source Rust CLI tools for AI agents and measured 35x better token efficiency vs MCP servers. Here&apos;s the stack, the design decisions, and why it works.</description><pubDate>Thu, 05 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://blog.deeflect.com/medium-img/dee-ink.jpg&quot; alt=&quot;31 Rust CLI Tools Built for AI Agents&quot; /&gt;&lt;/p&gt;
&lt;p&gt;I shipped 31 open-source Rust CLI tools in one project. Not 31 features in one tool - 31 separate crates, each doing exactly one thing, each installable on its own. That project is &lt;a href=&quot;https://dee.ink&quot;&gt;dee.ink&lt;/a&gt;, and building it changed how I think about the right interface for AI agents. If you&apos;re building agentic systems and haven&apos;t thought hard about open-source Rust CLI tools for AI agents as an alternative to MCP servers, you&apos;re leaving serious efficiency on the table.&lt;/p&gt;
&lt;p&gt;The short version: CLI tools are dramatically more token-efficient than MCP servers for AI agent workflows. I measured 35x in my own benchmarks. Once you see that number, you can&apos;t unsee it.&lt;/p&gt;
&lt;p&gt;Here&apos;s how it happened and why it matters.&lt;/p&gt;
&lt;h2&gt;Why I built dee.ink in the first place&lt;/h2&gt;
&lt;p&gt;I run a multi-agent system called OpenClaw. If you&apos;ve read &lt;a href=&quot;https://blog.deeflect.com/castkit/&quot;&gt;castkit&lt;/a&gt;, you know it handles my daily workflow - morning digests, research, crypto monitoring, content scheduling, health data. It&apos;s not a demo. It processes real work every day.&lt;/p&gt;
&lt;p&gt;Agents need to reach into the world. Check Hacker News. Look up SSL cert expiry. Parse an RSS feed. Generate a QR code. Turn a receipt photo into structured data. These aren&apos;t complex tasks but they come up constantly, and every time an agent needs to do one, it needs a tool.&lt;/p&gt;
&lt;p&gt;The popular answer right now is MCP - Model Context Protocol, Anthropic&apos;s standard for agent tool-calling. I tried it. The overhead is real: each tool call needs a running server, connection setup, and verbose JSON-RPC framing. For stateful tools or bidirectional streams, that overhead makes sense. For &quot;search Hacker News and return the top 10 posts,&quot; it&apos;s wasteful by design.&lt;/p&gt;
&lt;p&gt;So I built CLIs instead. One tool per job. JSON output. No interactive prompts. Works with pipes. That&apos;s it.&lt;/p&gt;
&lt;p&gt;After I&apos;d built a few for my own use, I realized I had the start of something worth packaging and open-sourcing. dee.ink is the result: 31 standalone Rust CLI tools built specifically to be called by AI agents.&lt;/p&gt;
&lt;h2&gt;Open-source Rust CLI tools for AI agents vs MCP: the real argument&lt;/h2&gt;
&lt;p&gt;Let me be concrete about why CLI beats MCP for most agent tool use.&lt;/p&gt;
&lt;p&gt;An MCP server for a simple search tool looks roughly like this from the agent&apos;s perspective: spin up the server process (or connect to an already-running one), send a JSON-RPC request with the method name and parameters, wait for the response envelope, parse the result out of the envelope. The agent has to know the MCP protocol, or more accurately, the framework wrapping the agent has to know it.&lt;/p&gt;
&lt;p&gt;A CLI tool looks like this: &lt;code&gt;ink-hn top --limit 10 --json&lt;/code&gt;. That&apos;s it. The agent gets back a clean JSON array.&lt;/p&gt;
&lt;p&gt;The token efficiency gap comes from a few places. First, CLI invocation syntax is compact. A shell command is 5-20 tokens. An MCP request envelope is 50-200 tokens before you even add the parameters. Second, every LLM ever trained has seen millions of shell commands in its training data. They&apos;re native CLI speakers. They&apos;re not native JSON-RPC speakers - you can see this in how confidently models generate shell invocations vs. how often they fumble JSON-RPC schema details. Third, no server to maintain means no connection overhead, no process management, no &quot;is the server running?&quot; failure mode.&lt;/p&gt;
&lt;p&gt;The 35x efficiency number comes from comparing token usage for the same operations across both approaches in my own OpenClaw setup. It&apos;s not a controlled academic study but it&apos;s real usage data from a system that runs 14 cron jobs daily.&lt;/p&gt;
&lt;p&gt;There are cases where MCP is genuinely better. Long-running sessions where you want persistent state. Bidirectional streams. Tools that need to push updates back to the agent rather than return a one-shot result. For those, use MCP. But &quot;search HN&quot; or &quot;check WHOIS&quot; or &quot;generate an invoice&quot;? CLI wins every time.&lt;/p&gt;
&lt;p&gt;One more thing people miss: debugging. When an MCP tool call fails inside a framework like LangChain or CrewAI, you&apos;re often staring at a wrapped exception with zero useful context. When a CLI tool fails, you have a shell command, an exit code, and stderr output. You can reproduce it in 10 seconds. That matters a lot when you&apos;re maintaining a system that runs overnight.&lt;/p&gt;
&lt;h2&gt;What&apos;s inside the toolkit&lt;/h2&gt;
&lt;p&gt;The &lt;a href=&quot;https://dee.ink&quot;&gt;dee.ink&lt;/a&gt; toolkit is 31 crates across six categories. Let me walk through them.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Data and research&lt;/strong&gt;: &lt;code&gt;dee-hn&lt;/code&gt;, &lt;code&gt;dee-arxiv&lt;/code&gt;, &lt;code&gt;dee-reddit&lt;/code&gt;, &lt;code&gt;dee-wiki&lt;/code&gt;, &lt;code&gt;dee-feed&lt;/code&gt;, &lt;code&gt;dee-ph&lt;/code&gt;. These are the tools I use most. An agent can check Hacker News trending stories, pull an arXiv abstract by ID, search Reddit, look up a Wikipedia article, parse an RSS feed, or get Product Hunt launches - all in one command, all as JSON.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Financial&lt;/strong&gt;: &lt;code&gt;dee-invoice&lt;/code&gt;, &lt;code&gt;dee-receipt&lt;/code&gt;, &lt;code&gt;dee-rates&lt;/code&gt;, &lt;code&gt;dee-pricewatch&lt;/code&gt;, &lt;code&gt;dee-ebay&lt;/code&gt;, &lt;code&gt;dee-amazon&lt;/code&gt;. Generate invoices, parse receipts, check exchange rates, watch prices, search marketplaces.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Personal productivity&lt;/strong&gt;: &lt;code&gt;dee-contacts&lt;/code&gt;, &lt;code&gt;dee-habit&lt;/code&gt;, &lt;code&gt;dee-todo&lt;/code&gt;, &lt;code&gt;dee-timer&lt;/code&gt;, &lt;code&gt;dee-stash&lt;/code&gt;. The local storage tools here use SQLite via rusqlite. Your data stays on your machine. Agents can manage your contacts, log habits, check todos, start timers, or stash arbitrary data for later retrieval.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Developer tools&lt;/strong&gt;: &lt;code&gt;dee-openrouter&lt;/code&gt;, &lt;code&gt;dee-ssl&lt;/code&gt;, &lt;code&gt;dee-whois&lt;/code&gt;, &lt;code&gt;dee-qr&lt;/code&gt;, &lt;code&gt;dee-porkbun&lt;/code&gt;. Check SSL cert expiry, run WHOIS lookups, generate QR codes, manage Porkbun DNS records, query OpenRouter for available models and pricing.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Location&lt;/strong&gt;: &lt;code&gt;dee-food&lt;/code&gt;, &lt;code&gt;dee-events&lt;/code&gt;, &lt;code&gt;dee-parking&lt;/code&gt;, &lt;code&gt;dee-gas&lt;/code&gt;, &lt;code&gt;dee-transit&lt;/code&gt;. Local-aware tools for finding restaurants, events, parking, gas prices, and transit schedules.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Social and trends&lt;/strong&gt;: &lt;code&gt;dee-crosspost&lt;/code&gt;, &lt;code&gt;dee-mentions&lt;/code&gt;, &lt;code&gt;dee-trends&lt;/code&gt;. Cross-post content, monitor mentions, check trend data.&lt;/p&gt;
&lt;p&gt;Each crate is fully standalone. Installing &lt;code&gt;dee-ssl&lt;/code&gt; doesn&apos;t pull in any shared &lt;code&gt;dee-core&lt;/code&gt; dependency. You get exactly what you need, nothing more.&lt;/p&gt;
&lt;h2&gt;The technical stack&lt;/h2&gt;
&lt;p&gt;I picked Rust for a few reasons that aren&apos;t just &quot;Rust is fast.&quot;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.deeflect.com/medium-img/dee-ink-1.jpg&quot; alt=&quot;The technical stack&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Binary size matters when you&apos;re shipping 31 separate tools. A Go binary for a simple CLI is usually 10-15MB. A stripped Rust binary for the same tool comes in under 3MB. When someone does &lt;code&gt;cargo install dee-hn&lt;/code&gt;, they&apos;re downloading and compiling one focused tool. Small is respectful.&lt;/p&gt;
&lt;p&gt;The other reason: Rust&apos;s &lt;code&gt;clap&lt;/code&gt; v4 with derive macros makes argument parsing almost free to write. The &lt;code&gt;--help&lt;/code&gt; output is generated automatically from your struct definitions. Every tool in dee.ink has &lt;code&gt;--help&lt;/code&gt; with actual usage examples because making that happen is nearly zero effort.&lt;/p&gt;
&lt;p&gt;Here&apos;s what the argument struct looks like for a typical tool:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#[derive(Parser, Debug)]
#[command(name = &quot;ink-hn&quot;, about = &quot;Hacker News CLI for AI agents&quot;)]
struct Args {
 #[command(subcommand)]
 command: Command,

 /// Output as JSON
 #[arg(long, global = true)]
 json: bool,
}

#[derive(Subcommand, Debug)]
enum Command {
 /// Get top stories
 Top {
 /// Number of stories to fetch
 #[arg(long, default_value = &quot;10&quot;)]
 limit: usize,
 },
 /// Search stories
 Search {
 /// Search query
 query: String,
 },
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;For tools with local storage (todo, habit, contacts, stash), SQLite handles persistence via &lt;a href=&quot;https://github.com/rusqlite/rusqlite&quot;&gt;rusqlite&lt;/a&gt;. No database server, no config files to manage. The database lives at &lt;code&gt;~/.local/share/dee-toolname/data.db&lt;/code&gt; and everything just works.&lt;/p&gt;
&lt;p&gt;HTTP is either &lt;a href=&quot;https://github.com/seanmonstar/reqwest&quot;&gt;reqwest&lt;/a&gt; (for complex clients with retries) or ureq (for simpler one-shot requests). I pick ureq when I can - it compiles faster and the binary is smaller.&lt;/p&gt;
&lt;p&gt;Exit codes are strict: 0 for success, 1 for tool error, 2 for usage error. Agents need reliable exit codes to know if a command succeeded. This sounds obvious but a surprising number of CLIs return 0 on failure because someone forgot to handle an error branch. In agent workflows that kills you - your orchestrator thinks the call succeeded and moves on with bad data.&lt;/p&gt;
&lt;h2&gt;Agent-first design decisions&lt;/h2&gt;
&lt;p&gt;This is the part that&apos;s different from building a CLI for humans.&lt;/p&gt;
&lt;p&gt;No interactive prompts. Ever. If an argument is missing, the tool errors out with a clear message. It doesn&apos;t ask &quot;did you mean this file? (y/n)&quot;. Agents can&apos;t answer interactive prompts. A tool that blocks waiting for keyboard input is broken for agent use.&lt;/p&gt;
&lt;p&gt;Every tool has a &lt;code&gt;--json&lt;/code&gt; flag that guarantees structured output. Without &lt;code&gt;--json&lt;/code&gt;, tools print human-readable text. With &lt;code&gt;--json&lt;/code&gt;, they print a JSON object or array, always to stdout, always parseable. No mixed text/JSON output. No progress bars to stdout (they go to stderr or get suppressed).&lt;/p&gt;
&lt;p&gt;Pipe support is first-class. Tools accept stdin when appropriate. You can chain them:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ink-feed parse https://hnrss.org/frontpage | ink-stash save --key hn-today
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Each tool ships an &lt;code&gt;AGENT.md&lt;/code&gt; file in the repo. This is a short markdown document explaining to an AI agent how to use the tool effectively - what the flags do, what the output schema looks like, common patterns. When an agent needs to use a tool it hasn&apos;t seen before, it can read &lt;code&gt;AGENT.md&lt;/code&gt; and understand the interface without trial and error.&lt;/p&gt;
&lt;p&gt;There&apos;s also a &lt;code&gt;FRAMEWORK.md&lt;/code&gt; at the repo root that defines the conventions every tool follows. Any agent that has read &lt;code&gt;FRAMEWORK.md&lt;/code&gt; can make reasonable guesses about how any dee.ink tool works. That&apos;s intentional. Consistency is the whole point.&lt;/p&gt;
&lt;h3&gt;What &quot;consistent&quot; actually means in practice&lt;/h3&gt;
&lt;p&gt;Every tool uses the same flag names for the same concepts. Pagination is always &lt;code&gt;--page&lt;/code&gt; and &lt;code&gt;--limit&lt;/code&gt;, never &lt;code&gt;--offset&lt;/code&gt; or &lt;code&gt;--per-page&lt;/code&gt; or &lt;code&gt;--count&lt;/code&gt;. JSON mode is always &lt;code&gt;--json&lt;/code&gt;, never &lt;code&gt;--format json&lt;/code&gt; or &lt;code&gt;--output json&lt;/code&gt;. Verbose mode is always &lt;code&gt;-v&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;This matters because agents build up a mental model of your toolset. If the first five tools they use have consistent interfaces, they&apos;ll correctly predict how the sixth one works. If your flags are inconsistent, the agent has to treat each tool as a new unknown - which costs tokens and causes errors.&lt;/p&gt;
&lt;p&gt;It&apos;s the same principle as a good design system. The value isn&apos;t any single component. It&apos;s the pattern that makes everything predictable.&lt;/p&gt;
&lt;h2&gt;How open-source Rust CLI tools fit into a real agent workflow&lt;/h2&gt;
&lt;p&gt;Concretely, here&apos;s how one of these tools actually gets used inside OpenClaw. My morning digest job runs at 7am. It pulls Hacker News top stories, recent arXiv papers in a few categories, and Reddit posts from a handful of subs. Then it summarizes and formats everything into a digest I read with coffee.&lt;/p&gt;
&lt;p&gt;The shell side of that looks roughly like:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ink-hn top --limit 20 --json &amp;gt; /tmp/hn.json
ink-arxiv search &quot;multi-agent systems&quot; --days 7 --json &amp;gt; /tmp/arxiv.json
ink-reddit hot r/MachineLearning --limit 15 --json &amp;gt; /tmp/reddit.json
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Three commands. Three JSON files. The orchestrating agent reads those files, does the summarization, formats the output. Total token cost for the data collection phase: maybe 150 tokens across all three commands. The MCP equivalent for the same three sources would be three server connections, three request envelopes, three response envelopes. Easily 10x the token overhead, plus you need three MCP servers running.&lt;/p&gt;
&lt;p&gt;That&apos;s not a toy example. That&apos;s the actual flow, running every morning.&lt;/p&gt;
&lt;h2&gt;The installation experience&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;cargo install dee-hn
ink-hn top --limit 5 --json
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.deeflect.com/medium-img/dee-ink-2.jpg&quot; alt=&quot;The installation experience&quot; /&gt;&lt;/p&gt;
&lt;p&gt;That&apos;s the whole install flow. No Docker. No Python virtual env. No npm. Cargo installs the binary, it goes in &lt;code&gt;~/.cargo/bin&lt;/code&gt;, and it&apos;s available system-wide. For agent use in particular, this matters - you don&apos;t want to manage environments when your agent needs to call a tool.&lt;/p&gt;
&lt;p&gt;For people who want everything at once, I&apos;m working on a meta-crate that installs the full suite, but honestly most people only need a subset. The standalone install is the right default.&lt;/p&gt;
&lt;p&gt;You can find all 31 crates on the dee.ink site and browse the source on GitHub. Every tool is MIT licensed.&lt;/p&gt;
&lt;h2&gt;Why open source, and what I&apos;m getting out of it&lt;/h2&gt;
&lt;p&gt;I&apos;m not monetizing dee.ink directly. No SaaS wrapper, no premium tier. The tools are free, the code is open.&lt;/p&gt;
&lt;p&gt;The actual return is authority and credibility. Shipping 31 production-quality Rust CLI tools is a more compelling signal than any portfolio piece I could write. Developers can read the code, use the tools, see the design decisions. That&apos;s a much better &quot;hire me / work with me&quot; artifact than a case study PDF.&lt;/p&gt;
&lt;p&gt;It also forces quality. When something is public, you think twice about the shortcuts. Every &lt;code&gt;AGENT.md&lt;/code&gt;, every &lt;code&gt;--help&lt;/code&gt; example, every error message is a little more considered because someone else might read it.&lt;/p&gt;
&lt;p&gt;And honestly? The tooling gap was real. I needed these tools for OpenClaw. If they didn&apos;t exist, I&apos;d have built them for private use anyway. Open-sourcing them was 20% more work for a much better outcome.&lt;/p&gt;
&lt;h2&gt;What comes next&lt;/h2&gt;
&lt;p&gt;31 tools is a good start but there are obvious gaps. I&apos;m planning tools for GitHub (issues, PRs, repo stats), calendar integration, and a few more financial data sources. The architecture makes adding tools easy - each one is genuinely independent, so adding &lt;code&gt;dee-github&lt;/code&gt; doesn&apos;t touch anything that already ships.&lt;/p&gt;
&lt;p&gt;I&apos;m also watching how people actually use these in their own agent setups. If you&apos;re building with Claude Code, Cursor, or any other agent framework and want CLI tools that just work, this is worth checking out. If you find a gap, open an issue or PR. The whole thing is built to be extended.&lt;/p&gt;
&lt;p&gt;You can &lt;a href=&quot;https://blog.deeflect.com/09-mcp-server/&quot;&gt;the universal MCP server&lt;/a&gt; and follow the build log here on the &lt;a href=&quot;/&quot;&gt;blog&lt;/a&gt;. If you&apos;re interested in the agent workflow side - how OpenClaw actually orchestrates all of this - I&apos;ll be writing that up next. Subscribe or check back.&lt;/p&gt;
&lt;p&gt;The tools are at &lt;a href=&quot;https://dee.ink&quot;&gt;dee.ink&lt;/a&gt;. The code is on GitHub. Install one and see if it fits your stack. And if you want to browse more posts on agent architecture and tooling, &lt;a href=&quot;https://blog.deeflect.com/tags&quot;&gt;check the tags page&lt;/a&gt;.&lt;/p&gt;
</content:encoded><media:content url="https://blog.deeflect.com/medium-img/dee-ink.jpg" medium="image" type="image/jpeg"/><media:thumbnail url="https://blog.deeflect.com/medium-img/dee-ink.jpg"/><enclosure url="https://blog.deeflect.com/medium-img/dee-ink.jpg" length="78876" type="image/jpeg"/></item><item><title>The 3-Month Gap: Building AI Agents That Actually Work</title><link>https://blog.deeflect.com/10-debugging-agents/</link><guid isPermaLink="true">https://blog.deeflect.com/10-debugging-agents/</guid><description>The hard part of building AI agents isn&apos;t the demo - it&apos;s the 3 months after. Real lessons from running a 15-agent system in production for 90 days.</description><pubDate>Wed, 18 Feb 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://blog.deeflect.com/medium-img/10-debugging-agents.jpg&quot; alt=&quot;The 3-Month Gap: Building AI Agents That Actually Work&quot; /&gt;&lt;/p&gt;
&lt;p&gt;The 3-month gap between building an AI agent and it being useful nearly broke me.&lt;/p&gt;
&lt;p&gt;That&apos;s the stretch nobody posts about. I&apos;ve seen a hundred Twitter threads about building agents. Maybe three honest ones about what happens after you ship v1 and start using the thing for real. The &lt;strong&gt;3-month gap building AI agent&lt;/strong&gt; systems from &quot;it demos&quot; to &quot;it actually works without me babysitting it&quot; - that&apos;s the real project. And it&apos;s almost nothing like the first 30 minutes.&lt;/p&gt;
&lt;p&gt;I run a &lt;strong&gt;multi-agent system called borb&lt;/strong&gt; on OpenClaw. It handles my daily workflow - reminders, research, content scheduling, code review, memory management. Fifteen-plus specialized agents running different models depending on the task. It&apos;s stable now. It does real work every day without me touching it.&lt;/p&gt;
&lt;p&gt;It took three months to get there. Here&apos;s what that actually looked like.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;The 3-month gap between building an AI agent and it being useful&lt;/h2&gt;
&lt;p&gt;Week one, everything works great. The demo is clean. The happy path is flawless. You show it to someone and they&apos;re impressed. You&apos;re impressed. You start thinking about what else you can build.&lt;/p&gt;
&lt;p&gt;Then you try to use it for something real.&lt;/p&gt;
&lt;p&gt;The model hallucinates a tool call that doesn&apos;t exist in your registry. The agent enters a loop - calling the same function twelve times, each time getting an error, each time deciding to try again. A cron job fires at 3am on a Wednesday and the API it needs returns a response format you&apos;ve never seen before. The agent handles it confidently and incorrectly. You find out four hours later.&lt;/p&gt;
&lt;p&gt;This isn&apos;t bad luck. This is what agents do. A system that needs to operate autonomously across real APIs, real data, real time zones, real rate limits - it&apos;s going to hit edge cases constantly. The demo doesn&apos;t hit edge cases because demos are choreographed. Production use is chaos.&lt;/p&gt;
&lt;p&gt;The first two weeks, I was convinced I had a fundamentally broken architecture. I didn&apos;t. I just had a system that hadn&apos;t been stress-tested against reality yet. There&apos;s a difference.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Week 1-4: You don&apos;t know what you don&apos;t know&lt;/h2&gt;
&lt;p&gt;The early failures are the visible ones. The agent tries to call a tool with the wrong parameter format. Easy fix. The system prompt is ambiguous about which memory file to write to. Easy fix. Auth token expires overnight and everything fails silently. Annoying fix, but simple.&lt;/p&gt;
&lt;p&gt;You add error handling. You feel productive. You think you&apos;re almost there.&lt;/p&gt;
&lt;p&gt;You&apos;re not almost there. You&apos;ve patched the surface layer. The deep problems haven&apos;t shown up yet because the deep problems only appear when conditions stack in ways you didn&apos;t anticipate.&lt;/p&gt;
&lt;p&gt;What I didn&apos;t understand in week one: error handling for an AI agent isn&apos;t like error handling for deterministic code. With regular code, you can enumerate the failure modes and write a case for each. With an agent, the failure mode is sometimes &quot;the model made a creative decision.&quot; There&apos;s no exception class for that. The agent didn&apos;t crash. It just did something you didn&apos;t want, then moved on.&lt;/p&gt;
&lt;p&gt;This maps to what Anthropic calls &quot;reward hacking&quot; in their &lt;a href=&quot;https://www.anthropic.com/research/model-spec&quot;&gt;model specification documentation&lt;/a&gt; - agents optimizing for what looks like task completion without actually completing the task. It shows up constantly in production.&lt;/p&gt;
&lt;p&gt;I had an agent that was supposed to add a task to my task file when I asked it to remember something. For about ten days, it was adding the task correctly but also occasionally appending a brief philosophical reflection on the importance of the task. Not always. Maybe 15% of the time. The task file worked fine. It was just... weird. I only noticed when I went back and read through it.&lt;/p&gt;
&lt;p&gt;That&apos;s the thing about AI agents failing quietly. The output is often plausible enough that you don&apos;t immediately catch it.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Week 5-8: The edge cases get stranger&lt;/h2&gt;
&lt;p&gt;By week five, the obvious stuff is handled. The agent runs reliably on the happy path. You start feeling good about it.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.deeflect.com/medium-img/10-debugging-agents-1.jpg&quot; alt=&quot;Week 5-8: The edge cases get stranger&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Then the 3am edge cases start appearing.&lt;/p&gt;
&lt;p&gt;Specific API returns a field as null instead of an empty string. Rate limit hits mid-task and the agent, instead of waiting, decides to rephrase the request and retry with a different tool. A time zone calculation goes wrong because of daylight saving time and a scheduled task fires an hour early. The agent interprets &quot;do this daily&quot; as &quot;do this every time you&apos;re invoked&quot; and runs a daily summary five times in a row on a Tuesday.&lt;/p&gt;
&lt;p&gt;None of these are predictable from first principles. You can&apos;t design your way out of them upfront. You discover them by running the system and watching what happens.&lt;/p&gt;
&lt;p&gt;My logging setup saved me here. I log everything - every tool call, every model response, every function output, timestamps on all of it. At 2am when something breaks weird, the logs are the only reason I can figure out what happened. If you&apos;re building agents and you&apos;re not logging obsessively, you will spend hours debugging by vibes instead of evidence. The &lt;a href=&quot;https://opentelemetry.io/docs/concepts/signals/logs/&quot;&gt;OpenTelemetry docs on structured logging&lt;/a&gt; are worth a read if you want a sane approach to this - I adapted their structured format for borb&apos;s log output and it made parsing way easier.&lt;/p&gt;
&lt;p&gt;The most expensive edge case I hit: I didn&apos;t have retry limits on one of my agents. It hit an API error that was never going to resolve - the endpoint was just down. The agent kept retrying. Each retry cost tokens. I woke up to $40 in API charges and an agent that had been stuck in a loop for six hours.&lt;/p&gt;
&lt;p&gt;After that: every operation in borb has a max of five retries, then it stops and reports the failure. Non-negotiable. The agent&apos;s job is not to solve unsolvable problems. The agent&apos;s job is to do the task or tell me it can&apos;t.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Week 9-12: The architecture is wrong and you have to accept it&lt;/h2&gt;
&lt;p&gt;This is the hardest part of the 3-month gap building AI agent systems into something reliable.&lt;/p&gt;
&lt;p&gt;Around week nine, I started noticing a pattern. Individual fixes weren&apos;t sticking. I&apos;d patch one thing and something adjacent would break. The sub-agents were failing silently in ways that only became obvious when I traced back through the memory files. The memory itself was getting stale - agents referencing context from three weeks ago that was no longer relevant, treating outdated information as current.&lt;/p&gt;
&lt;p&gt;The problem wasn&apos;t any specific bug. The problem was architectural.&lt;/p&gt;
&lt;p&gt;My original memory system was a single MEMORY.md file. Everything the agents wrote went into it. This worked fine for the first few weeks when the file was small. By week nine, it was 8,000 words of mixed context - tasks, decisions, completed work, notes, research summaries, all in one place. The agents were pulling from it for context but the retrieval wasn&apos;t smart enough to distinguish &quot;recent and relevant&quot; from &quot;old and stale.&quot; The whole thing was polluted.&lt;/p&gt;
&lt;p&gt;I rebuilt the memory layer. Separate files for different context types - active tasks, completed work, long-term facts, agent-specific state. Added timestamps. Added a lightweight cleanup job that runs daily and archives anything older than two weeks unless it&apos;s flagged as permanent.&lt;/p&gt;
&lt;p&gt;That&apos;s the thing about the debugging phase nobody talks about: some of what you&apos;re debugging isn&apos;t bugs. It&apos;s the architecture not scaling the way you assumed it would. Patches don&apos;t fix that. You have to rebuild parts of the system.&lt;/p&gt;
&lt;p&gt;I wrote more debugging and refactoring code in month three than I wrote feature code in month one. That ratio felt wrong when I was in it. Looking back, it&apos;s exactly right. The feature code gets you to &quot;it demos.&quot; The debugging gets you to &quot;it works.&quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;What model selection actually looks like in production&lt;/h2&gt;
&lt;p&gt;One concrete thing that took me too long to figure out: &lt;strong&gt;you can&apos;t use one model for everything&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;My original borb setup used Claude Sonnet for everything. Consistent, predictable, good at reasoning. Also overkill and expensive for tasks that don&apos;t need it.&lt;/p&gt;
&lt;p&gt;Now the system is tiered by task complexity:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Orchestration layer (deciding what to do, assigning to sub-agents): Opus. It needs to make judgment calls, handle ambiguity, and route correctly. Skimping here is the most expensive kind of cheap.&lt;/li&gt;
&lt;li&gt;Complex reasoning tasks (code review, research synthesis, writing drafts): Sonnet. Good balance of quality and cost.&lt;/li&gt;
&lt;li&gt;Simple lookups and fast operations (memory writes, formatting, scheduling checks): Flash. Fast, cheap, and the task doesn&apos;t need a frontier model anyway.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The cost difference is significant. Running Flash for the simple stuff cut my daily token spend by about 30% without any change in output quality on those tasks. Because a task like &quot;write this event to the calendar file&quot; doesn&apos;t need a 200-billion-parameter model. It just doesn&apos;t.&lt;/p&gt;
&lt;p&gt;If you&apos;re building an agent system and everything is running on your best model, you&apos;re leaving both money and performance on the table.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;The kill switch is a feature, not an afterthought&lt;/h2&gt;
&lt;p&gt;I added a kill switch to borb after week two. It&apos;s the best thing in the entire system.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.deeflect.com/medium-img/10-debugging-agents-2.jpg&quot; alt=&quot;The kill switch is a feature, not an afterthought&quot; /&gt;&lt;/p&gt;
&lt;p&gt;One command stops all agents, freezes all cron jobs, and logs the current state of every active task. No partial writes. No half-completed operations. Just a clean stop.&lt;/p&gt;
&lt;p&gt;I&apos;ve used it maybe six times. Twice when something was clearly going wrong and I needed to stop the bleeding. Once when I pushed a bad config change. Three times during architecture refactors when I needed to be sure nothing was running while I was editing core files.&lt;/p&gt;
&lt;p&gt;The kill switch means I can experiment aggressively because I know I can stop everything immediately if I need to. Without it, I&apos;d be more conservative about changes - and slower progress because of it.&lt;/p&gt;
&lt;p&gt;Building agent systems without a kill switch is like deploying to production without rollback. Technically possible. Categorically reckless.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Why nobody posts about the 3-month gap building AI agent systems that actually ship&lt;/h2&gt;
&lt;p&gt;Twitter is full of &quot;I built an AI agent in 30 minutes&quot; content. I&apos;ve read it. Some of it&apos;s even technically impressive. But a 30-minute build that you&apos;re demoing to a camera isn&apos;t the same thing as a system that runs your workflow for 90 days without you touching it.&lt;/p&gt;
&lt;p&gt;The demo is marketing. The three months after the demo is engineering.&lt;/p&gt;
&lt;p&gt;Building in public usually means sharing wins - launches, milestones, metrics going up. The debugging phase has almost no wins. It&apos;s just slightly fewer failures each week than the week before. That doesn&apos;t make for satisfying content. It doesn&apos;t fit the narrative arc. Nobody wants to read &quot;week six: fixed four edge cases, discovered three more.&quot;&lt;/p&gt;
&lt;p&gt;But that&apos;s the actual work. That&apos;s the difference between a project and a product. A project works when you&apos;re watching it. A product works when you&apos;re not.&lt;/p&gt;
&lt;p&gt;I&apos;m not saying this to gatekeep. I&apos;m saying it because if you&apos;re three weeks into running your agent and you&apos;re losing your mind debugging things you didn&apos;t expect - that&apos;s normal. You&apos;re not in the failure state. You&apos;re in the middle of the process. Keep going.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;What you actually need to get through the 3-month gap&lt;/h2&gt;
&lt;p&gt;Based on borb, based on the $40 loop-retry incident, based on the stale memory architecture rebuild - here&apos;s what I&apos;d tell myself at week one:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Log everything.&lt;/strong&gt; Every tool call, every model response, every write. You will need these logs at an inconvenient time and you will be grateful they exist.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Hard limits on retries.&lt;/strong&gt; Five max, then stop and report. The agent&apos;s job is not to solve problems that can&apos;t be solved. It&apos;s to do the work or surface the failure.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Memory needs maintenance, not just construction.&lt;/strong&gt; Building the memory system is the easy part. Keeping it clean and relevant over months is the hard part. Budget time for it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Model selection is architecture.&lt;/strong&gt; Using the same model for everything is a shortcut that becomes a tax. Right model for right task from the start.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Build the kill switch before you need it.&lt;/strong&gt; You&apos;ll need it.&lt;/p&gt;
&lt;p&gt;And accept that months two and three look like a lot of debugging with very little to show for it. That&apos;s not failure. That&apos;s what it looks like to build something that actually works.&lt;/p&gt;
&lt;p&gt;If you&apos;re thinking about building an agent system or you&apos;re already in the weeds, check out &lt;a href=&quot;/&quot;&gt;what I write about over on the blog&lt;/a&gt;. More of this in the &lt;a href=&quot;https://blog.deeflect.com/02-adhd-and-ai/&quot;&gt;ADHD and AI workflows&lt;/a&gt;. And if you want to understand the broader context of who&apos;s building this stuff and why, the &lt;a href=&quot;https://blog.deeflect.com/09-mcp-server/&quot;&gt;the MCP server&lt;/a&gt; has that.&lt;/p&gt;
&lt;p&gt;The demo is the beginning. The 3 months after it are the product.&lt;/p&gt;
</content:encoded><media:content url="https://blog.deeflect.com/medium-img/10-debugging-agents.jpg" medium="image" type="image/jpeg"/><media:thumbnail url="https://blog.deeflect.com/medium-img/10-debugging-agents.jpg"/><enclosure url="https://blog.deeflect.com/medium-img/10-debugging-agents.jpg" length="180209" type="image/jpeg"/></item><item><title>Universal MCP Server: Two Tools, 56 APIs</title><link>https://blog.deeflect.com/09-mcp-server/</link><guid isPermaLink="true">https://blog.deeflect.com/09-mcp-server/</guid><description>How I built a universal MCP server that wraps 56 APIs into just two tools using the OpenAPI Code Mode pattern - cutting token costs 50x.</description><pubDate>Thu, 05 Feb 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://blog.deeflect.com/medium-img/09-mcp-server.jpg&quot; alt=&quot;Universal MCP Server: Two Tools, 56 APIs&quot; /&gt;&lt;/p&gt;
&lt;p&gt;I had 56 APIs I needed my agent to talk to. The idea of maintaining 56 separate MCP servers made me want to close my laptop and never open it again.&lt;/p&gt;
&lt;p&gt;So I built one server that handles all of them.&lt;/p&gt;
&lt;p&gt;That&apos;s the premise behind building a universal MCP server - and specifically, the pattern I implemented in &lt;a href=&quot;https://github.com/deeflect/universal-codemode&quot;&gt;Universal CodeMode&lt;/a&gt;: wrap any OpenAPI spec into exactly two tools, &lt;code&gt;search&lt;/code&gt; and &lt;code&gt;execute&lt;/code&gt;, and let the model figure out the rest. If you&apos;re running agents that touch multiple external services, this is probably the architecture you actually want.&lt;/p&gt;
&lt;h2&gt;The problem with the current MCP ecosystem&lt;/h2&gt;
&lt;p&gt;The &lt;a href=&quot;https://modelcontextprotocol.io/introduction&quot;&gt;Model Context Protocol&lt;/a&gt; is genuinely useful. It&apos;s the right abstraction for giving agents access to external tools and services. But the ecosystem has a fragmentation problem that nobody&apos;s really talking about.&lt;/p&gt;
&lt;p&gt;The current pattern is: one API = one MCP server. Want GitHub integration? Here&apos;s a GitHub MCP server with 30 tools. Want Notion? Another server, another 20 tools. Weather API? Linear? Stripe? Each one is its own server, its own deployment, its own auth config, its own maintenance burden.&lt;/p&gt;
&lt;p&gt;I run an agent called borb on my OpenClaw system. It needs to hit GitHub for repo management, search for research, weather for daily digests, and a dozen other services for various tasks. Following the standard pattern, I&apos;d need 56+ separate MCP servers deployed and configured. That&apos;s not a system, that&apos;s a zoo.&lt;/p&gt;
&lt;p&gt;The token cost is the other thing. A traditional MCP server for GitHub might expose 30 endpoints as 30 separate tools, each with its full parameter schema described in the context. That&apos;s easily 50K tokens just to tell the model what&apos;s available - before it&apos;s even made a single API call. At scale, that&apos;s insane.&lt;/p&gt;
&lt;p&gt;Think about what that means in practice. You have an agent doing a simple task - create a GitHub issue, post a Slack message, look up a weather forecast. Three API calls. But before any of those happen, you&apos;ve burned 150K tokens just describing the available tools across three MCP servers. That&apos;s money out the window for zero productive work. My monthly API spend across the whole OpenClaw system sits around $40. That number would be unrecognizable if I was loading full tool schemas for every session.&lt;/p&gt;
&lt;h2&gt;What building a universal MCP server actually looks like&lt;/h2&gt;
&lt;p&gt;The insight I&apos;m building on comes from Cloudflare&apos;s &quot;Code Mode&quot; pattern. Instead of describing every possible tool upfront, you give the model two generic tools that work with any API:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;search&lt;/code&gt;&lt;/strong&gt; - natural language query against the OpenAPI spec catalog, returns the relevant endpoint spec (~1000 tokens)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;execute&lt;/code&gt;&lt;/strong&gt; - takes a spec chunk and parameters, makes the actual HTTP call&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;That&apos;s it. Two tools. Any API.&lt;/p&gt;
&lt;p&gt;The flow looks like this: agent wants to create a GitHub issue, calls &lt;code&gt;search(&quot;create a github issue&quot;)&lt;/code&gt;, gets back the relevant spec chunk for &lt;code&gt;POST /repos/{owner}/{repo}/issues&lt;/code&gt;, then calls &lt;code&gt;execute&lt;/code&gt; with the right parameters. The whole thing uses roughly 1000 tokens instead of 50K. That&apos;s a 50x reduction in token usage for a single API call sequence.&lt;/p&gt;
&lt;p&gt;The key insight is that the model doesn&apos;t need to know every possible endpoint upfront. It just needs to know it &lt;em&gt;can&lt;/em&gt; search for endpoints. The same way you don&apos;t memorize every function in a library - you know how to search the docs.&lt;/p&gt;
&lt;p&gt;This also means the catalog can grow without any impact on the model&apos;s working memory. Whether you have 10 APIs or 500, the context overhead is identical: two tool schemas, a few hundred tokens. The model only loads the relevant spec chunk at the moment it needs it.&lt;/p&gt;
&lt;h2&gt;The stack&lt;/h2&gt;
&lt;p&gt;Universal CodeMode runs on Cloudflare Workers with R2 for spec storage and KV for caching. The core is TypeScript, using &lt;a href=&quot;https://hono.dev&quot;&gt;Hono&lt;/a&gt; for routing and the &lt;a href=&quot;https://github.com/modelcontextprotocol/typescript-sdk&quot;&gt;MCP TypeScript SDK&lt;/a&gt; for the protocol layer.&lt;/p&gt;
&lt;p&gt;Here&apos;s the high-level architecture:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// Two tools. That&apos;s the whole interface.
server. tool(&quot;search&quot;, SearchSchema, async ({ query, catalog }) =&amp;gt; {
 // Natural language search against indexed OpenAPI specs
 // Returns relevant endpoint chunk, not the full spec
 const results = await searchCatalog(query, catalog);
 return { content: [{ type: &quot;text&quot;, text: formatResults(results) }] };
});

server. tool(&quot;execute&quot;, ExecuteSchema, async ({ spec, params, auth }) =&amp;gt; {
 // Takes the spec chunk from search, builds and fires the HTTP request
 const response = await executeRequest(spec, params, auth);
 return { content: [{ type: &quot;text&quot;, text: JSON. stringify(response) }] };
});
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;R2 stores the raw OpenAPI specs. When a spec is ingested, it gets indexed so the search tool can find relevant endpoints by natural language. KV handles caching so repeated searches on the same endpoints don&apos;t keep hitting the index.&lt;/p&gt;
&lt;p&gt;The catalog currently has 56 pre-loaded API specs. Adding a new API is just ingesting its OpenAPI spec via the admin endpoint - the search and execute tools work automatically because they&apos;re operating on the spec structure, not hardcoded tool definitions.&lt;/p&gt;
&lt;h3&gt;Why Cloudflare Workers specifically&lt;/h3&gt;
&lt;p&gt;I could&apos;ve run this on a VPS or a Lambda function. I went with Workers for three reasons.&lt;/p&gt;
&lt;p&gt;First, edge deployment means low latency from wherever the agent is running. An agent mid-task waiting on an API lookup is a bad experience - every millisecond of overhead compounds across a multi-step workflow.&lt;/p&gt;
&lt;p&gt;Second, R2 and KV are native integrations. No external database config, no connection pooling, no cold start issues with a separate storage layer. The spec storage and caching are just Workers primitives.&lt;/p&gt;
&lt;p&gt;Third, the GlobalOutbound security model fits perfectly for this use case. I can declare exactly which domains the Worker is allowed to call outbound - which is exactly the security property I want for a server that executes arbitrary API calls on behalf of agents.&lt;/p&gt;
&lt;h2&gt;Security model&lt;/h2&gt;
&lt;p&gt;Running arbitrary API calls through a single server sounds like a security nightmare. Here&apos;s how I handled it.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.deeflect.com/medium-img/09-mcp-server-1.jpg&quot; alt=&quot;Security model&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;GlobalOutbound restrictions&lt;/strong&gt; on the Cloudflare Worker mean the server can only make outbound requests to explicitly allowlisted domains. You can&apos;t use execute to hit &lt;code&gt;evil. example.com&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Admin token authentication&lt;/strong&gt; gates the catalog management endpoints. Ingesting or deleting specs requires the admin token. The two main tools (&lt;code&gt;search&lt;/code&gt; and &lt;code&gt;execute&lt;/code&gt;) are accessible to agents without admin rights.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Execution timeouts&lt;/strong&gt; on every outbound request. An agent can&apos;t hang the server by calling a slow endpoint.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Auth handling&lt;/strong&gt; in execute is explicit - credentials get passed as parameters, not stored server-side in the MVP. There&apos;s a planned hosted version where you&apos;d configure auth per-catalog-entry, but for now, the agent passes credentials and they&apos;re used once then discarded.&lt;/p&gt;
&lt;p&gt;Is this perfect? No. But it&apos;s a real security model, not vibes.&lt;/p&gt;
&lt;p&gt;The domain allowlist is probably the most important piece. A compromised prompt injection attack that tries to exfiltrate data to an external server fails at the network level, not just the application level. Defense in depth.&lt;/p&gt;
&lt;h2&gt;Self-hosted mode&lt;/h2&gt;
&lt;p&gt;Not everyone wants to run on Cloudflare. The project supports a self-hosted mode via npx:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;npx universal-codemode --port 3000
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Point it at your OpenAPI specs, configure your MCP client, done. The Worker version is the &quot;cloud native&quot; path, the npx version is for local dev or running on your own infra.&lt;/p&gt;
&lt;p&gt;Config looks like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{
 &quot;mcpServers&quot;: {
 &quot;universal-codemode&quot;: {
 &quot;command&quot;: &quot;npx&quot;,
 &quot;args&quot;: [&quot;universal-codemode&quot;],
 &quot;env&quot;: {
 &quot;CATALOG_PATH&quot;: &quot;./specs&quot;,
 &quot;ADMIN_TOKEN&quot;: &quot;your-token-here&quot;
 }
 }
 }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That&apos;s your entire MCP configuration. One entry. Covers every API in your catalog.&lt;/p&gt;
&lt;p&gt;Compare that to what the equivalent config looks like with the standard one-server-per-API approach. If you&apos;re running five integrations, you have five entries in your MCP config, five different sets of env vars, five different deployment concerns. Something breaks and you&apos;re debugging which of the five servers is the problem. With this setup, there&apos;s exactly one thing to look at.&lt;/p&gt;
&lt;h2&gt;Test coverage&lt;/h2&gt;
&lt;p&gt;13/13 E2E tests passing against real APIs - GitHub, JSONPlaceholder, and httpbin. The test suite covers the full search-then-execute flow, auth parameter handling, error responses, and the catalog management endpoints.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ npm test

✓ search returns relevant endpoint for natural language query
✓ search handles queries with no matching endpoints
✓ execute calls GitHub API with correct parameters
✓ execute handles 404 responses gracefully
✓ execute respects timeout configuration
✓ catalog ingestion processes valid OpenAPI spec
✓ catalog ingestion rejects invalid spec
✓ admin endpoints reject requests without valid token... (13/13 passing)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Real tests against real endpoints, not mocks. If the GitHub API&apos;s behavior changes, the tests catch it.&lt;/p&gt;
&lt;p&gt;Testing against real APIs instead of mocks is a deliberate choice. Mocks give you confidence that your code does what you think it does. Real endpoint tests give you confidence that your code actually works. For infrastructure that agents depend on at runtime, I want the second kind of confidence. The tradeoff is that tests can fail for reasons outside my control - rate limits, API downtime, auth token expiry. That&apos;s fine. Flaky tests that catch real issues are better than reliable tests that don&apos;t.&lt;/p&gt;
&lt;h2&gt;Where this fits in the universal MCP server landscape&lt;/h2&gt;
&lt;p&gt;There are a few other projects trying to solve the &quot;too many MCP servers&quot; problem. Most of them are building aggregators - one entry point that proxies to multiple underlying servers. That doesn&apos;t solve the token problem, it just reduces the config burden.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.deeflect.com/medium-img/09-mcp-server-2.jpg&quot; alt=&quot;Where this fits in the universal MCP server landscape&quot; /&gt;&lt;/p&gt;
&lt;p&gt;The Code Mode pattern is different because it changes the &lt;em&gt;interface&lt;/em&gt;. Instead of the model needing to know about &lt;code&gt;github_create_issue&lt;/code&gt; and &lt;code&gt;github_list_repos&lt;/code&gt; and &lt;code&gt;github_get_pull_request&lt;/code&gt; as separate tools, it just knows about &lt;code&gt;search&lt;/code&gt; and &lt;code&gt;execute&lt;/code&gt;. The catalog can grow to 200 APIs and the model&apos;s tool interface stays exactly the same size.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.openapis.org&quot;&gt;OpenAPI&lt;/a&gt; as the common format is doing a lot of work here. Virtually every serious API publishes an OpenAPI spec now. That means the ingestion pipeline is universal - you&apos;re not writing custom parsers for each API.&lt;/p&gt;
&lt;p&gt;There&apos;s also a maintenance angle worth thinking about. When Stripe updates their API, a traditional MCP server for Stripe needs to be updated and redeployed. With this approach, you ingest the updated OpenAPI spec via the admin endpoint and you&apos;re done. The search and execute tools don&apos;t change. The model&apos;s interface doesn&apos;t change. One operation, propagated everywhere.&lt;/p&gt;
&lt;h2&gt;Current status and what&apos;s next&lt;/h2&gt;
&lt;p&gt;MVP is deployed on Cloudflare Workers. The landing page is embedded in the Worker itself (Hono handles the HTML route). Repo is at &lt;a href=&quot;https://github.com/deeflect/universal-codemode&quot;&gt;deeflect/universal-codemode&lt;/a&gt; - MIT licensed, free to use.&lt;/p&gt;
&lt;p&gt;What&apos;s still in progress:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Custom domain (cm. dee. ad is planned)&lt;/li&gt;
&lt;li&gt;Real-world testing with Claude Code and Cursor agents, not just the E2E test suite&lt;/li&gt;
&lt;li&gt;Seeding more API specs into the catalog - 56 is a start but the long tail of useful APIs is way bigger&lt;/li&gt;
&lt;li&gt;Per-catalog auth configuration for the hosted version so agents don&apos;t need to pass credentials explicitly&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The honest status: this is a working MVP with real test coverage, not a demo. But it hasn&apos;t been battle-tested in production with real agent workloads at scale yet. That&apos;s the next phase.&lt;/p&gt;
&lt;p&gt;The spec seeding problem is actually interesting. There are thousands of APIs with published OpenAPI specs - the &lt;a href=&quot;https://apis.guru&quot;&gt;APIs. guru&lt;/a&gt; directory catalogs over 2,000 of them. Bulk-ingesting from that kind of source is on the roadmap. The architecture already handles it - it&apos;s a data pipeline problem, not an architectural one.&lt;/p&gt;
&lt;h2&gt;Why two tools is the right number&lt;/h2&gt;
&lt;p&gt;There&apos;s a version of this project where I expose five tools - search, preview_spec, execute, list_catalogs, check_health. I went back and forth on it.&lt;/p&gt;
&lt;p&gt;Two is correct. Here&apos;s why.&lt;/p&gt;
&lt;p&gt;Every tool you add to an MCP server is cognitive overhead for the model. The model has to decide which tool to use before it uses it. With &lt;code&gt;search&lt;/code&gt; and &lt;code&gt;execute&lt;/code&gt;, the decision tree is: do I know exactly which endpoint to call? No, search first. Yes, execute directly. That&apos;s it.&lt;/p&gt;
&lt;p&gt;More tools means more opportunities for the model to pick the wrong one, more tokens describing the tool schemas, more edge cases in your implementation. The constraint of two tools forced me to make each tool more capable rather than adding escape hatches.&lt;/p&gt;
&lt;p&gt;This is the same reason Unix pipes work. A small number of composable primitives beats a large number of specialized commands every time.&lt;/p&gt;
&lt;p&gt;I tested a three-tool version with an explicit &lt;code&gt;preview_spec&lt;/code&gt; step between search and execute. In theory it lets the model inspect a full spec before committing to an execute call. In practice, the model just used search and execute 95% of the time anyway and the extra tool added noise to every session context. Cut it.&lt;/p&gt;
&lt;p&gt;The lesson: when you&apos;re designing a tool interface for models, err toward fewer, more capable tools. Models are good at using tools creatively. They&apos;re less good at picking between tools when the distinctions are subtle. Make the distinctions obvious by minimizing the surface area.&lt;/p&gt;
&lt;h2&gt;Building this as part of a larger agent stack&lt;/h2&gt;
&lt;p&gt;Universal CodeMode is one piece of my broader setup. If you&apos;re curious about how the agent system it connects to actually works - borb, OpenClaw, the cron-based orchestration layer - check out the &lt;a href=&quot;https://blog.deeflect.com/dee-ink/&quot;&gt;31 Rust CLI tools for agents&lt;/a&gt; for background, or browse the &lt;a href=&quot;https://blog.deeflect.com/08-prompt-eng-dead/&quot;&gt;why prompt engineering died&lt;/a&gt; for more on how I think about building agent systems.&lt;/p&gt;
&lt;p&gt;The short version: I run multi-agent workflows where different models handle different job types. Having one MCP server that gives all of them access to 56+ APIs without per-model tool configuration changes is the kind of infrastructure win that compounds. Less config, lower token costs, one place to update when an API spec changes.&lt;/p&gt;
&lt;p&gt;Every agent in the system gets the same two tools. Sonnet, Codex, Gemini Flash, Opus - they all connect to the same universal server and they all work identically. When I add a new API to the catalog, every agent can use it immediately. Zero redeployment, zero config changes, zero new tool descriptions to fit in context.&lt;/p&gt;
&lt;p&gt;That compounding is the real argument for this pattern. Each individual win - fewer tokens, less config, one deployment - is incremental. All of them together, across every agent, across every session, across every API call, adds up to something that materially changes what I can run sustainably as a solo builder.&lt;/p&gt;
&lt;p&gt;If you&apos;re building anything in this space - agents that need to talk to external services, MCP server implementations, OpenAPI tooling - the &lt;a href=&quot;https://github.com/deeflect/universal-codemode&quot;&gt;repo is open&lt;/a&gt;. Issues and PRs welcome. I&apos;m particularly interested in feedback from people running this with Claude Code or Cursor in real projects.&lt;/p&gt;
&lt;p&gt;The pattern works. The implementation is early. Both of those things can be true.&lt;/p&gt;
</content:encoded><media:content url="https://blog.deeflect.com/medium-img/09-mcp-server.jpg" medium="image" type="image/jpeg"/><media:thumbnail url="https://blog.deeflect.com/medium-img/09-mcp-server.jpg"/><enclosure url="https://blog.deeflect.com/medium-img/09-mcp-server.jpg" length="265135" type="image/jpeg"/></item><item><title>Prompt engineering is dead</title><link>https://blog.deeflect.com/08-prompt-eng-dead/</link><guid isPermaLink="true">https://blog.deeflect.com/08-prompt-eng-dead/</guid><description>Prompt engineering had an 18-month run as a real skill. Models killed it. Learn what actually matters now - tool use, agent architecture, and MCP integration.</description><pubDate>Sat, 10 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://blog.deeflect.com/medium-img/08-prompt-eng-dead.jpg&quot; alt=&quot;Prompt engineering is dead&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Prompt engineering as a skill is dead. I know that&apos;s a spicy take. I also know it&apos;s correct.&lt;/p&gt;
&lt;p&gt;I&apos;ve been building AI agent systems since March 2023. Went deep on prompt engineering early - custom GPTs with specialized knowledge bases, engineered prompt systems for UX research, meal tracking, viral content creation, planning assistants. I did the whole thing. Followed the guides, read the papers, obsessed over system prompt structure.&lt;/p&gt;
&lt;p&gt;And somewhere in the last 12 months I realized: almost none of that matters anymore. The skill I spent real time developing got commoditized. What replaced it is harder, more valuable, and almost nobody&apos;s talking about it correctly.&lt;/p&gt;
&lt;h2&gt;Why prompt engineering as a skill is dead&lt;/h2&gt;
&lt;p&gt;Prompt engineering had about 18 months as a legitimate technical differentiator. Call it mid-2022 to late-2023. During that window, knowing how to coax useful output from a model was genuinely non-obvious. Chain-of-thought prompting improved outputs meaningfully. Few-shot examples helped a lot. Persona framing, careful instruction ordering, output format control - all of it made a real difference because the base models needed the help.&lt;/p&gt;
&lt;p&gt;Then the models got better. Fast.&lt;/p&gt;
&lt;p&gt;GPT-4 Turbo, Claude 3, Gemini 1.5 - these models understand intent. You don&apos;t need to hand-hold them through a task with elaborate prompting rituals anymore. Chain-of-thought? Current models do it automatically without being told to &quot;think step by step.&quot; Few-shot examples? Models infer from conversational context. Carefully structured personas? You can write &quot;you&apos;re a helpful assistant that specializes in X&quot; and it works fine.&lt;/p&gt;
&lt;p&gt;The elaborate stuff people were selling as advanced prompt engineering? It was always just &quot;learning to give clear instructions to something that needed clearer instructions.&quot; That&apos;s not a skill. That&apos;s communication.&lt;/p&gt;
&lt;p&gt;Here&apos;s the tell: if prompt engineering were a real technical skill, you&apos;d need to understand something about how the system works to get better at it. But most prompt engineering advice is just... good writing advice with extra steps. Be specific. Give examples. State your constraints. These aren&apos;t insights about AI - they&apos;re basic communication principles.&lt;/p&gt;
&lt;p&gt;The YouTube courses, the &quot;certified prompt engineer&quot; bootcamps, the LinkedIn posts about prompt frameworks - that whole industry built up around a skill that had a two-year shelf life. I&apos;m not dunking on the people who built that content. It was real value at the time. It&apos;s just not the bottleneck anymore.&lt;/p&gt;
&lt;h2&gt;What actually killed it&lt;/h2&gt;
&lt;p&gt;Three things landed simultaneously and the combination was lethal for prompt engineering as a career path.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Better base models that understand intent.&lt;/strong&gt; I can give Claude Sonnet a roughly-worded, slightly ambiguous instruction and it&apos;ll figure out what I mean. I don&apos;t need to craft it like a legal contract. The model&apos;s interpretive ability improved faster than the complexity of what people wanted to do with it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tool use and function calling.&lt;/strong&gt; This is the big one. A huge chunk of what prompt engineering was trying to do was get models to simulate capabilities they didn&apos;t actually have. &quot;Imagine you have access to a search engine...&quot; Now you just give it a search tool. The prompt gymnastics were a workaround for the absence of real tool integration. Now that tool calling is standard, you don&apos;t need the workaround.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The realization that it&apos;s managerial, not technical.&lt;/strong&gt; The best prompt engineers were good writers and good managers - people who could specify what they wanted clearly. That&apos;s a useful skill. It&apos;s not a technical skill. An engineer who spent years learning systems programming has depth that transfers. A &quot;prompt engineer&quot; who spent years optimizing instruction phrasing has a skill that&apos;s been automated by model improvements.&lt;/p&gt;
&lt;h2&gt;What replaced it: agent architecture and tool design&lt;/h2&gt;
&lt;p&gt;I run a multi-agent system called OpenClaw. 15+ specialized agents, each running a different model, handling different parts of my daily workflow - morning digests, research, code tasks, memory management, content scheduling, crypto position monitoring. The system processes around 40K tokens a day. Monthly API cost is about $40 because I&apos;m aggressive about model selection.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.deeflect.com/medium-img/08-prompt-eng-dead-1.jpg&quot; alt=&quot;What replaced it: agent architecture and tool design&quot; /&gt;&lt;/p&gt;
&lt;p&gt;The prompts for each individual agent? Maybe 20 lines. Sometimes less. Nothing fancy.&lt;/p&gt;
&lt;p&gt;The orchestration code is thousands of lines. The tool integrations are where most of the work lives. The hard thinking went into: which agent handles what, how agents hand off context to each other, what happens when an agent fails, how memory persists across sessions, which model is cheap enough for a given task while still being capable enough to not screw it up.&lt;/p&gt;
&lt;p&gt;That&apos;s the new skill. And it&apos;s actually a skill - one that requires understanding systems, trade-offs, failure modes, and cost structures.&lt;/p&gt;
&lt;p&gt;Here&apos;s what the real work looks like now:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Model selection by task.&lt;/strong&gt; I don&apos;t use one model for everything. Opus handles orchestration decisions that require judgment calls. Sonnet handles fast tasks where I need speed over depth. Gemini Flash handles research synthesis because it&apos;s cheap and good at skimming large amounts of text. Codex handles code because it&apos;s purpose-built. Picking the wrong model for a task either burns money or degrades output quality. That selection logic matters far more than prompt phrasing.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Memory architecture.&lt;/strong&gt; A single model call is stateless. Real agent systems aren&apos;t. How you persist context across sessions, what you include in each agent&apos;s working memory, when to summarize versus retain full conversation history - these decisions affect whether your system stays coherent over time or slowly degrades into confusion. My system uses markdown files (MEMORY.md, SOUL.md, AGENTS.md) that agents read from on each run. It&apos;s simple and it works. Getting there took iteration.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Error recovery.&lt;/strong&gt; Model calls fail. APIs go down. An agent returns a response that&apos;s correctly formatted but semantically wrong. What does your system do? Does it retry with the same prompt? Escalate to a more capable model? Log the failure and skip? Notify you? Building robust error handling into agent pipelines is where I&apos;ve spent more time than on any individual prompt.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tool design.&lt;/strong&gt; When you build tools for your agents to use, you&apos;re essentially designing an API for a semi-autonomous system. The tool needs to do one thing clearly. The input schema needs to be simple enough that a model will call it correctly. The output needs to be structured in a way the model can reason about. Bad tool design leads to agents that can&apos;t actually use their tools effectively - and you&apos;ll spend time debugging model behavior when the real problem is your tool interface.&lt;/p&gt;
&lt;p&gt;If you want to go deeper on how I think about agent systems and the principles behind building them, check out &lt;a href=&quot;https://blog.deeflect.com/09-mcp-server/&quot;&gt;the universal MCP server&lt;/a&gt; for more context on where I&apos;m coming from.&lt;/p&gt;
&lt;h2&gt;The MCP shift and why tool use is the real frontier&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://modelcontextprotocol.io/introduction&quot;&gt;Model Context Protocol&lt;/a&gt; (MCP) is the clearest signal of where this is all heading. Anthropic published the spec, it&apos;s being adopted fast, and it formalizes something I&apos;ve believed for a while: the future of AI capability is real tool access, not better instructions.&lt;/p&gt;
&lt;p&gt;The mental shift is this: instead of engineering a prompt that makes a model pretend to have access to data, you give it actual tools to access real data. Instead of &quot;imagine you&apos;re an expert at X with access to Y,&quot; you connect it to Y&apos;s API and let it query directly.&lt;/p&gt;
&lt;p&gt;I built a universal MCP server with 56 API integrations. Notion, GitHub, Slack, calendar, weather, crypto data, Spotify, health APIs, web search, memory storage. My agents don&apos;t simulate access to these systems. They actually query them. The outputs are real, current, and accurate in ways that no prompt engineering trick could achieve.&lt;/p&gt;
&lt;p&gt;That server took weeks to build. The prompts I wrote for the agents that use it took hours. If you&apos;re calibrating where to invest your time, that ratio is your answer.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://github.com/modelcontextprotocol/servers&quot;&gt;MCP GitHub repo&lt;/a&gt; has a solid list of existing server implementations if you want to see what&apos;s available before building your own. Don&apos;t rebuild what&apos;s already there.&lt;/p&gt;
&lt;p&gt;Function calling and tool use aren&apos;t features bolted onto models - they&apos;re the architecture shift that makes models actually useful in production. A model that can query a live database, run code, check current prices, read a file, and send a message is categorically different from a model that only outputs text. The difference isn&apos;t prompt quality. It&apos;s what the model has access to.&lt;/p&gt;
&lt;h2&gt;What this means if you&apos;re building&lt;/h2&gt;
&lt;p&gt;If you&apos;re still spending serious time on prompt templates and prompt libraries, I&apos;d push back on that investment. Not because prompts don&apos;t matter - they do, a little - but because the return on that investment has dropped sharply while the return on tool-building and orchestration knowledge has gone up.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.deeflect.com/medium-img/08-prompt-eng-dead-2.jpg&quot; alt=&quot;What this means if you&apos;re building&quot; /&gt;&lt;/p&gt;
&lt;p&gt;The skills that matter right now:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Systems thinking.&lt;/strong&gt; How do components fail? What are the dependencies? Where does state live? These are the questions that determine whether a multi-agent system works reliably or collapses randomly.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;API integration.&lt;/strong&gt; The ability to connect to external systems, understand their data models, handle their rate limits and errors, and build clean interfaces over them. This is the &quot;prompt engineering&quot; of 2025 - not glamorous, high leverage.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Evaluation.&lt;/strong&gt; How do you know your agent system is working? Not just &quot;it didn&apos;t crash&quot; but &quot;it did the right thing.&quot; Building evals for AI systems is hard, undervalued, and increasingly important as these systems touch real workflows. &lt;a href=&quot;https://hamel.dev/blog/posts/evals/&quot;&gt;Hamel Husain has written well on this&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cost optimization.&lt;/strong&gt; Running agents at scale costs money. Knowing how to profile token usage, pick the right model tier for each task, and cache aggressively is a real engineering skill. I got my 15-agent system to $40/month through iteration, not luck.&lt;/p&gt;
&lt;p&gt;For context on the &lt;a href=&quot;https://blog.deeflect.com/10-debugging-agents/&quot;&gt;3 months of debugging agents&lt;/a&gt;, there&apos;s more there - I write about this stuff as I build.&lt;/p&gt;
&lt;h2&gt;The honest version of where prompts still matter&lt;/h2&gt;
&lt;p&gt;I want to be fair here. Prompts aren&apos;t zero-value. There are still cases where prompt quality meaningfully affects output quality.&lt;/p&gt;
&lt;p&gt;Highly specialized domains where the model needs tight constraints. Anything involving consistent output formatting that downstream code parses. System prompts for agents that need specific behavioral guardrails. Evaluation prompts where you&apos;re asking a model to grade other model outputs.&lt;/p&gt;
&lt;p&gt;But notice: these are narrow, specific cases. And even here, the prompt is usually less than 10% of the total engineering work. The rest is the surrounding system.&lt;/p&gt;
&lt;p&gt;The people who&apos;ll tell you prompt engineering is still a high-value career skill are usually selling prompt engineering courses. The people who are building real systems with AI have mostly moved on.&lt;/p&gt;
&lt;p&gt;If you&apos;re newer to this and trying to calibrate what to learn: spend maybe two weeks understanding how prompts work and what affects model behavior. Then spend the next six months learning to build systems. That&apos;s the right ratio.&lt;/p&gt;
&lt;p&gt;The model will follow good instructions just fine. The question is what system you build around it.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Start with one tool. Connect your agent to one real API. See how differently the model behaves when it has actual access to something instead of simulated knowledge. That single experience will do more to reframe your thinking than any prompt engineering course.&lt;/p&gt;
</content:encoded><media:content url="https://blog.deeflect.com/medium-img/08-prompt-eng-dead.jpg" medium="image" type="image/jpeg"/><media:thumbnail url="https://blog.deeflect.com/medium-img/08-prompt-eng-dead.jpg"/><enclosure url="https://blog.deeflect.com/medium-img/08-prompt-eng-dead.jpg" length="60362" type="image/jpeg"/></item><item><title>I Stopped Posting on Twitter for 2 Months</title><link>https://blog.deeflect.com/07-disappeared/</link><guid isPermaLink="true">https://blog.deeflect.com/07-disappeared/</guid><description>I accidentally stopped posting on Twitter for 2 months. Here&apos;s what happened to reach, followers, and my work - and what it actually cost me.</description><pubDate>Mon, 15 Dec 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://blog.deeflect.com/medium-img/07-disappeared.jpg&quot; alt=&quot;I Stopped Posting on Twitter for 2 Months&quot; /&gt;&lt;/p&gt;
&lt;p&gt;I stopped posting on Twitter for two months. Not a planned break, not a &quot;digital detox,&quot; not a strategic rebranding pause. I just... forgot. This is what actually happened when I disappeared from X (Twitter) for October and November 2025, and what I learned about taking breaks you didn&apos;t mean to take.&lt;/p&gt;
&lt;h2&gt;How I stopped posting on Twitter for 2 months without meaning to&lt;/h2&gt;
&lt;p&gt;September 6 was my last post before the gap. A week later I tweeted &quot;staying away from X for a few days, wonder if it ruins reach&quot; and then proceeded to vanish for two full months instead of a few days.&lt;/p&gt;
&lt;p&gt;I wasn&apos;t planning that. There was no decision point where I said &quot;I&apos;m taking a break.&quot; I was building. Seven apps in parallel, deep in agent architecture, ADHD hyperfocus locked in. Twitter stopped feeling like a place I existed in. Not because I was boycotting it or burned out on the discourse. I just got absorbed and the habit broke.&lt;/p&gt;
&lt;p&gt;That&apos;s the honest version. Not a detox story. I didn&apos;t meditate more. I didn&apos;t reclaim my attention span through discipline. I got pulled into something more interesting and social media fell off naturally. That&apos;s how ADHD actually works - when something grabs you hard enough, everything else gets crowded out.&lt;/p&gt;
&lt;p&gt;The gap ran October through November. I came back January 26, 2026 with one post: &quot;I&apos;m back because of Clawdbot meta.&quot; No apology, no &quot;I&apos;ve been doing some reflection,&quot; no thread about what I learned. Just back.&lt;/p&gt;
&lt;h2&gt;What actually happened to reach when I stopped posting on Twitter&lt;/h2&gt;
&lt;p&gt;Short answer: yes, disappearing kills your numbers. I came back to impressions that were noticeably down from where they were in September. The algorithm punishes inconsistency in ways that are both predictable and annoying.&lt;/p&gt;
&lt;p&gt;Here&apos;s what surprised me though - my follower count barely moved. The people who followed me for real reasons didn&apos;t unfollow during a two-month gap. They just... waited. Or forgot I existed but kept the follow anyway, which is functionally the same thing.&lt;/p&gt;
&lt;p&gt;What did drop off were the engagement-farmers. The follow-back accounts, the people following hoping for a mutual, the ones gaming numbers. When I stopped posting, I stopped being useful to them. They left. Good.&lt;/p&gt;
&lt;p&gt;So the actual damage from a two-month absence was:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Impressions down significantly on return&lt;/li&gt;
&lt;li&gt;Algorithmic reach basically reset&lt;/li&gt;
&lt;li&gt;Genuine followers intact&lt;/li&gt;
&lt;li&gt;Low-quality followers gone&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That&apos;s not catastrophic. It&apos;s annoying if you&apos;re trying to grow on a consistent curve, but it&apos;s not irreversible. Coming back with something real to say matters more than the reach penalty.&lt;/p&gt;
&lt;p&gt;The platform rewards consistency, but it doesn&apos;t erase you for breaks. It&apos;s not that vindictive. It just forgets you for a while and you have to re-earn distribution. Which, to be clear, still sucks. But it&apos;s survivable.&lt;/p&gt;
&lt;p&gt;Research from the &lt;a href=&quot;https://reutersinstitute.politics.ox.ac.uk/digital-news-report/2024&quot;&gt;Reuters Institute Digital News Report&lt;/a&gt; backs this up - audiences don&apos;t actively track individual creator absences the way creators fear they do. People are mostly watching the feed, not waiting for you specifically.&lt;/p&gt;
&lt;h2&gt;Building in public culture and why it makes breaks feel worse than they are&lt;/h2&gt;
&lt;p&gt;There&apos;s a specific kind of pressure that comes with building in public. The implicit rule is you have to be visible. Posting daily &quot;day 47 of building X&quot; content. Sharing every milestone. Being present enough that people remember you exist.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.deeflect.com/medium-img/07-disappeared-1.jpg&quot; alt=&quot;Building in public culture and why it makes breaks feel worse than they are&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Miss a week and you feel like you&apos;re falling behind. Miss a month and it feels like career death. I&apos;m not immune to this feeling. I&apos;ve been building in public for long enough to have internalized the assumption that visibility = momentum.&lt;/p&gt;
&lt;p&gt;But the two months proved that assumption wrong in at least one direction.&lt;/p&gt;
&lt;p&gt;I built more in those two silent months than in the three months of posting before them. Seven apps. Real infrastructure. Clawdbot, which ended up being the thing I came back to announce. When you&apos;re not performing the work, you&apos;re just doing it. Turns out those are different modes.&lt;/p&gt;
&lt;p&gt;The building in public model optimizes for consistency of output, not quality of output. There&apos;s value in that - accountability, community, people following along with the journey. But it can also turn into a content treadmill where the posting becomes the thing instead of the building.&lt;/p&gt;
&lt;p&gt;I&apos;m not saying building in public is bad. I&apos;ll keep doing it. But I&apos;m now aware that the ADHD hyperfocus mode where I forget Twitter exists and just build for two months is also a valid mode. Maybe more productive in certain phases.&lt;/p&gt;
&lt;h2&gt;The ADHD angle: forgetting to post is not a failure&lt;/h2&gt;
&lt;p&gt;Everyone talking about &quot;intentional breaks&quot; from social media has the same energy: &quot;I realized I needed to step back and prioritize my wellbeing.&quot; Very deliberate. Very curated. Very LinkedIn.&lt;/p&gt;
&lt;p&gt;That wasn&apos;t this.&lt;/p&gt;
&lt;p&gt;I didn&apos;t decide to take a break. The habit just... dissolved. I was on a 2am coding session in early October, deep in something, and the thought of tweeting about it didn&apos;t occur to me. Same the next night. By week two the pattern was just gone.&lt;/p&gt;
&lt;p&gt;This is textbook ADHD. The executive function overhead of maintaining a social media posting habit - opening the app, forming a thought worth sharing, hitting post, checking the response - that whole loop requires a certain baseline attention budget. When something captures all of it, the habits that depend on leftover attention just stop running.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://www.health.harvard.edu/mind-and-mood/what-is-executive-function-and-how-does-it-relate-to-adhd&quot;&gt;ADHD and executive function research out of Harvard Medical School&lt;/a&gt; explains this pretty well - executive function isn&apos;t a moral failing, it&apos;s a resource allocation problem. When the resource is fully committed elsewhere, discretionary habits are the first to drop.&lt;/p&gt;
&lt;p&gt;I&apos;ve made peace with this. It&apos;s not undisciplined, it&apos;s just how my brain allocates. The flip side of forgetting to post for two months is also why I can build seven apps in parallel while maintaining an agent system that runs 14 cron jobs. Same mechanism, different outputs.&lt;/p&gt;
&lt;p&gt;If you have ADHD and you&apos;ve done this - gone silent for weeks because you were deep in something - it&apos;s not a failure mode. It&apos;s just the cost of the hyperfocus that also lets you ship faster than most people.&lt;/p&gt;
&lt;p&gt;The trick is not building your brand strategy on a foundation that requires daily consistency you won&apos;t reliably deliver. Build it on depth instead. One good post after two silent months is worth more than sixty filler posts.&lt;/p&gt;
&lt;h2&gt;What &quot;coming back&quot; actually looks like&lt;/h2&gt;
&lt;p&gt;January 26. &quot;I&apos;m back because of Clawdbot meta.&quot;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.deeflect.com/medium-img/07-disappeared-2.jpg&quot; alt=&quot;What &apos;coming back&apos; actually looks like&quot; /&gt;&lt;/p&gt;
&lt;p&gt;That was the whole post. No explanation, no recap thread, no &quot;here&apos;s what I learned while I was away&quot; (except this post, I guess). Just the most direct possible signal: I exist, I have a reason to be back, here&apos;s the thing.&lt;/p&gt;
&lt;p&gt;This felt right. The alternative - the big return post with the reflective thread - felt like it was performing a story instead of just getting back to work. The people who care will engage with the work. The people who need a narrative about why you were gone aren&apos;t really your audience anyway.&lt;/p&gt;
&lt;p&gt;I did get some &quot;welcome back&quot; responses. More than I expected, honestly. A few people had noticed the gap and were curious what happened. That was kind of nice - it meant the previous presence had registered as real enough that the absence was notable.&lt;/p&gt;
&lt;p&gt;But the bigger signal was that nobody was mad. Nobody had been waiting with a timer. The internet doesn&apos;t work that way. People move on, the feed keeps moving, and when you come back with something worth seeing, you get traction again.&lt;/p&gt;
&lt;h2&gt;What I&apos;d tell someone about to take (or accidentally start) a social media break&lt;/h2&gt;
&lt;p&gt;Not going to frame this as advice, because I didn&apos;t plan any of it. But if you&apos;re reading this because you&apos;ve already been gone for a month and you&apos;re wondering if you&apos;ve tanked your presence - you probably haven&apos;t.&lt;/p&gt;
&lt;p&gt;A few things that are actually true from experience:&lt;/p&gt;
&lt;p&gt;Genuine followers don&apos;t leave during a two-month absence. The people who followed you for real reasons are still there. The follower count number that matters is quality, not quantity, and quiet people who actually care about your work have more patience than the algorithm does.&lt;/p&gt;
&lt;p&gt;Your reach will take a hit and that&apos;s fine. You&apos;ll rebuild it. Reach is lagging indicator of consistency, and consistency can be rebuilt faster than you think when you come back with something real. I came back with Clawdbot. That gave me actual things to say.&lt;/p&gt;
&lt;p&gt;The building you do during the silence compounds. Those two months produced more than the three months of documented-daily-grind before them. There&apos;s something to that. Not every phase of building should be public. Some of it needs to be quiet.&lt;/p&gt;
&lt;p&gt;The &quot;building in public&quot; pressure is real and mostly self-imposed. The audience you&apos;re building in public for is smaller and more patient than the anxiety makes it seem. If you&apos;re good at what you do and you come back with evidence of it, people remember.&lt;/p&gt;
&lt;p&gt;And if you have ADHD and you just disappeared because something grabbed you - that&apos;s the mechanism working, not failing. The work you did in the silence is the asset. The posts are just distribution for it.&lt;/p&gt;
&lt;h2&gt;What stopped posting on Twitter for 2 months actually cost me (and what it didn&apos;t)&lt;/h2&gt;
&lt;p&gt;I have &lt;a href=&quot;https://blog.deeflect.com/05-twitter-growth/&quot;&gt;how I grew to 500 followers&lt;/a&gt; where you can see the full context of what I work on - design background, fintech, AI engineering, all of it. None of it died during two months off Twitter.&lt;/p&gt;
&lt;p&gt;The projects I was building kept building. The systems kept running. The professional relationships that matter don&apos;t live on Twitter anyway - they live in Discord servers, in direct messages, in shipped product people can actually use.&lt;/p&gt;
&lt;p&gt;Twitter is distribution. It&apos;s a real tool and a decent one for this type of work. But it&apos;s not the substrate. The work is the substrate.&lt;/p&gt;
&lt;p&gt;The two months off X taught me that more than anything. When the posting stopped, nothing important stopped with it. The important stuff was already running somewhere else - in the codebase, in the agent system, in the products actually getting built.&lt;/p&gt;
&lt;p&gt;Coming back felt like turning a tool back on. Not like returning from exile.&lt;/p&gt;
&lt;p&gt;That&apos;s the right relationship to have with it. Check &lt;a href=&quot;https://blog.deeflect.com/04-seven-apps/&quot;&gt;what I was building instead&lt;/a&gt; to see what came out of those two silent months. And if you want context on how Twitter&apos;s algorithm actually handles inactive accounts, &lt;a href=&quot;https://business.twitter.com/en/help/troubleshooting/how-twitter-ads-work.html&quot;&gt;X&apos;s own creator documentation&lt;/a&gt; doesn&apos;t spell it out cleanly - but the pattern from third-party analyses is consistent: reach drops fast after ~2 weeks of silence, then stabilizes, then rebuilds within a few weeks of returning.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;The algorithm is back to punishing me for the gap. I&apos;m fine with it. The seven apps I built during the silence are more valuable than consistent impressions metrics would&apos;ve been. Trade you&apos;d make again without thinking about it.&lt;/p&gt;
</content:encoded><media:content url="https://blog.deeflect.com/medium-img/07-disappeared.jpg" medium="image" type="image/jpeg"/><media:thumbnail url="https://blog.deeflect.com/medium-img/07-disappeared.jpg"/><enclosure url="https://blog.deeflect.com/medium-img/07-disappeared.jpg" length="99670" type="image/jpeg"/></item><item><title>My coding stack is 4 models deep</title><link>https://blog.deeflect.com/06-coding-stack/</link><guid isPermaLink="true">https://blog.deeflect.com/06-coding-stack/</guid><description>How I use Grok, Claude Code, Codex, and more in sequence to ship faster - what each model does best and why one tool isn&apos;t enough.</description><pubDate>Wed, 10 Sep 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://blog.deeflect.com/medium-img/06-coding-stack.jpg&quot; alt=&quot;My coding stack is 4 models deep&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Nobody uses one AI model for coding anymore. Nobody serious, anyway. My multi-model coding workflow has me running four-plus models in sequence on most days, and I ship more in a week than I used to in a month. That&apos;s not hype - that&apos;s what happens when you stop treating AI coding tools like a single hammer and start treating them like a crew.&lt;/p&gt;
&lt;p&gt;Here&apos;s the actual stack, why it&apos;s built this way, and what most people get wrong about &quot;vibe coding.&quot;&lt;/p&gt;
&lt;h2&gt;What &quot;vibe coding&quot; actually means&lt;/h2&gt;
&lt;p&gt;It&apos;s not &quot;ask ChatGPT to build me an app.&quot; That&apos;s how you get a 400-line &lt;code&gt;index.js&lt;/code&gt; with no error handling that half-works for 20 minutes before collapsing.&lt;/p&gt;
&lt;p&gt;Real vibe coding is coding with leverage. You still need to understand what the code does. You still need to catch hallucinations. You still need to make architectural decisions - maybe more consciously than before, because the AI will happily scaffold the wrong architecture at 10x speed if you let it.&lt;/p&gt;
&lt;p&gt;What changed: the AI handles the typing and the boilerplate. The parts that used to eat 60% of my time - setting up file structure, writing CRUD routes, building form components I&apos;ve built a hundred times - that&apos;s mostly automated now. What I bring is the product sense. Knowing what to build is harder than knowing how to build it. The &quot;how&quot; is commoditized. The &quot;what&quot; and &quot;why&quot; still aren&apos;t.&lt;/p&gt;
&lt;p&gt;My background is product design. Ten-plus years of it, including a long stint as sole designer at a fintech platform doing $4B+ in digital assets. That taught me to think about systems - how pieces connect, what breaks under edge cases, where the user actually gets stuck. That context is the thing AI can&apos;t replace. It&apos;s why a designer who codes can actually get further with these tools than a CS grad who just knows syntax.&lt;/p&gt;
&lt;h2&gt;The four-model lineup&lt;/h2&gt;
&lt;p&gt;These are the main players. Each one has a job.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Grok (grok-code-fast)&lt;/strong&gt; - The fast pass. I use this first. It&apos;s cheap, it&apos;s quick, and it&apos;s genuinely good at scanning code for obvious issues - logic errors, missing edge cases, things that&apos;ll blow up. I don&apos;t use it for fixes. I use it for triage.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Claude Code&lt;/strong&gt; - The surgeon. Best AI I&apos;ve used for understanding context and making targeted edits. If I have a function that&apos;s almost right but subtly broken, Claude finds the problem without bulldozing the surrounding code. It reads the file, understands the intent, and makes the minimal correct change. This is rare. Most models over-edit.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Codex&lt;/strong&gt; - The builder. Heavy refactors, multi-file changes, greenfield scaffolding. When I need to restructure a whole module or build something from scratch, Codex is the move. It&apos;s not as precise as Claude on targeted edits but it handles scale better. It&apos;ll touch 8 files in sequence and keep things coherent.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Gemini (Flash or Pro depending on context)&lt;/strong&gt; - The reader. When I need to analyze a large codebase or understand a sprawling chunk of code I didn&apos;t write, Gemini&apos;s context window is unmatched. I&apos;ll drop 50K tokens of code in and ask it to explain the data flow. It handles that better than anything else I&apos;ve used.&lt;/p&gt;
&lt;p&gt;That&apos;s the core four. v0 gets a slot for frontend component generation. It&apos;s the fastest way to get a working UI component I can then iterate on with Claude Code.&lt;/p&gt;
&lt;h2&gt;How the actual pipeline runs&lt;/h2&gt;
&lt;p&gt;Real example of how a feature goes from idea to done:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.deeflect.com/medium-img/06-coding-stack-1.jpg&quot; alt=&quot;How the actual pipeline runs&quot; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;I write a rough spec in plain text. What the feature does, what the inputs and outputs are, what edge cases matter. This step is underrated. The cleaner my spec, the better the AI output at every stage.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If I&apos;m building frontend: I hit v0 first. Describe the component, get something that renders. It won&apos;t be perfect but it&apos;s 80% of the way there in two minutes.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Grok does a fast pass on whatever exists so far. I&apos;m asking it: &quot;what&apos;s obviously wrong here? what breaks?&quot; Quick, cheap, catches the low-hanging problems.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Claude Code handles the refinement. Takes the rough output, applies targeted fixes, handles the business logic, integrates with the rest of the codebase. This is where most of my back-and-forth happens.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If Claude hits a wall - something too structurally complex, or needs changes across multiple files - I hand it to Codex. Codex finishes the heavy lifting.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Grok reviews the final output. Another fast pass. At this point I&apos;m looking for regressions and anything the other models introduced.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I read the code. Final check. I don&apos;t skip this.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;That last step isn&apos;t optional. You cannot ship AI-generated code you haven&apos;t read. The hallucinations are sneaky. They produce code that looks right and runs right in tests but breaks in production on a Tuesday when someone does something slightly unexpected. Your name is on the commit. Read the code.&lt;/p&gt;
&lt;h2&gt;My multi-model coding workflow for backend vs frontend&lt;/h2&gt;
&lt;p&gt;Different problem types call for different entry points.&lt;/p&gt;
&lt;h3&gt;Frontend&lt;/h3&gt;
&lt;p&gt;Start with v0. Describe the component - what it does, any constraints, the general look. Get the initial render. Then switch to Claude Code for every iteration after that. Claude is better at &quot;change this specific behavior&quot; than v0 is once you&apos;re past the initial generation.&lt;/p&gt;
&lt;p&gt;For anything that needs complex state management or integration with existing backend types, I&apos;ll write that part myself or with Claude Code from scratch rather than trying to wrangle v0&apos;s output. v0 is a starting point, not a production artifact.&lt;/p&gt;
&lt;h3&gt;Backend&lt;/h3&gt;
&lt;p&gt;Codex for scaffolding. Give it the data model, tell it what the API needs to do, let it build the structure. Claude for the business logic layer - anything that involves conditionals, data transformation, edge cases. Debugging: paste the error into whatever&apos;s fastest. Usually Grok for the first look, Claude if it needs deeper investigation.&lt;/p&gt;
&lt;p&gt;For architecture decisions - where to put things, how services should talk to each other, what the data model should look like - I make those myself. I&apos;ll ask Claude or Grok to rubber-duck a decision with me, but I&apos;m not delegating architecture to a model. That&apos;s the one place where the AI&apos;s lack of business context will hurt you.&lt;/p&gt;
&lt;h2&gt;The MCP layer&lt;/h2&gt;
&lt;p&gt;This is the part most people aren&apos;t talking about yet.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://modelcontextprotocol.io/introduction&quot;&gt;MCP (Model Context Protocol)&lt;/a&gt; tools change how much context your AI coding setup can actually see. Without good context, you&apos;re pasting code snippets manually and hoping the model understands the surrounding system.&lt;/p&gt;
&lt;p&gt;The one I use daily: &lt;a href=&quot;https://github.com/sammcj/mcp-devtools&quot;&gt;sammcj&apos;s devtools MCP&lt;/a&gt;. At ~9K tokens it gives me basically everything meaningful about a codebase - file structure, dependencies, key functions. I drop this context at the start of any substantial session and the model quality jumps immediately. Less hallucination, more accurate edits, better architectural suggestions.&lt;/p&gt;
&lt;p&gt;If you&apos;re using AI coding tools without MCP integration, you&apos;re leaving a lot on the table. The model can only help you as much as it understands the system. Give it the context.&lt;/p&gt;
&lt;h2&gt;What this costs&lt;/h2&gt;
&lt;p&gt;People act like the price of these tools is a dealbreaker. It&apos;s not. But you should know what you&apos;re actually paying.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.deeflect.com/medium-img/06-coding-stack-2.jpg&quot; alt=&quot;What this costs&quot; /&gt;&lt;/p&gt;
&lt;p&gt;I&apos;m on OpenAI Pro ($200/month). That&apos;s basically required if you&apos;re using Codex for real work - you need the usage headroom. Claude Pro or Max depending on the month. Grok is included in X Premium, which I&apos;d pay for anyway.&lt;/p&gt;
&lt;p&gt;All in, I&apos;m spending around $350-400/month on AI tooling. I get somewhere between $800-1,200 of nominal usage value out of it based on what the APIs would cost at direct rates. And I ship maybe 3-4x faster than I did 18 months ago.&lt;/p&gt;
&lt;p&gt;The mental model I use: I&apos;m hiring a part-time engineer who&apos;s excellent at specific tasks, needs supervision, and occasionally hallucinates. At $400/month, that&apos;s a steal. The thing that makes it work is knowing which part-time engineer to call for which job. That&apos;s the whole game.&lt;/p&gt;
&lt;h2&gt;What breaks this workflow&lt;/h2&gt;
&lt;p&gt;Being honest about failure modes:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bad specs kill everything.&lt;/strong&gt; If I&apos;m vague about what I want, every model in the chain produces something subtly wrong in a different way, and now I have five things to reconcile instead of one thing to fix. Time spent on the spec is time saved everywhere downstream.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Chaining without reading.&lt;/strong&gt; Running model output straight into the next model without reviewing it first compounds errors. Grok flags an issue, Claude &quot;fixes&quot; it, Codex rebuilds around Claude&apos;s fix, and now the original problem is buried under three layers of AI decisions you didn&apos;t validate. Read between steps.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Using the wrong model for the task.&lt;/strong&gt; Claude on a large multi-file refactor gets expensive and sometimes loses coherence. Codex on a targeted three-line fix is overkill and occasionally makes it worse. Matching the model to the job isn&apos;t optional.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Architecture by committee (with AIs).&lt;/strong&gt; I did this once - asked three different models how to structure a feature, got three different answers, tried to synthesize them. Waste of time. Architectural decisions are mine. I use models to validate and poke holes, not to make the call.&lt;/p&gt;
&lt;h2&gt;The honest take on vibe coding&lt;/h2&gt;
&lt;p&gt;Most of the backlash against it is people who watched someone generate slop and extrapolated. Most of the hype is people who generated something that worked for 10 minutes and declared victory.&lt;/p&gt;
&lt;p&gt;The actual version is somewhere more boring and more useful: AI handles commodity work at speed, you handle judgment. The skill ceiling on building shifted. You don&apos;t need to memorize syntax. You do need to know what good architecture looks like, how to write a tight spec, when the AI is confidently wrong, and what the user actually needs.&lt;/p&gt;
&lt;p&gt;I couldn&apos;t do this workflow without 10 years of product and design experience. Not because the tools are hard - they&apos;re not. But because the inputs I give them are shaped by that experience. The prompts are good because I know what I want. The reviews catch problems because I know what breaks. The architecture holds because I&apos;ve seen what doesn&apos;t.&lt;/p&gt;
&lt;p&gt;If you want to build a similar stack: start with one model and learn it well. Understand its failure modes. Then add another model where you keep hitting walls. Don&apos;t adopt the whole thing at once - you&apos;ll just have four sources of confusion instead of one.&lt;/p&gt;
&lt;p&gt;Read everything you ship. That&apos;s the one rule that doesn&apos;t have exceptions.&lt;/p&gt;
&lt;p&gt;You can see more about what I&apos;m building and how I think about this stuff &lt;a href=&quot;https://blog.deeflect.com/08-prompt-eng-dead/&quot;&gt;why prompt engineering is dead&lt;/a&gt;. And if you want to dig into related topics - multi-agent systems, prompt engineering, tool comparisons - check out &lt;a href=&quot;https://blog.deeflect.com/09-mcp-server/&quot;&gt;the MCP server I built&lt;/a&gt; to find threads that go deeper.&lt;/p&gt;
</content:encoded><media:content url="https://blog.deeflect.com/medium-img/06-coding-stack.jpg" medium="image" type="image/jpeg"/><media:thumbnail url="https://blog.deeflect.com/medium-img/06-coding-stack.jpg"/><enclosure url="https://blog.deeflect.com/medium-img/06-coding-stack.jpg" length="53793" type="image/jpeg"/></item><item><title>0 to 500 Twitter Followers in 30 Days</title><link>https://blog.deeflect.com/05-twitter-growth/</link><guid isPermaLink="true">https://blog.deeflect.com/05-twitter-growth/</guid><description>I rebuilt my Twitter from zero after a ban. Here&apos;s exactly how I grew to 500 followers in 30 days with replies, real takes, and no cross-promo deals.</description><pubDate>Thu, 28 Aug 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://blog.deeflect.com/medium-img/05-twitter-growth.jpg&quot; alt=&quot;0 to 500 Twitter Followers in 30 Days&quot; /&gt;&lt;/p&gt;
&lt;p&gt;500 followers in 30 days sounds like nothing until you remember I started from literal zero on June 7, 2025. New account, no imported audience, no cross-promo deals. If you&apos;re trying to grow Twitter followers from zero, my situation was as clean-slate as it gets - my previous account @deeflect got banned and I wasn&apos;t going to beg for it back. So I rebuilt. And figuring out how I grew from 0 to 500 Twitter followers taught me more about the platform than the previous years I&apos;d spent on it.&lt;/p&gt;
&lt;p&gt;I&apos;m at ~660 now. Not viral. Not a &quot;Twitter guru.&quot; But I have a real, engaged audience of AI/dev/startup people who actually interact. That&apos;s worth more to me than 50K ghost followers.&lt;/p&gt;
&lt;p&gt;Here&apos;s what I learned rebuilding from scratch.&lt;/p&gt;
&lt;h2&gt;The 3 routes to grow Twitter followers from zero (pick wisely)&lt;/h2&gt;
&lt;p&gt;Before I talk tactics, the mental model matters.&lt;/p&gt;
&lt;p&gt;There are exactly three routes to growing on X. Route A: be funny and shitpost. Route B: drop insights and add value. Route C: rage bait and controversy. That&apos;s it. Every account you&apos;ve seen blow up used at least one of these. Most big accounts you think are doing something special are just doing one of these three things really well.&lt;/p&gt;
&lt;p&gt;Route C works. It works fast. It also fills your replies with people who are wrong on the internet as a personality trait. I&apos;m not interested in managing that energy, so I mostly stayed off it.&lt;/p&gt;
&lt;p&gt;Route A gets you shared. Funny spreads. But pure shitposting doesn&apos;t build authority - it builds a following that sees you as entertainment, not expertise. The second you post something serious, engagement tanks because you trained them to expect jokes.&lt;/p&gt;
&lt;p&gt;Route B gets you saved. Value posts rack up bookmarks and follows from people who want to learn something. But pure value content is too easy to scroll past without engaging. It doesn&apos;t spread.&lt;/p&gt;
&lt;p&gt;The actual sweet spot - and this is the insight that changed my numbers - is A+B together. A funny observation that also teaches something. A self-deprecating building-in-public moment that contains a real insight. The format makes people laugh, the substance makes them follow.&lt;/p&gt;
&lt;p&gt;&quot;Shipped a feature that took 3 days to build. My AI agent replaced it in 47 minutes. I&apos;m choosing to be excited about this.&quot;&lt;/p&gt;
&lt;p&gt;That&apos;s funny and it says something real about where AI tooling is going. That kind of post travels.&lt;/p&gt;
&lt;h2&gt;What actually grew my account from zero&lt;/h2&gt;
&lt;h3&gt;Replies on big accounts - this was 80% of it&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.deeflect.com/medium-img/05-twitter-growth-1.jpg&quot; alt=&quot;What actually grew my account from zero&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Not &quot;great post!&quot; Not &quot;I agree!&quot; Not the kind of thing that reads like a bot (more on that shortly).&lt;/p&gt;
&lt;p&gt;Actual additions. Real takes. Occasionally a funny riff on what they said. When someone with 50K followers posts something about AI agents being overhyped, I&apos;m not validating their hot take - I&apos;m adding specificity. &quot;The hype is real, the production readiness isn&apos;t. I&apos;ve been running 14 scheduled agent jobs daily for 3 months and the failure rate on complex multi-step tasks is still too high for me to hand off anything important unsupervised.&quot;&lt;/p&gt;
&lt;p&gt;That kind of reply does a few things. It shows up in the timeline of everyone following that account. It positions me as someone who&apos;s actually done the thing. And if it&apos;s good enough, the original poster might like it or reply - which extends the reach further.&lt;/p&gt;
&lt;p&gt;The key is being genuinely useful or genuinely funny. Vague agreement is invisible. Disagreement with substance is visible. Addition is visible. The metric I use: would someone screenshot this reply? If not, it&apos;s probably not pulling any weight.&lt;/p&gt;
&lt;p&gt;I probably wrote 15-20 quality replies a day for the first two weeks. That&apos;s the unsexy part nobody talks about. It&apos;s not posting content - it&apos;s showing up in other people&apos;s conversations consistently.&lt;/p&gt;
&lt;h3&gt;Opinionated takes from daily tool usage&lt;/h3&gt;
&lt;p&gt;I use AI tools every day. Cursor, Claude Code, various agent frameworks, LLM APIs. I have real opinions about what&apos;s good and what&apos;s broken. Those opinions performed well because they&apos;re specific.&lt;/p&gt;
&lt;p&gt;&quot;Cursor&apos;s composer is great until your project hits ~150 files, then the context quality drops noticeably&quot; is a post. &quot;AI coding tools are amazing&quot; is noise.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://blog.deeflect.com/07-disappeared/&quot;&gt;what happened when I stopped posting&lt;/a&gt; gives the full background, but the short version: 10+ years in design, deep fintech engineering experience, now building multi-agent systems full-time. That&apos;s a specific lens. When I post about AI tools, I&apos;m not regurgitating documentation - I&apos;m reporting from actual usage at a level most people don&apos;t have.&lt;/p&gt;
&lt;p&gt;Specificity is unfakeable credibility. Anyone can say &quot;this tool is good.&quot; Not everyone has run 40K tokens per day through their own agent system and tracked the monthly API cost down to $40.&lt;/p&gt;
&lt;h3&gt;Building in public - but only the interesting parts&lt;/h3&gt;
&lt;p&gt;&quot;Day 47 of my building in public journey&quot; is dead. Nobody wants that. The journey framing assumes your audience cares about you, and they don&apos;t - not yet. They care about what you&apos;re doing and what they can learn from it.&lt;/p&gt;
&lt;p&gt;What works instead: the specific moment that was actually interesting.&lt;/p&gt;
&lt;p&gt;Not &quot;working on my AI project today.&quot; Instead: &quot;Realized my RAG pipeline was failing not because of the model but because of my chunking strategy. Three days of debugging to find a paragraph break problem. Love this for me.&quot;&lt;/p&gt;
&lt;p&gt;Building in public posts that perform have an insight embedded in them. The vulnerability is a delivery mechanism for the learning, not the point itself. When the vulnerability is the point, it reads as attention-seeking. When the learning is the point and the vulnerability makes it human, it actually helps people.&lt;/p&gt;
&lt;h3&gt;Timing matters more than I expected&lt;/h3&gt;
&lt;p&gt;I post when US tech Twitter is active. That&apos;s roughly 9am-12pm Pacific and then a second window around 5-8pm Pacific. I&apos;m in LA so this is convenient for me.&lt;/p&gt;
&lt;p&gt;But the timing thing is real. The exact same post at 2am gets 20% of the engagement it&apos;d get at 10am. The algorithm&apos;s initial distribution window is short - if you don&apos;t get traction in the first 30-60 minutes, the post dies. So showing up when your audience is scrolling is a basic requirement that a lot of people ignore.&lt;/p&gt;
&lt;h3&gt;Being weird and specific instead of generically motivational&lt;/h3&gt;
&lt;p&gt;The fastest way to get lost in the feed is to sound like everyone else. &quot;Consistency is key.&quot; &quot;Ship fast, iterate faster.&quot; &quot;Your future self will thank you.&quot; These are not posts. These are bumper stickers.&lt;/p&gt;
&lt;p&gt;I&apos;m Russian-born, ADHD, building AI systems in LA, async-only (no calls, ever), obsessed with multi-agent workflows. That&apos;s specific. When I write from that specific perspective instead of trying to be universally relatable, the people who connect with it really connect.&lt;/p&gt;
&lt;p&gt;You can&apos;t optimize for everyone. You can optimize for your actual people.&lt;/p&gt;
&lt;h2&gt;What didn&apos;t work - including an embarrassing confession&lt;/h2&gt;
&lt;h3&gt;AI-generated replies&lt;/h3&gt;
&lt;p&gt;This one I&apos;m putting in writing because I think a lot of people are doing this and thinking it&apos;s working.&lt;/p&gt;
&lt;p&gt;For a few months, I was using AI to generate replies to posts in my niche. The idea: stay &quot;active&quot; in conversations, look engaged, maybe get some follows from the visibility. The system did not notice - meaning I wasn&apos;t flagged or suppressed as far as I could tell. But the growth was essentially flat. Automated engagement looks active, but builds zero real connections.&lt;/p&gt;
&lt;p&gt;Here&apos;s why it fails: a good reply starts a conversation. An AI-generated reply that&apos;s technically relevant but not genuinely insightful doesn&apos;t make anyone want to engage back. It gets ignored or gets a polite like. It doesn&apos;t turn into a thread. It doesn&apos;t make the original poster remember you. It doesn&apos;t build a relationship with anyone who saw it.&lt;/p&gt;
&lt;p&gt;I switched to genuine replies only - less volume, more quality. Growth actually improved. Because one real conversation is worth more than 50 AI-generated non-interactions.&lt;/p&gt;
&lt;p&gt;The meta-lesson: you can use AI to help draft a reply if you&apos;re stuck, but you need to inject your actual perspective into it. The algorithm might count impressions, but humans are better than you think at detecting genuine vs. automated engagement.&lt;/p&gt;
&lt;h3&gt;Mass following and hoping for follow-backs&lt;/h3&gt;
&lt;p&gt;Did this for like a week, stopped, never mentioned it until now. Following 200 accounts a day hoping 10% follow back is a number game that builds the wrong audience. Even when it &quot;works&quot; you get people who don&apos;t care about your content - they just returned a courtesy follow. Those accounts become noise in your metrics and won&apos;t engage with anything you post.&lt;/p&gt;
&lt;h3&gt;Generic &quot;tips and tricks&quot; threads&lt;/h3&gt;
&lt;p&gt;I tried a few of these early on. &quot;5 AI tools every developer should know&quot; type content. It did okay in terms of impressions but drove almost no follows. The problem is this content exists everywhere. There&apos;s nothing in it that could only come from me. When someone reads a generic tips thread, even a good one, they don&apos;t feel any reason to follow the source specifically. They just take the info and keep scrolling.&lt;/p&gt;
&lt;p&gt;The posts that converted to follows were the ones with a clear point of view. Posts where you can tell who wrote them from the content alone.&lt;/p&gt;
&lt;h2&gt;The introverted builder angle&lt;/h2&gt;
&lt;p&gt;I want to flag something for anyone who&apos;s introverted and thinks Twitter growth requires networking, calls, or showing up to events.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.deeflect.com/medium-img/05-twitter-growth-2.jpg&quot; alt=&quot;The introverted builder angle&quot; /&gt;&lt;/p&gt;
&lt;p&gt;It doesn&apos;t. I don&apos;t do calls. I don&apos;t go to tech meetups. I&apos;m async-only. Every single one of my followers came through written content and written replies. No podcast appearances, no cross-promo deals, no &quot;collab&quot; posts.&lt;/p&gt;
&lt;p&gt;The platform rewards writing, and writing is something you can do alone at 11pm in your apartment. For introverted builders, that&apos;s actually a structural advantage. You&apos;re competing with people who need external validation to show up - and you can just quietly be consistent.&lt;/p&gt;
&lt;p&gt;Check out the &lt;a href=&quot;https://blog.deeflect.com/04-seven-apps/&quot;&gt;building 7 apps solo&lt;/a&gt; for all the AI engineering and building-in-public content if you want to see how this thinking shows up across different topics.&lt;/p&gt;
&lt;h2&gt;Where I am now and what I&apos;m focused on&lt;/h2&gt;
&lt;p&gt;660 followers, growing slower than the initial burst but more steadily. The first 500 came fast because I was very active with replies. I&apos;ve pulled back on reply volume a bit as I&apos;m heads-down on some builds, and the growth has slowed accordingly. That&apos;s fine - I&apos;d rather have a smaller engaged audience than chase a number.&lt;/p&gt;
&lt;p&gt;The things I&apos;d do exactly the same: heavy reply game in the first month, being genuinely specific and opinionated, building in public with the insight-forward framing.&lt;/p&gt;
&lt;p&gt;The things I&apos;d change: started with genuine replies from day one instead of testing the AI reply thing, spent less time on generic content earlier.&lt;/p&gt;
&lt;p&gt;If you&apos;re starting from zero or rebuilding like I was - the reply strategy is not glamorous but it&apos;s the most direct path. Find 10 accounts in your niche with 5K-100K followers, show up in their replies every day with actual value, and do it for 30 days before evaluating whether it&apos;s working. That&apos;s the playbook. The rest is just execution.&lt;/p&gt;
&lt;p&gt;One last thing: don&apos;t optimize for follower count if you&apos;re building something. Optimize for the right followers. 500 engaged AI/dev/startup people is worth more than 5,000 general followers who won&apos;t care about what you&apos;re building. Niche compounds. Broad doesn&apos;t.&lt;/p&gt;
&lt;p&gt;Find me at &lt;a href=&quot;https://x.com/deeflectcom&quot;&gt;@deeflectcom&lt;/a&gt; if you want to watch this experiment continue in real time.&lt;/p&gt;
</content:encoded><media:content url="https://blog.deeflect.com/medium-img/05-twitter-growth.jpg" medium="image" type="image/jpeg"/><media:thumbnail url="https://blog.deeflect.com/medium-img/05-twitter-growth.jpg"/><enclosure url="https://blog.deeflect.com/medium-img/05-twitter-growth.jpg" length="104852" type="image/jpeg"/></item><item><title>Building 7 Apps at Once as a Solo Founder With ADHD</title><link>https://blog.deeflect.com/04-seven-apps/</link><guid isPermaLink="true">https://blog.deeflect.com/04-seven-apps/</guid><description>What it actually looks like to run 7 simultaneous projects solo with ADHD - the failures, the systems that survived, and why I&apos;ll never take a cofounder.</description><pubDate>Tue, 12 Aug 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://blog.deeflect.com/medium-img/04-seven-apps.jpg&quot; alt=&quot;Building 7 Apps at Once as a Solo Founder With ADHD&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Seven apps. All running simultaneously. All half-built. All &quot;almost done.&quot;&lt;/p&gt;
&lt;p&gt;That was me six months ago, and if you&apos;re a solo founder with ADHD, you probably know exactly how that happens. Building 7 apps at once isn&apos;t a failure mode - it&apos;s the default state when your brain treats every new idea like an emergency and you&apos;re technically capable of actually building all of them.&lt;/p&gt;
&lt;p&gt;I can do the full stack. Design, frontend, backend, smart contracts. Which sounds like an asset until you realize it means nothing stops me from starting something new at 2am because I read one interesting tweet about a framework I&apos;ve never tried.&lt;/p&gt;
&lt;p&gt;Let me tell you what that actually looks like.&lt;/p&gt;
&lt;h2&gt;How building 7 apps at once happens (faster than you&apos;d think)&lt;/h2&gt;
&lt;p&gt;It doesn&apos;t start as 7. It starts as 1, then 2, then &quot;just a quick experiment,&quot; then you blink and your Notion has 7 active project docs and your GitHub has 11 repos created in the last 90 days.&lt;/p&gt;
&lt;p&gt;My list at peak chaos:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;OpenClaw&lt;/strong&gt; - my AI agent system. The main thing. 14 cron jobs running daily tasks, managing my workflow, aggregating data, handling research. Actually running in production.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A music generation pipeline&lt;/strong&gt; - GPT-4 generating lyrics, Suno turning them into actual audio, Midjourney for visuals, ElevenLabs for voiceover. The idea was a fully automated artist that produced content without me touching anything after setup. I got it working. Then got distracted.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Crypto products&lt;/strong&gt; - I&apos;ve contributed to successful multimillion-dollar crypto projects. The financial incentive is real. The problem is crypto moves fast and demands constant attention, which ADHD brains are simultaneously great and terrible at.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;An ADHD planning tool&lt;/strong&gt; - I was going to build the productivity app that actually worked for my brain because everything else sucked. Classic &quot;scratch your own itch&quot; trap. You know what happened. I got distracted building it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;MCP servers&lt;/strong&gt; - Model Context Protocol is genuinely interesting infrastructure work. I built three of them in a weekend because the architecture grabbed me.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;CLI tools&lt;/strong&gt; - Small stuff. Quick utilities. The kind of thing you build in 4 hours because you needed it for something else and now it exists.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Automation workflows&lt;/strong&gt; - n8n pipelines, custom agents, glue code connecting APIs. This bleeds into everything else so it&apos;s simultaneously its own project and embedded in all the others.&lt;/p&gt;
&lt;p&gt;Seven things. One person. No cofounders by choice - I&apos;ll get to why in a minute.&lt;/p&gt;
&lt;h2&gt;The ADHD founder loop is real and it&apos;s not what you think&lt;/h2&gt;
&lt;p&gt;Everyone explains ADHD as &quot;gets distracted easily.&quot; That&apos;s not wrong but it misses the mechanism. It&apos;s not that I can&apos;t focus. It&apos;s that my brain allocates attention based on novelty and interest, not importance and priority. A new framework registers as urgent. A 6-week-old project that needs documentation registers as optional.&lt;/p&gt;
&lt;p&gt;The loop looks like this:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;New idea hits. Immediate hyperfocus. Build for 16 hours straight.&lt;/li&gt;
&lt;li&gt;Get it working. MVP ships. Dopamine.&lt;/li&gt;
&lt;li&gt;Hit the boring middle - marketing, SEO, documentation, polish, customer support.&lt;/li&gt;
&lt;li&gt;Brain de-prioritizes it. New shiny thing appears.&lt;/li&gt;
&lt;li&gt;Repeat.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The boring middle is where non-ADHD founders grind through and ADHD founders bounce. The problem isn&apos;t the building. I&apos;m fast at building. The problem is everything after the building.&lt;/p&gt;
&lt;p&gt;Here&apos;s what took me too long to figure out: the boring middle is where the money is. Shipping is fun. Distribution is how projects survive.&lt;/p&gt;
&lt;p&gt;And I can&apos;t do distribution manually. It just doesn&apos;t happen.&lt;/p&gt;
&lt;p&gt;This isn&apos;t unique to me - the &lt;a href=&quot;https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3449420/&quot;&gt;ADHD and entrepreneurship research from Barkley et al.&lt;/a&gt; consistently shows that executive function deficits hit hardest on sustained, low-novelty tasks. Which is exactly what distribution and maintenance are. The building phase is fine. Everything after is structurally harder for ADHD brains.&lt;/p&gt;
&lt;h2&gt;What building 7 apps at once as a solo founder with ADHD actually costs you&lt;/h2&gt;
&lt;p&gt;The real cost isn&apos;t time. It&apos;s context switching overhead compounded across seven projects simultaneously.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.deeflect.com/medium-img/04-seven-apps-1.jpg&quot; alt=&quot;What building 7 apps at once as a solo founder with ADHD actually costs you&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Every time you context-switch between codebases, you pay a mental re-load cost. &lt;a href=&quot;https://www.ics.uci.edu/~gmark/chi08-mark.pdf&quot;&gt;Research on developer context switching&lt;/a&gt; puts the refocus time at 23 minutes on average after an interruption. Multiply that by seven projects and you&apos;re paying that tax constantly. You&apos;re never fully in any one thing long enough to hit the deep work state where hard problems actually get solved.&lt;/p&gt;
&lt;p&gt;My peak chaos period felt productive. I was always building something. But my actual output - measured in shipped features, not hours of activity - was lower than my focused periods. The context switching was eating the work.&lt;/p&gt;
&lt;p&gt;The other cost is quality. When you&apos;re seven projects deep, you&apos;re not doing your best work on any of them. You&apos;re doing good-enough work on all of them. Which means none of them have the level of craft that makes a product actually stand out.&lt;/p&gt;
&lt;p&gt;I shipped an MVP of the ADHD planning tool that was functional but ugly. No time to polish it. Meanwhile I was debugging MCP server architecture and planning the music pipeline. Something had to give and it was always the boring middle tasks - the ones that determine whether anyone actually uses the thing.&lt;/p&gt;
&lt;h2&gt;The solo founder reality nobody posts about&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.deeflect.com/02-adhd-and-ai/&quot;&gt;how ADHD and AI work together&lt;/a&gt; is performance art now. Revenue screenshots get thousands of likes. MRR milestones. &quot;I quit my job and 6 months later...&quot; threads. Everyone&apos;s sharing the wins.&lt;/p&gt;
&lt;p&gt;Posts about almost going broke get 12 likes. Posts about abandoning your fourth project in a row get silence. The authentic failures don&apos;t get engagement so nobody posts them, which means every new solo founder thinks everyone else has it figured out.&lt;/p&gt;
&lt;p&gt;I&apos;ve been broke. I&apos;ve shipped things that made zero dollars. I&apos;ve built for three weeks and then deleted the repo because I couldn&apos;t figure out what the product actually was. I&apos;ve had projects that made real money and then lost relevance six months later because I didn&apos;t maintain them.&lt;/p&gt;
&lt;p&gt;The solo part: genuinely fast. No meetings about meetings. No &quot;we should align on the roadmap&quot; conversations with a cofounder who has different priorities. No equity negotiation. No founder breakup. I&apos;ve watched every cofounder horror story play out in real time around me - equity fights, one person doing 80% of the work, fundamental disagreements about direction, personality conflicts that kill companies that should have made it. Solo is lonely. It&apos;s also fast.&lt;/p&gt;
&lt;p&gt;The ADHD + solo combination creates a specific failure mode though. There&apos;s no one to tell you you&apos;re going down a rabbit hole. No one to say &quot;we&apos;ve been working on this side feature for two weeks, should we refocus?&quot; Your own judgment is the only check on your impulses and ADHD makes your judgment unreliable at the exact moments you need it most.&lt;/p&gt;
&lt;p&gt;The fix isn&apos;t a cofounder. The fix is building systems that act like a cofounder for the structural stuff while you handle the actual building.&lt;/p&gt;
&lt;h2&gt;What actually survived (and why)&lt;/h2&gt;
&lt;p&gt;Out of seven active projects, two are still running and one of those is making consistent money.&lt;/p&gt;
&lt;p&gt;Five are abandoned or on permanent ice.&lt;/p&gt;
&lt;p&gt;Here&apos;s the honest accounting: those five failures weren&apos;t wasted. They taught me things that made the two survivors better. I learned how to architect agent systems from the music pipeline experiment. The MCP servers gave me infrastructure patterns I&apos;m using in OpenClaw. The ADHD planning tool taught me what actually helps my workflow versus what sounds good in theory.&lt;/p&gt;
&lt;p&gt;But the reason the two survivors survived isn&apos;t just that I learned from the failures. It&apos;s that the survivors automated their boring middles.&lt;/p&gt;
&lt;p&gt;OpenClaw runs 14 cron jobs. Morning digest, memory management, content scheduling, health data aggregation, crypto position monitoring - all automated. I talk to it every morning. The daily feedback loop exists. The daily maintenance doesn&apos;t.&lt;/p&gt;
&lt;p&gt;The crypto products that worked had simple mechanics and network effects that didn&apos;t require my constant attention. Once they were live, they ran. The ones that needed daily management died when my attention moved elsewhere.&lt;/p&gt;
&lt;p&gt;The pattern is consistent: if I have to manually do something for a project to stay alive, that project will eventually die. Not because I don&apos;t care about it. Because ADHD means I&apos;ll miss 3 days of manual tasks in a row and then it feels too far behind to recover and then I move on.&lt;/p&gt;
&lt;p&gt;If the system can sustain itself through a 2-week hyperfocus absence, it lives. If it can&apos;t, it doesn&apos;t.&lt;/p&gt;
&lt;h2&gt;Why I&apos;ll never take a cofounder&lt;/h2&gt;
&lt;p&gt;Everyone says this is a mistake. &quot;Two founder teams outperform solo founders statistically.&quot; I&apos;ve read the YC essays.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.deeflect.com/medium-img/04-seven-apps-2.jpg&quot; alt=&quot;Why I&apos;ll never take a cofounder&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Here&apos;s my actual take: those statistics are describing average cases and I&apos;m not an average case.&lt;/p&gt;
&lt;p&gt;What a cofounder typically brings: accountability, complementary skills, emotional support during hard stretches, a second opinion on decisions, someone to handle the stuff you&apos;re bad at.&lt;/p&gt;
&lt;p&gt;What I actually need from that list: someone to handle the stuff I&apos;m bad at. Specifically, distribution, SEO, documentation, customer communication. The boring middles.&lt;/p&gt;
&lt;p&gt;A human cofounder would need 40-50% equity for that. They&apos;d have opinions about the product direction. We&apos;d need to agree on decisions. We&apos;d have to coordinate schedules. They&apos;d have good months and bad months and burnout cycles that don&apos;t sync with mine.&lt;/p&gt;
&lt;p&gt;An AI agent running my content pipeline costs me $40/month and doesn&apos;t have feelings about feature prioritization.&lt;/p&gt;
&lt;p&gt;I&apos;d rather have a multi-agent system that handles my weak spots than a human who wants half the company to do the same job. That&apos;s not cynical, it&apos;s just math. And it only works because I can build the agents myself.&lt;/p&gt;
&lt;p&gt;The loneliness is real. I&apos;m not dismissing it. Some weeks the silence is rough. But the alternative isn&apos;t &quot;cofounder&quot; - it&apos;s &lt;a href=&quot;https://blog.deeflect.com/05-twitter-growth/&quot;&gt;growing on Twitter&lt;/a&gt; and genuinely engaging with the community instead of just posting screenshots.&lt;/p&gt;
&lt;h2&gt;The systems that make solo + ADHD actually work&lt;/h2&gt;
&lt;p&gt;I&apos;ve been iterating on this for two years. Here&apos;s what actually helps:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;File-driven everything.&lt;/strong&gt; My agents read from markdown files - SOUL.md for personality, AGENTS.md for protocol, MEMORY.md for context. When something needs updating, I edit a text file. No deployments. No configuration hell. Low friction maintenance survives ADHD gaps. High friction maintenance doesn&apos;t.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cron jobs over manual triggers.&lt;/strong&gt; If a task requires me to remember to do it, it will eventually not get done. Scheduled jobs run whether I&apos;m in a hyperfocus sprint or a three-day crash. Everything recurring gets automated.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ruthless scope decisions at the start.&lt;/strong&gt; The ADHD planning tool died partly because I kept adding features during the build phase. Every new feature felt urgent. Scope compound-expanded until the MVP was a six-month project. Now I write down the exact features for v1 and I&apos;m not allowed to add anything until v1 ships. This one rule has probably doubled my shipping rate.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Letting projects die without guilt.&lt;/strong&gt; I spent too long trying to &quot;get back to&quot; projects I&apos;d mentally left. Felt like failure. Now I have a graveyard folder on GitHub and I use it. Dead projects get documented (so I can steal the code later) and archived. The folder has 22 repos in it. That&apos;s fine.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Using the hyperfocus instead of fighting it.&lt;/strong&gt; When I&apos;m locked in on something, that&apos;s a resource. I try to batch the hardest technical work for those windows. The structured boring tasks - docs, config, cleanup - get batched for the lower-energy periods when I can work mechanically.&lt;/p&gt;
&lt;h2&gt;Finishing 2 out of 7 is actually fine&lt;/h2&gt;
&lt;p&gt;Here&apos;s the reframe that helped me most: the 5 abandoned projects aren&apos;t failures, they&apos;re the cost of finding the 2 that worked.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.deeflect.com/tags&quot;&gt;Most indie developers&lt;/a&gt; don&apos;t talk about their abandonment rate. They talk about the thing that shipped. But every shipped product has a graveyard of experiments behind it. The experiments weren&apos;t wasted - they were the research.&lt;/p&gt;
&lt;p&gt;My music generation pipeline taught me how to build multi-tool AI pipelines. Spent two weeks on it, never shipped it as a product, use those patterns constantly now.&lt;/p&gt;
&lt;p&gt;The ADHD planning tool taught me that &quot;I&apos;ll use this myself&quot; is not the same as &quot;other people will pay for this.&quot; Different lesson. Equally valuable.&lt;/p&gt;
&lt;p&gt;The CLI tools I built in weekends are still sitting in my shell. I use them every day. Zero revenue. Huge quality-of-life improvement. Not everything needs to be a business.&lt;/p&gt;
&lt;p&gt;The crypto projects that reached multimillion-dollar valuations came after multiple experiments that went nowhere. The ones that worked worked because of things I learned from the ones that didn&apos;t.&lt;/p&gt;
&lt;p&gt;Building 7 apps at once as a solo founder with ADHD is chaotic. It&apos;s also how you discover which two are actually worth finishing.&lt;/p&gt;
&lt;p&gt;If you&apos;re building solo with ADHD and you&apos;ve got four half-built things on your GitHub and you feel like you&apos;re failing - you&apos;re not. You&apos;re doing the process. The trick is setting up the systems so that when the thing that matters is ready to run, it can run without you holding it up.&lt;/p&gt;
&lt;p&gt;Automate the boring middle. Let the losers die fast. Stay technical enough to build your own infrastructure. And ignore anyone who tells you the only way to do this right involves giving half your company to someone else.&lt;/p&gt;
&lt;p&gt;The agent handling my distribution doesn&apos;t want equity. That&apos;s the whole point.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;If you want to see how the &lt;a href=&quot;https://blog.deeflect.com/about&quot;&gt;agent system&lt;/a&gt; I built actually works - the one that survived while six other projects didn&apos;t - I write about it here. The full architecture, the cost breakdown, what broke, what didn&apos;t.&lt;/p&gt;
</content:encoded><media:content url="https://blog.deeflect.com/medium-img/04-seven-apps.jpg" medium="image" type="image/jpeg"/><media:thumbnail url="https://blog.deeflect.com/medium-img/04-seven-apps.jpg"/><enclosure url="https://blog.deeflect.com/medium-img/04-seven-apps.jpg" length="103487" type="image/jpeg"/></item><item><title>Why AI Products Have Terrible UX</title><link>https://blog.deeflect.com/03-ai-bad-ux/</link><guid isPermaLink="true">https://blog.deeflect.com/03-ai-bad-ux/</guid><description>Most AI products have terrible UX - not because the AI is bad, but because no one who understands both AI and design is building them. Here&apos;s what to fix.</description><pubDate>Thu, 24 Jul 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://blog.deeflect.com/medium-img/03-ai-bad-ux.jpg&quot; alt=&quot;Why AI Products Have Terrible UX&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Most AI products have terrible UX. Not because the AI is bad - because nobody who understands both AI and design is in the room when these things get built.&lt;/p&gt;
&lt;p&gt;I&apos;ve spent 10+ years in product design, including five years designing institutional fintech for 70+ banks at VALK. Now I build AI systems. I write prompts and I write interfaces. I can spec a component in Figma and wire up the agent backend that powers it. That combination is genuinely rare, and the fact that it&apos;s rare is exactly why AI UX is such a disaster right now.&lt;/p&gt;
&lt;p&gt;This isn&apos;t a subtle problem. Open any AI product built primarily by ML engineers and you&apos;ll feel it within 30 seconds.&lt;/p&gt;
&lt;h2&gt;Why AI products have terrible UX by default&lt;/h2&gt;
&lt;p&gt;The people who understand how transformers work don&apos;t think in interaction flows. They think in loss functions and benchmark scores. When an ML engineer ships a UI, you get a settings panel with 40 sliders and tooltips that say &quot;controls the randomness of model outputs.&quot; Thanks. Very helpful.&lt;/p&gt;
&lt;p&gt;The people who understand interaction design usually can&apos;t implement AI systems. They can map the user journey beautifully but they don&apos;t know what a context window is, can&apos;t reason about latency tradeoffs, and treat the AI as a black box that either works or doesn&apos;t.&lt;/p&gt;
&lt;p&gt;The intersection - people who can do both - is genuinely tiny. Which means most AI products get built by one camp or the other. And it shows.&lt;/p&gt;
&lt;p&gt;Here&apos;s the uncomfortable truth: &lt;strong&gt;a mediocre model with great UX beats a great model with terrible UX every time.&lt;/strong&gt; ChatGPT didn&apos;t win because GPT-4 was the best model when it launched. It won because the chat interface was dead simple. You typed. It responded. No configuration. No onboarding. No explaining what a temperature setting does.&lt;/p&gt;
&lt;p&gt;That chat box was a design decision, not an ML decision. And it&apos;s worth billions.&lt;/p&gt;
&lt;h2&gt;The specific ways AI UX fails&lt;/h2&gt;
&lt;p&gt;Let me get concrete because &quot;bad UX&quot; is a garbage diagnosis. Here&apos;s what I actually see when I use most AI products:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.deeflect.com/medium-img/03-ai-bad-ux-1.jpg&quot; alt=&quot;The specific ways AI UX fails&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Chat-for-everything syndrome&lt;/h3&gt;
&lt;p&gt;Not every AI interaction needs a text input. Some interactions need a button. Some need a slider (a single, well-labeled one). Some need a select dropdown.&lt;/p&gt;
&lt;p&gt;When you build &quot;chat as the UI&quot; because it&apos;s easy to implement, you&apos;re making your users do the work of figuring out what to ask. That&apos;s backwards. The product&apos;s job is to make the right actions obvious. If your AI can summarize a document, add a &quot;Summarize&quot; button. Don&apos;t make me type &quot;please summarize this document&quot; like I&apos;m filling out a form in 1998.&lt;/p&gt;
&lt;p&gt;The chat interface pattern gets cargo-culted because ChatGPT did it and ChatGPT is successful. But ChatGPT&apos;s whole thing IS chat. It&apos;s a general-purpose assistant. Most AI products aren&apos;t general-purpose - they&apos;re doing specific things for specific workflows. A focused tool should have focused UI.&lt;/p&gt;
&lt;h3&gt;Loading states that feel like crashes&lt;/h3&gt;
&lt;p&gt;Generative AI is slow. A response can take anywhere from one second to 25 seconds depending on the model, the prompt length, and what you&apos;re generating. Users are not okay with a spinner for 20 seconds. They need to know something is happening, roughly how much longer it&apos;ll take, and ideally a preview of the output streaming in.&lt;/p&gt;
&lt;p&gt;Streaming output is table stakes in 2025. If your AI product shows a blank area and then suddenly dumps the full response, you&apos;ve already lost. It feels like the app froze and then magically recovered. Streaming makes the latency feel shorter than it actually is - that&apos;s not a trick, it&apos;s respecting the user&apos;s attention.&lt;/p&gt;
&lt;p&gt;I&apos;ve seen products where a 15-second model call shows a static spinner with no copy, no progress indication, nothing. Users absolutely hit refresh. Then they get confused about duplicate outputs. This is a solved UX problem that keeps getting ignored because the engineer who built the AI part is done and the UI is &quot;good enough.&quot;&lt;/p&gt;
&lt;h3&gt;Error messages written for engineers&lt;/h3&gt;
&lt;p&gt;&quot;Something went wrong.&quot; Rate limit exceeded. Context length exceeded. Model unavailable.&lt;/p&gt;
&lt;p&gt;These are real failure modes that users hit regularly and none of them should surface as generic error states. When the model hits a rate limit, tell the user there&apos;s high demand and you&apos;re retrying. When the context gets too long, tell them what to do about it - not in token counts, in plain language. &quot;Your conversation is getting long - try starting a new one for best results.&quot;&lt;/p&gt;
&lt;p&gt;Error handling is where you find out if a designer was actually involved. Engineers write error messages for themselves. Designers write them for the person who just wanted to finish a task.&lt;/p&gt;
&lt;h3&gt;Settings pages designed for nobody&lt;/h3&gt;
&lt;p&gt;Temperature. Top-p. Frequency penalty. Presence penalty. Max tokens.&lt;/p&gt;
&lt;p&gt;These settings exist because they&apos;re parameters in the API. They got exposed in the UI because nobody asked &quot;should we expose this?&quot; They just asked &quot;can we expose this?&quot; Yes, you can expose it. That doesn&apos;t mean you should.&lt;/p&gt;
&lt;p&gt;I get it - power users sometimes want control. But the defaults should be invisible and the advanced settings should be buried behind a &quot;configure&quot; link that 95% of users never click. Progressive disclosure is a basic design concept. Show the simple thing first. Put the complex thing behind one more tap.&lt;/p&gt;
&lt;p&gt;When your settings page looks like a synthesizer, you&apos;ve failed the design. Users don&apos;t want to tune a model. They want to accomplish something.&lt;/p&gt;
&lt;h3&gt;Treating AI output as final&lt;/h3&gt;
&lt;p&gt;AI output is a draft. It&apos;s always a draft. The best AI products make this obvious by making everything editable in-context. Click a sentence. Change it. The system knows you changed it and uses that as signal.&lt;/p&gt;
&lt;p&gt;When AI output renders as static text in a read-only block, you&apos;re implicitly telling the user that the AI&apos;s word is final. That&apos;s backwards. The user is in charge. The AI is a collaborator. The UI should make it trivially easy to edit, regenerate, or reject any piece of output.&lt;/p&gt;
&lt;p&gt;Linear&apos;s AI summaries are a good example of getting this right. The summary is inline and you can just edit it like any other text. The AI offered a starting point. You own the result.&lt;/p&gt;
&lt;h3&gt;No feedback loop&lt;/h3&gt;
&lt;p&gt;If a user deletes an AI output and types something completely different, that&apos;s signal. If they regenerate three times, that&apos;s signal. If they always ignore the suggested action, that&apos;s signal.&lt;/p&gt;
&lt;p&gt;Most AI products collect none of this. Not actively anyway. There&apos;s no thumbs up/thumbs down. There&apos;s no &quot;fix this&quot; button. There&apos;s no way for the user to tell the system &quot;you&apos;re getting this wrong.&quot;&lt;/p&gt;
&lt;p&gt;Beyond the product improvement angle, feedback UI makes users feel like they have agency. The AI isn&apos;t doing something to them - they&apos;re collaborating with it. That&apos;s a fundamental shift in how the product feels, and it costs almost nothing to implement.&lt;/p&gt;
&lt;p&gt;Nielsen Norman Group has &lt;a href=&quot;https://www.nngroup.com/articles/ai-ux-patterns/&quot;&gt;documented this pattern extensively&lt;/a&gt; - the products that build in feedback mechanisms consistently score higher on user satisfaction than those that treat AI output as a one-way broadcast. This isn&apos;t a new insight. It just keeps getting skipped.&lt;/p&gt;
&lt;h2&gt;What good AI UX actually looks like&lt;/h2&gt;
&lt;p&gt;Good AI UX is invisible. The AI is there, doing things, but you barely notice it. You just notice that the product works better than it should.&lt;/p&gt;
&lt;p&gt;Autocomplete that predicts what you actually meant to type. Smart defaults that adjust based on what you&apos;ve done before. Errors that self-correct before you ever see them. Suggestions that appear before you ask for them, in the right context, at the right time.&lt;/p&gt;
&lt;p&gt;The goal is never to show off the AI. The goal is to make the user feel competent. There&apos;s a real difference between a user saying &quot;this tool is so intuitive&quot; and a user saying &quot;wow the AI is amazing.&quot; The first is good UX. The second usually means the AI is impressive but the UX is still making you aware of it - which means it&apos;s getting in the way.&lt;/p&gt;
&lt;p&gt;Figma&apos;s AI integrations are interesting to watch because Figma&apos;s team actually understands design. They still struggle with making AI actions feel predictable - there&apos;s always a moment of &quot;wait, what did it just do?&quot; - but they&apos;re closer than most. That moment of confusion is a UX debt they&apos;re actively trying to pay down.&lt;/p&gt;
&lt;p&gt;The products I actually like using right now: Notion AI for the in-context editing flow, Cursor for how it makes AI suggestions feel like a collaborator not a replacement, and Linear for keeping AI features out of the critical path so they enhance without blocking.&lt;/p&gt;
&lt;p&gt;All three share something: the AI is ambient. It&apos;s there when you need it, gone when you don&apos;t, and it never makes you feel like you need to understand it to use it.&lt;/p&gt;
&lt;h2&gt;Why AI products with terrible UX keep shipping anyway&lt;/h2&gt;
&lt;p&gt;The gap isn&apos;t closing fast enough. AI is getting more capable every few months. Design is being treated as optional or &quot;we&apos;ll fix it later.&quot; The result is an ecosystem of increasingly powerful AI wrapped in increasingly confusing interfaces.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.deeflect.com/medium-img/03-ai-bad-ux-2.jpg&quot; alt=&quot;Why AI products with terrible UX keep shipping anyway&quot; /&gt;&lt;/p&gt;
&lt;p&gt;This is partly structural. Most AI companies are founded by researchers or engineers. Design hires come later, if at all. And when they do come, the designer often lands in a team where the ML engineers have already made the fundamental UX decisions - they just didn&apos;t call them design decisions. The architecture of the system becomes the architecture of the interface, which is almost never the right call.&lt;/p&gt;
&lt;p&gt;Google&apos;s &lt;a href=&quot;https://pair.withgoogle.com/guidebook&quot;&gt;People + AI Research (PAIR) team&lt;/a&gt; has a whole guidebook on this. It&apos;s worth reading even if you don&apos;t agree with everything in it. The core insight - that AI systems require a fundamentally different design approach than deterministic software - is right. You can&apos;t just apply standard UX patterns to a system that might give a different answer every time. The guidelines for how to handle uncertainty, how to communicate confidence levels, how to make AI actions feel predictable without being rigid - that&apos;s the hard design work that most teams skip.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://www.anthropic.com/usage-policy&quot;&gt;Anthropic model card and usage policy documentation&lt;/a&gt; is also a useful lens here. The way they think about how Claude should communicate uncertainty and limitations is essentially applied UX thinking at the model level. That&apos;s rare. Most model providers treat the interface layer as somebody else&apos;s problem.&lt;/p&gt;
&lt;p&gt;The companies that figure this out - that actually hire people who can span both domains, or that build real collaboration between their ML and design teams - are going to clean up. Not because their AI is better. Because their AI actually makes sense to use.&lt;/p&gt;
&lt;p&gt;I started &lt;a href=&quot;https://blog.deeflect.com/01-quit-fintech/&quot;&gt;leaving fintech for AI&lt;/a&gt; specifically because I kept seeing this pattern and had nowhere useful to point people. The posts that get the most traction are always the ones about the interface layer, not the model layer. People are hungry for this.&lt;/p&gt;
&lt;h2&gt;Fix the UX before you touch the model&lt;/h2&gt;
&lt;p&gt;If you&apos;re building an AI product right now, the single most high-leverage thing you can do isn&apos;t to upgrade your model. It&apos;s to watch five users try to use your product without any help from you. Don&apos;t say anything. Just watch. You&apos;ll see exactly where the AI ends and the confusion begins. That&apos;s your design debt.&lt;/p&gt;
&lt;p&gt;Spend a week on that before you touch your prompt engineering or your fine-tuning pipeline. The UX problems are costing you more users than the model quality is.&lt;/p&gt;
&lt;p&gt;If you want to go deeper on the AI engineering side - how the systems actually get built, what the architecture decisions look like from someone who also designs the interfaces - check out &lt;a href=&quot;https://blog.deeflect.com/08-prompt-eng-dead/&quot;&gt;what replaced prompt engineering&lt;/a&gt; for more technical posts. The design-to-engineering gap is a topic I keep coming back to because I keep seeing it break products that should work.&lt;/p&gt;
&lt;p&gt;Fix the interface. The model will get better on its own. The UX won&apos;t.&lt;/p&gt;
</content:encoded><media:content url="https://blog.deeflect.com/medium-img/03-ai-bad-ux.jpg" medium="image" type="image/jpeg"/><media:thumbnail url="https://blog.deeflect.com/medium-img/03-ai-bad-ux.jpg"/><enclosure url="https://blog.deeflect.com/medium-img/03-ai-bad-ux.jpg" length="94470" type="image/jpeg"/></item><item><title>How ADHD and AI Work Together (My Real Stack)</title><link>https://blog.deeflect.com/02-adhd-and-ai/</link><guid isPermaLink="true">https://blog.deeflect.com/02-adhd-and-ai/</guid><description>Scored 147 on RAADS-R and 38 on AQ-50 (autism), plus ADHD. Here&apos;s how I built AI systems that work with my brain, not against it. Real stack, real workflows.</description><pubDate>Tue, 08 Jul 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://blog.deeflect.com/medium-img/02-adhd-and-ai.jpg&quot; alt=&quot;How ADHD and AI Work Together (My Real Stack)&quot; /&gt;&lt;/p&gt;
&lt;p&gt;I scored 147 on the RAADS-R and 38 on the AQ-50 - both autism screening tests, not ADHD. But I have ADHD too. The combo means my brain is running two different operating systems at once, neither of which came with a manual. I&apos;ve known for years that my brain works differently, but seeing the numbers made something click.&lt;/p&gt;
&lt;p&gt;How ADHD and AI work together - that&apos;s become the actual question I&apos;ve spent the last year building answers to. Not &quot;how do I fix my ADHD&quot; and not &quot;how do I force myself to be more productive.&quot; More like: where are the exact gaps, and can software patch them?&lt;/p&gt;
&lt;p&gt;Short answer: yes. Not all of them. But enough to matter.&lt;/p&gt;
&lt;h2&gt;What ADHD actually costs (it&apos;s not what productivity gurus think)&lt;/h2&gt;
&lt;p&gt;The mainstream narrative is that ADHD means you&apos;re distracted and you need to focus better. That&apos;s a useless frame. The real problem is &lt;strong&gt;executive function failure&lt;/strong&gt; - the part of your brain that handles task initiation, working memory, time perception, and emotional regulation around boring tasks.&lt;/p&gt;
&lt;p&gt;Concretely, that looks like this for me:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I forget things. Not occasionally. Constantly. Including things I cared about 20 minutes ago.&lt;/li&gt;
&lt;li&gt;I start projects in hyperfocus bursts and sometimes walk away mid-sentence when the dopamine dries up.&lt;/li&gt;
&lt;li&gt;I have a productive window from roughly 11am to 2pm. After 2pm I crash. Creative work comes back around 7pm. This isn&apos;t laziness - it&apos;s a real energy curve that I&apos;ve tracked across years.&lt;/li&gt;
&lt;li&gt;Decision fatigue hits me hard. By 3pm, choosing between two options of roughly equal weight can genuinely stall me for 30 minutes.&lt;/li&gt;
&lt;li&gt;Calls destroy my flow state. I&apos;ve worked async-only since I started freelancing at 14 because traditional structure never fit.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;None of this is fixed by a better to-do list app. I&apos;ve tried every productivity system. GTD, time blocking, Notion templates, physical planners - all failed because they assume linear execution, consistent motivation, and that you&apos;ll remember to check the system. ADHD brains don&apos;t do any of those things reliably.&lt;/p&gt;
&lt;p&gt;What AI does is different. It meets you where you are instead of where you should be.&lt;/p&gt;
&lt;h2&gt;How ADHD and AI work together in practice&lt;/h2&gt;
&lt;p&gt;I run a multi-agent system called OpenClaw. One of the agents is borb - that&apos;s my day-to-day assistant, and it&apos;s the piece that&apos;s changed how I work more than anything else in the last two years.&lt;/p&gt;
&lt;p&gt;The key insight: &lt;strong&gt;AI doesn&apos;t need you to have executive function. It has its own.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Borb maintains memory files. When I forget what I was doing - and I will forget - it has a record. When I say &quot;remind me to follow up on this,&quot; it doesn&apos;t forget. When I ask the same question for the third time, it answers without judgment. That last part is underrated. Executive dysfunction comes with a lot of shame. An agent that just answers, every time, without the sigh or the &quot;didn&apos;t we talk about this?&quot; - that&apos;s genuinely useful.&lt;/p&gt;
&lt;p&gt;The workflows that actually stuck:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Morning state load&lt;/strong&gt; - borb checks my reminders, pulls calendar events, and gives me a plain-English summary of what&apos;s in front of me. I don&apos;t have to go hunting across four apps to reconstruct what today looks like. It&apos;s already there. This sounds small. It is not small. Starting the day without that reconstruction overhead means I hit my 11am-2pm window with actual energy instead of spending it getting oriented.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Building&lt;/strong&gt; - I describe what I want in rough terms, the agent scaffolds the structure, and then I hyperfocus on the interesting parts. I&apos;ve talked about this in &lt;a href=&quot;https://blog.deeflect.com/04-seven-apps/&quot;&gt;building 7 apps at once&lt;/a&gt; - the ADHD pattern of &quot;start fast, lose steam&quot; becomes less destructive when the boring scaffolding is already done. The fun parts stay fun. The scaffolding doesn&apos;t require motivation.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Writing&lt;/strong&gt; - AI drafts, I edit. Editing is dramatically easier than a blank page for an ADHD brain. The blank page has infinite options and zero constraints. A draft has something to react to. Even a mediocre draft gives me a direction to push against, and pushing against things is something my brain can do.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Research&lt;/strong&gt; - This one might be the biggest one. I used to fall down 3-hour rabbit holes when I needed to look something up. Not because I was being inefficient - because that&apos;s what an ADHD brain does when it hits something interesting. Now I say &quot;look into X and summarize it&quot; and get back a usable synthesis in 10 minutes. The rabbit hole still exists. I&apos;m just not in it.&lt;/p&gt;
&lt;h2&gt;Why ADHD and AI work together better than any productivity system I&apos;ve tried&lt;/h2&gt;
&lt;p&gt;There&apos;s a reason GTD and every app built on top of it eventually fails for ADHD brains. The research on this is pretty clear - executive function deficits aren&apos;t a motivation problem, they&apos;re a &lt;a href=&quot;https://www.additudemag.com/executive-function-disorder-adhd-brain/&quot;&gt;neurological regulation problem&lt;/a&gt;. Systems that require you to consistently initiate, remember to check in, and maintain motivation to follow through are asking the exact thing the ADHD brain struggles with most.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.deeflect.com/medium-img/02-adhd-and-ai-1.jpg&quot; alt=&quot;Why ADHD and AI work together better than any productivity system I&apos;ve tried&quot; /&gt;&lt;/p&gt;
&lt;p&gt;AI sidesteps that loop in a way static systems can&apos;t. A to-do app is passive. It waits for you. An AI agent can be active - it surfaces things, drafts things, reduces the next action to something trivially small. That difference is the whole game.&lt;/p&gt;
&lt;p&gt;The clinical picture backs this up too. Research from &lt;a href=&quot;https://www.additudemag.com/slideshows/adhd-executive-function-deficits/&quot;&gt;ADDitude Magazine&apos;s medical review board&lt;/a&gt; consistently shows that external scaffolding - someone or something that holds structure on your behalf - is one of the most effective accommodations for executive dysfunction. That&apos;s what ADHD coaches do. That&apos;s what a good EA does. AI can do a version of it at a fraction of the cost, 24 hours a day, without the social friction of asking a human for help again.&lt;/p&gt;
&lt;p&gt;The difference between those external scaffolding approaches and AI: AI doesn&apos;t get tired of you.&lt;/p&gt;
&lt;h2&gt;The 90-day planning system I actually use&lt;/h2&gt;
&lt;p&gt;One of the more structured things I built is a multi-model planning system for quarterly work. I run it through Claude, Perplexity, and DeepSeek because they think differently.&lt;/p&gt;
&lt;p&gt;Here&apos;s the rough structure:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# Run planning session across models
# Claude: strategic framing and goal coherence
# Perplexity: research-backed context on what&apos;s realistic
# DeepSeek: adversarial review - what did I miss, what&apos;s wishful thinking
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Claude does the strategic layer - takes my rough &quot;here&apos;s what I want to do this quarter&quot; and shapes it into something coherent with actual priorities. Perplexity pulls external context - market stuff, comparable benchmarks, anything grounding. DeepSeek punches holes in it. Tells me where I&apos;m being optimistic, where the plan assumes consistent motivation that I won&apos;t have.&lt;/p&gt;
&lt;p&gt;The output is a quarterly plan that&apos;s actually calibrated to how I work, not how I should work. It accounts for the energy curve. It front-loads high-executive-function tasks to the 11am-2pm window. It builds in slack because I will start a side project mid-quarter.&lt;/p&gt;
&lt;p&gt;This cost me maybe $3 in API calls. ADHD coaches charging $500/month are selling something similar - someone to help you structure the chaos. The AI version doesn&apos;t replace the human relationship, but it does the structural work well enough that I stopped needing the coach.&lt;/p&gt;
&lt;h2&gt;What still doesn&apos;t work&lt;/h2&gt;
&lt;p&gt;I want to be honest here because this is where most &quot;ADHD and productivity&quot; content fails - everything sounds like it works great.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.deeflect.com/medium-img/02-adhd-and-ai-2.jpg&quot; alt=&quot;What still doesn&apos;t work&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Most AI productivity tools are built by neurotypical people for neurotypical people. They assume:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You&apos;ll check the app on a schedule&lt;/li&gt;
&lt;li&gt;That once you&apos;ve planned something, you&apos;ll follow the plan&lt;/li&gt;
&lt;li&gt;That motivation is a dial you can turn up&lt;/li&gt;
&lt;li&gt;That reminders are sufficient to trigger action&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;None of that is true for ADHD brains. A reminder I ignore three times isn&apos;t a reminder problem - it&apos;s a task initiation problem. The reminder sees the symptom and treats it by making more symptoms.&lt;/p&gt;
&lt;p&gt;The AI tools that work for me are the ones that do the task or reduce it to the smallest possible action. The ones that fail are the ones that just tell me about the task more times. &quot;You have 5 overdue items&quot; is not useful. &quot;I drafted an email for item 3, want me to send it?&quot; is useful.&lt;/p&gt;
&lt;p&gt;The other failure mode: AI planners that generate beautiful structured plans I&apos;ll never look at again. I&apos;ve built these myself. They&apos;re impressive to screenshot, useless in practice. A plan I&apos;ll actually use is ugly, has a lot of slack built in, and survives contact with a day where I wake up unable to do hard things. Most AI-generated plans look like they were made for someone who executes flawlessly and never has a 2pm crash.&lt;/p&gt;
&lt;h2&gt;The design principle underneath all of this&lt;/h2&gt;
&lt;p&gt;The best automations I&apos;ve built are invisible. They give me back the cognitive capacity I was spending on logistics, and I don&apos;t notice them working - I just notice I&apos;m less exhausted.&lt;/p&gt;
&lt;p&gt;That&apos;s the principle I use now when deciding whether to build a new automation: does this return brain capacity, or does it just offload a task I didn&apos;t care about?&lt;/p&gt;
&lt;p&gt;Offloading boring tasks is fine. But the real value is when an automation handles something that was eating working memory - that background process running in my head that&apos;s tracking ten things at once. When borb maintains my memory files, I&apos;m not the one holding context across sessions. That background process is freed up. That&apos;s where it gets actually useful.&lt;/p&gt;
&lt;p&gt;The principle maps to AI broadly: don&apos;t use it to do more things. Use it to think fewer thoughts you didn&apos;t want to be thinking.&lt;/p&gt;
&lt;h2&gt;How I&apos;d actually start if I were building this from scratch&lt;/h2&gt;
&lt;p&gt;If you&apos;re ADHD and you&apos;ve read this far, here&apos;s the concrete version:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Pick one gap&lt;/strong&gt; - not &quot;I want to be more productive.&quot; Pick the specific thing that burns the most energy. For me it was morning orientation. For you it might be task switching, or research rabbit holes, or writing block.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Build the smallest intervention&lt;/strong&gt; - don&apos;t automate your whole life. Build one thing that addresses one gap. If it sticks, expand it. If it doesn&apos;t, the cost was low.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Make it push, not pull&lt;/strong&gt; - tools you have to check don&apos;t work for ADHD. Tools that surface things to you do. The difference between &quot;you should open the app&quot; and &quot;here&apos;s your summary in Slack at 9am&quot; is the difference between a system I use and one I abandon.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Use the right model for the task&lt;/strong&gt; - I wrote more about my AI engineering stack in the &lt;a href=&quot;https://blog.deeflect.com/tags&quot;&gt;tags section&lt;/a&gt; if you want to see the breakdown. Fast cheap models for logistics, more capable models for judgment calls. Don&apos;t run GPT-4-class inference for reminders.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Don&apos;t trust AI planning apps&lt;/strong&gt; - build your own, even if it&apos;s rough. An &lt;a href=&quot;https://n8n.io&quot;&gt;n8n&lt;/a&gt; workflow or a cron job calling an API isn&apos;t glamorous but it works because you designed it around your actual workflow, not a generic one.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Start with memory before anything else&lt;/strong&gt; - the single highest-leverage thing AI can do for an ADHD brain is hold context you&apos;d otherwise lose. A markdown file your agent reads and updates is worth more than any reminder system.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The real unlock was accepting that I&apos;m not going to become a different person with a different brain. The goal is building systems that work for this brain. AI is the first category of tool where that&apos;s actually been possible at the software layer.&lt;/p&gt;
&lt;p&gt;If you&apos;re somewhere on the spectrum of neurodivergence and you&apos;ve been grinding through systems that don&apos;t fit - this is worth trying. Not because AI fixes it. Because for the first time, the tools can be weird enough to match how you actually work.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://blog.deeflect.com/06-coding-stack/&quot;&gt;my coding stack&lt;/a&gt; I run is open in spirit if not fully in docs. If you want to talk about how to build something similar, I&apos;m usually in the comments or findable.&lt;/p&gt;
</content:encoded><media:content url="https://blog.deeflect.com/medium-img/02-adhd-and-ai.jpg" medium="image" type="image/jpeg"/><media:thumbnail url="https://blog.deeflect.com/medium-img/02-adhd-and-ai.jpg"/><enclosure url="https://blog.deeflect.com/medium-img/02-adhd-and-ai.jpg" length="73267" type="image/jpeg"/></item><item><title>Why I Left My Role as Solo Product Designer at VALK</title><link>https://blog.deeflect.com/01-quit-fintech/</link><guid isPermaLink="true">https://blog.deeflect.com/01-quit-fintech/</guid><description>I was the only designer at a $4B+ fintech platform for 5 years. Here&apos;s the real reason I left in 2025 and what I&apos;m building now.</description><pubDate>Sun, 22 Jun 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://blog.deeflect.com/medium-img/01-quit-fintech.jpg&quot; alt=&quot;Why I Left My Role as Solo Product Designer at VALK&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Five years is a long time to stay anywhere. And if you want to understand why I left my role as solo product designer at VALK, the honest answer isn&apos;t dramatic. No blowup. No better offer waiting. Just a quiet realization, somewhere around late 2024, that the thing exciting me most wasn&apos;t the thing paying me. I&apos;d been the only designer at VALK - now rebranded to datai - for five years and two months before I walked away in February 2025.&lt;/p&gt;
&lt;p&gt;This is the first thing I&apos;ve written for this blog, so bear with me finding the voice. I&apos;ll just tell you what actually happened.&lt;/p&gt;
&lt;h2&gt;What VALK was, and why it mattered&lt;/h2&gt;
&lt;p&gt;When I joined VALK in November 2019 I was the only designer. Not &quot;lead designer with a team underneath&quot; - actually the only one. Every pixel that shipped went through me.&lt;/p&gt;
&lt;p&gt;The platform was built on &lt;a href=&quot;https://www.r3.com/corda/&quot;&gt;R3&apos;s Corda blockchain&lt;/a&gt; for institutional digital assets. Private markets, illiquid assets, end-to-end transaction infrastructure for the kind of clients who don&apos;t mess around - 70+ financial institutions — investment banks, hedge funds, and asset managers — across 15+ countries. $4B+ in deals managed on a platform I designed.&lt;/p&gt;
&lt;p&gt;I built the design system from scratch. The full transaction platform UX. A DeFi analytics product called Merlin that eventually pulled in 50K+ unique visitors and monitored $5B+ in portfolios. The company won multiple industry awards including Sell-Side Technology and Asset Management recognitions, and got covered in financial industry press.&lt;/p&gt;
&lt;p&gt;I&apos;m not listing those numbers to brag. I&apos;m listing them because they matter for understanding what I walked away from. This wasn&apos;t a struggling startup I was escaping. The work was good. The platform worked. The clients were real institutions moving real money.&lt;/p&gt;
&lt;p&gt;And I still left.&lt;/p&gt;
&lt;h2&gt;The boredom nobody talks about&lt;/h2&gt;
&lt;p&gt;Here&apos;s the thing about being solo designer at a B2B fintech for five years: you get really, really good at a very specific thing.&lt;/p&gt;
&lt;p&gt;Institutional dashboards. Transaction flows. Data tables with 40 columns. Compliance screens. The UX patterns for &quot;a hedge fund analyst needs to review a digital bond issuance at 2am from their phone&quot; - I know that problem deeply. I could design it in my sleep, and toward the end, I basically was.&lt;/p&gt;
&lt;p&gt;By 2024 I could sit down in Figma, design a complex fintech feature, spec it for the engineers, and write the documentation in a day. What used to take a week took a day. That sounds like growth but it&apos;s actually a yellow flag. When the difficulty drops that far below your current skill level, you&apos;re not learning anymore - you&apos;re executing.&lt;/p&gt;
&lt;p&gt;The work was technically solid. I just stopped caring about it.&lt;/p&gt;
&lt;p&gt;That&apos;s uncomfortable to say because VALK was a genuinely good product doing genuinely important infrastructure work. The people weren&apos;t the problem. The exit wasn&apos;t bad vibes - it was boredom and curiosity pulling harder than comfort.&lt;/p&gt;
&lt;h2&gt;When I started noticing the gap&lt;/h2&gt;
&lt;p&gt;March 2023. That&apos;s when I started doing AI work on the side.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.deeflect.com/medium-img/01-quit-fintech-1.jpg&quot; alt=&quot;When I started noticing the gap&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Not because I had a plan. Because ChatGPT had just dropped and I couldn&apos;t stop thinking about what it could do. I started building small things - automation workflows, prompt systems, early agent prototypes. Nothing production-ready, just me poking at a new technology the same way I used to poke at new design tools.&lt;/p&gt;
&lt;p&gt;The difference was how it felt. I was doing side projects at 2am and not feeling tired. That&apos;s the tell. When you&apos;re doing something that doesn&apos;t drain you even when it should, pay attention.&lt;/p&gt;
&lt;p&gt;By mid-2023 I was building autonomous agents with custom personalities for community management and content creation. End-to-end automation workflows in &lt;a href=&quot;https://n8n.io/&quot;&gt;n8n&lt;/a&gt; and custom Python. AI-powered music generation pipelines stacking GPT-4 + Suno + Midjourney + ElevenLabs into something that actually sounded like it was made by a person. Not demos - working systems I was shipping and iterating on.&lt;/p&gt;
&lt;p&gt;Meanwhile at VALK, I was designing another data table.&lt;/p&gt;
&lt;p&gt;The gap between the two tracks kept widening. By late 2024 it was obvious. I wasn&apos;t going to close it while staying in the same seat.&lt;/p&gt;
&lt;h2&gt;Why I didn&apos;t leave sooner&lt;/h2&gt;
&lt;p&gt;Honest answer: salary, stability, and the sunk cost of being good at something.&lt;/p&gt;
&lt;p&gt;Five years of context in a product is genuinely valuable. I knew every edge case, every integration, every place the design system had technical debt. Starting over in something new meant being a beginner again - and being a beginner doesn&apos;t pay the same as being the person who built the whole thing.&lt;/p&gt;
&lt;p&gt;There&apos;s also a particular trap that hits people who are technically capable: you can justify staying because the work isn&apos;t bad. It&apos;s not bad. It&apos;s just not growing you. &quot;Not bad&quot; is a terrible reason to stay somewhere, but it&apos;s a compelling one in the moment.&lt;/p&gt;
&lt;p&gt;I also had no clear destination. &quot;I want to do more AI stuff&quot; isn&apos;t a career plan. I didn&apos;t have a product to go build, a company to join, or a client waiting. Just a direction. That&apos;s terrifying when you&apos;re used to a steady paycheck.&lt;/p&gt;
&lt;p&gt;What finally tipped it was realizing I was doing the interesting work anyway - just not getting paid for it, and not going deep enough on it because I was saving bandwidth for the job. I had to make a choice about which track was real.&lt;/p&gt;
&lt;h2&gt;What actually made it hard to leave&lt;/h2&gt;
&lt;p&gt;This isn&apos;t a story about walking away from a soul-crushing corporate grind. I want to be clear about that because those stories are everywhere and this isn&apos;t one of them.&lt;/p&gt;
&lt;p&gt;VALK was a legitimately good place to work. Async-first by nature - I&apos;ve been no-calls only for years, and that environment respected it. The team was small and technical. The problem domain was interesting. I had real ownership over a real product.&lt;/p&gt;
&lt;p&gt;The hard part was that I was leaving something good. Not escaping something bad. That&apos;s a different emotional math.&lt;/p&gt;
&lt;p&gt;When you leave something bad, there&apos;s relief. When you leave something good, there&apos;s mostly just uncertainty. You&apos;re trading a known quantity for a direction.&lt;/p&gt;
&lt;p&gt;I also felt something like guilt about my design craft. Five years of building that specific muscle - institutional fintech UX, complex data visualization, multi-jurisdictional compliance patterns - and I was shelving it. That felt like waste. It took me a while to see that the design background wasn&apos;t being shelved, it was being folded into something new. But I didn&apos;t have that clarity on the way out.&lt;/p&gt;
&lt;h2&gt;Why I left my role as solo product designer at VALK: the honest version&lt;/h2&gt;
&lt;p&gt;People want a clean narrative when someone makes a big change. The &quot;I had an epiphany&quot; story, or the &quot;the company changed&quot; story, or the &quot;I always knew I&apos;d do this eventually&quot; story.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.deeflect.com/medium-img/01-quit-fintech-2.jpg&quot; alt=&quot;Why I left my role as solo product designer at VALK: the honest version&quot; /&gt;&lt;/p&gt;
&lt;p&gt;None of those fit.&lt;/p&gt;
&lt;p&gt;The real reason I left my role as solo product designer at VALK after five years is genuinely mundane: I felt like a dinosaur. The world was changing fast, I was sitting still, and I couldn&apos;t make peace with that.&lt;/p&gt;
&lt;p&gt;AI wasn&apos;t an abstraction to me by then - I&apos;d been building with it for almost two years on the side. I knew what was possible. I knew what I could build if I went all-in. And I knew that every month I stayed was a month I wasn&apos;t building those things at the depth they deserved.&lt;/p&gt;
&lt;p&gt;That&apos;s it. No grand vision. No ten-year plan. Just the thing that excited me most wasn&apos;t the thing paying me, and eventually that gap gets too loud to ignore.&lt;/p&gt;
&lt;h2&gt;What came next&lt;/h2&gt;
&lt;p&gt;February 2025 I went full AI specialist.&lt;/p&gt;
&lt;p&gt;The work I&apos;ve been doing since: building multi-agent systems, OSS CLI tooling, automation workflows that actually handle real complexity. My crypto background from 2021 - contributed to several successful multimillion-dollar token launches - means I&apos;m not new to the intersection of technical infrastructure and product. The combination of design, AI engineering, and crypto is genuinely rare and I&apos;m still figuring out how to use it.&lt;/p&gt;
&lt;p&gt;What I&apos;m not doing is pretending I have it figured out. Sustainable income without a salary is a real problem I&apos;m actively working on. The freedom to build what I want comes with the anxiety of not knowing what next month looks like. That trade is live and unresolved.&lt;/p&gt;
&lt;p&gt;What I do know: I&apos;m not bored. I sit down to work and lose track of time. That&apos;s the benchmark I didn&apos;t know I was missing until I had it back.&lt;/p&gt;
&lt;h2&gt;If you&apos;re in a similar spot&lt;/h2&gt;
&lt;p&gt;I&apos;m not going to tell you to quit your job and follow your passion. That&apos;s not advice, that&apos;s a bumper sticker.&lt;/p&gt;
&lt;p&gt;What I will say: if you&apos;re doing the interesting work anyway - on nights and weekends, in the gaps between the real job - that&apos;s data. You&apos;re already telling yourself what you want. The question is whether you&apos;re listening.&lt;/p&gt;
&lt;p&gt;The gap between what I was doing at VALK and what I could build with AI was too wide. For me, the answer was to close it. Your math might be different.&lt;/p&gt;
&lt;p&gt;But &quot;not bad&quot; is not the same as &quot;right.&quot; Know the difference.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;If you want to follow what I&apos;m building from here - multi-agent systems, AI tooling, the whole mess of going independent - this blog is where I&apos;ll document it. You can read more &lt;a href=&quot;https://blog.deeflect.com/02-adhd-and-ai/&quot;&gt;ADHD and AI&lt;/a&gt;, or browse by &lt;a href=&quot;https://blog.deeflect.com/03-ai-bad-ux/&quot;&gt;why most AI products have bad UX&lt;/a&gt; if you want to find something specific.&lt;/p&gt;
</content:encoded><media:content url="https://blog.deeflect.com/medium-img/01-quit-fintech.jpg" medium="image" type="image/jpeg"/><media:thumbnail url="https://blog.deeflect.com/medium-img/01-quit-fintech.jpg"/><enclosure url="https://blog.deeflect.com/medium-img/01-quit-fintech.jpg" length="88113" type="image/jpeg"/></item><item><title>When design stops being enough</title><link>https://blog.deeflect.com/valk-18-career-stops-being-about-design/</link><guid isPermaLink="true">https://blog.deeflect.com/valk-18-career-stops-being-about-design/</guid><description>After 5 years as VALK&apos;s sole designer, I realized I want to build, not just design. On the gap between what I designed and what shipped  -  and what comes next.</description><pubDate>Mon, 16 Sep 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;There&apos;s a specific kind of dissatisfaction that&apos;s hard to name when you&apos;re in the middle of it. It&apos;s not burnout, I&apos;ve had burnout, I know what that feels like. It&apos;s not boredom either. It&apos;s more like... you&apos;ve been very good at a thing for a long time, and one day you realize the thing itself has stopped being enough.&lt;/p&gt;
&lt;p&gt;I&apos;ve been sitting with this feeling for most of 2024. And I think I finally understand what it is.&lt;/p&gt;
&lt;p&gt;I don&apos;t want to just design anymore. I want to build.&lt;/p&gt;
&lt;h2&gt;Five years is a long time to stare at the same product&lt;/h2&gt;
&lt;p&gt;I joined VALK in November 2019. I was 23, fresh out of agency work in Moscow, excited to go deep on a single product after years of jumping between clients every few weeks. The fintech world was new to me, I didn&apos;t know the difference between a cap table and a spreadsheet, and asset tokenization sounded like science fiction.&lt;/p&gt;
&lt;p&gt;Five years later, I understand institutional capital markets well enough to have real opinions about them. I&apos;ve designed and redesigned the same core flows so many times I can sketch the investor onboarding funnel from memory. I watched the product grow from basic deal management into white-label infrastructure for 70+ financial institutions. I&apos;ve seen us launch Merlin, watched it grow, watched it pivot, watched everything pivot eventually.&lt;/p&gt;
&lt;p&gt;And somewhere in all of that, something shifted in me.&lt;/p&gt;
&lt;p&gt;The honest version: I&apos;ve spent years designing features that then went through a long, complicated relay, me to engineers, engineers to staging, staging to QA, QA back to engineers, then eventually to production, and what shipped was rarely exactly what I had built in Figma. Not always worse. Sometimes different in ways that were actually fine. But always different. And the gap between the thing I made and the thing that existed in the world kept accumulating, specification by specification, interaction by interaction.&lt;/p&gt;
&lt;p&gt;At some point that gap stopped feeling like a normal part of the process and started feeling like a fundamental limitation of my role.&lt;/p&gt;
&lt;h2&gt;The Merlin Christmas thing changed something&lt;/h2&gt;
&lt;p&gt;In late 2022 we did a holiday campaign for Merlin, an NFT project, conceptually simple, but requiring actual frontend work and a smart contract. Dev resources weren&apos;t there to execute it. I ended up doing it myself.&lt;/p&gt;
&lt;p&gt;I built the frontend. I wrote the smart contract. It shipped.&lt;/p&gt;
&lt;p&gt;I&apos;m not going to pretend I suddenly became a senior engineer from that experience. There was a lot of documentation reading, a lot of trial and error, a lot of moments where I genuinely wasn&apos;t sure what I was doing. But it worked. Real users interacted with something I had built end-to-end, not just designed.&lt;/p&gt;
&lt;p&gt;That feeling was categorically different from shipping a design.&lt;/p&gt;
&lt;p&gt;When you design something, you&apos;re always an intermediary. Someone else has to interpret your decisions, implement your choices, handle the edge cases you may or may not have anticipated. You&apos;re producing instructions, not the thing itself. When I built the Merlin campaign myself, there was no translation layer. My decision, my implementation, directly in the world.&lt;/p&gt;
&lt;p&gt;That directness was addictive.&lt;/p&gt;
&lt;p&gt;I started paying more attention to the code that lived alongside my designs. Reading pull requests. Asking our frontend engineers more specific questions, not just &quot;can we do this?&quot; but &quot;how would you do this, and what would make it easier?&quot; I started learning things I had no immediate professional use for, just because I was curious.&lt;/p&gt;
&lt;h2&gt;The &quot;designer who can build&quot; conversation is getting old&lt;/h2&gt;
&lt;p&gt;There&apos;s been a long-running discussion in design about whether designers should code. It&apos;s produced a lot of hot takes and not a lot of clarity. I&apos;ve held multiple positions on this over the years.&lt;/p&gt;
&lt;p&gt;At the agency, I thought it was mostly theoretical. Work was moving too fast for technical depth to matter, what mattered was producing good concepts quickly. At VALK, working on the same codebase for years and sitting in the same engineering conversations repeatedly, the practical argument became harder to ignore.&lt;/p&gt;
&lt;p&gt;The designers I admired most weren&apos;t the ones with the cleanest component libraries or the most beautiful interactions in Figma. They were the ones who could sit down with an engineer and say &quot;I understand why this is technically complicated, so let&apos;s find an approach that gives us 80% of the experience with 20% of the engineering cost.&quot; That&apos;s a conversation you can only have if you understand both sides.&lt;/p&gt;
&lt;p&gt;I&apos;ve gotten better at the engineering side through necessity, five years in a small team will do that, but I&apos;ve never fully crossed over. I want to cross over.&lt;/p&gt;
&lt;p&gt;Not to stop designing. Design thinking, the way of looking at problems, understanding what a user actually needs versus what they say they need, that doesn&apos;t leave you. It becomes part of how you see everything. I don&apos;t think I could turn that off if I tried.&lt;/p&gt;
&lt;p&gt;But I want the output to be something I built, not just something I handed off.&lt;/p&gt;
&lt;h2&gt;The ceiling that comes with being the only designer&lt;/h2&gt;
&lt;p&gt;There&apos;s a specific plateau that happens when you&apos;re a solo designer at a company for long enough. You get extremely good at reading the organization, at knowing what&apos;s possible, at speaking the language of every stakeholder. You become efficient in ways that are invisible, you stop designing things that will never get prioritized, you pre-negotiate constraints before they become conflicts, you develop a kind of institutional intelligence about the product.&lt;/p&gt;
&lt;p&gt;Genuinely valuable. Also a trap.&lt;/p&gt;
&lt;p&gt;Because the same familiarity that makes you efficient starts to limit what you&apos;re able to imagine. You know too much about what won&apos;t work. You&apos;ve heard too many reasons why something is complicated. You start designing within the organization&apos;s constraints before you&apos;ve even explored what&apos;s actually possible.&lt;/p&gt;
&lt;p&gt;I noticed this in myself over the past year. I&apos;d open a new design problem and my first instinct was already filtered, not by what would be best for the user, but by what I knew about the current architecture, the current team capacity, the current company priorities. That instinct was usually pragmatically correct. But it meant I had stopped designing at the edges of what was possible.&lt;/p&gt;
&lt;p&gt;That&apos;s the ceiling. And I don&apos;t think you can break through it by staying in the same place.&lt;/p&gt;
&lt;h2&gt;Looking at the whole arc&lt;/h2&gt;
&lt;p&gt;I started freelancing at 14. Designing logos and WordPress themes for small clients in Russia, learning everything from forums and tutorials, figuring out what worked by watching what people responded to. By 19 I was doing professional UX work. By 22 I was lead designer at an agency in Moscow, running design on 50+ projects, working with companies like Kaspersky and OTPBank.&lt;/p&gt;
&lt;p&gt;When I joined VALK at 23 I thought I was stepping into the next chapter, and I was. But looking at the arc now, I can see a pattern: I&apos;ve always moved forward by expanding what I do, not just getting better at a narrower thing.&lt;/p&gt;
&lt;p&gt;Freelance to agency wasn&apos;t just a change in scale. It was a different kind of work, different relationships, different skills. Agency to product design wasn&apos;t just a slower pace, it required learning to care about a single product deeply, to think in systems instead of sprints. Each transition felt uncomfortable and slightly too ambitious at the time, and obvious in retrospect.&lt;/p&gt;
&lt;p&gt;I think I&apos;m at another one of those moments.&lt;/p&gt;
&lt;h2&gt;What the next version looks like (I don&apos;t entirely know yet)&lt;/h2&gt;
&lt;p&gt;I&apos;ll be honest: I don&apos;t have a fully formed plan. I&apos;m still inside the thing, still at VALK, still doing my job, and thinking about what comes next mostly in the early mornings before work or late at night when I should probably be sleeping.&lt;/p&gt;
&lt;p&gt;What I know is that I want to spend more time building and less time describing what should be built. I want to be in environments where the gap between design and implementation is smaller, either because I&apos;m doing both, or because the team structure makes that gap less of an obstacle. Work on problems where my understanding of how to make things look and feel useful still matters, but where I&apos;m not the last person before handoff.&lt;/p&gt;
&lt;p&gt;I&apos;ve been playing with development tools more seriously over the past year. Not to become an engineer, the learning curve is steep and I respect what proper engineers do too much to claim their title after a few months of experimentation. But to understand enough to participate differently. To be less of an instruction-giver and more of a collaborator who can sit alongside the code.&lt;/p&gt;
&lt;p&gt;The role of &quot;designer who only designs&quot; is compressing. The purely pixel-pushing role, the person who exists only to produce Figma files for others to implement, that&apos;s a narrower and narrower space to occupy. The designers who are staying actually relevant, not just employed, are the ones who understand the systems they&apos;re designing for.&lt;/p&gt;
&lt;p&gt;I&apos;ve always been more systems-oriented than aesthetics-oriented. I care about how the thing works more than how it looks, even though making it look right matters enormously to me. That instinct might translate well.&lt;/p&gt;
&lt;h2&gt;What VALK gave me that I didn&apos;t expect&lt;/h2&gt;
&lt;p&gt;I want to be clear about something: I&apos;m not leaving frustrated. I&apos;m leaving having learned more than I thought was possible in a single job.&lt;/p&gt;
&lt;p&gt;I learned an entire industry. I went from not understanding what a data room was to having genuine opinions about how institutional investors think about risk. I designed for users who manage billions of dollars of capital, and I had to think carefully about what trust means at that scale, what makes someone comfortable committing to a transaction in a product you built.&lt;/p&gt;
&lt;p&gt;I learned to work without much structure. Small team, enormous scope, constantly changing priorities. You either develop judgment quickly or you produce the wrong things. I developed judgment.&lt;/p&gt;
&lt;p&gt;And I learned that the thing I designed and the thing that shipped will never be identical, and that&apos;s not a failure, it&apos;s the nature of collaborative work. But the closer I can get to the implementation, the smaller that gap becomes.&lt;/p&gt;
&lt;p&gt;I&apos;m grateful for all of it. Genuinely.&lt;/p&gt;
&lt;h2&gt;On writing this blog for four years&lt;/h2&gt;
&lt;p&gt;I started kargaev. me as a personal outlet. Somewhere to think through problems out loud, to process what I was learning, to write for an audience of roughly zero and occasionally be surprised that someone found it useful.&lt;/p&gt;
&lt;p&gt;I&apos;ve been inconsistent. Months where I published nothing, months where I wrote three things in a week. The quality varies. Some of the early posts I reread now and notice the awkward phrasing, the grammatical choices that give away that English is my second language, the slightly over-formal tone of someone writing in their non-native tongue.&lt;/p&gt;
&lt;p&gt;But I kept writing. Because the act of trying to explain something forces you to understand it better. And because every so often someone would send a message saying a post helped them think through something they were struggling with, and that was enough to keep going.&lt;/p&gt;
&lt;p&gt;I don&apos;t know exactly what the next chapter is yet. I know it involves building more and designing differently, and figuring out what I want to do with everything I&apos;ve accumulated over the past decade.&lt;/p&gt;
&lt;p&gt;I&apos;ll probably write about it.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Originally published on kargaev.me. Imported to blog.deeflect.com archive.&lt;/em&gt;&lt;/p&gt;
</content:encoded></item><item><title>The unglamorous work that makes design real</title><link>https://blog.deeflect.com/valk-17-unglamorous-design-work/</link><guid isPermaLink="true">https://blog.deeflect.com/valk-17-unglamorous-design-work/</guid><description>Five years into product design at a fintech, the majority of my work is documentation, edge cases, and maintenance. This is what senior design actually looks like.</description><pubDate>Mon, 11 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;There&apos;s a Figma file sitting open on my second monitor right now. It has 2,347 frames. I know this because Figma tells me in the bottom-left corner, and I&apos;ve been watching that number grow for four years. Not because I&apos;m proud of it. It&apos;s just evidence of time.&lt;/p&gt;
&lt;p&gt;My Behance portfolio, which I haven&apos;t updated since 2021, shows a campaign microsite I built at Spacecode in 2017. Clean screens, gradient overlays, a case study that describes my &quot;approach to user-centered design.&quot; It has a few thousand views. The VALK work, five years of actual enterprise product design, the design system that scales across a white-label platform used by 70+ financial institutions, isn&apos;t on Behance. And even if I tried to put it there, I wouldn&apos;t know what to show. The interesting parts don&apos;t photograph well.&lt;/p&gt;
&lt;h2&gt;The stuff nobody posts on Dribbble&lt;/h2&gt;
&lt;p&gt;If you scroll Dribbble for fintech dashboard inspiration, you will see the same things: dark mode analytics screens with glowing charts, clean onboarding flows, pill-shaped buttons with just the right amount of padding. Everything is populated with beautiful sample data. Numbers that fit perfectly in their containers. Names that are exactly the right length.&lt;/p&gt;
&lt;p&gt;You will not see the screen that shows when a user tries to initiate a token transfer but the counterparty&apos;s jurisdiction is flagged by the compliance engine, and the user has two of their own documents expired, and the transaction is above the threshold that requires additional review, and we&apos;re not sure if we should show one error or three or a combined message that explains the compound problem without creating legal exposure.&lt;/p&gt;
&lt;p&gt;That&apos;s a real scenario I spent two days on. The final design is four lines of text and a link to a support page. It looks like nothing. It will never be on Dribbble.&lt;/p&gt;
&lt;h2&gt;The actual scope of a screen&lt;/h2&gt;
&lt;p&gt;Here&apos;s a habit that took me a while to build: when I add a new screen to the design system, I now immediately create a column of states beside it. Happy path, empty state, loading state, error state, partial data state, permission-restricted state, deprecated feature state for old clients who haven&apos;t migrated. Sometimes the permission-restricted state has three sub-states depending on user role.&lt;/p&gt;
&lt;p&gt;In a typical case study, someone shows you one screen. That&apos;s one out of maybe eight.&lt;/p&gt;
&lt;p&gt;The empty states are actually the ones I find most interesting now, micro-UX moments that most products completely abandon. An empty portfolio isn&apos;t just a blank table. It&apos;s someone who just signed up and has nothing yet, or it&apos;s an admin who cleared a category, or it&apos;s a filter combination that returned zero results, or it&apos;s a user who had data and it&apos;s been archived. Each one needs different copy and different next-action guidance. Treating them all the same is a visible failure in the product.&lt;/p&gt;
&lt;p&gt;I&apos;ve started writing the copy for empty states myself rather than leaving a placeholder for the content team. At our size, in our timezone situation, I&apos;m in LA, the rest of the team is in London, if I leave a content placeholder, it might sit there for three weeks while we cycle through Slack threads about it. Better to write something decent and refine it than to block the build on copy.&lt;/p&gt;
&lt;h2&gt;The timezone problem and what it does to documentation&lt;/h2&gt;
&lt;p&gt;The eight-hour gap between Los Angeles and London changes how design work actually happens. By the time I&apos;m fully awake and into focus, the London dev team has already had half their working day. If I send a message at 9am my time, they get it at 5pm theirs, end of day.&lt;/p&gt;
&lt;p&gt;This means every handoff note I write has to stand on its own. No &quot;ping me if you have questions&quot; as a safety net. If the annotation isn&apos;t clear, work stops or, worse, implementation happens based on a wrong assumption, and I find out the next day when I&apos;m looking at the build in staging.&lt;/p&gt;
&lt;p&gt;I&apos;ve become almost obsessive about handoff documentation as a result. Not in a precious way, just thorough. Every component in the Figma file has a sidebar annotation explaining the interaction, the constraint, the edge case. Every screen has a section for &quot;implementation notes&quot; that&apos;s separate from the design itself.&lt;/p&gt;
&lt;p&gt;Does the dev team always read it? Not always. But when something ships wrong, I can locate exactly where the communication broke down, and that&apos;s actually useful for improving the process. The annotations have gotten better over four years because I started tracking which kinds of ambiguity cause problems in implementation. Spacing is never the issue. State transitions are always the issue.&lt;/p&gt;
&lt;h2&gt;File organization is design work&lt;/h2&gt;
&lt;p&gt;A Figma file with 2,347 frames can be navigated in about twenty seconds if the organization is right. It can also be a complete nightmare that drives everyone away from using the file and back to &quot;just building from memory.&quot;&lt;/p&gt;
&lt;p&gt;We have pages organized by product area, then by feature, then by component library, then by archive. Every deprecated design goes into archive with a label and a date. Every in-progress screen lives on a page called &quot;WIP, [feature name], [my initials], [date].&quot; When it&apos;s ready for review, it gets moved to the feature page and the WIP page is deleted.&lt;/p&gt;
&lt;p&gt;This sounds boring to describe. It took three separate Slack threads over two weeks to agree on this system.&lt;/p&gt;
&lt;p&gt;The naming convention debate is a real thing that happens at real companies, and it&apos;s not stupid, it represents genuine disagreement about how work should be organized and who the primary audience of the file is. Designers? Developers? Stakeholders? We ended up with a system that slightly annoys everyone, which means it&apos;s probably close to right.&lt;/p&gt;
&lt;p&gt;The file organization is a design decision. If developers can&apos;t find the right frame, they&apos;ll find the wrong one. If the component library is messy, people stop using it and start building one-offs. A chaotic Figma file has a real downstream cost in implementation quality, and that cost is usually invisible because nobody traces a misimplemented UI back to the file structure that caused the confusion.&lt;/p&gt;
&lt;h2&gt;Accessibility annotations, the work after the design&lt;/h2&gt;
&lt;p&gt;Here&apos;s one I didn&apos;t do well in the early VALK years and have since tried to get more disciplined about: accessibility annotations in the design file.&lt;/p&gt;
&lt;p&gt;Not just &quot;make sure there&apos;s enough contrast.&quot; I mean the actual annotation layer that tells a developer the focus order of interactive elements on a complex dashboard, which elements need aria-labels and what those labels should be, how a screen reader should interpret a table with nested rows that represent different asset classes and their sub-holdings.&lt;/p&gt;
&lt;p&gt;Financial data interfaces have particular accessibility challenges because they&apos;re so dense. A screen that shows a client&apos;s portfolio isn&apos;t like a simple form, it&apos;s a hierarchy of relationships between entities, and the visual hierarchy is doing a lot of work that a screen reader can&apos;t replicate without guidance.&lt;/p&gt;
&lt;p&gt;I can&apos;t make those annotations exhaustive, there isn&apos;t time. But the key ones, on the key flows, matter. We&apos;ve shipped screens where the developer inferred the wrong reading order because the visual layout was complex and I hadn&apos;t annotated it. Those are the bugs that take longest to notice and longest to trace.&lt;/p&gt;
&lt;h2&gt;Maintenance as the main job&lt;/h2&gt;
&lt;p&gt;At some point in the last year, I realized that the majority of my design work is now maintenance rather than creation. New features require touching existing components. A layout change in one area ripples into three other areas. The design system needs to absorb a new pattern without breaking the consistency of everything built before it.&lt;/p&gt;
&lt;p&gt;This is what the fifth year of a product looks like. I don&apos;t think anyone warns you about it.&lt;/p&gt;
&lt;p&gt;Agency work, which I did at Spacecode for several years before VALK, is almost entirely creation. You&apos;re always working on something new. The brief is defined, you design to it, you hand it off, it ships, you move on. I did this for projects with Kaspersky, with OTPBank, with a dozen other clients. The product I&apos;m handing off is never my problem three weeks later.&lt;/p&gt;
&lt;p&gt;At a product company, you live with the decisions you made two years ago. That component I designed in 2020, I look at it now and I can see exactly what I was thinking and where I was wrong. The constraint I worked around in 2021 is now part of the furniture, and building anything new means working around it again.&lt;/p&gt;
&lt;p&gt;Maintenance is not lesser work. It requires a deeper understanding of the system than greenfield design. When I add a new state to an existing component, I have to know what every existing use of that component depends on, what will break, what will flex, what implicit assumptions developers have made based on the original design. This is harder than designing the component fresh.&lt;/p&gt;
&lt;p&gt;It just photographs terribly.&lt;/p&gt;
&lt;h2&gt;What senior design actually looks like&lt;/h2&gt;
&lt;p&gt;I&apos;ve been thinking about what &quot;senior&quot; means in the context of product design, because I&apos;m at an age and stage where I&apos;m supposed to have figured it out.&lt;/p&gt;
&lt;p&gt;My best guess: senior design is characterized by exactly these unglamorous things. The documentation. The edge cases. The accessibility pass. The handoff so good that a developer eight timezones away can implement it correctly without a single clarifying question.&lt;/p&gt;
&lt;p&gt;The flashy part, the thing that gets portfolio views and Dribbble follows, is maybe 20% of what I actually do. And it&apos;s the 20% that requires the least accumulated knowledge. Anyone can make a beautiful empty-state illustration. Fewer people can design the logic that determines which of your six empty states the user sees and why.&lt;/p&gt;
&lt;p&gt;I&apos;m not complaining. I&apos;m mostly just noting the gap between what design looks like from the outside and what it is from the inside. The gap is bigger than I expected when I started.&lt;/p&gt;
&lt;h2&gt;The portfolio problem&lt;/h2&gt;
&lt;p&gt;My Behance sits there, quietly outdated. I look at it sometimes and feel a mild existential discomfort. The work I&apos;m most proud of from my career is largely invisible. The tokenization platform I designed over five years has processed billions in transactions. The design system underpins a white-label product used by institutions across fifteen countries. None of this is postable in a way that generates Behance views.&lt;/p&gt;
&lt;p&gt;The agency work, the OTPBank app redesign, a few splash sites, some brand identities, those are the projects that look impressive in a scroll. They have before-and-after moments. Defined scope that fits in a slide.&lt;/p&gt;
&lt;p&gt;I don&apos;t have a solution to the portfolio problem. Maybe the people who hire senior product designers at serious companies understand that the visible portfolio is the least interesting part of the picture. Maybe they ask the right questions in interviews, how you handle edge cases, system maintenance, handoff documentation, and the Dribbble portfolio becomes almost irrelevant.&lt;/p&gt;
&lt;p&gt;Or maybe everyone just pretends the flashy work is the whole job and we all collectively agree not to post screenshots of our 47 error state variants.&lt;/p&gt;
&lt;p&gt;Either way, the work exists. The documentation is in the Figma file, annotated and organized, waiting for someone to implement it correctly. The edge cases are handled. The empty states say something useful.&lt;/p&gt;
&lt;p&gt;That&apos;s enough, even when it doesn&apos;t look like anything.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Originally published on kargaev.me. Imported to blog.deeflect.com archive.&lt;/em&gt;&lt;/p&gt;
</content:encoded></item><item><title>When your company pivots and your design work stops mattering</title><link>https://blog.deeflect.com/valk-16-company-pivots-design-irrelevant/</link><guid isPermaLink="true">https://blog.deeflect.com/valk-16-company-pivots-design-irrelevant/</guid><description>After 4 years as VALK&apos;s sole designer, a major pivot taught me what happens when the product you built quietly gets deprecated  -  and how to stay.</description><pubDate>Mon, 18 Dec 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;There&apos;s a specific kind of silence that comes after a pivot announcement. The Figma files don&apos;t delete themselves. The components are still there, organized in the same folder structure you spent weeks perfecting. The design system still loads. Everything looks exactly like it did yesterday. But you know, with quiet certainty, that most of it isn&apos;t going where you thought it was going.&lt;/p&gt;
&lt;p&gt;That silence has been my companion for most of 2023.&lt;/p&gt;
&lt;h2&gt;Four years of product work&lt;/h2&gt;
&lt;p&gt;I joined VALK in November 2019 as the only designer. No design system, no component library, no brand standards beyond a logo and a color. I built everything from scratch, the tokenization platform interfaces, deal management flows, investor dashboards, cap table tools. Every modal, every empty state, every error message. I made the decisions about spacing scales and typography and when to use a table versus a card layout. It was genuinely mine in a way that product work rarely is.&lt;/p&gt;
&lt;p&gt;When you&apos;re the sole designer at a company for four years, you develop a strange relationship with the product. You know where every skeleton is buried. You remember why that particular dropdown works the way it does, even though it looks weird, because of a compliance requirement that came in last-minute from a specific client. You carry four years of context in your head that isn&apos;t documented anywhere.&lt;/p&gt;
&lt;p&gt;That&apos;s a lot to hold.&lt;/p&gt;
&lt;h2&gt;The pivot&lt;/h2&gt;
&lt;p&gt;I&apos;m not going to pretend I didn&apos;t see it coming. The signals were there throughout 2023, conversations about market positioning, about where institutional blockchain was heading, about what VALK needed to become to stay relevant. Companies at this stage either find a bigger wedge or they stall. I understood the logic.&lt;/p&gt;
&lt;p&gt;The decision was to move toward DatAI Network, a significant reposition toward on-chain data infrastructure. It&apos;s a real strategic bet, not a vanity rebrand. I can see why the leadership made it.&lt;/p&gt;
&lt;p&gt;But here&apos;s what nobody really talks about: what happens to the designer when this happens?&lt;/p&gt;
&lt;p&gt;The brand for DatAI came from an external design agency. Which is fine, that&apos;s often the right call for a major rebrand. Agencies bring fresh perspective, they move fast on identity work, they don&apos;t have four years of internal baggage coloring every decision. I understand why you&apos;d go external.&lt;/p&gt;
&lt;p&gt;But then you hand that brand to the sole internal designer and say: adapt this to everything we need.&lt;/p&gt;
&lt;h2&gt;Becoming a brand adapter&lt;/h2&gt;
&lt;p&gt;My job description didn&apos;t change. My title didn&apos;t change. But the actual work changed substantially.&lt;/p&gt;
&lt;p&gt;For most of 2023, I spent roughly sixty percent of my time on presentations, slides, pitch decks, social media templates, and one-pagers. The product design work, the interfaces, the flows, the actual UX, became secondary. Sometimes it felt further back than that.&lt;/p&gt;
&lt;p&gt;The deck designer trap is something I&apos;d read about in passing but never thought I would fall into so hard. When I took this role in 2019, I imagined myself deep in interaction problems, thinking about how institutional investors process complex financial data, how to reduce cognitive load in a cap table view. And I did that work for years. It was the work I cared about.&lt;/p&gt;
&lt;p&gt;Investor presentations are not that work. Social media graphics are not that work. They require skill and they require care, I&apos;m not dismissing them, but they&apos;re not why I studied design. They&apos;re not the reason I spent nights in my early twenties reading about information architecture.&lt;/p&gt;
&lt;p&gt;Working with someone else&apos;s brand guidelines after you&apos;ve owned the brand for years is its own particular adjustment. The external agency did good work. The visual identity for DatAI is solid. But it&apos;s not mine, and adapting it feels like translating, I understand what they were going for, I can execute in their style, but I&apos;m not speaking my own language anymore.&lt;/p&gt;
&lt;p&gt;There&apos;s a small indignity in that. Nothing dramatic. Just a constant low hum of &quot;this isn&apos;t quite what I would have done.&quot;&lt;/p&gt;
&lt;h2&gt;The emotional reality of watching your product get deprecated&lt;/h2&gt;
&lt;p&gt;I want to try to describe what it actually feels like, because I haven&apos;t seen many designers write about this honestly.&lt;/p&gt;
&lt;p&gt;The VALK tokenization platform that I designed from 2019 to 2022, the one I sweated over, rebuilt the design system for twice, knew every edge case of, that product is not the future of this company. The Merlin DeFi tracker, which I designed and also did some of the frontend work for, is not the future either in its original form. These things still exist in some capacity but they&apos;re not where the investment is going.&lt;/p&gt;
&lt;p&gt;Intellectually, I know this is just how startups work. Products evolve, strategies shift, things you built get superseded. I&apos;ve seen it happen at other companies from the outside. Experiencing it from the inside, as the person who made those things, is different.&lt;/p&gt;
&lt;p&gt;It&apos;s a quiet kind of grief. Nobody died. The company is still alive, actually taking a direction that might work out well. But the product I spent four years caring about, the one I could navigate with my eyes closed, the one where I knew exactly why every decision was made, that product is quietly being set aside.&lt;/p&gt;
&lt;p&gt;You grieve it a little. I think you&apos;re supposed to.&lt;/p&gt;
&lt;p&gt;What helped me recognize this was talking to a friend outside of design who went through something similar when their team&apos;s project got cancelled. They said: &quot;The work was real even if the thing doesn&apos;t exist anymore.&quot; I&apos;ve been sitting with that. The work was real. The thinking was real. The solutions to real problems were real. The product moving in a different direction doesn&apos;t undo four years of craft.&lt;/p&gt;
&lt;p&gt;I mostly believe that. On good days I believe it completely.&lt;/p&gt;
&lt;h2&gt;What I&apos;m actually doing with the frustration&lt;/h2&gt;
&lt;p&gt;The healthy answer would be &quot;channeling it productively.&quot; The honest answer is: a mix of that and just feeling it.&lt;/p&gt;
&lt;p&gt;I&apos;ve become more rigorous about the work that is still mine. Even if sixty percent of my time is presentations, the forty percent that is product design gets more deliberate attention. When I do get to work on actual interface decisions for DatAI, I&apos;m more conscious of it. I document more carefully. I write down my reasoning in ways I didn&apos;t bother to earlier in my career when everything felt self-evident.&lt;/p&gt;
&lt;p&gt;I&apos;ve also gotten more honest with myself about what this period means professionally. Four years at one company is a long time, especially in this industry. I&apos;ve grown enormously here, I understand institutional finance in ways I couldn&apos;t have predicted when I was 23 and had never worked in fintech. I can read a cap table, have an actual conversation about tokenization mechanics, understand compliance constraints intuitively. That knowledge is real and it&apos;s mine regardless of what direction the company takes.&lt;/p&gt;
&lt;p&gt;But I&apos;m starting to think about what comes next. Not urgently, not with resentment. Just honestly. When a company pivots and the role quietly transforms into something different from what you signed up for, it&apos;s a reasonable moment to ask whether this is still the right place to be developing as a designer.&lt;/p&gt;
&lt;p&gt;I don&apos;t have a clear answer yet. But the question is there, and ignoring it would be worse than sitting with it.&lt;/p&gt;
&lt;h2&gt;Getting good at adapting someone else&apos;s vision&lt;/h2&gt;
&lt;p&gt;There is one thing I&apos;ve had to genuinely learn this year, and I want to give it credit rather than just frame it as frustration.&lt;/p&gt;
&lt;p&gt;Executing within someone else&apos;s brand system, when that system is good, is actually a real skill. The DatAI visual language has a logic to it, and understanding that logic well enough to extend it coherently is not nothing. I&apos;ve made hundreds of small decisions about how to apply their system to contexts the external agency never anticipated. Data table treatments, mobile breakpoints, slide layouts with very different content densities, loading states and error conditions.&lt;/p&gt;
&lt;p&gt;None of that is as satisfying as building the system from scratch. But it&apos;s not mindless either. It&apos;s a different kind of craft.&lt;/p&gt;
&lt;p&gt;I&apos;ve noticed that I&apos;m more opinionated about this kind of work than I expected to be. Even within external guidelines, there&apos;s room for judgment calls. What counts as &quot;on brand&quot; in an edge case isn&apos;t always specified. Those small judgment calls are where I can still leave fingerprints.&lt;/p&gt;
&lt;h2&gt;Tofu&lt;/h2&gt;
&lt;p&gt;I&apos;m going to end this on something unrelated to design because 2023 deserves to be remembered for more than just the pivot.&lt;/p&gt;
&lt;p&gt;In early December we got a Maltese puppy. His name is Tofu. He weighs about five pounds and has the energy of something much larger and the expression of a small emperor who is not fully certain the world is being run correctly.&lt;/p&gt;
&lt;p&gt;Getting a puppy is objectively chaotic. The sleep disruption, the constant supervision, the steep learning curve of understanding what he needs and when. My partner Anna and I have had approximately zero chill since he arrived.&lt;/p&gt;
&lt;p&gt;It is also the best decision of the year. Possibly of several years.&lt;/p&gt;
&lt;p&gt;There is something clarifying about a small creature who needs you reliably and completely and doesn&apos;t care at all about product pivots or brand guidelines or whether the deck you made looks good on a 4K display. Tofu needs a walk and some food and someone to play with. That&apos;s the whole thing. That simplicity, right now, is kind of a gift.&lt;/p&gt;
&lt;p&gt;I was skeptical of the &quot;get a dog for your mental health&quot; narrative before this. I understand it now.&lt;/p&gt;
&lt;h2&gt;Some kind of conclusion&lt;/h2&gt;
&lt;p&gt;I don&apos;t think I have a tidy takeaway from this year. The honest version is: when your company pivots significantly and you&apos;re the sole designer, you absorb a lot of the disruption in ways that aren&apos;t always visible to the rest of the team. Your past work quietly becomes legacy. Your role quietly becomes something different. And you have to figure out, largely on your own, how to feel about that and what to do with it.&lt;/p&gt;
&lt;p&gt;I&apos;m not bitter about VALK or the pivot. Companies have to make strategic decisions, and this one makes sense. The people I work with are good. The mission, in its new form, is real.&lt;/p&gt;
&lt;p&gt;But I also think the designer&apos;s experience of a company pivot is worth talking about more honestly than it usually is. You don&apos;t just update the Figma files and move on. There&apos;s context you lose access to, craft that gets deprecated alongside the product, a version of the job that quietly disappears while the title stays the same.&lt;/p&gt;
&lt;p&gt;You mourn it a little. You adapt. You find where your fingerprints can still land.&lt;/p&gt;
&lt;p&gt;And sometimes you get a five-pound Maltese puppy who needs a walk right now, actually, and does not care about any of this at all.&lt;/p&gt;
&lt;p&gt;That helps more than I expected.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Originally published on kargaev.me. Imported to blog.deeflect.com archive.&lt;/em&gt;&lt;/p&gt;
</content:encoded></item><item><title>Agency vs product design  -  why I&apos;m not going back</title><link>https://blog.deeflect.com/valk-15-agency-to-product-never-going-back/</link><guid isPermaLink="true">https://blog.deeflect.com/valk-15-agency-to-product-never-going-back/</guid><description>After 2 years at a Moscow agency and 4 years as sole designer at a fintech, here&apos;s what actually changes when you go from agency to product design.</description><pubDate>Tue, 05 Sep 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Someone asked me recently if I&apos;d ever go back to agency work. A friend from Moscow, still at a studio there, sending me their latest case study, thirty screens, beautiful gradients, a banking app they&apos;d designed in six weeks. It looked incredible. I remembered that feeling. The rush of building something polished from nothing, handing it off, moving on.&lt;/p&gt;
&lt;p&gt;My answer was no. And it surprised me a little how certain I was.&lt;/p&gt;
&lt;p&gt;I spent almost two years at Spacecode in Moscow before joining VALK. Lead UX/UI, team of five or six designers, somewhere over fifty apps shipped across my time there. Kaspersky, OTPBank, fintech startups, retail, events platforms. Then I joined VALK in late 2019, one product, one designer, and now nearly four years later I&apos;m still here, still the only designer, still working on the same platform that grew into something I couldn&apos;t have imagined at the beginning.&lt;/p&gt;
&lt;p&gt;These are genuinely different careers. Not just different jobs. Different ways of understanding what design even is.&lt;/p&gt;
&lt;h2&gt;What agency taught me (and it taught me a lot)&lt;/h2&gt;
&lt;p&gt;I want to be honest about this because I see product designers dismissing agency work, and it&apos;s unfair.&lt;/p&gt;
&lt;p&gt;Spacecode made me fast. Not reckless, actually fast in the right ways. When you&apos;re shipping a full product every six to eight weeks, you develop instincts that most product designers never build. You learn which decisions actually matter in week one versus week three. You learn to kill your darlings quickly because there&apos;s no time for attachment.&lt;/p&gt;
&lt;p&gt;The visual polish I developed there still shows up in my VALK work. Working across so many industries meant exposure to dozens of design patterns I never would have seen otherwise. Banking interfaces, event apps, security software, every project had its own logic, its own user behavior, its own constraints.&lt;/p&gt;
&lt;p&gt;Leading a team taught me something too. Reviewing junior work, running crits, helping someone understand why their hierarchy isn&apos;t working, you understand your own craft better when you have to explain it. I mentored five or six junior designers at Spacecode. Some of them are probably running their own teams now.&lt;/p&gt;
&lt;p&gt;The client presentations also hardened me in a useful way. You learn to defend your decisions to people who don&apos;t speak design, who have opinions about colors, who want something &quot;more modern&quot; without knowing what that means. You either develop the language to handle that or you get eaten alive.&lt;/p&gt;
&lt;h2&gt;What agency didn&apos;t teach me&lt;/h2&gt;
&lt;p&gt;Here&apos;s what I didn&apos;t understand when I was at Spacecode: I thought design ended at delivery.&lt;/p&gt;
&lt;p&gt;It was built into the structure of the work. You shipped the app, wrote up the case study, moved to the next one. Whatever happened after, whether users actually used it, whether the flows made sense in production, whether the edge cases held up, that wasn&apos;t really your problem. Not because anyone was cynical about it. Just because the project was over.&lt;/p&gt;
&lt;p&gt;I had no idea how much of design happens &lt;em&gt;after&lt;/em&gt; that point.&lt;/p&gt;
&lt;p&gt;Six weeks is not enough time to understand any domain properly. I designed a banking app for OTPBank and I didn&apos;t really understand how the back-office flows connected to what users saw. I made it look right and feel usable, but the deeper logic of the system, the compliance requirements, the actual user journeys across months of usage, I only touched the surface. The timeline didn&apos;t allow anything more.&lt;/p&gt;
&lt;p&gt;At Spacecode I was always the expert in the room on design. Nobody challenged me on UX decisions in any fundamental way because nobody knew more about it than I did. That felt good. It took me a while at VALK to realize how much I&apos;d been missing by never being challenged by the product itself, by real users, real edge cases, real feedback over time.&lt;/p&gt;
&lt;p&gt;And the client politics. That I don&apos;t miss at all. Redesigning a section because someone&apos;s director had a different opinion. Reverting to an earlier version a week after approval. There&apos;s a particular kind of exhaustion that comes from designing things you don&apos;t believe in, knowing the real reason they look that way has nothing to do with users.&lt;/p&gt;
&lt;h2&gt;What changed when I moved to product&lt;/h2&gt;
&lt;p&gt;I joined VALK in November 2019. Asset tokenization for institutional investors, the kind of domain I knew almost nothing about. In my first month I was reading about private securities and permissioned blockchains in the evenings, not because anyone asked me to, but because I couldn&apos;t design interfaces for things I didn&apos;t understand.&lt;/p&gt;
&lt;p&gt;That was the first shift. Agency work doesn&apos;t require you to become an expert in the domain. Product work absolutely does.&lt;/p&gt;
&lt;p&gt;By the time VALK had scaled to seventy-plus financial institutions across fifteen countries, I understood the platform in a way that&apos;s hard to explain. I knew which compliance fields caused friction. I knew which flows our institutional users took shortcuts through because the documented path was too long. I knew what &quot;tokenization&quot; meant not as a marketing term but as an actual technical and legal process with very specific UX requirements.&lt;/p&gt;
&lt;p&gt;You can&apos;t get that knowledge in six weeks. You can barely get it in six months.&lt;/p&gt;
&lt;p&gt;The depth of product design compresses over time, not over sprints. The fourth year of working on something reveals problems you couldn&apos;t have seen in the first year, because those problems are created by the decisions you made in the first year.&lt;/p&gt;
&lt;h2&gt;Ownership changes how you design&lt;/h2&gt;
&lt;p&gt;At Spacecode I was responsible for the design. At VALK I&apos;m responsible for the product experience.&lt;/p&gt;
&lt;p&gt;Sounds like a small distinction. It isn&apos;t.&lt;/p&gt;
&lt;p&gt;When you&apos;re the only designer on a product and you&apos;ll still be there six months after a feature ships, you make different decisions. You think about edge cases you&apos;d normally cut for timeline because you know you&apos;ll be the one fixing them later. You document things properly because future-you will need that documentation. You push back harder on product decisions because when something ships wrong, there&apos;s nowhere to point except yourself.&lt;/p&gt;
&lt;p&gt;The &quot;not my problem&quot; mindset that was almost structurally required at an agency, it genuinely doesn&apos;t exist in product. Everything is your problem. Which is harder, but also more honest about what design actually is.&lt;/p&gt;
&lt;p&gt;I think about the features we built in 2020 that are still running, still being used by banks in multiple countries. The interactions I designed then are being experienced by someone right now. That&apos;s a different relationship with your work than handing off a file and writing a case study.&lt;/p&gt;
&lt;h2&gt;The loneliness is real&lt;/h2&gt;
&lt;p&gt;I don&apos;t want to make product design sound like a straightforward upgrade.&lt;/p&gt;
&lt;p&gt;At Spacecode I had people to challenge my work every day. Someone to catch the thing I&apos;d stopped seeing because I&apos;d stared at it too long. Someone trying a completely different approach while I was heads-down on mine. Creative friction is real and it makes work better.&lt;/p&gt;
&lt;p&gt;At VALK, that friction has to come from somewhere else. From developers who catch technical impossibilities. From the CEO when something doesn&apos;t match the product vision. From my own discipline to step back and question decisions I&apos;ve already made. It&apos;s a skill you have to develop deliberately when working solo, the ability to challenge yourself.&lt;/p&gt;
&lt;p&gt;Some days it&apos;s fine. Some days I&apos;ll spend a week going in circles on a problem that twenty minutes with another designer would have solved.&lt;/p&gt;
&lt;p&gt;The repetition is also real. Four years on the same product, there are moments where the novelty is completely gone. I&apos;ve redesigned sections of this platform two or three times. The onboarding flow I&apos;m touching now is something I&apos;ve touched before. You have to find different sources of interest when you know a product this well. It moves from &quot;how does this industry work&quot; to &quot;why is this specific interaction still creating friction after all this time.&quot;&lt;/p&gt;
&lt;h2&gt;What actually transfers and what doesn&apos;t&lt;/h2&gt;
&lt;p&gt;The speed of execution stayed. The ability to produce clean, considered work quickly, that&apos;s just muscle memory and it doesn&apos;t care whether you&apos;re on week two of a six-week sprint or month three of a product roadmap. The visual craft transferred. The ability to defend design decisions to non-designers transferred.&lt;/p&gt;
&lt;p&gt;What didn&apos;t transfer: the way I thought about timelines.&lt;/p&gt;
&lt;p&gt;My natural agency instinct was to think in terms of &quot;done when delivered.&quot; That took real time to unlearn. Products don&apos;t have a delivery moment, they have a current state that will change. Every decision you make is technically provisional. That&apos;s a genuinely different mental model and I underestimated how long it would take me to internalize it.&lt;/p&gt;
&lt;p&gt;The &quot;make it look good&quot; instinct also needed recalibrating. Not removing, visual quality matters enormously, especially in fintech where trust signals are tied to perceived polish. But at an agency, looking good &lt;em&gt;is&lt;/em&gt; the deliverable. At a product company, looking good is in service of something working right. Related, but not the same thing.&lt;/p&gt;
&lt;h2&gt;What I actually learned&lt;/h2&gt;
&lt;p&gt;Here&apos;s something I&apos;ve been thinking about. I learned design at Spacecode. I became a designer at VALK.&lt;/p&gt;
&lt;p&gt;That&apos;s not meant to diminish the agency years, they gave me a foundation I couldn&apos;t have built any other way. The speed, the breadth, the craft. But understanding what design is &lt;em&gt;for&lt;/em&gt;, how it sits inside a living product that real users depend on, how your decisions compound over years, that I only learned by staying.&lt;/p&gt;
&lt;p&gt;The version of me who joined VALK in 2019 thought of design in terms of screens and flows and handoffs. The version sitting in Los Angeles in 2023 thinks in terms of systems, tradeoffs, and user relationships that extend across time.&lt;/p&gt;
&lt;p&gt;I don&apos;t know if that evolution was inevitable or if it required the specific circumstances, a single product, a small team, no other designer to defer to. Probably both. The constraints of being the only designer forced a kind of engagement with the product that might have been easier to avoid otherwise.&lt;/p&gt;
&lt;p&gt;The question isn&apos;t &quot;how do I make this screen work.&quot; It&apos;s &quot;why is this problem appearing at this point in the user&apos;s experience and what does that tell us about the system.&quot;&lt;/p&gt;
&lt;p&gt;That&apos;s the question I couldn&apos;t ask properly at an agency. There was never enough time and never enough continuity.&lt;/p&gt;
&lt;p&gt;Would I go back? No. Not because agency work is bad, it was genuinely formative and I respect the designers who do it well. But I&apos;ve seen what the other side looks like, and I want to keep designing things I&apos;ll still be accountable for a year from now.&lt;/p&gt;
&lt;p&gt;That accountability is uncomfortable sometimes. It&apos;s also the most honest version of what this work actually is.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Originally published on kargaev.me. Imported to blog.deeflect.com archive.&lt;/em&gt;&lt;/p&gt;
</content:encoded></item><item><title>Four years designing one product</title><link>https://blog.deeflect.com/valk-14-four-years-one-product/</link><guid isPermaLink="true">https://blog.deeflect.com/valk-14-four-years-one-product/</guid><description>What four years as the sole designer on a fintech product teaches you about depth, restraint, and the trade-offs agency work never prepares you for.</description><pubDate>Sun, 28 May 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Sometime last month I opened the VALK Figma file looking for a component I built in 2020. I needed to check how I&apos;d handled a particular empty state, one of those obscure screens that appears when an investor has no active deals. I found it eventually, buried somewhere around frame 1,400. The page has thousands of frames now. I remember when it had forty.&lt;/p&gt;
&lt;p&gt;That empty state? I&apos;d designed it in three hours one afternoon in Alanya, Turkey, sitting at a rental apartment desk with a ceiling fan that made too much noise. A throwaway decision. Grey illustration, short line of copy, a button. Three years later it&apos;s still there, unchanged, shown to asset managers at seventy-something financial institutions. I stared at it for a few minutes and felt something I couldn&apos;t name exactly, not embarrassment, not pride. Something more complicated than either.&lt;/p&gt;
&lt;p&gt;Four years. Same product. Same Figma file. Same codebase underneath everything I&apos;ve drawn.&lt;/p&gt;
&lt;h2&gt;What agency work taught me (and what it didn&apos;t)&lt;/h2&gt;
&lt;p&gt;Before VALK I spent two years at Spacecode, a Moscow agency. In that time I touched something like fifty-plus projects, banking apps, security dashboards, enterprise tools, consumer products. We&apos;d sprint into a new domain every few weeks, learn enough to design something coherent, hand it off, move on. Every Monday felt like a new puzzle.&lt;/p&gt;
&lt;p&gt;I got very fast at Spacecode. That&apos;s the main thing. Fast at reading a brief, fast at identifying the shape of a problem, fast at generating concepts. Speed was survival there. A week of slow output had real consequences; other projects were waiting, other clients were calling.&lt;/p&gt;
&lt;p&gt;What the agency years couldn&apos;t teach me was depth. You can&apos;t develop depth in six weeks. You understand the surface of a problem, sometimes the layer below it, but you rarely get to the ground. You hand off your designs and you never find out if the empty state you designed in three hours becomes a permanent fixture that thousands of people see every year.&lt;/p&gt;
&lt;p&gt;At VALK, I found out.&lt;/p&gt;
&lt;h2&gt;The weight of accumulated context&lt;/h2&gt;
&lt;p&gt;The thing about staying with one product for four years is that you know it the way you know your own apartment. Where the awkward corner is. Which drawer sticks. Every workaround that got quietly institutionalized.&lt;/p&gt;
&lt;p&gt;I know every edge case in the VALK platform, not from documentation, but from having created the edge cases, discovered them, patched them, or consciously decided to live with them. I know which design decisions were made under deadline pressure in 2020 that became load-bearing by 2021 when we scaled to dozens of institutions. I know which navigation pattern was &quot;temporary&quot; and is now four years old and woven into how every user expects to move through the product.&lt;/p&gt;
&lt;p&gt;This kind of knowledge is genuinely useful. When someone proposes a change to the deal management flow, I can trace second and third-order effects almost automatically. I can say &quot;if we move that action here, it creates a conflict with how compliance users approach the same screen from a different entry point&quot;, and I know this not because I ran a workshop, but because I lived through the version where it was different and watched what happened.&lt;/p&gt;
&lt;p&gt;The weight of that context, though, is real. Every new design decision carries the shadow of every past one. Early on I could move quickly because I didn&apos;t know what I didn&apos;t know. Now I know too much. I know which assumptions are fragile. I know which constraints are genuinely immovable and which ones just feel that way because they&apos;ve existed for two years. Making confident decisions has become harder, not easier.&lt;/p&gt;
&lt;p&gt;I don&apos;t think most design writing is honest about this. There&apos;s an assumption that experience makes you faster and more decisive. It can. But with enough context, it can also make you slower, because you genuinely understand the complexity you used to move through without noticing it.&lt;/p&gt;
&lt;h2&gt;The &quot;quick fix&quot; that never left&lt;/h2&gt;
&lt;p&gt;In early 2020, we had an urgent issue with how deal documents were displayed in the investor portal. The hierarchy was broken, the most important documents were getting lost. We had a release coming. I designed a fix in an afternoon, a card pattern with status indicators I&apos;d never used in this product before, borrowed from something I&apos;d built at Spacecode.&lt;/p&gt;
&lt;p&gt;It worked. The release went out. Nobody complained.&lt;/p&gt;
&lt;p&gt;By the end of 2020, that pattern had propagated into four other sections of the platform. By 2021, when financial institutions were onboarding rapidly, it was part of the visual language new users learned first. By 2022, it was referenced in our onboarding materials.&lt;/p&gt;
&lt;p&gt;I never formally chose that pattern. I chose it under pressure on one specific afternoon, for one specific problem, in a city I&apos;d only been in for a few months. It&apos;s now one of the most recognizable UI elements in a product used by banks and hedge funds across fifteen countries.&lt;/p&gt;
&lt;p&gt;There&apos;s no such thing as a temporary decision in a living product. Whatever you ship becomes the baseline. The longer it survives, the more weight it carries, until removing it feels like surgery rather than editing.&lt;/p&gt;
&lt;h2&gt;The loneliness of being the only designer&lt;/h2&gt;
&lt;p&gt;Something I rarely write about directly: in four years at VALK, I&apos;ve been the only designer. No one to compare notes with, to catch my blind spots, to share the particular frustration of caring about UX in an organization full of people who care about other things.&lt;/p&gt;
&lt;p&gt;At Spacecode there were other designers around. Not always on the same project, but present. You could ask someone to look at a flow. That kind of creative friction is valuable in ways that are hard to appreciate until it&apos;s absent.&lt;/p&gt;
&lt;p&gt;At VALK, the product vision lives almost entirely in my head. Mostly that&apos;s fine, I&apos;ve made peace with it, found ways to create useful friction through documentation, through forcing myself to write out rationale rather than just designing it. But there are moments, usually when I&apos;m sitting with a difficult problem that has no clean answer, where I&apos;d give a lot to have another designer in the room. Not to validate me. Just to think alongside.&lt;/p&gt;
&lt;p&gt;The Figma file with its thousands of frames is a conversation I&apos;ve been having with myself for four years. That&apos;s its own kind of loneliness.&lt;/p&gt;
&lt;h2&gt;Patience and restraint, the skills I didn&apos;t know I needed&lt;/h2&gt;
&lt;p&gt;Agency work rewards output. The artifact matters because the client is evaluating the artifact. The velocity is visible and measurable.&lt;/p&gt;
&lt;p&gt;Product work rewards restraint. The best decisions I&apos;ve made at VALK in the last two years are things I didn&apos;t do, flows I didn&apos;t redesign, patterns I didn&apos;t change, features I pushed back on. These don&apos;t show up in a portfolio. There&apos;s no frame in Figma that says &quot;Dmitry resisted the urge to redesign this for the third time and the product was better for it.&quot;&lt;/p&gt;
&lt;p&gt;When you&apos;re redesigning something that real users with real professional responsibilities depend on, the cost of disruption is higher than the cost of imperfection. You learn to sit with imperfect solutions while you gather enough evidence to justify changing them. You learn the difference between something that&apos;s wrong and something that just bothers you.&lt;/p&gt;
&lt;p&gt;That second category is bigger than I expected.&lt;/p&gt;
&lt;p&gt;Restraint is harder than it sounds. Especially when you&apos;ve been looking at the same interface for four years and you can see every flaw. You know you could make it better, but &quot;better&quot; has to be weighed against the transition cost to people who&apos;ve built workflows around the current version. That calculation doesn&apos;t exist in agency work. In agency work, better is always worth it, because nobody has a workflow yet.&lt;/p&gt;
&lt;h2&gt;When variety is a feature, not a distraction&lt;/h2&gt;
&lt;p&gt;I&apos;d be lying if I said I don&apos;t miss the agency rotation sometimes. The context-switching was exhausting but the variety was genuinely stimulating, every new project a new vocabulary to learn.&lt;/p&gt;
&lt;p&gt;Here in Los Angeles, I sometimes catch myself scrolling through design work online and feeling something like nostalgia for problems I&apos;ve never actually worked on. Healthcare UX. Education platforms. Tools for creative professionals. I&apos;ve spent four years getting deeply fluent in one domain, private capital markets, asset tokenization, institutional finance. That fluency is real. But it&apos;s also a kind of narrowing.&lt;/p&gt;
&lt;p&gt;Depth and variety pull in opposite directions. You can get both if you move between deep-product roles over time, but within a single job, the longer you stay, the more specialized you become. I know this product. I do not know what I would do with an unfamiliar problem the way I did in 2018. Some of that flexibility has been traded for expertise.&lt;/p&gt;
&lt;p&gt;Whether that&apos;s worth it is a question I&apos;m still working out.&lt;/p&gt;
&lt;h2&gt;What four years actually builds&lt;/h2&gt;
&lt;p&gt;There&apos;s a kind of satisfaction in long-term product ownership that has no equivalent in agency work. When I watch a financial institution use a flow I designed two years ago, watch them navigate it efficiently, without friction, as if it&apos;s obvious, that&apos;s different from watching a client approve a prototype. The approval is gratifying. The actual sustained use is something else. Evidence that you built something real.&lt;/p&gt;
&lt;p&gt;I&apos;ve designed for people who have real professional stakes in the product working correctly. Not user-testing participants. People who depend on this software to manage actual capital. That responsibility has made me a more careful designer than any brief or deadline ever did.&lt;/p&gt;
&lt;p&gt;Agency taught me speed. Product taught me discipline. I needed both, but I had to learn them separately, and I couldn&apos;t have told you that in advance.&lt;/p&gt;
&lt;h2&gt;A question I keep coming back to&lt;/h2&gt;
&lt;p&gt;In the last few months I&apos;ve started to notice a thought that keeps returning. Not anxiously, but persistently.&lt;/p&gt;
&lt;p&gt;How many more years of this?&lt;/p&gt;
&lt;p&gt;Not because I want to leave, I&apos;m genuinely invested in what VALK is building. But four years is a long time with one product, and I find myself wondering when deep expertise tips into insularity. When does caring deeply about one product become a limitation on your growth as a designer?&lt;/p&gt;
&lt;p&gt;Some designers spend a decade with a single product and produce extraordinary work. Others need the rotation to stay sharp. I&apos;m still figuring out which kind I am, which feels like an odd thing to still be working out at four years in.&lt;/p&gt;
&lt;p&gt;The Figma file keeps growing. The empty state from 2020 is still there, ceiling fan and all.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Originally published on kargaev.me. Imported to blog.deeflect.com archive.&lt;/em&gt;&lt;/p&gt;
</content:encoded></item><item><title>Accessibility in fintech is legally required, not optional</title><link>https://blog.deeflect.com/valk-13-accessibility-fintech-law/</link><guid isPermaLink="true">https://blog.deeflect.com/valk-13-accessibility-fintech-law/</guid><description>Lessons from implementing WCAG 2.1 AA compliance in regulated financial software  -  data tables, chart contrast, focus management, and the institutional sales reality.</description><pubDate>Mon, 20 Feb 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;We almost lost a deal because of color contrast.&lt;/p&gt;
&lt;p&gt;Not because our feature set was wrong, or pricing was off, or the demo went badly. The procurement team at a mid-sized European asset manager sent back a compliance checklist. Buried in section four was an accessibility clause, WCAG 2.1 AA conformance required across all user-facing interfaces. We didn&apos;t have documentation for that. We barely had a consistent focus state.&lt;/p&gt;
&lt;p&gt;I spent the next six weeks doing the most humbling work of my career.&lt;/p&gt;
&lt;p&gt;That was early 2022, but the lessons are still shaping how I build things now. I want to write about this properly because most accessibility content I find online is written for consumer apps, &quot;make sure your button has enough contrast&quot; and &quot;add alt text to images.&quot; That advice isn&apos;t wrong, but it misses the specific complexity of financial interfaces. The stakes are different. The UI is different. In regulated markets, the legal framing is different too.&lt;/p&gt;
&lt;h2&gt;Why finance treats accessibility differently&lt;/h2&gt;
&lt;p&gt;Consumer apps treat accessibility as a moral good, which it is. But in practice it ends up on the roadmap between &quot;dark mode&quot; and &quot;better onboarding&quot;, always almost prioritized, rarely actually done.&lt;/p&gt;
&lt;p&gt;Financial services don&apos;t have that luxury. In the UK and EU, financial institutions must comply with accessibility standards as part of broader digital inclusion and anti-discrimination frameworks. The European Accessibility Act will require compliance for most financial services by 2025. UK&apos;s Equality Act 2010 already applies. WCAG 2.1 AA is the technical baseline that regulators and procurement teams reference when they actually check.&lt;/p&gt;
&lt;p&gt;When I first joined VALK in 2019, I thought of accessibility the way most product designers do, something to layer on after the core experience is built. After the procurement checklist incident, I understood that framing was wrong. Accessibility is a sales requirement in enterprise fintech. If your platform fails an institutional client&apos;s compliance audit, you don&apos;t get a second meeting. You lose the contract. Potentially millions in annual recurring revenue.&lt;/p&gt;
&lt;p&gt;The business case writes itself. The hard part is the implementation.&lt;/p&gt;
&lt;h2&gt;The data visualization problem&lt;/h2&gt;
&lt;p&gt;Charts and data visualization are where financial interfaces get genuinely difficult from an accessibility standpoint.&lt;/p&gt;
&lt;p&gt;Our platform had portfolio performance charts, yield curves, asset allocation breakdowns, common enough. The challenge is that a meaningful chart in finance often has eight to twelve data series. You&apos;re comparing multiple assets, multiple time periods, multiple metrics, and you need to differentiate them visually.&lt;/p&gt;
&lt;p&gt;The standard solution is color. Give each series a different color. But WCAG 2.1 requires sufficient contrast not just between text and background, but between any UI components that convey information. If you&apos;re relying purely on color to distinguish line A from line B on a dark background, you&apos;re failing users with color vision deficiencies, statistically about 8% of men.&lt;/p&gt;
&lt;p&gt;Here&apos;s what I discovered while testing: I am on the edge of that statistic myself. I ran a colorblindness simulation through one of our chart views and realized I genuinely couldn&apos;t distinguish two of the data series in our default palette. I&apos;d been designing those charts for two years and never noticed, because I&apos;d always been looking at them with labels and legend context in view. Strip those away and the colors blur together.&lt;/p&gt;
&lt;p&gt;The fix was not just changing the palette. We added pattern fills to area charts, made line charts use distinct dash patterns in addition to color, solid, dashed, dotted, long-dash. Every data series got a unique combination of color and shape marker and line style. It made the charts more complex to build but actually more readable for everyone.&lt;/p&gt;
&lt;p&gt;For color specifically, I moved to a palette designed around perceptual distinctness rather than aesthetic preference. Colors that look great together on Dribbble are often terrible for colorblind users. I now test every palette in grayscale first, if the data series are indistinguishable in grayscale, color was doing too much work.&lt;/p&gt;
&lt;h2&gt;Screen readers and financial data tables&lt;/h2&gt;
&lt;p&gt;Our cap table management interface had tables with nested headers. Parent columns with child columns. Rows representing investors, sub-rows representing individual transactions under each investor. It looked clean and logical visually.&lt;/p&gt;
&lt;p&gt;Screen readers hated it.&lt;/p&gt;
&lt;p&gt;WCAG requires that data tables use proper semantic markup, &lt;code&gt;scope&lt;/code&gt; attributes on headers, &lt;code&gt;thead&lt;/code&gt; and &lt;code&gt;tbody&lt;/code&gt; correctly structured, &lt;code&gt;aria-label&lt;/code&gt; on tables where the heading isn&apos;t obvious. When a table has merged cells or multi-level headers, you need &lt;code&gt;headers&lt;/code&gt; attributes that explicitly associate each data cell with the correct header cells. It is tedious. It is invisible work. And it&apos;s absolutely necessary for a screen reader user to understand that a number belongs to Q3 revenue for Investor B, not Q3 revenue in general.&lt;/p&gt;
&lt;p&gt;I had to go through every table in the platform and audit the actual HTML output from our frontend components. Some of our tables were being generated from a grid library that didn&apos;t produce accessible markup by default. We had to either configure it differently or wrap the output with additional attributes.&lt;/p&gt;
&lt;p&gt;The honest reality: I couldn&apos;t test this alone. I don&apos;t use VoiceOver as my primary interface. I spent time reading, watching screen reader users navigate financial data on YouTube, running tests with NVDA on Windows. You notice things quickly, how a screen reader announces &quot;column header, column header, data cell&quot; without context if the table structure is wrong, how it reads cells in an order that makes no sense if the DOM order doesn&apos;t match visual order.&lt;/p&gt;
&lt;p&gt;Getting this right took longer than any other part of the accessibility work.&lt;/p&gt;
&lt;h2&gt;Keyboard navigation in a trading interface&lt;/h2&gt;
&lt;p&gt;Some of our institutional users, particularly at larger firms with strict IT environments, operate in contexts where mouse use is limited, or where power users prefer keyboard navigation for speed. And some users cannot use a mouse at all.&lt;/p&gt;
&lt;p&gt;Our deal approval workflow had a problem. Five-step modal flow: review deal terms, confirm investor details, upload signatures, submit. Visually clean. Keyboard-only, a nightmare.&lt;/p&gt;
&lt;p&gt;Focus wasn&apos;t being set when the modal opened, so a keyboard user had to Tab through the entire page to reach the modal content. Tab order inside the modal was inconsistent because of how we&apos;d structured the component layers in Figma and translated them to DOM. Closing the modal didn&apos;t return focus to the element that triggered it.&lt;/p&gt;
&lt;p&gt;These are all WCAG 2.1 failures. The spec is specific: when a dialog opens, focus must move into it. When it closes, focus must return to the trigger. Interactive elements inside must be reachable by keyboard in a logical sequence.&lt;/p&gt;
&lt;p&gt;Focus management is one of those things that feels like a frontend problem, not a design problem. I disagree. If I hand over a modal design without specifying where focus goes when it opens, what the Tab order is inside, and what happens when it closes, I&apos;m leaving that decision to a developer who may or may not think about it. Most won&apos;t. They&apos;ll focus on making it work visually.&lt;/p&gt;
&lt;p&gt;I started annotating focus flows directly in Figma. A simple overlay showing Tab order with numbered indicators, plus callouts for focus trap requirements. It added time to my handoffs but removed ambiguity. The dev team said it was the clearest accessibility documentation they&apos;d received.&lt;/p&gt;
&lt;h2&gt;Retrofitting is painful, designing with it from the start is less painful&lt;/h2&gt;
&lt;p&gt;By the time I did the accessibility audit, our component library had been accumulating debt for about two years. I had to open every component, buttons, inputs, dropdowns, modals, table cells, status badges, notification toasts, and check them against WCAG criteria.&lt;/p&gt;
&lt;p&gt;The status badge problem was particularly instructive. We used color to indicate deal status: green for approved, yellow for pending, red for rejected. Just a colored pill with a text label inside. I assumed the text label was sufficient.&lt;/p&gt;
&lt;p&gt;It wasn&apos;t.&lt;/p&gt;
&lt;p&gt;WCAG&apos;s guidance on color dependency says color cannot be the &lt;em&gt;only&lt;/em&gt; visual means of conveying information. The text label helped, but users with low vision who increase font sizes might see the pill without context. Screen readers announce the text, not the color. The fix was to add an icon to every status badge, a checkmark for approved, a clock for pending, an X for rejected. Now color, icon, and text all communicate the same state independently.&lt;/p&gt;
&lt;p&gt;This sounds minor. Multiplied across twenty different status types in a complex financial platform, it&apos;s significant design and development work. Doing it as a retrofit, touching every instance of every component and every place they appear, took far longer than it would have if I&apos;d built it correctly from the beginning.&lt;/p&gt;
&lt;p&gt;That&apos;s the real lesson. Accessibility isn&apos;t expensive when you design for it. It&apos;s expensive when you ignore it until an audit forces you to go back.&lt;/p&gt;
&lt;h2&gt;The plugins that helped and the ones that didn&apos;t&lt;/h2&gt;
&lt;p&gt;I used several Figma plugins during the audit and redesign process.&lt;/p&gt;
&lt;p&gt;Contrast and A11y - Color Contrast Checker are genuinely useful for checking text contrast ratios quickly. I used these constantly. They&apos;re not perfect, they check static frames, not interactive states, so you still have to manually check hover states, focus states, and disabled states. But for baseline checking they save significant time.&lt;/p&gt;
&lt;p&gt;Color Blind by Stark is the plugin that changed how I work. It simulates eight types of color vision deficiency directly on your Figma frame. I now run this on every screen with a chart or color-coded data before finalizing. The simulation that caught the issue in our chart palette was worth the plugin alone.&lt;/p&gt;
&lt;p&gt;Able has a more comprehensive checklist approach. I found it useful for learning what to check, less useful as a daily workflow tool, the checklist becomes repetitive once you&apos;ve internalized the requirements.&lt;/p&gt;
&lt;p&gt;What no plugin replaces: actually using a screen reader. Figma plugins check design files, not the live product. The real test is in the browser, with VoiceOver or NVDA, navigating the actual interface. Design tools can give you a head start, but compliance requires live testing.&lt;/p&gt;
&lt;h2&gt;The institutional client dynamic&lt;/h2&gt;
&lt;p&gt;Something specific to enterprise fintech that doesn&apos;t get discussed enough: your actual users are not always the ones who decide whether to buy your product.&lt;/p&gt;
&lt;p&gt;A portfolio manager at an asset management firm uses our platform daily. But the decision to purchase was made by a procurement team that evaluated security documentation, data handling policies, regulatory compliance evidence, and accessibility conformance documentation.&lt;/p&gt;
&lt;p&gt;The procurement checklist asks whether you comply with WCAG 2.1 AA. There&apos;s a checkbox. It doesn&apos;t ask whether your users find it delightful or whether the onboarding is smooth.&lt;/p&gt;
&lt;p&gt;After the near-miss in early 2022, we commissioned a third-party accessibility audit and got a conformance report. This document, a dry, technical PDF listing which WCAG criteria we pass and which had been remediated, became a sales asset. It goes in the proposal alongside our security certifications. When a new institutional prospect asks about accessibility compliance, we have documentation.&lt;/p&gt;
&lt;p&gt;That&apos;s the reality of selling into banks and asset managers. Their IT and compliance departments have requirements. Meeting those requirements is not differentiating, it&apos;s qualifying. You need it just to be in the room.&lt;/p&gt;
&lt;h2&gt;What I&apos;d tell someone starting this work now&lt;/h2&gt;
&lt;p&gt;Understand the standard first, not the tools. WCAG 2.1 is publicly available and readable. The actual criterion text is denser than it should be, but there are good plain-language guides. Understand what AA requires, it&apos;s more specific than most designers realize, and less overwhelming than many fear.&lt;/p&gt;
&lt;p&gt;Design for redundancy. Status, state, and meaning should never be communicated by color alone. Add icons, labels, patterns, shapes. Redundancy in information design is not clutter, it&apos;s clarity.&lt;/p&gt;
&lt;p&gt;Annotate focus behavior in your handoffs. Specify where focus goes when a modal opens, what the Tab order is, what happens when interactive elements are added or removed from the DOM dynamically. Don&apos;t leave it implicit.&lt;/p&gt;
&lt;p&gt;Test in the live product, not just in Figma. Plugins help. The real interface is where compliance happens or fails.&lt;/p&gt;
&lt;p&gt;And if you&apos;re working in financial services: treat this as a business requirement. The moral argument matters, but in enterprise sales, it doesn&apos;t get procurement to check the box. The conformance report does.&lt;/p&gt;
&lt;p&gt;I&apos;m still refining how we approach this at VALK. The DeFi interfaces we built for Merlin brought a different set of challenges, more dynamic data, more complex state, but the same underlying principles. Accessibility isn&apos;t a project you complete. It&apos;s a constraint you design within, from the start.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Originally published on kargaev.me. Imported to blog.deeflect.com archive.&lt;/em&gt;&lt;/p&gt;
</content:encoded></item><item><title>Designing Merlin for 5 million Ledger Live users</title><link>https://blog.deeflect.com/valk-12-five-million-users-overnight/</link><guid isPermaLink="true">https://blog.deeflect.com/valk-12-five-million-users-overnight/</guid><description>How I redesigned Merlin by VALK for the Ledger Live integration  -  two audiences, two design systems, and a compressed timeline.</description><pubDate>Mon, 12 Dec 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The notification came through on a Tuesday morning. I was sitting at my desk in Los Angeles, coffee still too hot to drink, window light coming in at that flat California angle, when our CEO sent a message in Slack with the Ledger announcement link. &quot;This goes live December 8th. Five million users.&quot;&lt;/p&gt;
&lt;p&gt;I read it twice.&lt;/p&gt;
&lt;p&gt;For almost three years at VALK I had been designing for a very specific kind of person. Institutional. Experienced. Someone who reads a data table the way most people read a headline. Our typical Merlin user was a portfolio manager or DeFi analyst, someone who wanted every number visible at once and would consider a simplified view an insult. Building for that audience has its own challenges, but you at least know who you are building for.&lt;/p&gt;
&lt;p&gt;Five million Ledger hardware wallet users is a completely different population. Most of them bought a Ledger to keep their crypto safe. Many had never looked at a portfolio analytics tool in their life. And starting December 2022, Merlin was going to appear inside their Ledger Live app.&lt;/p&gt;
&lt;p&gt;This is the story of how that happened from a design perspective, and why it was the hardest thing I had worked on in my career up to that point.&lt;/p&gt;
&lt;h2&gt;How Merlin and Ledger Live actually work together&lt;/h2&gt;
&lt;p&gt;For context: Ledger Live is the companion app for Ledger hardware wallets. You plug in your device, manage your assets, see your balances. In late 2021 Ledger opened up a &quot;Discover&quot; section, a curated marketplace of third-party DeFi apps that live inside Ledger Live as embedded experiences. You don&apos;t leave the Ledger app. You open Merlin from within it, your wallet connects automatically, and you see your analytics.&lt;/p&gt;
&lt;p&gt;This sounds clean in theory. In practice it meant Merlin was running inside an iframe inside Ledger&apos;s app, with Ledger&apos;s navigation chrome wrapping everything, on a screen size we didn&apos;t control, for users who had never used our product before and hadn&apos;t specifically searched for it. They just saw it in a list and tapped.&lt;/p&gt;
&lt;p&gt;That last part is important. Our existing users came to Merlin with intention. Ledger users might arrive with nothing more than curiosity. The context of use was completely different, and the design had to account for that from the very first pixel.&lt;/p&gt;
&lt;h2&gt;The scale problem isn&apos;t just numbers&lt;/h2&gt;
&lt;p&gt;When people say &quot;design for scale&quot; they usually mean technical scale, can your infrastructure handle traffic. That&apos;s a real concern and I spent time talking to our engineers about load considerations. But for a designer, scale means something more specific: can the experience hold together when it&apos;s being used by people with wildly different goals, different levels of expertise, different devices, and different amounts of patience.&lt;/p&gt;
&lt;p&gt;Our existing Merlin interface was built around density. You could see your DeFi positions across protocols, P&amp;amp;L in USD, yield rates, impermanent loss, all on one screen, all updating in near real-time. For an analyst who lives in spreadsheets, this is ideal. For someone who just wants to understand if their crypto portfolio is up or down today, it&apos;s overwhelming.&lt;/p&gt;
&lt;p&gt;I had done some level of this translation before at Spacecode, where I built apps for both enterprise and consumer audiences in separate projects. But I had never had to take one product and make it work for both simultaneously. That constraint is what made this interesting and difficult.&lt;/p&gt;
&lt;p&gt;The answer wasn&apos;t to dumb things down. It was to restructure what was visible by default.&lt;/p&gt;
&lt;h2&gt;Designing the simplified entry layer&lt;/h2&gt;
&lt;p&gt;I spent the first two weeks after getting the integration brief doing something I almost never do in my normal workflow: making very rough paper sketches before touching Figma. Not because paper is magical, but because I needed to think through hierarchy without getting distracted by how things looked.&lt;/p&gt;
&lt;p&gt;The core question I kept coming back to: what does a new user need to understand in the first 30 seconds?&lt;/p&gt;
&lt;p&gt;For our institutional users the answer was &quot;everything.&quot; For a Ledger user arriving via Discover, I decided the answer was simpler, how much your portfolio is worth, whether it went up or down, which protocols it&apos;s sitting in. Everything else, the detailed yield breakdowns, the historical curves, the per-position P&amp;amp;L, could live one tap deeper.&lt;/p&gt;
&lt;p&gt;This sounds obvious when I write it out. In practice it required rethinking component hierarchy in ways that touched almost every screen. Some data that was in the primary layer for institutional users moved to an expanded detail view. Some charts that were visible by default became accessible only after a user actively opened a position.&lt;/p&gt;
&lt;p&gt;The hardest part was doing this without breaking the experience for existing Merlin users. The product had to work for both audiences from the same codebase. So we weren&apos;t building a separate simplified app, we were building a layered version of the same app, where the default state was more accessible and the full complexity was still reachable.&lt;/p&gt;
&lt;p&gt;I built this out in Figma as two parallel flows with shared components, color-coded in a way that made it obvious which decisions affected both experiences and which were specific to one. This became the working document I kept open for the entire integration period.&lt;/p&gt;
&lt;h2&gt;The mobile problem I had been avoiding&lt;/h2&gt;
&lt;p&gt;Merlin was designed as a desktop-first product. This wasn&apos;t an accident, our institutional users worked on large monitors and needed the data density that screen real estate allows. I had done mobile explorations before but never treated it as primary.&lt;/p&gt;
&lt;p&gt;Ledger Live is mobile-first. A significant portion of the five million users access it primarily on their phones.&lt;/p&gt;
&lt;p&gt;I had roughly two months to redesign the core Merlin analytics experience to work on a 375-point-wide screen without losing the data accuracy that was the product&apos;s entire value proposition. Not a comfortable timeline.&lt;/p&gt;
&lt;p&gt;What I ended up doing was prioritizing ruthlessly. The desktop layout had a lot of simultaneous panels, protocol list, position details, portfolio chart, summary header all visible at once. On mobile this becomes a vertically stacked flow with a single dominant view at each step. The portfolio value and daily change sit at the top. Protocol cards scroll below. You tap into a protocol to see positions. You tap into a position to see the full breakdown.&lt;/p&gt;
&lt;p&gt;Each step reveals exactly one layer of additional information. No more. This sounds like basic mobile UX; and it is, but getting there from a desktop-first design system required rebuilding a lot of components from scratch rather than just resizing them. Resizing doesn&apos;t work. The components have to be rethought for how touch interaction works and for how much space a thumb can comfortably reach.&lt;/p&gt;
&lt;p&gt;I got it done, but if I&apos;m being honest, some of the mobile screens launched in a state I wasn&apos;t fully satisfied with. The performance on older Android devices was inconsistent. Some of the interactions felt slightly off. When you have a hard integration deadline, you ship what you have and iterate after. I have a list of things to improve in Q1 next year.&lt;/p&gt;
&lt;h2&gt;The design system negotiation&lt;/h2&gt;
&lt;p&gt;This was the part of the project nobody tells you about when they pitch you a major integration partnership.&lt;/p&gt;
&lt;p&gt;Ledger has their own design system. Clear visual language, their own component library, their own rules about typography and interaction patterns. It makes sense, they&apos;ve built a complex product that millions of people use daily and they have standards for how third-party apps inside Ledger Live should feel.&lt;/p&gt;
&lt;p&gt;Merlin also has a design system. We built it over about a year and it reflects the specific needs of financial data display: the way we handle number formatting, the color logic for gains and losses, the density of our data tables.&lt;/p&gt;
&lt;p&gt;When your product lives inside another product&apos;s chrome, there&apos;s an immediate question: whose system wins?&lt;/p&gt;
&lt;p&gt;The answer, in practice, is &quot;both, uncomfortably.&quot;&lt;/p&gt;
&lt;p&gt;I had several calls with Ledger&apos;s design team during the integration process. They were professional and collaborative, this wasn&apos;t adversarial. But there were real moments of tension. They wanted certain interface elements to follow Ledger Live conventions because consistency across their Discover apps matters for their users. I wanted to maintain Merlin&apos;s visual identity because we were also going to announce this integration publicly, and having our product look like a Ledger white-label inside our own marketing felt wrong.&lt;/p&gt;
&lt;p&gt;We ended up with a compromise that I think worked reasonably well. Merlin kept its core color system and the way it displays financial data. The outer interaction patterns, how modals behave, how navigation cues work, followed Ledger Live conventions more closely. The navigation chrome was entirely Ledger&apos;s. The data presentation inside was entirely ours.&lt;/p&gt;
&lt;p&gt;Some of the visual tension this created is visible if you look carefully. I notice it. Most users probably don&apos;t.&lt;/p&gt;
&lt;h2&gt;The work that doesn&apos;t show up in the product&lt;/h2&gt;
&lt;p&gt;After the integration itself was done, or mostly done, there was another full cycle of work that I had to do as the sole designer: the announcement.&lt;/p&gt;
&lt;p&gt;An integration of this scale is a major marketing moment. We were telling the world that Merlin was now available to five million Ledger users. That story needed to be told visually across pitch decks, social media graphics, press materials, and the blog announcement.&lt;/p&gt;
&lt;p&gt;I have written before about how much of my time at VALK goes into this kind of communication design rather than product design. For this integration it was significant. I built the announcement assets in Figma alongside the product work, sometimes literally in the same working session, switching between the product file and the marketing file.&lt;/p&gt;
&lt;p&gt;The deck for the announcement had to simultaneously explain what Merlin is (for people discovering us through the Ledger news), what the integration means technically, and why it matters for DeFi portfolio management as a category. I had to make this visually interesting without having any new screenshots I could share before launch. So a lot of it was diagram-driven, showing the connection between Ledger&apos;s wallet layer and Merlin&apos;s analytics layer in ways that were accurate but not technically literal.&lt;/p&gt;
&lt;p&gt;This is its own design discipline and I&apos;ve gotten reasonably good at it. But it&apos;s time that comes directly out of product design time, and for an integration with this much product complexity, the balance was stressful.&lt;/p&gt;
&lt;h2&gt;What it means to design for five million people&lt;/h2&gt;
&lt;p&gt;I&apos;ve been thinking about this a lot since the announcement went live.&lt;/p&gt;
&lt;p&gt;When I started at VALK in late 2019 I was designing for a handful of clients, early institutional users who we knew by name. I knew their feedback directly. I could trace a design decision to a specific person&apos;s specific need.&lt;/p&gt;
&lt;p&gt;At Spacecode I built apps for larger audiences but the projects were sprints, you shipped, you handed off, you moved to the next thing. You didn&apos;t live with the consequences.&lt;/p&gt;
&lt;p&gt;Merlin in its pre-Ledger form had a few thousand active users at most. I had a general sense of who they were from user research sessions and from the feedback that came through to our team. I could hold the user in my head.&lt;/p&gt;
&lt;p&gt;Five million is a different thing entirely.&lt;/p&gt;
&lt;p&gt;I cannot imagine the full range of ways people will use this product, the devices they&apos;ll use it on, the contexts they&apos;ll use it in, the things they&apos;ll find confusing that I never anticipated. The statistical reality is that some percentage of people will hit edge cases I never designed for. Some flows will confuse people in ways that will seem obvious in retrospect.&lt;/p&gt;
&lt;p&gt;This is humbling in a specific way that I think every designer should experience at some point. It breaks the comfortable illusion that you can design something perfect if you just think hard enough. You can&apos;t. At scale, you can only design something good enough to recover from, clear enough that when something confuses a user, the surrounding context helps them find their way.&lt;/p&gt;
&lt;p&gt;I don&apos;t know yet how the integration is being received by actual Ledger users. The data will come in over the next weeks and months. I will find out which parts of the flow are working and which aren&apos;t. I am prepared to be surprised in both directions.&lt;/p&gt;
&lt;p&gt;What I know is that the design work I did here was the most demanding of my career so far. Two audiences, two platforms, two design systems, a compressed timeline, marketing work running parallel throughout. Each one manageable. All of them at once, not so much.&lt;/p&gt;
&lt;p&gt;The coffee is always cold by the time I get to it.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;em&gt;If you&apos;re working on a similar integration, one product living inside another, the design system negotiation is the thing to start early. The visual compromises are manageable. The interaction pattern conflicts are harder. Get that conversation with the partner&apos;s design team on the calendar before anyone writes a line of code.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Originally published on kargaev.me. Imported to blog.deeflect.com archive.&lt;/em&gt;&lt;/p&gt;
</content:encoded></item><item><title>Moving doesn&apos;t fix your design problems</title><link>https://blog.deeflect.com/valk-11-moving-countries-design/</link><guid isPermaLink="true">https://blog.deeflect.com/valk-11-moving-countries-design/</guid><description>I moved from Istanbul to LA and found the same Figma files waiting. Reflections on nomadic remote work, timezone pain, and why stability matters for design.</description><pubDate>Mon, 15 Aug 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I moved to Los Angeles in March, and for the first week I kept waiting for something to change about my work.&lt;/p&gt;
&lt;p&gt;The apartment was new. The light was different, that particular Southern California brightness that hits everything flat and warm. The streets were wide in a way that felt slightly absurd after Istanbul&apos;s narrow chaos. My partner and I were still unpacking boxes when I opened Figma for the first time and found, unsurprisingly, the same dashboard screens I&apos;d been redesigning for three weeks. Same components. Same edge cases I&apos;d been putting off. Same Slack message from our frontend engineer asking about a spacing inconsistency I&apos;d documented but not yet resolved.&lt;/p&gt;
&lt;p&gt;Location independence is real. The fantasy version of it is not.&lt;/p&gt;
&lt;h2&gt;What I actually expected&lt;/h2&gt;
&lt;p&gt;I&apos;ve been moving between countries since 2019. Saint Petersburg, then Thailand and Bali, back to Russia during the COVID lockdowns, then Turkey for most of 2020 and 2021, Istanbul for the first part of this year. I used to think, and I think many remote workers believe this quietly, even if they don&apos;t say it, that a new environment would somehow generate new energy. That the change of scenery would shake something loose creatively. That I would sit at a cafe in Chiang Mai and suddenly understand the design problem I&apos;d been stuck on.&lt;/p&gt;
&lt;p&gt;This is not completely wrong. Sometimes a change of environment does shake something loose. But it&apos;s much more mechanical than the romantic version. Unfamiliar surroundings force you to pay attention differently, and occasionally that attention bleeds into how you think about a problem. It&apos;s temporary. It fades in about three days.&lt;/p&gt;
&lt;p&gt;What doesn&apos;t change: the actual hard parts of the work.&lt;/p&gt;
&lt;h2&gt;The same files followed me everywhere&lt;/h2&gt;
&lt;p&gt;At VALK, I&apos;ve been designing a platform for institutional private capital markets. The complexity is not the kind that changes based on your mood or your environment. Data-dense tables for investment managers. Deal flow interfaces for asset managers who don&apos;t have patience for UI that requires explanation. Compliance reporting screens that have to be precise and readable at the same time. These problems were hard in Istanbul and they&apos;re hard in Los Angeles.&lt;/p&gt;
&lt;p&gt;The specific issue I remember bringing from Turkey to California was a table component problem, handling variable column configurations across different institutional user types without breaking the layout logic. I&apos;d been circling it for weeks. I thought, half-jokingly, that maybe the new timezone would give me fresh eyes.&lt;/p&gt;
&lt;p&gt;It did not. I solved it eventually, but in the same way I solve most hard design problems: by sitting with it long enough that I stopped being clever about it and started being systematic. That happened in my apartment in Silver Lake, looking at the same Figma file, drinking coffee that honestly wasn&apos;t as good as what I had in Istanbul.&lt;/p&gt;
&lt;p&gt;The location had nothing to do with it.&lt;/p&gt;
&lt;h2&gt;What actually changed (and not for the better, at first)&lt;/h2&gt;
&lt;p&gt;Moving from Istanbul to Los Angeles made my async work more async, which was not the plan.&lt;/p&gt;
&lt;p&gt;London is where most of the team is. From Istanbul, I was two hours ahead, manageable. I could join early afternoon calls without too much friction, and there was natural overlap in the mornings when engineers would post updates I could respond to before they left for the day.&lt;/p&gt;
&lt;p&gt;From Los Angeles, I&apos;m eight hours behind. By the time I sit down to work in the morning, the UK team is finishing their day or already gone. This sounds like a small logistical detail but it compounds. A question I ask at 10am my time gets answered when I&apos;m asleep. Their follow-up arrives while I&apos;m still sleeping. A review cycle that used to take a day and a half now takes three days if the back-and-forth goes more than two exchanges.&lt;/p&gt;
&lt;p&gt;I adapted. We adapted. More documentation, more explicit async communication, more decisions made in writing rather than in calls. In some ways this is better, I&apos;m more deliberate about what I communicate and how. But I&apos;d be lying if I said the timezone gap didn&apos;t cost us something in the first few months. There were moments where I missed something obvious because I wasn&apos;t in the same rhythm as the team.&lt;/p&gt;
&lt;p&gt;This is the kind of problem that the &quot;work from anywhere&quot; discourse never really accounts for. Yes, you can work from anywhere. But your teammates are somewhere specific, and the further you drift from their timezone, the more you have to build systems to compensate.&lt;/p&gt;
&lt;h2&gt;What did change, genuinely&lt;/h2&gt;
&lt;p&gt;Living in the US changed how I understand American financial users.&lt;/p&gt;
&lt;p&gt;VALK serves institutions, mostly European and increasingly American. When I was designing from Russia or Turkey, I had theoretical understanding of how American financial professionals operate. I knew the products they use, the conventions they expect. But there&apos;s something about actually being in the country, seeing how people talk about money here, overhearing conversations, noticing what financial apps are being advertised on the subway, what interfaces are common in everyday banking, that adds texture to that understanding.&lt;/p&gt;
&lt;p&gt;It&apos;s not that I couldn&apos;t design for this user before. I could. But now I have more reference points that are intuitive rather than researched. The difference between knowing something from documentation and knowing it from living inside it.&lt;/p&gt;
&lt;p&gt;I also started paying closer attention to American design communities. More meetups here, more conferences, more public discourse about design at companies I actually recognize. I&apos;ve attended exactly one meetup in five months, because I&apos;m deeply introverted and networking in person still feels exhausting. But I&apos;ve been reading more, following more people working at American fintech companies, understanding the professional ecosystem better.&lt;/p&gt;
&lt;p&gt;Even if I never go to another event, the ambient exposure matters. It&apos;s like background radiation for your professional thinking.&lt;/p&gt;
&lt;h2&gt;Location changes mood. Mood changes work. But not as much as you think.&lt;/h2&gt;
&lt;p&gt;I want to be precise about this because I think it&apos;s easy to overstate.&lt;/p&gt;
&lt;p&gt;There&apos;s a version of this reflection where I say every place I lived made me a better designer. That&apos;s not really true. What changed was my mood, my general sense of possibility, my stress levels. These things do affect work, a stressed, unhappy designer produces worse work than a content, settled one. But that&apos;s a floor condition, not a creative lever.&lt;/p&gt;
&lt;p&gt;Thailand was beautiful and I was happy there. I also did some of the worst design work of my time at VALK during that period, because I was distracted and the team was still figuring out what VALK was supposed to be, and I didn&apos;t have enough context about the domain to make good decisions. The good mood didn&apos;t compensate for the missing knowledge.&lt;/p&gt;
&lt;p&gt;Istanbul in 2021-2022 was where I did some of my better work. Partly because I was more settled, had been at VALK longer, understood the product and users more deeply. Also partly because Istanbul is a city that makes you feel like a person, good food, good coffee, real neighborhoods. My partner and I were genuinely happy there. That helped. But I was also just more experienced. The city didn&apos;t give me the experience.&lt;/p&gt;
&lt;p&gt;Bali during COVID quarantine was maybe the strangest period. We were stuck, genuinely uncertain about what was happening, and I remember doing extremely thorough, detailed design work just to have something controllable in an uncontrollable situation. That wasn&apos;t the location inspiring me. That was anxiety channeling itself productively.&lt;/p&gt;
&lt;h2&gt;The nomad myth and what it costs&lt;/h2&gt;
&lt;p&gt;There&apos;s a particular kind of person who is very loud about location-independent work on the internet. They emphasize the freedom, the novelty, the flexibility. They&apos;re not wrong that these things exist. But they underweight what constant movement costs.&lt;/p&gt;
&lt;p&gt;You can&apos;t build habits easily when you&apos;re moving. The gym you found in month one is not there in month two. The coffee shop with the good wifi and the table by the window, you figured that out, and now you&apos;re in a different city and have to figure it out again. Small things individually. Accumulated, they add friction to just getting started each day.&lt;/p&gt;
&lt;p&gt;More seriously: you can&apos;t go deep on work when part of your brain is managing logistics. Finding accommodation, navigating healthcare, figuring out banking, dealing with visas. Even when you&apos;re good at this, it&apos;s cognitive load that doesn&apos;t go to design thinking.&lt;/p&gt;
&lt;p&gt;I spent time in nine or ten different places over three years. I don&apos;t regret it, my partner and I were doing something important together, seeing the world, building a life that felt like ours rather than default. But I was also slower at work during moving periods than during settled ones. I would not recommend constant movement to someone who wants to do their best design work.&lt;/p&gt;
&lt;h2&gt;The best work I&apos;ve done was in one place for a long time&lt;/h2&gt;
&lt;p&gt;I&apos;ve been in Los Angeles for five months and I can already feel the difference. I have a desk. The desk is in the same room every morning. I know where to get good coffee within walking distance. My partner and I have routines.&lt;/p&gt;
&lt;p&gt;These things sound trivial, but they free up the part of my brain that used to manage orientation.&lt;/p&gt;
&lt;p&gt;The design work I&apos;ve done this year, more complex component architecture for the VALK platform, working through the data visualization problems for portfolio reporting, thinking through how the product should evolve; has been more sustained than in previous years. I&apos;m not moving fast, necessarily. I&apos;m thinking more carefully. I go back to problems more often. I&apos;m less likely to ship something I know is not quite right just because I need to close the file and go figure out where to eat.&lt;/p&gt;
&lt;p&gt;Some of this is just that I&apos;ve been at VALK longer and understand the domain better. But some of it is genuinely the stability.&lt;/p&gt;
&lt;h2&gt;What LA gave me that I didn&apos;t expect&lt;/h2&gt;
&lt;p&gt;The city is enormous and car-dependent in a way that&apos;s genuinely difficult to adapt to after years of cities where you walk everywhere. I don&apos;t love that. But the scale of it, oddly, has been good for my sense of proportion.&lt;/p&gt;
&lt;p&gt;When everything is big, you stop expecting small decisions to be precious. The design industry discourse I&apos;m now more exposed to operates at different scale, companies with huge user bases, design teams with dozens of people, problems that involve millions of users. I&apos;m still at a company where I&apos;m the only designer. But being adjacent to that scale, reading about it, occasionally talking to people who work in that context, has recalibrated how I think about our own product decisions. Some of our problems are genuinely hard. Some of them are small and I was treating them like they were hard.&lt;/p&gt;
&lt;p&gt;That&apos;s a useful recalibration.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;If you&apos;re a remote designer thinking that moving to a new city will solve your design problems: it won&apos;t. The files come with you. The hard conversations come with you. The edge cases in your component library come with you.&lt;/p&gt;
&lt;p&gt;But if you&apos;re exhausted, genuinely exhausted, from moving too much, and you find somewhere that feels like it might be home for a while, settle. Give it a year. See what you can actually do when you&apos;re not managing logistics in the background.&lt;/p&gt;
&lt;p&gt;I&apos;m still figuring out LA. But the Figma work is going better, and I don&apos;t think that&apos;s a coincidence.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Originally published on kargaev.me. Imported to blog.deeflect.com archive.&lt;/em&gt;&lt;/p&gt;
</content:encoded></item><item><title>Designing financial UI for 15+ countries</title><link>https://blog.deeflect.com/valk-10-designing-15-countries/</link><guid isPermaLink="true">https://blog.deeflect.com/valk-10-designing-15-countries/</guid><description>What I learned designing VALK&apos;s platform across 15 countries  -  date formats, RTL, regulatory UI rules, and how to structure Figma for regional variants.</description><pubDate>Mon, 30 May 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The first thing I noticed when I moved to Los Angeles was how American financial interfaces feel. I had opened a new bank account within two weeks of arriving, and the app was clean, friendly, almost cheerful about money. Big numbers, rounded corners, green everywhere. A far cry from the dense, serious layouts I had spent three years designing for institutional investors across Europe and the Middle East.&lt;/p&gt;
&lt;p&gt;That contrast stuck with me. Not as criticism, just as reminder that the way we design financial products is deeply shaped by where we are. And when your product has to work across fifteen countries simultaneously, that becomes real engineering problem. Not philosophical one.&lt;/p&gt;
&lt;p&gt;VALK served institutions across the UK, continental Europe, the Middle East, North America, and parts of Latin America. Seventy-plus financial institutions — investment banks, hedge funds, and asset managers —, each operating under different regulators, using different conventions, carrying different cultural expectations about what a &quot;serious&quot; financial interface looks like. For most of my time there, I was the only designer. So I had to figure out how to handle all of this without creating fifteen separate products.&lt;/p&gt;
&lt;h2&gt;Localization is not translation&lt;/h2&gt;
&lt;p&gt;This is the thing people get wrong first. They think localization means you take your strings, send them to translator, and the job is done. That&apos;s barely twenty percent of the work.&lt;/p&gt;
&lt;p&gt;Real localization is about information hierarchy. What data a user expects to see first. How they read a table. Whether they trust a minimalist layout or find it suspicious. Languages change the shape of text, German financial terms are long, Arabic flows right to left, Russian uses completely different number grouping conventions. Each of these requires actual design decisions, not just string swaps.&lt;/p&gt;
&lt;p&gt;When I first approached this problem in 2020, I made the mistake of thinking about localization as a final step, something you handle after the real design is done. By 2022, after working with clients from Riyadh, Zurich, São Paulo, and London in the same quarter, I understood that localization has to be structural decision you make at the component level.&lt;/p&gt;
&lt;h2&gt;The small things that are actually huge problems&lt;/h2&gt;
&lt;p&gt;Let me be specific, because vague advice about &quot;cultural sensitivity&quot; is not useful.&lt;/p&gt;
&lt;p&gt;Date formats. This one caused an actual support incident. We had a data room where documents showed a signing date. In the UK, 06/07/2021 means the seventh of June. In the US, it means the sixth of July. In some of our middleware logging, we were getting ISO 8601 (YYYY-MM-DD), what the backend engineers defaulted to. Three different formats, one field, one very confused client in New York looking at what appeared to be backdated document.&lt;/p&gt;
&lt;p&gt;The solution sounds simple: always display dates with the month written out, or always use the locale-appropriate format explicitly. But that requires every date component in your design system to accept a locale parameter, which means you have to design for that from the start. If you bolt it on later, you end up with patchwork of inconsistent date displays across different parts of the product.&lt;/p&gt;
&lt;p&gt;Currency formatting. In the US: $1,000,000.00. In most of continental Europe: 1.000.000,00 €. In Russia, when I was still working from there: 1 000 000,00 ₽ with space as the thousands separator. Show European institutional investor a large number formatted the American way and they will pause. Small cognitive friction, but in product built around trust, you really cannot afford it.&lt;/p&gt;
&lt;p&gt;I built currency display as dedicated component in Figma, with variants for locale. Not because Figma renders these differently, it doesn&apos;t, but because it forced every screen that showed a financial number to explicitly declare its formatting intent. When the developer implements it, the decision is already made. No ambiguity in the handoff.&lt;/p&gt;
&lt;p&gt;Number density is harder to quantify but it&apos;s real. When we were working with clients from East Asian financial institutions, the feedback I got, through the CEO relaying conversations, was that the dashboards felt &quot;light.&quot; Not enough information visible at once. These were users accustomed to dense terminal-style interfaces. Meanwhile, some of our Nordic clients felt the same dashboards were too busy. They wanted one key number and then progressive disclosure to get deeper.&lt;/p&gt;
&lt;p&gt;There is no layout that serves both of these users equally. What you can do is design flexible information architecture, modules that can be shown or hidden, table columns that can be configured, and then set sensible regional defaults.&lt;/p&gt;
&lt;h2&gt;RTL, the one that changes everything&lt;/h2&gt;
&lt;p&gt;Arabic is the case that forces you to actually think about your layout assumptions.&lt;/p&gt;
&lt;p&gt;We had client in the Middle East, and even though their internal interface language was English, we were anticipating growth in markets where Arabic support would matter. I started doing the mirroring exercise as thought experiment first. Take a screen, flip everything horizontally. Navigation goes from left to right. Tables align from right to left. Icons that imply direction, arrows, chevrons, progress indicators, all need to be reconsidered.&lt;/p&gt;
&lt;p&gt;The first time I mirrored one of our deal room layouts, I found about eight places where I had hardcoded directional assumptions that had nothing to do with text. A document progress bar that animated left-to-right. Sidebar visually anchored to the left. Tab navigation that opened to the right. None of these were text elements. All of them needed adjustment.&lt;/p&gt;
&lt;p&gt;RTL support is not just a CSS &lt;code&gt;direction: rtl&lt;/code&gt; property. It requires designing bidirectional-aware components from the beginning, or going back and rebuilding. I have seen teams defer this until they have real paying client who needs it, then spend three months untangling assumptions that were baked in from day one.&lt;/p&gt;
&lt;h2&gt;Regulatory differences that affect the actual UI&lt;/h2&gt;
&lt;p&gt;This is the one that surprised me most when I first started working in fintech. I came from agency background where the client tells you what to show, and you show it. In regulated financial products, what you are allowed to show, and what you are required to show, differs by jurisdiction.&lt;/p&gt;
&lt;p&gt;In the UK, under FCA regulations, certain risk disclosures need to be visible at specific points in a transaction flow. The exact wording, placement, and visibility requirements are specified. You cannot tuck disclaimer in a footer and call it done.&lt;/p&gt;
&lt;p&gt;Switzerland has different norms around what performance data can be displayed before a user has been properly classified as qualified investor. Show the wrong number to the wrong user type, and it is compliance issue, not just a design decision.&lt;/p&gt;
&lt;p&gt;What this meant in practice: some UI elements existed in some regional configurations and were literally absent in others. Not hidden behind a click, not visually suppressed, structurally absent for certain jurisdictions. This pushed me toward configuration-driven design approach. Components needed to be built as if they could be switched on or off per region, per user type, per regulatory requirement.&lt;/p&gt;
&lt;p&gt;Designing for this is humbling. You realize the &quot;clean, simple&quot; interface you want to build is actually a series of conditional states, each driven by rules that live outside of your Figma file.&lt;/p&gt;
&lt;h2&gt;Color and trust&lt;/h2&gt;
&lt;p&gt;Red means &quot;stop&quot; or &quot;bad&quot; in most Western financial interfaces. Portfolio is down, you show red. Risk warning, red. Error state, red.&lt;/p&gt;
&lt;p&gt;In some East Asian financial cultures, red is traditionally associated with luck and positive outcomes. It&apos;s the color of profit in some markets, Hong Kong being the most-cited example, where red on a stock chart means the price went up.&lt;/p&gt;
&lt;p&gt;I am not saying you should redesign your entire color system for every regional market. But it is worth knowing when you are making cultural assumption versus universal one. If you are building for single market, your color conventions can be local. If you are building for fifteen, you should at least be intentional about which conventions you are defaulting to and why.&lt;/p&gt;
&lt;p&gt;We kept green/red as the primary gain/loss indicators because our primary market was UK and European institutions. But I flagged it as known limitation in the design documentation, noting that any future expansion into East Asian retail markets would need review of this system.&lt;/p&gt;
&lt;h2&gt;How I organized Figma to not lose my mind&lt;/h2&gt;
&lt;p&gt;The practical question: how do you manage this in real design file without duplicating everything six times?&lt;/p&gt;
&lt;p&gt;My approach was design tokens plus component configuration, not separate files per region.&lt;/p&gt;
&lt;p&gt;In Figma, I maintained core component library that was region-agnostic at the structural level. Number display components accepted format parameters. Date components had locale variants in their properties. Direction-sensitive icons had mirrored versions as separate component variants, selectable with one click. Then I had separate &quot;regional configuration&quot; page in the file, not a real design deliverable, more of a reference document. It mapped out which component variants were active in which configurations: UK flow, EU flow, MENA flow, US flow. Mostly for me, and for whoever was implementing. It made the conditional logic visible without needing to maintain fifteen separate design files.&lt;/p&gt;
&lt;p&gt;The danger of managing this in Figma is that you can accidentally create drift, the UK version gets a change that never propagates to the EU version. My solution was to treat the component library as source of truth for structure, and the regional configuration as source of truth for what gets used where. Any structural change to a component would automatically affect all regional variants because they all used the same component. Regional differences were expressed only through configuration choices, not through structural changes.&lt;/p&gt;
&lt;p&gt;Easier to say than to maintain, honestly. When you are moving fast and there is only one of you, shortcuts happen. But the principle held.&lt;/p&gt;
&lt;h2&gt;What moving countries taught me about design&lt;/h2&gt;
&lt;p&gt;I have been thinking about this more since arriving in Los Angeles.&lt;/p&gt;
&lt;p&gt;I grew up in Russia, worked from Saint Petersburg, spent time in Phuket, few months in Bali during the early pandemic, then Alanya and Istanbul. Each place had its own relationship to money, to what financial interfaces felt like, what felt trustworthy, what felt suspicious.&lt;/p&gt;
&lt;p&gt;In Turkey, during the inflation period in 2021, the relationship to currency was different. Numbers moved fast. People were accustomed to seeing prices change and tracking exchange rates closely. Dashboard that showed only today&apos;s value without historical context would have felt incomplete.&lt;/p&gt;
&lt;p&gt;In the US, I notice that financial products are built around optimism and simplicity. The UI encourages you to not look too closely, to trust the system, to feel good about investing. European and especially UK institutional products feel different, more serious, more disclosure-heavy, more skeptical of the user.&lt;/p&gt;
&lt;p&gt;Neither is wrong. They reflect real cultural differences in how people relate to financial institutions and financial risk. But understanding those differences, not as tourist, but as someone who has actually lived in different places and opened bank accounts and used local financial apps, has been useful in my design work in ways that reading about cultural UX differences in articles never fully was.&lt;/p&gt;
&lt;p&gt;The move to LA coincided with me starting to think more carefully about US market as design context in its own right. Americans are not Europeans who happen to speak English. Their expectations for financial interfaces, their trust patterns, their tolerance for risk and disclosure, these are different. And I am only starting to understand this from the inside.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;There is probably no final solution to designing for fifteen countries. Scope of difference is too large to fully systematize. What you can do is build systems that are honest about the variations, that encode the regional decisions explicitly rather than pretending there is universal interface that works everywhere.&lt;/p&gt;
&lt;p&gt;The day you stop treating localization as afterthought and start treating it as structural design requirement is the day your international product starts to actually work internationally. For me, that realization came late. But it came.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Originally published on kargaev.me. Imported to blog.deeflect.com archive.&lt;/em&gt;&lt;/p&gt;
</content:encoded></item><item><title>Designing for users you cannot talk to</title><link>https://blog.deeflect.com/valk-09-users-no-feedback/</link><guid isPermaLink="true">https://blog.deeflect.com/valk-09-users-no-feedback/</guid><description>Three years of enterprise B2B design at VALK with almost no user research access  -  and the proxy methods that replaced it.</description><pubDate>Mon, 14 Feb 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Two years ago, I wrote a user flow for a feature that I was genuinely proud of. Clean logic, thoughtful edge cases, good empty states. We shipped it. A few months later, I asked if anyone had used it. The answer from our account manager was something like: &quot;I think one client mentioned it in passing. They said it was fine.&quot;&lt;/p&gt;
&lt;p&gt;Fine.&lt;/p&gt;
&lt;p&gt;That was the most feedback I got on three weeks of work. And honestly, that&apos;s pretty typical for what I do.&lt;/p&gt;
&lt;p&gt;I&apos;ve been the sole designer at VALK for over three years now. The product is used by portfolio managers, compliance officers, and traders at institutional financial firms, hedge funds, investment banks, asset managers across fifteen-plus countries. These are real people sitting at real desks making real decisions with the interfaces I design. And with very rare exceptions, I have never spoken to a single one of them.&lt;/p&gt;
&lt;p&gt;This is enterprise B2B design. The feedback loop doesn&apos;t just close slowly, sometimes it doesn&apos;t close at all.&lt;/p&gt;
&lt;h2&gt;The access problem&lt;/h2&gt;
&lt;p&gt;In consumer product design, the research process is something you can actually plan around. User interviews, usability testing, surveys, A/B tests, session recordings. You have direct access to the people using your product and many ways to observe their behavior.&lt;/p&gt;
&lt;p&gt;Enterprise B2B breaks this completely.&lt;/p&gt;
&lt;p&gt;When your users are bankers and fund managers at regulated financial institutions, reaching them is not a matter of posting a recruitment survey in a Slack community. There are layers of intermediaries: account managers, legal teams, compliance officers who are deeply skeptical of anything that involves external parties observing their workflows. The relationship between VALK and our clients is formal, often governed by contracts that make any kind of research request a complicated conversation.&lt;/p&gt;
&lt;p&gt;And even when access is technically possible, the users themselves are not interested in talking to a designer. They are busy professionals. Their time costs money in a very literal sense. Sitting on a call to walk through their pain points with a 25-year-old designer in Istanbul is not how they want to spend an afternoon.&lt;/p&gt;
&lt;p&gt;So you adapt. You find proxy methods. You build a different kind of research practice from whatever scraps are available.&lt;/p&gt;
&lt;h2&gt;What I actually use instead of user research&lt;/h2&gt;
&lt;p&gt;Support tickets are underrated. When I can get access to them, usually filtered through our CEO or the account managers, they are the closest thing I have to unfiltered user feedback. Not because they tell me what users want, but because they tell me where users are confused or stuck. A user filing a ticket is a user who already failed to figure something out on their own. That&apos;s a signal. I started keeping a running document of recurring ticket themes, because patterns in support requests map very directly to design failures.&lt;/p&gt;
&lt;p&gt;Feature requests are a different kind of signal. They tell you what users are trying to do, not necessarily what they&apos;re asking for. When several institutional clients asked for a specific data export format, the surface request was about file types. The underlying need was about fitting VALK&apos;s output into their existing internal reporting workflows. I only got there by reading the requests carefully and asking follow-up questions through the account managers, and that distinction changed how we approached the problem entirely. We didn&apos;t just add export formats. We redesigned the data structure to be more flexible upstream.&lt;/p&gt;
&lt;p&gt;Then there is over-the-shoulder observation during demos. This is probably the most valuable thing I have access to, and it happens accidentally. When the CEO or an account manager demos the product to a prospective client over a screen share call, sometimes I&apos;m invited to watch. Not to present, just to observe. And in those moments, I watch how the person on the other end reacts. Where they lean forward. Where they look confused. What questions they ask. I&apos;ve redesigned small but meaningful things based purely on watching someone hesitate over a UI element during a twenty-minute sales demo.&lt;/p&gt;
&lt;h2&gt;The CEO as a proxy for the user&lt;/h2&gt;
&lt;p&gt;In the absence of direct user access, the CEO became my most important research partner. I didn&apos;t fully understand this when I first started at VALK, it became clearer over time.&lt;/p&gt;
&lt;p&gt;He comes from a finance background. He understands the domain in a way that most designers, myself included, have to actively work to develop. When he looks at a feature and says &quot;a portfolio manager would never think about it this way,&quot; that&apos;s not just an opinion. That&apos;s accumulated domain knowledge I can&apos;t get anywhere else.&lt;/p&gt;
&lt;p&gt;I had to learn how to use this properly. Early on, I would show him designs and ask &quot;does this look good?&quot;; which was the wrong question entirely. Later I learned to ask things like &quot;when someone is reviewing deal documentation, what&apos;s the first thing they&apos;re checking?&quot; or &quot;what would make a compliance officer trust this interface more?&quot; Framing questions around user behavior and mental models, not visual preferences, produced much more useful answers.&lt;/p&gt;
&lt;p&gt;It&apos;s not perfect. A CEO&apos;s perspective has its own biases, he naturally gravitates toward power users and edge cases because those are the clients he talks to most. But it&apos;s a real signal, and it became the closest thing I had to user research for a long time.&lt;/p&gt;
&lt;h2&gt;Heuristic evaluation became my foundation&lt;/h2&gt;
&lt;p&gt;When you don&apos;t have users to test with, you fall back on principles. Nielsen&apos;s heuristics, Fitts&apos;s Law, cognitive load theory, established patterns for financial interfaces, these stopped being academic references and became my primary evaluation tools.&lt;/p&gt;
&lt;p&gt;Before shipping anything significant, I do a structured self-audit. I go through the design and force myself to answer specific questions: Where is the user&apos;s attention going first? Is there a clear visual hierarchy? If something goes wrong, does the interface communicate it clearly and suggest a recovery path? Is there anything that looks interactive but isn&apos;t, or vice versa? Are we exposing complexity that the user doesn&apos;t need at this stage?&lt;/p&gt;
&lt;p&gt;This sounds obvious. Every designer learns these things. But there&apos;s a difference between knowing heuristics and actually building a disciplined habit of applying them, especially when you&apos;re working fast and there&apos;s no one sitting next to you to catch your blind spots.&lt;/p&gt;
&lt;p&gt;The financial domain adds extra dimensions to this. Data density is a real concern. Portfolio managers and traders are used to dense interfaces, Bloomberg terminal-style, and there&apos;s a balance between giving them the information they want visible and overwhelming a less experienced user. Error handling matters more when a mistake could affect a transaction. Trust signals, visual consistency, precision in numbers and dates, clear audit trails, these are not nice-to-haves, they&apos;re baseline requirements.&lt;/p&gt;
&lt;p&gt;I&apos;ve spent a lot of time thinking about what &quot;trust&quot; looks like in a financial interface. It&apos;s partly visual, clean, professional, no unnecessary decoration, but it&apos;s more about behavioral consistency. If the interface behaves predictably every time, users build trust in it even without consciously thinking about it. Surprise is the enemy of trust in enterprise software.&lt;/p&gt;
&lt;h2&gt;Competitive analysis as a form of research&lt;/h2&gt;
&lt;p&gt;VALK operates in a space with a few direct competitors, companies like Securitize and Tokeny working on similar infrastructure for private capital markets. I&apos;ve spent real time studying their interfaces, not to copy them, but to understand the design decisions they&apos;ve made and why.&lt;/p&gt;
&lt;p&gt;Competitive analysis is not a substitute for user research, but it&apos;s informative in a specific way: these products are trying to solve similar problems for similar users, and how they&apos;ve chosen to solve them is a signal. When two competitors make the same structural decision, how they handle investor onboarding, how they present cap table data, it suggests that decision was probably informed by user feedback somewhere in their process. When they diverge dramatically, it&apos;s worth understanding what&apos;s driving the difference.&lt;/p&gt;
&lt;p&gt;I&apos;m also looking for patterns in what these products don&apos;t do well. Gaps that exist across multiple competitors usually exist because the problem is genuinely hard, and that&apos;s worth understanding before you assume you can solve it easily.&lt;/p&gt;
&lt;h2&gt;When I actually got to talk to a user&lt;/h2&gt;
&lt;p&gt;It happened maybe four or five times over three years. Every single time, it was illuminating in ways I did not expect.&lt;/p&gt;
&lt;p&gt;The most memorable was a call with someone who managed fund operations at a mid-sized asset manager. We had added a reporting view that I was proud of, clean layout, good data hierarchy, exportable. She mentioned almost immediately that she never used it. I asked why. She said her team had a specific internal format they reported to their LPs in, and VALK&apos;s view didn&apos;t match it, so they were exporting raw data and reformatting it themselves in Excel every time.&lt;/p&gt;
&lt;p&gt;I had designed something that looked great and solved what I thought the problem was. She had a completely different problem. And she had adapted her workflow around my design without ever telling anyone it was costing her team time every month.&lt;/p&gt;
&lt;p&gt;That conversation changed a feature direction. But more than that, it reminded me that I am almost certainly wrong about something right now, in something I shipped three months ago, and I won&apos;t know about it for a long time.&lt;/p&gt;
&lt;p&gt;This is the fundamental discomfort of enterprise B2B design. You carry assumptions you cannot fully validate, and you have to make peace with that while still trying to get closer to correct.&lt;/p&gt;
&lt;h2&gt;The assumption trap&lt;/h2&gt;
&lt;p&gt;Every design decision in a context like this is built on a stack of assumptions. Assumptions about what users are trying to do, about their mental models, about what they find confusing. Without research, you cannot fully validate those assumptions. You can only minimize the most dangerous ones.&lt;/p&gt;
&lt;p&gt;What I&apos;ve learned to do is make my assumptions explicit. When I&apos;m designing something, I write down the assumptions underneath the decisions: &quot;This design assumes that the primary user reviewing deal documents is doing so before a committee meeting, not during it. This design assumes that the user is familiar with basic cap table concepts. This design assumes that users will use this feature repeatedly, not once.&quot; Writing them down forces clarity. It also means that when something doesn&apos;t work, you can sometimes trace it back to a specific assumption that was wrong.&lt;/p&gt;
&lt;p&gt;It doesn&apos;t eliminate the problem. But it makes the problem more legible.&lt;/p&gt;
&lt;h2&gt;Three years, four countries, same product&lt;/h2&gt;
&lt;p&gt;I&apos;m writing this in Istanbul, in the last few weeks before my partner Anna and I move to Los Angeles. Strange moment to reflect, three years at the same product, from Saint Petersburg to Phuket to Bali to Turkey, always working on the same interface for users I mostly couldn&apos;t talk to.&lt;/p&gt;
&lt;p&gt;Remote design in a B2B context is a particular kind of isolation. You&apos;re away from the team, away from the users, away from the industry events where you might run into people who use products like yours. You&apos;re designing in a room with your own assumptions for company.&lt;/p&gt;
&lt;p&gt;I&apos;ve gotten better at enterprise UX precisely because I had to develop more rigorous internal practices, heuristic evaluation, structured competitive analysis, extracting signal from indirect sources, building the discipline to make assumptions explicit. These things compensated, partially, for the access I didn&apos;t have.&lt;/p&gt;
&lt;p&gt;But I&apos;m also aware that the best version of this work would involve more direct user contact. Even one research session per quarter would change what I&apos;m able to do. It&apos;s something I want to push for more actively as we keep growing.&lt;/p&gt;
&lt;p&gt;The assumption that I can&apos;t talk to users is itself an assumption worth testing more often.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Originally published on kargaev.me. Imported to blog.deeflect.com archive.&lt;/em&gt;&lt;/p&gt;
</content:encoded></item><item><title>Why your design system probably does not work</title><link>https://blog.deeflect.com/valk-08-design-system-not-working/</link><guid isPermaLink="true">https://blog.deeflect.com/valk-08-design-system-not-working/</guid><description>After 2 years maintaining a solo design system at VALK, I found the real problems are organizational  -  not technical. Here&apos;s what I got wrong.</description><pubDate>Mon, 08 Nov 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;There is a specific kind of frustration that comes from looking at your own work and realizing it does not function the way you intended. Not broken, just not &lt;em&gt;working&lt;/em&gt;. Two years ago I built a design system for VALK from the beginning, components, tokens, documentation, spacing rules, color semantics, typography scale. Last month I went through the actual product screens in production and compared them against what lives in Figma. They do not match as much as I thought they would.&lt;/p&gt;
&lt;p&gt;I am writing this from a rented place in Krasnaya Polyana, small mountain town in southern Russia near Sochi. It is quiet here, good for thinking. I came to clear my head after a long stretch of work and instead I keep opening Figma and staring at the gap between what the system says and what ships.&lt;/p&gt;
&lt;p&gt;This article is not about how to build design system. There are many good resources for that. This is about what happens after you build it, specifically when you are the only designer on the team.&lt;/p&gt;
&lt;h2&gt;Two years of systematic thinking, delivered inconsistently&lt;/h2&gt;
&lt;p&gt;When I joined VALK in late 2019, there was no design system. No design anything, really. I started from scratch, which sounds exciting and in some ways it was. I could make decisions without inheriting someone else&apos;s bad choices.&lt;/p&gt;
&lt;p&gt;By mid-2020 I had working component library in Figma. By end of 2020 it was well-documented. By mid-2021 it covered almost every UI pattern we needed, data tables, form elements, modal variants, notification states, empty states, financial charts styling, investor card layouts. I was proud of it.&lt;/p&gt;
&lt;p&gt;But over time something strange happened. The system was comprehensive and the product was inconsistent. Both things were true at the same time.&lt;/p&gt;
&lt;p&gt;Some buttons in production have different border-radius than the design spec. Some form labels use slightly different gray than what I defined. Spacing between elements in certain sections is close but not exact, 14px where it should be 16px. Nothing catastrophic. But enough that when you look carefully, the product does not feel as precise as it should.&lt;/p&gt;
&lt;p&gt;The code and the components diverged. Gradually, quietly, without any single moment of failure.&lt;/p&gt;
&lt;h2&gt;The documentation nobody reads&lt;/h2&gt;
&lt;p&gt;I wrote good documentation. I know this because I spent real time on it, explaining not just what each component is, but &lt;em&gt;why&lt;/em&gt; it works a certain way. Why the primary button has that specific padding. Why we use that particular blue and not the one that looks similar. The reasoning behind decisions.&lt;/p&gt;
&lt;p&gt;Our frontend engineer has not read most of it. I say this not as criticism, he is good at his job and he works fast. But the documentation lives in Figma and when you are writing code, you are not in Figma. You are in your editor, you are in the codebase, you are looking at existing components that are already there. That is your reference, not some nested Figma page with annotations.&lt;/p&gt;
&lt;p&gt;I realized this late.&lt;/p&gt;
&lt;p&gt;I thought documentation was a solution. It is not a solution, it is evidence that you thought carefully. That is different. The people who read design documentation are other designers. Developers read code. This sounds obvious when you write it out, but when I was building the system I was thinking like a designer, not like a developer.&lt;/p&gt;
&lt;h2&gt;The solo designer paradox&lt;/h2&gt;
&lt;p&gt;When you are the only designer, you build the system and you also break the system. You are the only person who could enforce the rules; and you are also the person most likely to ignore them when you are moving fast.&lt;/p&gt;
&lt;p&gt;There were times when I was designing new feature quickly and I made a component that did not properly follow the system. Maybe I created new variant instead of using existing one. Maybe I used color in way that was not quite right for the context. In larger team, another designer might catch this in review. At VALK, there is only me. So the mistake goes into the file, and sometimes it goes into production because my Figma frame became the reference.&lt;/p&gt;
&lt;p&gt;At Spacecode, the agency in Moscow where I worked before this, there was dedicated person whose primary job was maintaining the design system. She was not designing product features, she was reviewing components, keeping the library clean, doing audits. That structure works. When the system has owner who is separate from the people building with it, the system stays healthier.&lt;/p&gt;
&lt;p&gt;At VALK I am the owner and the primary user. The conflict of interest is permanent.&lt;/p&gt;
&lt;h2&gt;Figma components vs. coded components&lt;/h2&gt;
&lt;p&gt;I have a Figma component. It has variants, auto layout, handles different states, default, hover, focus, error, disabled. It looks correct in every combination I tested.&lt;/p&gt;
&lt;p&gt;The developer implements this component in React. The implementation is based on looking at the Figma component and understanding its behavior. But interpretation is involved. And every time I update the Figma component, the coded component does not automatically update. Someone has to notice that I changed something and then decide if the code needs to change too.&lt;/p&gt;
&lt;p&gt;Nobody has that job at VALK.&lt;/p&gt;
&lt;p&gt;I do not always announce small design system changes. The developer does not always check the Figma library after every update. So they drift. An extra state I added that was never coded. A spacing adjustment I made when refining the grid. A new color semantic I introduced. Each seems minor. Together over two years they create real gap between the design system and the actual product.&lt;/p&gt;
&lt;p&gt;I have seen solutions to this, design tokens that feed directly into code, tools that try to sync Figma variables with CSS variables, processes where every component change triggers development task. These solutions require organizational buy-in and time investment from developers. In small startup moving fast, that investment is hard to justify. The product keeps moving and the system maintenance falls behind.&lt;/p&gt;
&lt;h2&gt;Naming conventions that made sense to me&lt;/h2&gt;
&lt;p&gt;I named things the way designer thinks about them. Colors like &lt;code&gt;color-primary-action&lt;/code&gt;, &lt;code&gt;color-feedback-success&lt;/code&gt;, &lt;code&gt;color-text-secondary&lt;/code&gt;. Spacing tokens like &lt;code&gt;space-component-padding-m&lt;/code&gt;, &lt;code&gt;space-layout-section&lt;/code&gt;. These names describe the purpose, not the value, which is the correct approach according to everything I read about design tokens.&lt;/p&gt;
&lt;p&gt;But when the developer looks at this and then looks at what actually exists in the codebase, which predates some of these naming decisions, the mapping is not always clear. The coded variables have different names because they were named earlier, before I standardized my system. Now there are two naming conventions existing in parallel. The design says one thing, the code says something different, they refer to same value but you have to already know this.&lt;/p&gt;
&lt;p&gt;I should have involved the frontend engineer in creating the naming conventions from the beginning. He is the one who has to live inside the code. If the names feel foreign to him, he will name things his own way; which is exactly what happened.&lt;/p&gt;
&lt;h2&gt;The political reality of design systems&lt;/h2&gt;
&lt;p&gt;I avoided thinking about this for a long time, but the real problem with our design system is not technical. It is political.&lt;/p&gt;
&lt;p&gt;A design system is a set of rules. Rules only have power if there is some enforcement mechanism. In design team of eight people at larger company, enforcement comes from peer review, from design leadership, from cultural expectation that you use the system. When you deviate, someone notices.&lt;/p&gt;
&lt;p&gt;In startup with one designer and one frontend engineer, there is no enforcement mechanism except my own attention. And my attention is spread across product design, pitch decks, social media graphics, investor materials, and many other things that have nothing to do with maintaining component consistency.&lt;/p&gt;
&lt;p&gt;So when the developer needs to ship feature quickly and the right component does not quite cover the case, he improvises. And I am often not looking carefully enough to catch it. The improvisation becomes the precedent. Other similar features get built the same way because now that is what exists in the code.&lt;/p&gt;
&lt;p&gt;The system erodes not through anyone&apos;s failure, just through natural pressure of shipping product at startup pace with very small team.&lt;/p&gt;
&lt;h2&gt;What I would do differently&lt;/h2&gt;
&lt;p&gt;If I could start over, the first thing I would do is sit down with the developer before writing single component.&lt;/p&gt;
&lt;p&gt;Not to show him design system and explain it. To ask him how he builds things. What naming makes sense to him. What patterns he reaches for naturally. What the existing codebase already has that I should preserve rather than replace. Then I would build the system around those answers.&lt;/p&gt;
&lt;p&gt;Designers build design systems for designers. The artifacts are Figma files, component pages, usage guidelines. But the actual users of the system, the people whose work is most directly constrained by whether they follow it, are the developers. They are the ones translating it into real product.&lt;/p&gt;
&lt;p&gt;Building design system without deeply understanding how your developers work is like designing product without understanding how your users work. You make reasonable assumptions and then you are surprised when behavior does not match expectations.&lt;/p&gt;
&lt;p&gt;I also think I built too much too fast. Smaller, more stable system would have been better than comprehensive one that overreached. When the system covers everything, it is harder to maintain everything. Some of our components are used constantly and are very solid. Others were built speculatively for cases that barely exist in the product. Those are the ones most out of sync.&lt;/p&gt;
&lt;h2&gt;What is actually working&lt;/h2&gt;
&lt;p&gt;The core components, button variants, form system, data table, modal pattern, color palette, are stable and mostly consistent in production. When I look at main flows of the product, they feel coherent. Users navigating the core journeys have consistent experience.&lt;/p&gt;
&lt;p&gt;The system succeeded where I invested most consistently and where the developer and I had most direct conversations about implementation. The problems are at the edges, new features, edge cases, rarely-used components.&lt;/p&gt;
&lt;p&gt;That tells me the mechanism for working design system is not documentation. It is conversation. Ongoing, regular conversation between designer and developer about specific components and how they translate to code. Not one-time handoff. Not Figma library and hope that developer finds the right components.&lt;/p&gt;
&lt;h2&gt;Where things stand now&lt;/h2&gt;
&lt;p&gt;I think the system needs partial reset. Not full rebuild, that would be wasteful. But an audit where I identify components that are actually in use and well-implemented, and let go of the parts that exist in Figma but nowhere else.&lt;/p&gt;
&lt;p&gt;I also want to try exporting design tokens in format the developer can actually use directly, something we agree on together rather than something I designed and handed over. Few hours of coordination, but it might close some of that drift.&lt;/p&gt;
&lt;p&gt;The deeper lesson I am sitting with here in the mountains is that design systems are not deliverables. You do not finish them and move on. They are infrastructure, and infrastructure requires ongoing maintenance and people who are responsible for that maintenance. In small company with one designer, that responsibility cannot be distributed, which means it will always be underpowered compared to what the system actually needs.&lt;/p&gt;
&lt;p&gt;I am not sure there is perfect solution to this when you are solo. But understanding the actual problem, it is organizational, not technical, at least helps you stop looking in the wrong places for the fix.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Originally published on kargaev.me. Imported to blog.deeflect.com archive.&lt;/em&gt;&lt;/p&gt;
</content:encoded></item><item><title>Designing DeFi for people who hate DeFi</title><link>https://blog.deeflect.com/valk-07-designing-defi-for-tradfi/</link><guid isPermaLink="true">https://blog.deeflect.com/valk-07-designing-defi-for-tradfi/</guid><description>How I designed Merlin by VALK  -  a DeFi analytics tool built for traditional finance professionals who don&apos;t speak crypto-native language.</description><pubDate>Sun, 22 Aug 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;There is a specific moment I keep thinking about. I was on a call with one of our institutional clients, a portfolio manager at a mid-sized hedge fund, and he was sharing his screen to show me how he tracked his DeFi positions. He had a spreadsheet. Rows of wallet addresses, transaction hashes he copied manually from Etherscan, prices pulled from CoinGecko every morning. This man managed hundreds of millions in traditional assets using Bloomberg Terminal. But for his growing DeFi allocation, he was doing data entry by hand.&lt;/p&gt;
&lt;p&gt;That conversation stayed with me for weeks. It became the clearest brief I could have had for Merlin.&lt;/p&gt;
&lt;h2&gt;What Merlin was supposed to solve&lt;/h2&gt;
&lt;p&gt;When VALK decided to build Merlin as separate product in late 2021, the idea was simple on paper: a portfolio tracker and analytics dashboard for DeFi positions, targeted at institutional users. Aggregate data from protocols like Aave, Compound, and Maker, show performance in format that makes sense to finance professionals, help them understand what their on-chain capital is actually doing.&lt;/p&gt;
&lt;p&gt;Simple on paper. Not simple in practice.&lt;/p&gt;
&lt;p&gt;The deeper I went into research, the more I understood that the problem wasn&apos;t just missing software. It was a trust and literacy gap between two worlds that have very different assumptions about what &quot;good interface&quot; looks like. DeFi dashboards are mostly built by crypto natives, for crypto natives. They assume you know what a liquidity pool is, that you are comfortable seeing your balance in ETH, that protocol names like Compound or Maker need no explanation. The interfaces reflect that, colorful, jargon-heavy, sometimes deliberately obscure in way that feels like badge of insider knowledge.&lt;/p&gt;
&lt;p&gt;Traditional finance professionals, the people Merlin was aimed at, are not intimidated by complexity. They work with complex data every day. But they have completely different vocabulary, different trust signals, and much lower tolerance for ambiguity in tool that touches their capital.&lt;/p&gt;
&lt;h2&gt;The trust problem is a design problem&lt;/h2&gt;
&lt;p&gt;This took me a while to articulate clearly: institutional users do not trust interfaces that look &quot;too crypto.&quot;&lt;/p&gt;
&lt;p&gt;I don&apos;t mean they dislike the aesthetic in superficial way. The visual language of most DeFi products carries real signal for these users. Gradients, animated numbers, tokens displayed as colorful icons, purple everything, these are not neutral choices. For someone who has spent career looking at Bloomberg Terminal, Reuters Eikon, or even a well-built internal risk dashboard, these visual patterns communicate &quot;retail,&quot; &quot;speculative,&quot; &quot;not serious.&quot;&lt;/p&gt;
&lt;p&gt;And in finance, if the tool doesn&apos;t look serious, you don&apos;t trust the numbers. If you don&apos;t trust the numbers, you don&apos;t use the tool.&lt;/p&gt;
&lt;p&gt;So one of the earliest decisions I made for Merlin was to completely reject the aesthetic vocabulary of DeFi. Not to be boring, but to deliberately speak the visual language that institutional users already associate with reliability. Dense tables. Muted color palette. Data-first layout. Typography that feels closer to financial reporting than to web3 landing pages.&lt;/p&gt;
&lt;p&gt;I kept thinking about Bloomberg Terminal as reference, not because I wanted to copy it, but because it represents something important: a tool designed so purely around the professional user&apos;s needs that aesthetics became secondary. The people who use Bloomberg don&apos;t care if it looks modern. They care if the data is right, if it loads fast, if they can find what they need without thinking.&lt;/p&gt;
&lt;p&gt;Merlin was never going to be Bloomberg. We are startup, not forty-year institution. But that philosophy shaped every decision.&lt;/p&gt;
&lt;h2&gt;Denominating the world in USD, not ETH&lt;/h2&gt;
&lt;p&gt;This sounds small. It is not small.&lt;/p&gt;
&lt;p&gt;When traditional finance professional looks at portfolio performance, they think in their base currency. For most of our institutional users, that is USD. They don&apos;t want to know their yield is 0.003 ETH. They want to know it is $8.40, or $12.50, whatever the converted value is at current price.&lt;/p&gt;
&lt;p&gt;Most DeFi dashboards show values in native tokens by default, sometimes with small USD equivalent in gray text underneath. That hierarchy made sense for crypto natives. It makes no sense for someone whose entire performance reporting framework is in fiat.&lt;/p&gt;
&lt;p&gt;So in Merlin, USD was the primary display. Always. Native token amounts were secondary, available but not dominant. P&amp;amp;L was calculated and shown in USD. Yield was shown in USD. Every position across every protocol was normalized to one currency.&lt;/p&gt;
&lt;p&gt;The implementation was harder than it sounds. We needed reliable price feeds, we needed to handle latency between on-chain data and price data, we needed to decide what to do at midnight UTC when daily P&amp;amp;L resets. All of this required very close work with the dev team, Anton and Alex in particular were deeply involved in making sure the data pipeline was solid before I could design any of the presentation layer.&lt;/p&gt;
&lt;p&gt;This brings up something I thought about a lot during Merlin: in most products, if number is slightly wrong, the user is confused. In finance, if number is slightly wrong, someone calls their lawyer. The pressure on data accuracy was different from anything I had designed before, and it changed how I approached decisions. I became very conservative about showing anything I wasn&apos;t sure the backend could reliably support.&lt;/p&gt;
&lt;h2&gt;Explaining impermanent loss without using that phrase&lt;/h2&gt;
&lt;p&gt;Impermanent loss is one of the most important concepts in DeFi for liquidity providers. It is also one of the worst-named concepts in any financial domain I have ever encountered.&lt;/p&gt;
&lt;p&gt;For someone coming from traditional finance, &quot;impermanent loss&quot; sounds like contradiction. Losses are permanent. If you lose money, you lost money. The &quot;impermanent&quot; qualifier sounds like hand-waving, like someone invented word to make a risk sound less scary.&lt;/p&gt;
&lt;p&gt;The reality is more nuanced, it describes the opportunity cost of providing liquidity versus simply holding the assets, but the naming creates immediate communication barrier. Institutional users I spoke to during research would visibly disengage when I used the phrase, like they detected a marketing trick.&lt;/p&gt;
&lt;p&gt;So I stopped using it in the interface entirely.&lt;/p&gt;
&lt;p&gt;Instead, Merlin showed &quot;liquidity position P&amp;amp;L vs. holding equivalent assets.&quot; Longer phrase, but one that lands correctly for finance professional. They understand P&amp;amp;L. They understand comparing a strategy against a benchmark. What you earned from providing liquidity versus what you would have earned just holding those same tokens, that framing is immediately legible in traditional finance terms.&lt;/p&gt;
&lt;p&gt;The underlying math is the same. The communication is completely different.&lt;/p&gt;
&lt;p&gt;This was one of the cases where learning the domain deeply paid off. I had spent weeks reading about how liquidity pools actually work, how AMM mechanics create this phenomenon, why it matters differently at different price ratios. I had to understand it myself before I could figure out how to explain it to someone else without reaching for industry jargon.&lt;/p&gt;
&lt;h2&gt;Aggregating three protocols into one view&lt;/h2&gt;
&lt;p&gt;When institutional user has positions across Aave, Compound, and Maker, they don&apos;t want to check three dashboards. They don&apos;t want to cross-reference their own spreadsheet. They want one view that tells them: this is your total deployed capital, this is your current yield across all positions, this is how it compares to last week.&lt;/p&gt;
&lt;p&gt;The aggregation work was the core of Merlin&apos;s value, and also the most technically difficult thing we did. Each protocol has different data structures, different event schemas, different ways of calculating interest accrual. Normalizing this into coherent single view required the dev team to do significant work before I even touched design.&lt;/p&gt;
&lt;p&gt;From my side, the challenge was creating hierarchy that made sense across different protocol types. Aave and Compound are lending protocols, the mental model is: I deposited assets, I am earning yield, I may have borrowed against my collateral. Maker is more complex, a collateralized debt position with different risk parameters.&lt;/p&gt;
&lt;p&gt;I created what I called internally a &quot;protocol-agnostic position card.&quot; Every position, regardless of where it lived, showed the same structure: asset, current value in USD, yield earned since entry, current APY, and a health metric if there was any liquidation risk involved. Protocol-specific details were available on expansion, but the top level was consistent.&lt;/p&gt;
&lt;p&gt;This sounds obvious. But there were many debates about it. The argument against was that we were hiding protocol-specific nuance that sophisticated users needed. My argument was that sophisticated users can expand the detail, the default view should answer the most common question first, which is &quot;how is my portfolio doing overall?&quot;&lt;/p&gt;
&lt;p&gt;Eventually we found the right balance. The collapsed view was clean and comparative, the expanded view was dense with data that analysts actually needed.&lt;/p&gt;
&lt;h2&gt;What I was designing with, and against&lt;/h2&gt;
&lt;p&gt;I spent a lot of time looking at competitive products during Merlin&apos;s design phase. Zapper, DeBank, Zerion, the main DeFi portfolio trackers, and honestly well-designed for their audience. Zapper in particular has very good UX for the crypto-native user who wants to quickly see what&apos;s happening with their positions.&lt;/p&gt;
&lt;p&gt;But all of them were built around assumptions that don&apos;t transfer to institutional users. The color palettes were saturated. The hierarchy put token balances ahead of USD values. Wallet addresses were displayed prominently rather than abstracted. The overall feel was consumer, not professional.&lt;/p&gt;
&lt;p&gt;Looking at these made me more confident about going in the opposite direction.&lt;/p&gt;
&lt;p&gt;The closest reference I found in traditional finance wasn&apos;t a DeFi product at all, it was how some prime brokerage portals display multi-asset portfolio views. That was more useful to me than anything in web3.&lt;/p&gt;
&lt;h2&gt;Learning while designing&lt;/h2&gt;
&lt;p&gt;Something I want to be honest about: when Merlin started, I was learning DeFi myself.&lt;/p&gt;
&lt;p&gt;I understood the conceptual layer, VALK&apos;s tokenization work meant I had absorbed a lot about blockchain, smart contracts, asset representation. But the specific mechanics of DeFi protocols, liquidity pools, yield farming, the actual market dynamics, I was figuring this out in real time.&lt;/p&gt;
&lt;p&gt;This created an interesting dynamic. I was designing product for traditional finance professionals who were also learning DeFi. In strange way, my position as intermediate learner, someone who understood finance logic but was still mapping it to DeFi mechanics, was actually useful. I could feel exactly where the communication broke down, where terminology stopped making sense, where you needed analogy to a traditional concept to make the on-chain version land.&lt;/p&gt;
&lt;p&gt;I had to read. A lot. Protocol documentation, DeFi research posts, old finance textbooks that VALK&apos;s CEO recommended. I kept a document where I translated DeFi concepts into traditional finance equivalents, which became kind of internal guide for copy and labeling decisions in Merlin.&lt;/p&gt;
&lt;p&gt;There is something genuinely exciting about designing a product where the category itself is new enough that most conventions have not been established yet. At Spacecode, designing the fiftieth banking app, you were mostly making decisions within well-worn space. With Merlin, there was no established pattern for &quot;DeFi portfolio tracker for institutional users.&quot; We were making the patterns.&lt;/p&gt;
&lt;p&gt;That pressure is uncomfortable. It is also the best kind of design work.&lt;/p&gt;
&lt;h2&gt;Where we landed&lt;/h2&gt;
&lt;p&gt;The version of Merlin we launched leaned conservative in almost every visual decision. Dark data tables, palette that avoided anything reading as &quot;crypto colorful,&quot; clear USD-first denomination, position cards with consistent structure regardless of protocol.&lt;/p&gt;
&lt;p&gt;The response from institutional users was better than I expected. The piece of feedback I remember most clearly came from user who said it was &quot;the first DeFi tool that doesn&apos;t feel like I&apos;m using something built by someone who wants me to feel confused.&quot; I wrote that down and kept it.&lt;/p&gt;
&lt;p&gt;We still had a lot to improve. Protocol coverage needed to expand. The reporting layer needed more depth for audit trail purposes. Some of the yield attribution calculations were simplifications of what we wanted to do eventually.&lt;/p&gt;
&lt;p&gt;But the fundamental design decision, that the right approach was to design from the traditional finance user&apos;s mental model inward, rather than from crypto conventions outward, I still think that was correct.&lt;/p&gt;
&lt;p&gt;Most of the DeFi space designs for the believers. Merlin was trying to design for the skeptics, and it turned out the skeptics had a lot of capital they needed somewhere to put it.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Originally published on kargaev.me. Imported to blog.deeflect.com archive.&lt;/em&gt;&lt;/p&gt;
</content:encoded></item><item><title>Data tables are the hardest UI problem nobody talks about</title><link>https://blog.deeflect.com/valk-06-data-tables-hardest-problem/</link><guid isPermaLink="true">https://blog.deeflect.com/valk-06-data-tables-hardest-problem/</guid><description>Lessons from designing financial data tables for institutional investors  -  density, sorting, accessibility, and why every table becomes a spreadsheet.</description><pubDate>Mon, 10 May 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;There is a moment every product designer has, when they open a competitor&apos;s interface and think &quot;this looks terrible.&quot; Then they look at their own work and realize, no, actually, the competitor is just honest about what financial software is. It is a spreadsheet. Maybe a very expensive, very slow spreadsheet. But a spreadsheet.&lt;/p&gt;
&lt;p&gt;I had this moment maybe six months into working at VALK. We were building portfolio management interfaces for institutional investors, fund managers, compliance officers, asset managers at banks. People who have Bloomberg terminals on one monitor and our product on the other. I kept trying to make things look like a modern SaaS dashboard. Clean cards. Big numbers. Charts. The users kept asking: &quot;Where is the table?&quot;&lt;/p&gt;
&lt;p&gt;This was 2020 going into 2021. I was still learning how finance actually works, and the main lesson was this: financial professionals live in tables. Not because tables are better than charts. Because tables are honest. You cannot argue with a table. You can argue with a chart forever.&lt;/p&gt;
&lt;h2&gt;Why dashboards are mostly for demos&lt;/h2&gt;
&lt;p&gt;When you are presenting a product to investor or to potential client, dashboards look incredible. Cards with big green numbers, a nice chart showing growth over time, some summary statistics. It photographs well. It works for demos.&lt;/p&gt;
&lt;p&gt;Then actual user sits down. They need to find which investor in their fund is overweight in a specific asset class. Or they need to check which deals closed in Q3 and compare fees across them. Or they need to export something for a compliance report.&lt;/p&gt;
&lt;p&gt;You cannot do any of this from a dashboard.&lt;/p&gt;
&lt;p&gt;You need to filter. Sort. See raw numbers next to each other. You need a table.&lt;/p&gt;
&lt;p&gt;I started understanding this at VALK when I watched how people actually used early versions of the platform versus what I assumed they would do. Nobody clicked the chart. Nobody hovered over the portfolio donut to see allocation breakdown. They went straight to the data table, tried to sort by a column, found that the sort did not work, and opened Excel instead.&lt;/p&gt;
&lt;p&gt;That was the moment I stopped designing dashboards first and started designing tables first.&lt;/p&gt;
&lt;h2&gt;The density problem is real and designers are usually wrong about it&lt;/h2&gt;
&lt;p&gt;Every design school, every design article, every system like Material Design teaches you: reduce cognitive load. Show less. Use whitespace. Do not overwhelm users.&lt;/p&gt;
&lt;p&gt;This advice is correct for consumer products. It is wrong for enterprise finance.&lt;/p&gt;
&lt;p&gt;Institutional investors want MORE data visible at once. They want to see 12 columns without scrolling horizontally. They have large monitors, two of them. They are trained to read dense tables. When I made the table &quot;cleaner&quot; by hiding some columns and adding more padding, users told me it felt &quot;lightweight&quot;, and they did not mean it as compliment.&lt;/p&gt;
&lt;p&gt;I spent real time fighting this instinct to make things sparse. The compromise I eventually landed on: high information density as default, but not visual noise. The difference is subtle. You can have small row height with 8px vertical padding and still have very clear typographic hierarchy. You can show 15 columns if you choose the right column widths and do not add decoration that competes with the content.&lt;/p&gt;
&lt;p&gt;The mistake I kept making early on was using cell backgrounds, borders everywhere, lots of color. A table with heavy grid lines and alternating row colors actually makes it harder to scan horizontally than a cleaner table with just a light separator between rows. I eventually removed most borders, kept only a light bottom border on each row, and users started finding information faster in tests.&lt;/p&gt;
&lt;h2&gt;The 20-column portfolio table&lt;/h2&gt;
&lt;p&gt;Concrete example. We had a portfolio overview table for one product area at VALK. Asset managers needed to see their entire portfolio in one view. The data model included: asset name, asset type, ISIN or token ID, current value, acquisition price, current price, unrealized P&amp;amp;L, P&amp;amp;L percentage, yield, maturity date, liquidity rating, custodian, jurisdiction, currency, allocation weight, last transaction date, compliance status, and a few internal fields.&lt;/p&gt;
&lt;p&gt;That is 18-20 columns depending on the product variant.&lt;/p&gt;
&lt;p&gt;My first instinct was to hide most of this. Show six core columns by default, let users add more. This is how Notion, Linear, Airtable handle it. It works well for products where users have different needs and nobody agrees on what is important.&lt;/p&gt;
&lt;p&gt;For institutional investors, there was surprisingly high consensus on what they needed to see. Almost every user wanted the same 10-12 columns. The variation was in the remaining 8. So I reversed the approach: show 12 columns by default, let users hide the less common ones. Much better reception. Users felt like the product understood their workflow instead of asking them to configure it before they could work.&lt;/p&gt;
&lt;p&gt;The custom column visibility still existed. But the default state was opinionated and correct for the majority of users.&lt;/p&gt;
&lt;h2&gt;Sorting, filtering, and why they are harder than they look&lt;/h2&gt;
&lt;p&gt;Sorting is easy to build badly. Single-column sort with a small arrow icon, every developer builds this in an afternoon. But financial tables need multi-column sort. You want to sort by asset type first, then by P&amp;amp;L descending within each type. This interaction is not obvious to design.&lt;/p&gt;
&lt;p&gt;I tried several patterns. A sort priority panel, a small drawer that shows sort order visually, worked best. Users could see &quot;sorted by: Asset Type (A-Z) → P&amp;amp;L (high to low)&quot; as chips, drag to reorder priority, click X to remove a sort layer. Felt close to how Excel handles it, which was intentional. These users know Excel deeply. Borrowing patterns from Excel is not a failure of design creativity, it is respecting user&apos;s existing mental model.&lt;/p&gt;
&lt;p&gt;Filtering was more complex. We needed to support text search within a column, numeric ranges, date ranges, multi-select from predefined values (e. g., jurisdiction: UK, Germany, Netherlands), and presence/absence filters. Each column type needed different filter control.&lt;/p&gt;
&lt;p&gt;Static mockups completely failed to communicate this. I would show the filter panel design and developers would say &quot;yes, looks good&quot; and then build something completely different because they did not understand which filter type applied to which column type, or how filter state should persist between sessions.&lt;/p&gt;
&lt;h2&gt;Prototyping table interactions in Principle&lt;/h2&gt;
&lt;p&gt;This is where static design tools reach their limits. Figma is great for showing what a table looks like. Figma is useless for showing how a table behaves.&lt;/p&gt;
&lt;p&gt;I prototyped almost every key table interaction in Principle. Column reordering, the drag behavior, where the column ghost appears, how other columns shift. Sort state, where clicking a column header cycles through ascending, descending, no sort. Filter panel opening and how the table reacts when filters are applied. Horizontal scrolling with fixed first columns.&lt;/p&gt;
&lt;p&gt;Principle forced me to think about states I would have missed in static mockups. What does the empty state look like when filter returns zero results? What happens when sort column gets hidden? What does hover state on a row look like when row has an inline action button? These are not details you naturally think about when designing screens. But in a prototype you hit them immediately.&lt;/p&gt;
&lt;p&gt;I do not think every table component needs Principle prototyping. But any interaction that happens in time, drag and drop, scroll behavior, multi-step filter flow, needs to be animated. Static frames of &quot;before&quot; and &quot;after&quot; are not enough for developers to understand intent, and they are not enough for me to understand if the interaction actually makes sense.&lt;/p&gt;
&lt;h2&gt;Fixed headers, sticky columns, and horizontal scroll&lt;/h2&gt;
&lt;p&gt;This is a technical problem that designers often hand off to developers without thinking through. But the choices made here directly affect usability.&lt;/p&gt;
&lt;p&gt;For our 20-column table: headers should be fixed on vertical scroll. First one or two columns (usually asset name, sometimes asset ID) should be sticky on horizontal scroll. Everything else can scroll horizontally.&lt;/p&gt;
&lt;p&gt;The sticky column implementation looked straightforward until you hit the shadow. When content scrolls behind a sticky column, you need a visual separator, usually a box shadow on the right edge of the sticky column. Simple idea. But the shadow needs to appear only when content is actually scrolled beneath it, not always. Always-visible shadow makes the table feel broken when you are at leftmost position.&lt;/p&gt;
&lt;p&gt;Small detail. Matters a lot for perceived quality. I specified it explicitly in handoff, with a note explaining the conditional logic, because I only noticed it after prototyping the scroll behavior and watching it carefully. Without that note it would have been built wrong.&lt;/p&gt;
&lt;h2&gt;Color coding financial data&lt;/h2&gt;
&lt;p&gt;Green and red. P&amp;amp;L positive is green, negative is red. This is so universal in finance that it feels like law.&lt;/p&gt;
&lt;p&gt;Problem: about 8% of men have some form of red-green color blindness. In a product used by dozens of investment banks and hundreds of users, that is not a small edge case. At some point we had a user complain they could not reliably distinguish our P&amp;amp;L indicators.&lt;/p&gt;
&lt;p&gt;I updated the color system to not rely on color alone. Positive values: green text with a small up arrow prefix. Negative values: red text, a minus sign, a small down arrow. Slightly more visually noisy but fully accessible. Users who see color get the same experience, users who do not can rely on the symbols.&lt;/p&gt;
&lt;p&gt;I also added a high contrast mode toggle later, which changed the green to a brighter blue-green and red to a more orange-tinted red, both distinguishable for most types of color vision deficiency. This was not in the original design. It came from that one user complaint and then actual thinking about the problem.&lt;/p&gt;
&lt;h2&gt;Keyboard navigation and screen readers&lt;/h2&gt;
&lt;p&gt;Financial professionals often use keyboard shortcuts. Bloomberg terminal has trained entire generation of finance people to navigate without mouse. Expecting keyboard navigation is reasonable for this audience.&lt;/p&gt;
&lt;p&gt;I specified full keyboard nav for our table: tab through interactive elements, arrow keys to move focus between cells in the active row, enter to open row details, space to select row for bulk action. This required working with developers closely because focus management in a table is actually complex. Which element receives focus when you open a filter panel? Where does focus return when you close it?&lt;/p&gt;
&lt;p&gt;I did not have deep background in accessibility when I started at VALK. I learned a lot of this by reading WCAG guidelines and by testing with keyboard only, forcing myself to complete tasks without touching mouse. It revealed problems I could not have found any other way.&lt;/p&gt;
&lt;p&gt;Screen reader support for tables requires proper semantic HTML, real &lt;code&gt;&amp;lt;table&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;th&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;caption&amp;gt;&lt;/code&gt; elements with appropriate ARIA attributes, not divs styled to look like table. I marked this explicitly in my design specs, though making sure it was actually implemented was ongoing conversation with developers who sometimes preferred div-based approaches for styling flexibility.&lt;/p&gt;
&lt;h2&gt;Why Material Design table guidelines did not help&lt;/h2&gt;
&lt;p&gt;I tried applying Material Design&apos;s data table guidelines early on. They are well-thought-out for certain use cases, list of users, list of orders, simple CRUD tables. Financial data tables are fundamentally different.&lt;/p&gt;
&lt;p&gt;Material table guidelines suggest 56px row height for standard density. Our users needed 36px or even 32px rows to see enough data on screen. Material suggests limiting columns to what fits without horizontal scroll. We needed 20 columns. Multi-column sort, complex filter panels, column customization, none of this is really addressed.&lt;/p&gt;
&lt;p&gt;I am not criticizing Material Design. It is excellent for what it is designed for. But using consumer design system guidelines for institutional finance software is like using a residential building code to design a hospital. Same general domain, completely different requirements.&lt;/p&gt;
&lt;p&gt;Our table component ended up being custom in almost every meaningful way. The component library we built referenced some general principles, contrast ratios, spacing scale, but the table itself was designed from scratch based on how our actual users worked.&lt;/p&gt;
&lt;h2&gt;Every table eventually becomes a spreadsheet&lt;/h2&gt;
&lt;p&gt;The honest conclusion I reached after a year and a half of designing financial interfaces: users will always want to make it more like a spreadsheet. Not because they hate our product. Because spreadsheets are genuinely powerful for financial analysis in ways that most table components are not.&lt;/p&gt;
&lt;p&gt;The right response is not to compete with Excel. It is to be better at the things Excel is bad at, real-time data, compliance-aware workflows, audit trail, multi-user collaboration. Let Excel be Excel. Let our product be the source of truth that feeds into Excel when users need raw flexibility.&lt;/p&gt;
&lt;p&gt;I added a clean CSV export to every table we built. One click. Respects current filter state and column order. This single feature reduced friction more than almost any design improvement I made to the tables themselves. Sometimes best UX is giving users a way out.&lt;/p&gt;
&lt;p&gt;Building data tables for people who stare at data for eight hours a day taught me more about designing for actual human behavior than any dashboard project ever did. It is detail work, specification work, edge case work. Nobody posts it on Dribbble. But it is where real product value lives.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Originally published on kargaev.me. Imported to blog.deeflect.com archive.&lt;/em&gt;&lt;/p&gt;
</content:encoded></item><item><title>Scaling a design system to 70+ institutions</title><link>https://blog.deeflect.com/valk-05-scaling-design-70-banks/</link><guid isPermaLink="true">https://blog.deeflect.com/valk-05-scaling-design-70-banks/</guid><description>What breaks when your fintech design system grows from 7 clients to 70+ institutions fast  -  tokens, variants, documentation, and saying no.</description><pubDate>Mon, 15 Feb 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;There is a moment when you realize the system you built is no longer serving you, you are serving it. For me that moment came somewhere around client number forty.&lt;/p&gt;
&lt;p&gt;I remember opening Figma one morning in January and counting how many pages were in our main design file. Thirty-one. Some of them were named things like &quot;Client 7 - Tables FINAL&quot; and &quot;Client 12 - Dashboard v3 (their version)&quot;. The file had become archaeology. I had to dig through layers of decisions made six months ago to understand why a button was that particular shade of blue.&lt;/p&gt;
&lt;p&gt;We had just crossed 70 institutional clients. Investment banks, hedge funds, asset managers across fifteen countries. VALK was growing fast, $4 billion in deals managed on a platform I designed. And the design system that worked perfectly for seven clients was quietly falling apart under the weight of seventy.&lt;/p&gt;
&lt;p&gt;This is what that experience taught me.&lt;/p&gt;
&lt;h2&gt;The white-label problem is actually a philosophy problem&lt;/h2&gt;
&lt;p&gt;VALK is a white-label platform. This sounds simple until you live inside it. Every financial institution that comes onboard wants the product to feel like their product. Not a vendor tool. Not &quot;powered by VALK.&quot; Their platform, their brand, their color palette on the buttons.&lt;/p&gt;
&lt;p&gt;When we had seven clients, I handled this manually. Client comes in, I adjust the colors, tweak the typography, export new assets, coordinate with the dev team. Two days of work, done. Fine.&lt;/p&gt;
&lt;p&gt;At fifteen clients this approach started to feel uncomfortable. At thirty it was breaking. At seventy it was completely unsustainable; and we were already inside the problem by the time I fully understood it.&lt;/p&gt;
&lt;p&gt;The mistake I made early was thinking of white-label as a visual problem. Change colors, change logo, done. But institutional clients do not just want different colors. They want the product to match their visual identity at a level where their compliance officers, their traders, their investors, none of them feel like they are using a third-party tool. That is a much deeper requirement. It touches typography scale, border radius on cards, density of data tables, even the language used in empty states.&lt;/p&gt;
&lt;p&gt;White-label customization is not a skin. It is a dimension of the entire product.&lt;/p&gt;
&lt;h2&gt;Design tokens were not optional&lt;/h2&gt;
&lt;p&gt;I had worked with design tokens before VALK, but in a casual way. Mostly color variables with names like &lt;code&gt;primary-blue&lt;/code&gt; and &lt;code&gt;background-dark&lt;/code&gt;. Useful, but not load-bearing.&lt;/p&gt;
&lt;p&gt;At VALK I had to rebuild how I thought about tokens completely.&lt;/p&gt;
&lt;p&gt;The system I created had three levels. Global tokens were the raw values, &lt;code&gt;#1A2B4C&lt;/code&gt;, &lt;code&gt;16px&lt;/code&gt;, &lt;code&gt;font-weight-600&lt;/code&gt;. Semantic tokens mapped those to meaning: &lt;code&gt;color-brand-primary&lt;/code&gt;, &lt;code&gt;spacing-component-padding&lt;/code&gt;, &lt;code&gt;text-heading-size&lt;/code&gt;. Component tokens then referenced the semantic layer, &lt;code&gt;table-header-background&lt;/code&gt;, &lt;code&gt;button-primary-text&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;This structure meant that when a new client needed their brand color applied throughout the platform, I changed one global token and the semantic layer propagated it everywhere. In theory. In practice, this required the dev team to implement tokens in code the same way I defined them in Figma, which meant extensive documentation and several conversations I was not expecting to have about why this mattered.&lt;/p&gt;
&lt;p&gt;Anton and Alex on the frontend side were genuinely good to work with. But developers have different mental models for this. Getting them to honor the token hierarchy, not to just hardcode hex values when they were in a hurry, that was an ongoing effort that lasted well into the year.&lt;/p&gt;
&lt;h2&gt;What happens to components at scale&lt;/h2&gt;
&lt;p&gt;When I designed the first version of our data table component, I think I had four variants. Compact, default, with actions column, without actions column. That covered everything we needed.&lt;/p&gt;
&lt;p&gt;By February 2021 I was looking at a table component with something close to fifteen different configurations. I am being precise: I counted.&lt;/p&gt;
&lt;p&gt;Row density. Header styles, sticky or not. Action columns ranging from none to full dropdown. Pagination modes. Selection states. Expandable rows. Status columns.&lt;/p&gt;
&lt;p&gt;Each axis multiplies with the others. Not all combinations exist in the product, but enough of them do that the component had to be built to handle the matrix, not just the cases I had currently imagined.&lt;/p&gt;
&lt;p&gt;This is what &quot;component variants explosion&quot; actually feels like. It is not a one-time decision. It is slow accumulation, each request sounds completely reasonable in isolation. &quot;Can we add a row selection mode for this client&apos;s workflow?&quot; Of course. Reasonable. But it added another dimension to the component, and that dimension then had to exist and be documented and tested in every other context where the table appeared.&lt;/p&gt;
&lt;p&gt;I started maintaining a decision log for major components. Not formal documentation, just a private Figma page where I wrote short notes about why certain variants existed and what client use case drove them. This saved me probably hours of confused re-investigation later.&lt;/p&gt;
&lt;h2&gt;The &quot;one small customization&quot; pattern&lt;/h2&gt;
&lt;p&gt;Every enterprise client has one. Mentioned almost apologetically on the second call after they sign. &quot;We know you have a standard platform, and we love it, but we just need one small thing...&quot;&lt;/p&gt;
&lt;p&gt;Sometimes it actually is small. A logo placement change, a different default currency display. Fine.&lt;/p&gt;
&lt;p&gt;But there is a pattern in enterprise software where &quot;one small customization&quot; is a signal for something larger. The client has an internal stakeholder, a head of UX, a CTO, sometimes just a very opinionated senior trader, who has already decided the product does not quite fit, and they are testing how flexible you are before making their real requests.&lt;/p&gt;
&lt;p&gt;I started tracking these differently after month three of rapid growth. Instead of evaluating each request on its own, I started asking: does this need to be solved in the component system, or is this a client-specific override? If it was a systemic gap, I would fix the component and all clients benefited. If it was a preference unique to that institution, I had to be honest that we could not build the entire product around it.&lt;/p&gt;
&lt;p&gt;This required saying no sometimes. That was new for me. At a small agency you often say yes to everything because each client is a large percentage of revenue. At VALK with seventy clients, saying yes to every preference request would have destroyed the coherence of the product within months.&lt;/p&gt;
&lt;h2&gt;How the Figma file structure had to change&lt;/h2&gt;
&lt;p&gt;The &quot;one big file&quot; approach did not survive scale. I know this sounds obvious in hindsight. It was not obvious when I was inside it.&lt;/p&gt;
&lt;p&gt;What replaced it was a library architecture. One master component library, all the base components, variants, tokens defined. This file no real person opened to work in. It was the source of truth. Connected to it were brand-specific theme files, essentially overrides of the token layer for each major client group. Then separate working files for active product design work.&lt;/p&gt;
&lt;p&gt;The team that needed to understand this was small, mostly just me and whoever was reviewing my work. But the file structure had to be clear enough that if I was sick for a week, someone could navigate it without me.&lt;/p&gt;
&lt;p&gt;Figma&apos;s component library system in 2021 was already capable enough for this. The harder part was discipline. Keeping the master library clean, not letting quick fixes sneak in as local components in working files, making sure that when I updated a component it actually propagated correctly through the themed variants.&lt;/p&gt;
&lt;p&gt;I failed at this discipline many times. There are still, I am certain, components somewhere in our older files that diverged from the master library and nobody knows when or why. That is the real cost of moving fast.&lt;/p&gt;
&lt;h2&gt;Documentation became half the job&lt;/h2&gt;
&lt;p&gt;I want to be honest about this because I did not expect it and it bothered me for a while.&lt;/p&gt;
&lt;p&gt;When I joined VALK I thought of myself as someone who designs things. Interfaces, flows, components, systems. Documentation felt like the afterthought, the thing you write after the real work is done.&lt;/p&gt;
&lt;p&gt;By early 2021 I was spending something like forty percent of my time writing. Annotating. Creating specification pages in Figma that explained not just what something looked like, but why it looked that way, what the edge cases were, how it should behave on mobile versus desktop, what happened in empty and error and loading states.&lt;/p&gt;
&lt;p&gt;With seventy institutional clients and a dev team moving as fast as ours, underdocumented components created bugs. Subtle ones. A table that rendered correctly in the default state but broke in the expanded row state because the developer had seen the design for the default state and assumed. A form that handled the happy path perfectly but had no visual design for the error state so the developer made something up.&lt;/p&gt;
&lt;p&gt;Every one of these bugs was ultimately my fault. Not because I designed it wrong, but because I did not communicate the design completely.&lt;/p&gt;
&lt;p&gt;I stopped resenting documentation time once I reframed it this way. An undocumented component is an incomplete component. The spec page is not the chore you do after the work, it is the last part of the work.&lt;/p&gt;
&lt;p&gt;I wish someone had told me this three years earlier.&lt;/p&gt;
&lt;h2&gt;The pressure of real money&lt;/h2&gt;
&lt;p&gt;There is a difference between designing for a startup where a few hundred users will see your work and designing for a platform where $4 billion in deals has been managed on the platform. The stakes are different in a way that is hard to explain but very easy to feel.&lt;/p&gt;
&lt;p&gt;This did not create constant anxiety. But it created a different level of attention to certain decisions. What does a user see when a transaction fails to process? What does a first-time investor see when their portfolio has no assets yet? Is this number formatted to two decimal places consistently everywhere, because these are financial figures, and inconsistency in a financial context reads as an error.&lt;/p&gt;
&lt;p&gt;Investment banks are extremely sensitive to interface quality. They are used to Bloomberg terminals, to expensive internal tools, to interfaces that convey professionalism through density and precision. A misaligned column, an inconsistent border, a tooltip that appears in the wrong position, in a consumer app these might go unnoticed for weeks. In a platform used by institutional traders they are noticed immediately and they erode trust.&lt;/p&gt;
&lt;p&gt;This pushed me toward much more rigorous visual QA. I started treating the staging environment like a design artifact, reviewing it the same way I reviewed Figma files. Finding small inconsistencies. Logging them. Following up.&lt;/p&gt;
&lt;p&gt;Not everything got fixed, there was always something more urgent. But the habit of looking carefully at the built product, not just the design file, was worth forming.&lt;/p&gt;
&lt;h2&gt;What I underestimated completely&lt;/h2&gt;
&lt;p&gt;Time. Specifically, how long documentation takes.&lt;/p&gt;
&lt;p&gt;I knew it would take time. I planned for it. I underestimated by a factor of probably two and a half.&lt;/p&gt;
&lt;p&gt;Writing clear specifications for a complex component, something like a multi-state data table with six interaction modes, takes far longer than designing the component itself. You design in visual thinking. You document in linear language, and translation between those modes is slow.&lt;/p&gt;
&lt;p&gt;Documentation also becomes outdated faster than you expect. You document version one of a component. Three months later the component changes significantly. Now you have documentation that is wrong, which is in some ways worse than no documentation because it actively misleads.&lt;/p&gt;
&lt;p&gt;Keeping it current meant building documentation into my process for every component change, not just new component creation. That habit took time to form.&lt;/p&gt;
&lt;p&gt;If I were starting over, I would allocate documentation time separately from design time from the very beginning. Design the component. Stop. Document the component. Ship. In that order, every time.&lt;/p&gt;
&lt;h2&gt;Where this leaves me&lt;/h2&gt;
&lt;p&gt;We are two years into VALK and the design system is in genuinely better shape than it was six months ago. It is not finished, design systems are never finished, I think that is definitional, but it is navigable. A new engineer joining the team can find the component they need, understand its variants, read the documentation, and build something that looks correct.&lt;/p&gt;
&lt;p&gt;That was not true in the middle of last year.&lt;/p&gt;
&lt;p&gt;The difference is not beautiful Figma files. It is mostly disciplined, unglamorous work: documenting, organizing, having conversations with developers about why the token hierarchy matters, saying no to customization requests that would fragment the system.&lt;/p&gt;
&lt;p&gt;Scale reveals every assumption you made when things were small. The comfortable shortcuts become visible as technical debt. The things you meant to organize become urgent to organize. The documentation you were going to write eventually becomes documentation you have to write now.&lt;/p&gt;
&lt;p&gt;I do not regret the chaos of the growth period. Growing from seven clients to seventy in a year is not something you can plan perfectly for. But I understand now that the design system is infrastructure, not something you build once and maintain. Something you build continuously, and the investment compounds over time.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Originally published on kargaev.me. Imported to blog.deeflect.com archive.&lt;/em&gt;&lt;/p&gt;
</content:encoded></item><item><title>What seed funding does to design priorities</title><link>https://blog.deeflect.com/valk-04-startup-gets-funded/</link><guid isPermaLink="true">https://blog.deeflect.com/valk-04-startup-gets-funded/</guid><description>After VALK closed its seed round in December 2020, everything I was working on suddenly changed. Here&apos;s what funding actually does to a startup&apos;s design work.</description><pubDate>Mon, 28 Dec 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The email arrived at strange time. I was sitting in my apartment in Alanya, looking at the Mediterranean. Late evening, maybe 10pm, when the message came through from our CEO saying the round was closed. Metavallon VC, F10/SIX Group, SICTIC. Seed round, confirmed. I remember I put the laptop down and looked at the sea for few minutes, not really knowing what to feel.&lt;/p&gt;
&lt;p&gt;Then I opened Figma and went back to the component I was working on.&lt;/p&gt;
&lt;p&gt;That was December 2020. About week ago from when I writing this. I have been thinking since then about what funding actually means for designer, specifically for designer who is only designer at company.&lt;/p&gt;
&lt;h2&gt;Before the round: the quiet period&lt;/h2&gt;
&lt;p&gt;I joined VALK in November 2019. At that time the product was not nothing, but it was also not finished. We had clear idea of what we building: platform for tokenizing private assets, institutional-grade, built on R3 Corda. The users are investment banks, hedge funds, asset managers. Not consumer people who need friendly onboarding. Professionals who need information density and trust signals.&lt;/p&gt;
&lt;p&gt;For first year, pace was manageable. Small team, clear priorities, I knew what I had to design each week. I was designing data rooms, deal management interfaces, investor dashboards, complex stuff, but focused. I had time to do it properly. Time to think about information hierarchy, about how a fund manager at institution in Switzerland would actually use this screen.&lt;/p&gt;
&lt;p&gt;We had calls, we iterated. I was remote in Russia or Turkey when others were in London, which made some things slow, but mostly it worked. I would push frames to Figma, write my reasoning in the comments, and we would discuss on the call.&lt;/p&gt;
&lt;p&gt;The product was getting better slowly but clearly. That is good feeling; when you can see the progress in the file, when the components become more consistent, when edge cases stop breaking things.&lt;/p&gt;
&lt;p&gt;Then the round closed and everything changed in way that I did not fully anticipate.&lt;/p&gt;
&lt;h2&gt;The overnight shift in expectations&lt;/h2&gt;
&lt;p&gt;Nothing in the product broke. The platform still worked. The design system was still valid. But suddenly, certain things that were &quot;fine&quot; became &quot;not impressive enough.&quot;&lt;/p&gt;
&lt;p&gt;This is specific phenomenon that I think every designer at early startup eventually experiences. When company is raising, there is presentation layer that matters separate from the actual product. Investors see demos, not real usage. They see specific screens, specific flows. And if those screens do not communicate &quot;this is enterprise-grade, this is serious, this is worth money&quot;, the conversation becomes harder.&lt;/p&gt;
&lt;p&gt;I understand this rationally. But it creates strange pressure. You find yourself redesigning a dashboard not because users struggled with it, but because it needs to look more impressive in deck screenshot.&lt;/p&gt;
&lt;p&gt;We had one flow, deal discovery, the screen where institutional investors browse available deals, that was functional and tested. Users understood it. But it looked, maybe, like a nice web application. Not like institutional software. After the round closed, there was conversation about making it look more &quot;premium.&quot;&lt;/p&gt;
&lt;p&gt;I was uncomfortable in that conversation. We had real feedback from real users that the current design was clear and easy to navigate. Where is the problem exactly?&lt;/p&gt;
&lt;p&gt;But I also understood the strategic reality. We now had investors. Investors talk to other investors. We would be showing the product in more formal contexts. The presentation layer is not separate from the product, it is part of how the company is perceived, and perception affects partnership deals, next round, everything.&lt;/p&gt;
&lt;p&gt;So I did the work. Redesigned certain screens. Made them more visually substantial. Better data visualization on the dashboards, more considered typography in the deal pages. Honestly, some of those changes were genuine improvements. Some were changes made for the wrong reason that happened to be improvements anyway.&lt;/p&gt;
&lt;p&gt;The annoying part was not the work itself. It was that I had been proposing some of these visual improvements for months and the answer was always &quot;let&apos;s focus on functionality first.&quot; After the round closed, same proposals became urgent priority. Funding changed the timeline in ways that had nothing to do with users.&lt;/p&gt;
&lt;h2&gt;The deck problem&lt;/h2&gt;
&lt;p&gt;Here is something I did not fully expect when I took this role: how many pitch decks I would design.&lt;/p&gt;
&lt;p&gt;As only designer at company, the scope of my work is much larger than &quot;design the product.&quot; I also design everything else, marketing materials, social media graphics, conference materials. And decks. Many, many decks.&lt;/p&gt;
&lt;p&gt;Before the seed round, decks were maybe 20 percent of my time. During fundraising period and immediately after, it became closer to 40 or 50 percent. Maybe more.&lt;/p&gt;
&lt;p&gt;This is strange position to be in. I spent years developing skills for product design, information architecture, user research, interaction design, component systems. And there I was, spending most of my week in Figma making slides look good. Making sure the logo on slide 7 is positioned correctly. Adjusting the gradient on the &quot;our vision&quot; page.&lt;/p&gt;
&lt;p&gt;I do not want to say this work is unimportant. Investors read these decks and they make decisions. I understand that.&lt;/p&gt;
&lt;p&gt;But it is disconnect. I signed up to design the platform that institutional investors in 15 countries would use. Instead I was spending days on investor presentation materials that would be used maybe 30 times total.&lt;/p&gt;
&lt;p&gt;I mentioned this tension once in a call, carefully, not as complaint but as question about priorities. The response was reasonable: right now, getting the round closed is the most important thing, and every tool helps. After the round, it will change. This was true. The deck work has come down somewhat. But it has not disappeared, and I think it will never fully disappear when you are the only designer.&lt;/p&gt;
&lt;p&gt;If I were younger designer considering a role like this, I would think about this carefully. The job description says &quot;product designer&quot; but the actual job is &quot;all visual communication for the company.&quot; Know that going in.&lt;/p&gt;
&lt;h2&gt;The irony of investor-facing design&lt;/h2&gt;
&lt;p&gt;Part of the reason VALK was able to raise was the product. The platform looked credible and functional. Investors could see that the technical execution was serious. Our CEO mentioned in the announcement that the product demonstrated real traction and institutional quality.&lt;/p&gt;
&lt;p&gt;That product was designed by me. The same me who was then immediately redirected to make decks.&lt;/p&gt;
&lt;p&gt;I am not saying this to be bitter, I am genuinely proud that the product work contributed to something real. But it creates interesting circular logic: the design quality helped raise the money, and raising the money immediately added design work that was not about product design.&lt;/p&gt;
&lt;p&gt;The thing that got us here is now slightly lower priority than the things needed for next step.&lt;/p&gt;
&lt;h2&gt;What funding actually enables&lt;/h2&gt;
&lt;p&gt;I want to be balanced here, because I am aware that I am describing tensions without describing the genuine positives.&lt;/p&gt;
&lt;p&gt;Funding means we can build things I have been wanting to build for months. Better reporting dashboards. More sophisticated investor management interface. Improved document handling in the data rooms. Notification systems that actually made sense. These were not small wishlist items; they were genuine product improvements that users had asked for.&lt;/p&gt;
&lt;p&gt;Without funding, &quot;later&quot; can mean very long time. With funding, the engineering team grows, the roadmap becomes real. For me personally, this is exciting. I have design specs sitting in Figma for features that have been waiting months for development capacity. Now those features can actually be built. I can work on something and know it will ship.&lt;/p&gt;
&lt;p&gt;There is also different kind of creative energy when company has resources. When everything is extremely constrained, every design decision carries weight that can feel exhausting, if we build this wrong, we cannot afford to rebuild it. When there is more runway, there is slightly more room to iterate, to try things, to improve rather than only survive.&lt;/p&gt;
&lt;h2&gt;Being remote during the celebration&lt;/h2&gt;
&lt;p&gt;Small observation. When the round closed, our team in London had celebration. I saw the photos in Slack. They went out somewhere, they had drinks, they were together.&lt;/p&gt;
&lt;p&gt;I was in Alanya looking at the sea.&lt;/p&gt;
&lt;p&gt;I have worked remotely since I was 14 years old, so this is not new feeling. But it is present. The company had real moment and I experienced it through Slack messages and emoji reactions.&lt;/p&gt;
&lt;p&gt;I do not think this is tragedy. I chose this arrangement and I appreciate what it gives me. But when the company celebrates, the remote person celebrates alone. Or in my case, quietly, by going back to Figma.&lt;/p&gt;
&lt;p&gt;There is also practical dimension. When the team is physically together after big news, conversations happen organically. Priorities get discussed over drinks. Decisions get made in informal ways. When you are remote, you get the official communications but you miss the texture of how people are actually thinking. I have learned to ask more explicit questions in async messages, to surface things that might otherwise just be assumed.&lt;/p&gt;
&lt;h2&gt;What I am watching now&lt;/h2&gt;
&lt;p&gt;We are at the beginning of something that will be different from first year. The company has more structure now, more formal expectations, more visibility, more pressure to demonstrate progress.&lt;/p&gt;
&lt;p&gt;For me, this means design roadmap that is more connected to business milestones. Feature X needs to be ready before this conference. Dashboard Y needs to look polished for this investor meeting. The product design is still about users, but it is also now about VALK&apos;s position in the market, about what the product communicates to the world about what we are.&lt;/p&gt;
&lt;p&gt;I have been at this company for about one year. The next year will look different. More users, more countries, more scrutiny.&lt;/p&gt;
&lt;p&gt;What I want to hold onto is the thing that made the product good before the round, the attention to how real users actually work, the willingness to make boring screens functional rather than impressive. Those values do not have to conflict with also making things that look serious and enterprise-grade. The best version is both.&lt;/p&gt;
&lt;p&gt;But it requires some resistance to pressure. Someone has to say &quot;this works for users, we should not change it just because it looks less interesting in screenshot.&quot; That is part of designer&apos;s job that nobody tells you about when you are learning design.&lt;/p&gt;
&lt;p&gt;You are also the person who defends the design from the design&apos;s own success.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Originally published on kargaev.me. Imported to blog.deeflect.com archive.&lt;/em&gt;&lt;/p&gt;
</content:encoded></item><item><title>Designing finance when you know nothing about finance</title><link>https://blog.deeflect.com/valk-03-designing-finance-knowing-nothing/</link><guid isPermaLink="true">https://blog.deeflect.com/valk-03-designing-finance-knowing-nothing/</guid><description>8 months into designing a fintech platform with zero financial background  -  how domain ignorance slows you down and unexpectedly helps you.</description><pubDate>Sun, 20 Sep 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Eight months ago I did not know what IRR meant.&lt;/p&gt;
&lt;p&gt;I am not exaggerating. When I joined VALK in November 2019, my entire professional experience was consumer apps, security software interfaces, and e-commerce flows at Spacecode agency in Moscow. The most &quot;financial&quot; thing I had ever designed was a payment confirmation screen. And now I was Lead Product Designer at company building infrastructure for institutional private capital markets. Asset tokenization. Deal origination pipelines. Cap table management. Data rooms.&lt;/p&gt;
&lt;p&gt;I did not understand single word of this.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;The first weeks were uncomfortable&lt;/h2&gt;
&lt;p&gt;I remember sitting in my apartment in Saint Petersburg, first week at VALK, reading the product brief and opening maybe fifteen browser tabs to understand what I was reading. IRR, internal rate of return. Cap table, capitalization table, document that shows equity ownership. Data room, secure virtual space for sensitive documents during due diligence. Deal origination, the process of sourcing investment deals.&lt;/p&gt;
&lt;p&gt;Every term connected to five more terms I did not know.&lt;/p&gt;
&lt;p&gt;At Spacecode I worked on Kaspersky Enterprise products. That was also technical, also B2B, but at least I understood what antivirus does. I understood the concept of threat, of protection, of alert. I could sit with users and have real conversation about their problems. With VALK, I was starting from zero. Complete zero.&lt;/p&gt;
&lt;p&gt;The CEO, I will not use his name here, but he is patient man, answered many questions from me in those early weeks. Some of these questions were probably embarrassing. &quot;What exactly happens after investor signs term sheet?&quot; &quot;Why does asset manager need separate view from fund administrator?&quot; &quot;What is difference between debt and equity from user perspective?&quot; Basic questions. The kind any financial professional would consider obvious.&lt;/p&gt;
&lt;p&gt;But he answered all of them. And this, I realize now, was important for the product.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;The disadvantage is real&lt;/h2&gt;
&lt;p&gt;I want to be honest: not knowing the domain made my first months slower and more difficult.&lt;/p&gt;
&lt;p&gt;When I was designing dashboard for asset performance, I did not know which metrics are most important to fund manager. I did not know natural hierarchy of information in financial report. I had to learn this the same time I was trying to design it, which is not good situation. You cannot make confident decisions about information architecture when you are still learning what the information means.&lt;/p&gt;
&lt;p&gt;There were moments when I would present something to the team and they would tell me I had misunderstood completely what the screen needed to do. Not the visual design, the logic. The user flow. Because I had wrong mental model of the process.&lt;/p&gt;
&lt;p&gt;At Spacecode, even when I worked on new project, I usually had enough domain knowledge to start designing quickly. Banking app? I use banking app. Security dashboard? I understand security. The VALK work required different approach, a design process that was slower, more research-heavy, more dependent on conversations with people who actually understood what was happening.&lt;/p&gt;
&lt;p&gt;For company that needed to move fast, this was not ideal.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;But the disadvantage also works in reverse&lt;/h2&gt;
&lt;p&gt;Here is the thing I did not expect.&lt;/p&gt;
&lt;p&gt;Enterprise financial software has very strong conventions. People who work in finance for many years have very specific expectations about how things should look, expectations that come from Bloomberg terminals, from Excel, from legacy software that has not changed its interface in fifteen years. The &quot;standard&quot; for financial data display is often terrible by modern UX standards. Dense tables, small type, no visual hierarchy, no clear primary actions.&lt;/p&gt;
&lt;p&gt;And the users defend this. They are comfortable with it. It is familiar.&lt;/p&gt;
&lt;p&gt;When I first saw the existing approach to asset overview screens, common in this space, my reaction was: this is too much information, user cannot see what is important, there is no clear entry point. But experienced financial software designer might look at same screen and think: yes, this is how financial dashboard looks.&lt;/p&gt;
&lt;p&gt;I did not have this conditioning. So I questioned everything.&lt;/p&gt;
&lt;p&gt;I kept asking &quot;why does this need to be here?&quot; and &quot;what is user trying to decide when they look at this?&quot; Sometimes the answer was: it is there because Bloomberg shows it like this. Which is not good reason for design decision.&lt;/p&gt;
&lt;p&gt;Sometimes I was wrong. The convention existed for real reason, financial users genuinely need high data density, they genuinely scan information differently from consumer app users, they genuinely need specific metrics visible at all times because their workflow depends on it. I learned which conventions I should respect.&lt;/p&gt;
&lt;p&gt;But sometimes the convention was just habit. Inherited from older software. And because I did not know I was supposed to follow it, I did not follow it.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;The asset overview problem&lt;/h2&gt;
&lt;p&gt;Let me give specific example.&lt;/p&gt;
&lt;p&gt;One of the core screens in VALK platform is the asset overview, where investor or asset manager sees performance of specific investment. When I first designed this screen, I tried to understand: what decision does user make when they look at this?&lt;/p&gt;
&lt;p&gt;After many conversations, the answer was: they are checking if asset is performing as expected, and if not, where the problem is. This is monitoring task, not analysis task. They are not doing deep research here, they are checking status and deciding if they need to investigate further.&lt;/p&gt;
&lt;p&gt;So I designed the screen around that task. Clear status at top, is asset performing above, at, or below target? Then the key metrics that answer &quot;why&quot;: current value, IRR versus target IRR, distribution history, recent activity. Not everything. Only the information relevant to that specific decision.&lt;/p&gt;
&lt;p&gt;This felt obvious to me as UX designer. Of course you design around the task.&lt;/p&gt;
&lt;p&gt;When we showed it to early users, several of them asked where the additional data was. They were used to screens that showed everything all the time, because the software they came from did not make hierarchy decisions for them. They were used to finding information themselves in dense table.&lt;/p&gt;
&lt;p&gt;We had conversation about this. What we found was interesting: users who had less experience with legacy financial software preferred our approach immediately. Users who came from traditional institutional background needed more time to trust that the data they needed was accessible, just not all visible at same time. Both groups eventually worked well with the design. But the resistance came from people whose expectations were shaped by old conventions. And I had designed something better, partly because I did not know about those conventions.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Learning to read financial reports&lt;/h2&gt;
&lt;p&gt;After few months, I realized I needed to actually understand finance better if I was going to keep designing for it.&lt;/p&gt;
&lt;p&gt;Not to become financial expert. But to have enough knowledge to make faster decisions and ask better questions.&lt;/p&gt;
&lt;p&gt;I started reading financial reports, actual reports, the kind that asset managers produce. Not reading them as expert, but reading them as designer: what information is here? How is it organized? What does reader need to find quickly? What is buried that should not be buried?&lt;/p&gt;
&lt;p&gt;This was actually very useful exercise. Financial reports have some good organizational logic in them, evolved over many years of users needing specific information. But they also have enormous amount of information that is legally required but not practically useful in daily workflow. Understanding which was which helped me design dashboards that pulled out the actionable information.&lt;/p&gt;
&lt;p&gt;I also started to understand the rhythm of financial work. Fund administrators check certain things at end of month. Asset managers have different focus during fundraising period versus asset management period. Investors have different questions at different stages of investment lifecycle. Design that does not understand these rhythms will feel wrong even if it looks right.&lt;/p&gt;
&lt;p&gt;This knowledge came slowly. I am still learning. But now, eight months in, I can have real conversations about product decisions without needing to translate everything first.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;What living here has to do with it&lt;/h2&gt;
&lt;p&gt;I am writing this from my apartment in Alanya, Turkey. I moved here in August after spending several months in Russia. Alanya is small coastal city, not the kind of place most software workers would choose for remote work, but it has good internet, very low cost of living, and it is quiet.&lt;/p&gt;
&lt;p&gt;The cost of living part matters more than it sounds. When you are not stressed about money, you can afford to take time to learn things properly. I spent time in these eight months reading about finance, asking questions, going slowly on things I did not understand; because I was not in situation where I needed to rush past the difficulty to pay my bills. I think this gave me better foundation for the work than if I had forced myself to design fast from day one without understanding what I was designing.&lt;/p&gt;
&lt;p&gt;There is something to be said for having space to learn your domain.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;The question I keep asking&lt;/h2&gt;
&lt;p&gt;One habit I developed from being outsider to finance is that I ask this question constantly: what is the actual decision the user is making right now?&lt;/p&gt;
&lt;p&gt;Not what information they have. Not what they are looking at. What decision are they making, and what do they need to make it well?&lt;/p&gt;
&lt;p&gt;This sounds simple but it cuts through a lot of complexity in enterprise product design. Financial software is full of screens that show information without being organized around decisions. The information is there, all of it, but the user has to do mental work to connect it to their task.&lt;/p&gt;
&lt;p&gt;When you know the domain deeply, you sometimes stop noticing this problem. You adapt. You learn to find what you need in the dense interface. When you do not know the domain, the friction stays visible longer, you cannot ignore it by adapting, because you do not know enough to adapt. So you have to fix it.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;I do not think domain ignorance is asset that stays valuable forever. At some point, not knowing things just means you make bad decisions and have to go back. The window of useful ignorance is probably the first year, long enough to design genuinely, short enough that you are still learning fast.&lt;/p&gt;
&lt;p&gt;I am trying to use this window well. Ask the questions that will sound stupid in a year. Design without knowing what I am &quot;supposed&quot; to design. And meanwhile, keep reading those financial reports.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Originally published on kargaev.me. Imported to blog.deeflect.com archive.&lt;/em&gt;&lt;/p&gt;
</content:encoded></item><item><title>Building a design system from zero at a fintech startup</title><link>https://blog.deeflect.com/valk-02-design-process-from-zero/</link><guid isPermaLink="true">https://blog.deeflect.com/valk-02-design-process-from-zero/</guid><description>Six months into my first startup role, I rebuilt VALK&apos;s product from an engineer-built MVP. Here&apos;s what went wrong and what actually worked.</description><pubDate>Mon, 15 Jun 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Six months ago I opened Figma file for first time at VALK and felt something I did not expect. Not excitement. Just confusion.&lt;/p&gt;
&lt;p&gt;The file had no structure. Components were scattered without any naming logic. Colors were hardcoded everywhere, not variables, just hex values copied and pasted into each element. Some screens were designed in Sketch and then exported as images and placed directly into Figma. Someone had clearly tried to make interface look more professional at some point, but result was patchwork of decisions that did not talk to each other.&lt;/p&gt;
&lt;p&gt;This was the MVP. Functional, technically. From design perspective, it was starting point for everything.&lt;/p&gt;
&lt;p&gt;I had been at Spacecode agency for two years before VALK. At agency, design system was already there when I joined. Somebody else made all difficult decisions, naming conventions, grid structure, component hierarchy. I worked inside established system. I complained sometimes that system was limiting, but I did not appreciate what it meant to have one until I arrived somewhere that did not.&lt;/p&gt;
&lt;h2&gt;What I inherited&lt;/h2&gt;
&lt;p&gt;The product at this point was deal management platform for institutional investors. Complex tables, data rooms, investor documents, financial reporting. Not simple consumer application with five screens. Dozens of flows, many edge cases, and user base that does not forgive mistakes, investment managers, compliance officers, people who care very much about precision.&lt;/p&gt;
&lt;p&gt;The engineer-built interface worked. Buttons clicked, data loaded, forms submitted. But it was interface built by people whose mental model was the code, not the user. Information hierarchy made sense from database perspective. It did not make sense from human perspective.&lt;/p&gt;
&lt;p&gt;Typography was inconsistent. In some places body text was 14px, in other places 13px, in other places 15px. No reason for any of these choices. Spacing between elements followed no grid. Some cards had 16px padding, some had 20px, some had 24px, all on same page.&lt;/p&gt;
&lt;p&gt;For developer, these details do not matter much. Code is code. For designer who needs to create coherent system from this, every inconsistency is either problem to solve or problem to accept.&lt;/p&gt;
&lt;h2&gt;First instinct was wrong&lt;/h2&gt;
&lt;p&gt;My first instinct was to stop everything and build proper design system before touching any screens. Define tokens. Name colors. Create spacing scale. Build component library. Then design.&lt;/p&gt;
&lt;p&gt;This is wrong approach. I know this now.&lt;/p&gt;
&lt;p&gt;I spent almost six weeks trying to create complete foundation before designing actual product. I made beautiful token documentation in Figma. I wrote naming conventions. I created color palette with semantic names, &lt;code&gt;color-primary&lt;/code&gt;, &lt;code&gt;color-danger&lt;/code&gt;, &lt;code&gt;color-surface&lt;/code&gt;. I built button component with all variants.&lt;/p&gt;
&lt;p&gt;And then I had design system for product I did not understand yet.&lt;/p&gt;
&lt;p&gt;The problem with building system first is that you do not know what system you need. Every decision you make is abstract. You name color &quot;primary&quot; but you do not yet know all contexts where primary color will be used. You build button component but you have not yet seen all the edge cases that will force you to add fifth variant you did not plan for.&lt;/p&gt;
&lt;p&gt;After six weeks I threw away most of this work. Some decisions survived, but most of the early system was built on assumptions about product that turned out to be wrong.&lt;/p&gt;
&lt;h2&gt;What actually worked: pages first&lt;/h2&gt;
&lt;p&gt;After failed system-first approach, I changed method. I started designing individual pages with obsessive attention to detail, not thinking about reusability yet. Just making each screen as good as it could be.&lt;/p&gt;
&lt;p&gt;I spent probably three days on single table component. Financial data tables in enterprise product have many states, empty, loading, sorted, filtered, paginated, error. Row with action. Row without action. Expandable row. And within each state, many combinations.&lt;/p&gt;
&lt;p&gt;I documented all of these. Every variant, every edge case. For each page I did same thing.&lt;/p&gt;
&lt;p&gt;Slowly, after two months, patterns started to appear. I noticed I was making same table component over and over with small differences. Button styles were same across all pages. Spacing decisions I made on page one were becoming unconscious standard for pages that came after.&lt;/p&gt;
&lt;p&gt;Design system emerged from this. It was not planned, it was discovered.&lt;/p&gt;
&lt;p&gt;This approach has name. I learned later it is called &quot;extract, not prescribe.&quot; You design real things, then extract the patterns into system. You do not prescribe patterns before you have evidence for them. For someone coming from agency where system already existed, this was uncomfortable. It felt wrong to copy component from one page to another without having proper component library. But it was correct approach for where we were.&lt;/p&gt;
&lt;h2&gt;Figma organization for one person&lt;/h2&gt;
&lt;p&gt;When you are solo designer in startup, Figma organization matters more than people think. Not because you need to share files with other designers, there are no other designers. But because you will return to files you made six months ago and need to understand them immediately.&lt;/p&gt;
&lt;p&gt;My Figma structure at VALK went through three iterations.&lt;/p&gt;
&lt;p&gt;First iteration: one big file for everything. This is terrible. Do not do this. Second iteration was separate file per product area, which was better, but component sharing became problem. If I updated button component in one file, I had to manually update it in others.&lt;/p&gt;
&lt;p&gt;Third iteration, which I am still using now: two files. One &quot;master&quot; file that contains all components, tokens, and shared styles. One file per product page or flow that uses instances from master. Updates in master propagate everywhere.&lt;/p&gt;
&lt;p&gt;For component naming, I adopted convention that I now defend very strongly. Every component has name in this pattern: &lt;code&gt;Category/Subcategory/Variant/State&lt;/code&gt;. So button is not called &quot;button&quot;; it is called &lt;code&gt;Action/Button/Primary/Default&lt;/code&gt; or &lt;code&gt;Action/Button/Primary/Hover&lt;/code&gt;. Table row is &lt;code&gt;Data/Table/Row/Expandable&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;This feels excessive at first. But when you have fifty components and need to find specific one at 11pm before deadline, you appreciate the structure.&lt;/p&gt;
&lt;p&gt;Color styles follow different convention. Every color token has two names, technical name and semantic name. I use semantic name in all actual designs: &lt;code&gt;Color/Surface/Background&lt;/code&gt;, &lt;code&gt;Color/Text/Secondary&lt;/code&gt;, &lt;code&gt;Color/Status/Error&lt;/code&gt;. Technical names exist only in master token documentation.&lt;/p&gt;
&lt;h2&gt;Getting the dev team to actually follow specifications&lt;/h2&gt;
&lt;p&gt;This was, honestly, harder problem than building the system.&lt;/p&gt;
&lt;p&gt;At Spacecode, handoff process was established. Developers knew to look at Figma, knew what redlines meant. They had been doing it for years before I arrived. At VALK, developers did not have strong culture of checking design specifications in beginning. They were building quickly, product was moving fast. Sometimes they would look at design, sometimes they would make their own decisions about spacing or color or behavior.&lt;/p&gt;
&lt;p&gt;I do not blame them for this. It is natural in early startup where design is often treated as last step before shipping, not first step in planning.&lt;/p&gt;
&lt;p&gt;What changed it was not confrontation. I do not like confrontation and I also did not think it would work. What changed it was making specifications impossible to ignore, making design so detailed that following it was easier than making own decisions.&lt;/p&gt;
&lt;p&gt;I started writing very specific Figma notes on every component. Exact CSS values, interaction behavior, hover state timing, disabled state rules. I made Figma prototype in Principle for complex interactions so developer could see exactly what animation should look like. And I started joining technical discussions earlier, when frontend engineer was about to build new feature, I would bring Figma file to that conversation before any code was written. When design is shown before coding starts, developer thinks about implementation while looking at design. When design is shown after coding starts, developer is defending work already done.&lt;/p&gt;
&lt;p&gt;Our frontend engineer Alex told me at some point that specific Figma annotations saved him maybe one hour per week because he did not have to guess or send questions. Small thing, but it built trust.&lt;/p&gt;
&lt;h2&gt;What I got wrong about scale&lt;/h2&gt;
&lt;p&gt;When I was building component library, I made mistake of trying to create every possible variant immediately. Better to have everything ready, I thought, so I do not have to go back and update component later.&lt;/p&gt;
&lt;p&gt;Result was button component with eleven variants, most of which we never used.&lt;/p&gt;
&lt;p&gt;Unused components are not neutral. They take time to maintain. When you update design language, you update every variant. When someone new looks at your system, they wonder why there are eleven button types and which one to use. Complexity creates confusion even when it is hidden in component library.&lt;/p&gt;
&lt;p&gt;Better approach: build what you need, when you need it. Do not preemptively build.&lt;/p&gt;
&lt;p&gt;I read something from designer at large company around this time that stayed with me: &quot;A design system is not a dictionary where you put in all possible words. It is grammar, rules that let you make new words correctly when you need them.&quot;&lt;/p&gt;
&lt;p&gt;I think this is right.&lt;/p&gt;
&lt;h2&gt;Six months in, honest assessment&lt;/h2&gt;
&lt;p&gt;I am writing this from my apartment in Russia. I came back here after Bali in March when COVID made continuing remote travel complicated. Less movement, more deep work, it has actually been good for focus.&lt;/p&gt;
&lt;p&gt;The design system at VALK is now functional. Not perfect, but functional. Consistent typography, spacing grid, color system with proper semantic naming. Component library covers probably 70% of UI elements we use regularly.&lt;/p&gt;
&lt;p&gt;More important than the system itself: the product looks like product now. There is visual logic. Investor who opens deal page sees same design language as one who is looking at portfolio dashboard. This sounds obvious but it is not obvious when you are building feature by feature in startup.&lt;/p&gt;
&lt;p&gt;What I would tell myself six months ago: do not start with system. Start with pages. Let system find you through repetition. Documentation is not bureaucracy, it is communication with future version of yourself and with developers who need to implement your work. Perfect component library that ships in four months is worse than good-enough component library that ships in four weeks.&lt;/p&gt;
&lt;p&gt;And the most uncomfortable truth: when you are sole designer at startup, you will spend significant time on things that are not product design. Pitch decks. Marketing materials. Social media graphics. This will feel wrong if you care deeply about product. But resisting it wastes energy better spent elsewhere.&lt;/p&gt;
&lt;p&gt;The component library is not finished. Probably it is never finished. But it is solid enough to build on, and that is what matters at this stage.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Originally published on kargaev.me. Imported to blog.deeflect.com archive.&lt;/em&gt;&lt;/p&gt;
</content:encoded></item><item><title>Starting New Design Job During Global Pandemic</title><link>https://blog.deeflect.com/valk-01-pandemic-new-job/</link><guid isPermaLink="true">https://blog.deeflect.com/valk-01-pandemic-new-job/</guid><description>I joined fintech startup as sole product designer right before COVID. Working remote from Bali during quarantine taught me things about design process I did not expect.</description><pubDate>Sat, 28 Mar 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I joined VALK in November last year. Small fintech company from UK, building platform for institutional investors to tokenize and manage private assets. When I say small I mean it, I am the only designer.&lt;/p&gt;
&lt;p&gt;Before this I was lead designer at agency in Moscow. Spacecode. We had team of five designers and we shipped maybe 50 apps in two years. Banking apps, loyalty programs, event platforms. Fast work, different client every few weeks. I loved speed of it but I was tired of never seeing my designs actually live for more than launch day.&lt;/p&gt;
&lt;p&gt;So when VALK offered me remote position to build their product from ground up, I said yes. I packed my bag and went to Thailand with my partner. Then Vietnam. Then back to Thailand. I was designing fintech platform from beach in Phuket and it felt like I figured out life.&lt;/p&gt;
&lt;p&gt;Then COVID happened.&lt;/p&gt;
&lt;h2&gt;Stuck in Bali with Figma&lt;/h2&gt;
&lt;p&gt;March 2020. We were in Bali when everything started closing. Flights cancelled. Borders closed. My partner and I got stuck in small apartment in Canggu and suddenly &quot;remote work from paradise&quot; became &quot;quarantine in place you cannot leave.&quot;&lt;/p&gt;
&lt;p&gt;The strange thing is, my work did not change at all. I was already fully remote. My team was in London, I was wherever I happened to be. We used Slack for communication, Figma for design, Asana for tasks. The CEO would send me brief or we discuss on call, I design, I post in Slack, dev team implements. Simple.&lt;/p&gt;
&lt;p&gt;But everything around work changed. The anxiety of not knowing when I can go home. Reading news every morning instead of designing. My partner stressed. Friends back in Russia confused. And somehow I still need to design clean, professional interfaces for people who manage millions of dollars.&lt;/p&gt;
&lt;h2&gt;The MVP Was Ugly&lt;/h2&gt;
&lt;p&gt;I need to be honest about what I walked into. When I joined, VALK had existing product but it was... not good visually. Functional, yes. Engineers built it and it worked. But the interface was what you get when backend developers make design decisions. Grey boxes, inconsistent spacing, buttons that look different on every page.&lt;/p&gt;
&lt;p&gt;My first month I just studied. Opened every screen, every flow, every edge case. Tried to understand what this product actually does. Asset tokenization is not simple concept, especially when your previous work was designing food delivery app for Russian bank.&lt;/p&gt;
&lt;p&gt;I made mistake of trying to redesign everything at once. Created beautiful mockups, new design language, modern components. Showed to CEO on our weekly call. He liked it but said we cannot rebuild everything, we have clients using current version. Real clients. Investment banks.&lt;/p&gt;
&lt;p&gt;That was first lesson. Agency design and product design is completely different thing. At agency you start from zero, make it beautiful, ship it, move on. At product company you inherit mess and you fix it piece by piece while people are still using it.&lt;/p&gt;
&lt;h2&gt;Learning Finance by Designing Finance&lt;/h2&gt;
&lt;p&gt;Nobody teaches you about cap tables in design school. Or what &quot;deal origination&quot; means. Or why investor needs to see IRR calculation in specific format that looks ugly to you but is actually industry standard.&lt;/p&gt;
&lt;p&gt;First two months I was searching everything. Reading about private equity. Watching YouTube videos about how tokenization works. Asking our CEO basic questions that probably made me look stupid. &quot;What is data room?&quot; &quot;Why do investors need to sign this document before they can see the deal?&quot;&lt;/p&gt;
&lt;p&gt;But here is the thing, not understanding domain is actually advantage for designer sometimes. I would look at screen full of financial data and ask &quot;does user really need all of this at once?&quot; And answer was usually no. The engineers built it to show everything because they could. My job was to figure out what matters right now for this specific user in this specific moment.&lt;/p&gt;
&lt;p&gt;I redesigned the deal presentation page first. Original was wall of text with legal documents listed in table. I turned it into something that looks more like product page, key metrics visible immediately, documents organized by type, progress indicator showing where deal is in lifecycle. Nothing revolutionary. Just basic information hierarchy that nobody applied before because nobody with design background touched it.&lt;/p&gt;
&lt;h2&gt;Remote Process That Actually Works&lt;/h2&gt;
&lt;p&gt;People keep asking me how I manage design process remotely, especially now with COVID when everyone suddenly working from home. So here is what works for me.&lt;/p&gt;
&lt;p&gt;I do not do long meetings. I have one call per week with CEO where we discuss priorities. Everything else is async. I design in Figma, I leave detailed comments explaining my decisions, I post screenshots in Slack with context. If dev team has question they message me. If I have question I message them.&lt;/p&gt;
&lt;p&gt;The key thing, and I think many designers miss this, is that your Figma file IS your communication. Every frame should be self-explanatory. I name layers properly. I add notes. I create flow diagrams next to screens so developer can see how user gets from point A to point B without asking me.&lt;/p&gt;
&lt;p&gt;At Spacecode we had meetings every day. Stand-ups, reviews, presentations. I spent maybe 30% of my time in meetings. Now I spend zero time in meetings except that one weekly call. And I ship more work than I did before.&lt;/p&gt;
&lt;p&gt;Is it lonely? Sometimes. I miss having other designers to bounce ideas off. When I worked at agency I could walk to next desk and say &quot;does this interaction make sense?&quot; Now I am alone with my decisions. I started using Principle to prototype interactions and record them as video to send to team, because showing is better than explaining, especially when your English is not perfect.&lt;/p&gt;
&lt;h2&gt;What I Learned So Far&lt;/h2&gt;
&lt;p&gt;It has been only five months but I already see how different this is from agency work. At agency, design is the product. Client pays for design. At startup, design is tool to make product work. Nobody cares if your spacing is perfect if the feature does not solve user problem.&lt;/p&gt;
&lt;p&gt;I also learned that financial products have much stricter requirements than consumer apps. You cannot just move button because it looks better. Compliance team needs to approve changes. Audit trail matters. Some things look ugly because regulation requires them to be that way.&lt;/p&gt;
&lt;p&gt;Writing this from Bali, or what is left of normal life in Bali right now. Beaches are empty, restaurants closed. But Figma works same everywhere and I have good wifi. Tomorrow I will keep working on the portfolio management redesign while world figures out what is happening.&lt;/p&gt;
&lt;p&gt;Maybe when this is over I will write more about specific design challenges in fintech. For now I am just grateful I have interesting work to do during very strange time.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Originally published on kargaev.me. Imported to blog.deeflect.com archive.&lt;/em&gt;&lt;/p&gt;
</content:encoded></item></channel></rss>