<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Maks Danylenko]]></title><description><![CDATA[Practical insights on CTO career paths and tech consulting from 14+ years of building software and leading teams. Real advice for tech leaders and aspiring CTOs.]]></description><link>https://www.maksnotes.com</link><image><url>https://substackcdn.com/image/fetch/$s_!fdY-!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F502109c7-126e-4871-8c70-dfa2c4308ade_800x800.png</url><title>Maks Danylenko</title><link>https://www.maksnotes.com</link></image><generator>Substack</generator><lastBuildDate>Sun, 19 Apr 2026 09:43:13 GMT</lastBuildDate><atom:link href="https://www.maksnotes.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Maks Danylenko]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[maksdanylenko@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[maksdanylenko@substack.com]]></itunes:email><itunes:name><![CDATA[Maks Danylenko]]></itunes:name></itunes:owner><itunes:author><![CDATA[Maks Danylenko]]></itunes:author><googleplay:owner><![CDATA[maksdanylenko@substack.com]]></googleplay:owner><googleplay:email><![CDATA[maksdanylenko@substack.com]]></googleplay:email><googleplay:author><![CDATA[Maks Danylenko]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[TOON: Hype Format Looking for a Real Problem]]></title><description><![CDATA[TOON is being sold as the next big thing for LLM communication. My opinion: it&#8217;s mostly marketing hype, not a must-have technology.]]></description><link>https://www.maksnotes.com/p/toon-hype-format-looking-for-a-real</link><guid isPermaLink="false">https://www.maksnotes.com/p/toon-hype-format-looking-for-a-real</guid><dc:creator><![CDATA[Maks Danylenko]]></dc:creator><pubDate>Tue, 16 Dec 2025 11:24:14 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Mgkf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b3d6275-2769-4384-9bc4-5e37c20c7b13_1200x628.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Mgkf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b3d6275-2769-4384-9bc4-5e37c20c7b13_1200x628.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Mgkf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b3d6275-2769-4384-9bc4-5e37c20c7b13_1200x628.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Mgkf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b3d6275-2769-4384-9bc4-5e37c20c7b13_1200x628.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Mgkf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b3d6275-2769-4384-9bc4-5e37c20c7b13_1200x628.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Mgkf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b3d6275-2769-4384-9bc4-5e37c20c7b13_1200x628.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Mgkf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b3d6275-2769-4384-9bc4-5e37c20c7b13_1200x628.jpeg" width="1200" height="628" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7b3d6275-2769-4384-9bc4-5e37c20c7b13_1200x628.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:628,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Metaverse Hype Cycle cartoon&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Metaverse Hype Cycle cartoon" title="Metaverse Hype Cycle cartoon" srcset="https://substackcdn.com/image/fetch/$s_!Mgkf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b3d6275-2769-4384-9bc4-5e37c20c7b13_1200x628.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Mgkf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b3d6275-2769-4384-9bc4-5e37c20c7b13_1200x628.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Mgkf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b3d6275-2769-4384-9bc4-5e37c20c7b13_1200x628.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Mgkf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b3d6275-2769-4384-9bc4-5e37c20c7b13_1200x628.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>For most developers, it solves a problem you probably don&#8217;t have, and it introduces complexity you definitely don&#8217;t need.</p><p>Please don&#8217;t switch to TOON just because it&#8217;s shiny.</p><h3>1. Let&#8217;s Start With the Weird Part: JSON Everywhere&#8230; Except in Prompts</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!CrXz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f6a1ad6-71c5-40ce-905e-f65c9e2bbad3_1400x933.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!CrXz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f6a1ad6-71c5-40ce-905e-f65c9e2bbad3_1400x933.png 424w, https://substackcdn.com/image/fetch/$s_!CrXz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f6a1ad6-71c5-40ce-905e-f65c9e2bbad3_1400x933.png 848w, https://substackcdn.com/image/fetch/$s_!CrXz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f6a1ad6-71c5-40ce-905e-f65c9e2bbad3_1400x933.png 1272w, https://substackcdn.com/image/fetch/$s_!CrXz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f6a1ad6-71c5-40ce-905e-f65c9e2bbad3_1400x933.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!CrXz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f6a1ad6-71c5-40ce-905e-f65c9e2bbad3_1400x933.png" width="1400" height="933" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3f6a1ad6-71c5-40ce-905e-f65c9e2bbad3_1400x933.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:933,&quot;width&quot;:1400,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;JSON vs TOON: The Token-Efficient Future of AI Data Exchange | by Ashu  Kumar | Nov, 2025 | Medium&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="JSON vs TOON: The Token-Efficient Future of AI Data Exchange | by Ashu  Kumar | Nov, 2025 | Medium" title="JSON vs TOON: The Token-Efficient Future of AI Data Exchange | by Ashu  Kumar | Nov, 2025 | Medium" srcset="https://substackcdn.com/image/fetch/$s_!CrXz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f6a1ad6-71c5-40ce-905e-f65c9e2bbad3_1400x933.png 424w, https://substackcdn.com/image/fetch/$s_!CrXz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f6a1ad6-71c5-40ce-905e-f65c9e2bbad3_1400x933.png 848w, https://substackcdn.com/image/fetch/$s_!CrXz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f6a1ad6-71c5-40ce-905e-f65c9e2bbad3_1400x933.png 1272w, https://substackcdn.com/image/fetch/$s_!CrXz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f6a1ad6-71c5-40ce-905e-f65c9e2bbad3_1400x933.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>One of the first things that impressed me in the LLM world was this idea:<br>&#8221;Let&#8217;s use JSON to talk to models. It&#8217;s structured! Machines love it!&#8221;</p><p>Sounds nice. But then you look at how <strong>real LLM prompts</strong> are built.</p><p>Claude&#8217;s <a href="https://claude.ai/public/artifacts/3796db7e-4ef1-4cab-b70c-d045778f23ec">Smart Prompt Maker</a>? This is a tool for helping create prompts.<br>Plain text.</p><p>GitHub Copilot&#8217;s own internal prompts?<br>Again: plain text.<br>You can open this file yourself and see how they build prompts for editing code:<br><a href="https://github.com/microsoft/vscode-copilot-chat/blob/main/src/extension/prompts/node/inline/inlineChatEditCodePrompt.tsx">inlineChatEditCodePrompt.tsx</a></p><p>The output they expect? Pure text.</p><p>Not JSON. Not TOON. Just text.</p><p>So we have this strange situation:</p><ul><li><p>Prompt engineering tools use text.</p></li><li><p>Real-world LLM products use text.</p></li><li><p>Yet people want to wrap everything in JSON or TOON to be &#8220;modern&#8221; and &#8220;structured.&#8221;</p></li></ul><p><strong>And that is already a red flag.</strong></p><h3>2. Most LLM Context Is Text, Not Some Fancy Format</h3><p>For most real use cases, context is:</p><ul><li><p>plain text (descriptions, docs, comments),</p></li><li><p>or code (when talking to dev tools like AI commit / AI test, Mavka-style tools, etc.).</p></li></ul><p>The value comes from <strong>what you say</strong>, not from how many brackets or headers you add.</p><p>TOON is tightly tied to structured, table-like data. That&#8217;s a very narrow slice of what developers actually do with LLMs day to day:</p><ul><li><p>writing commit messages,</p></li><li><p>generating tests,</p></li><li><p>refactoring code,</p></li><li><p>explaining errors,</p></li><li><p>summarizing logs in natural language.</p></li></ul><p>In many of these, TOON adds more ceremony than value. Your model doesn&#8217;t need a new &#8220;format religion.&#8221; It needs clear instructions and relevant context.</p><h3>3. About Token Savings: CSV and Compact JSON Already Beat TOON</h3><p>Advocates of TOON love to talk about <strong>token savings</strong>. They show cases where TOON beats JSON in token count. Fine.</p><p>But look at the same problem with a bit of discipline.</p><p>If you:</p><ul><li><p>clean up your JSON,</p></li><li><p>or use a <strong>compacted JSON structure</strong>,</p></li><li><p>or even switch to <strong>CSV</strong> when you have tabular data,</p></li></ul><p>you can often do <strong>better than TOON</strong>.</p><p>In TOON&#8217;s own benchmarks, CSV comes out <strong>more compact</strong> than TOON. CSV is simpler, easier to parse, and already well understood. For many &#8220;rows and columns&#8221; problems, CSV wins.</p><p>Even worse (for TOON): when they compared TOON to <strong>compacted JSON</strong> in <a href="https://github.com/toon-format/toon?tab=readme-ov-file#mixed-structure-track">complex domains</a> (see their own mixed-structure track on GitHub), compact JSON beat TOON in every scenario.</p><p>So the supposed story:</p><blockquote><p>&#8220;TOON is the future, JSON is old and bloated&#8221;</p></blockquote><p>quickly turns into:</p><blockquote><p>&#8220;CSV and compact JSON quietly win in practice.&#8221;</p></blockquote><p>If a &#8220;revolutionary&#8221; format can&#8217;t consistently beat a cleaned-up version of JSON, you have to ask: <strong>is this really a breakthrough, or just a rebrand</strong>?</p><h3>4. My Read: Duolingo Solved Their Problem, Then Sold It as a Movement</h3><p>Here&#8217;s how TOON looks to me.</p><p>Duolingo had:</p><ul><li><p>a very specific internal problem,</p></li><li><p>in a very specific domain,</p></li><li><p>with very specific constraints.</p></li></ul><p>They designed TOON to fix <strong>their</strong> issue. That&#8217;s totally fine. Every serious company builds internal tools.</p><p><strong>But then comes the investor story:</strong></p><ul><li><p>&#8220;We invented a new AI data format!&#8221;</p></li><li><p>&#8220;We&#8217;re on the cutting edge of LLM protocols!&#8221;</p></li><li><p>&#8220;Look how advanced we are!&#8221;</p></li></ul><p>Suddenly, an internal optimization turns into a <strong>public &#8220;standard&#8221;</strong>, complete with blogs, talks, and hype. Now developers are told:</p><blockquote><p>&#8220;If you&#8217;re serious about LLMs, you should look at TOON.&#8221;</p></blockquote><p>My view: this is not about your problems as a developer.<br>This is about <strong>their narrative</strong> as a company.</p><h3>5. The Real Risk: Solving Fake Problems, Creating Real Ones</h3><p>When you adopt a hyped format like TOON too early, you risk:</p><ul><li><p><strong>Solving the wrong problem</strong><br>You optimize token count a tiny bit instead of fixing bad prompts, irrelevant context, or poor evaluation.</p></li><li><p><strong>Adding complexity to your stack</strong><br>Now you need converters, validators, libraries, and mental overhead just to talk to a model&#8230; that is totally fine with text and basic structure.</p></li><li><p><strong>Locking yourself into a niche format</strong><br>JSON and CSV are universal. TOON is not. You&#8217;re tying your system to someone else&#8217;s experiment.</p></li><li><p><strong>Confusing your team</strong><br>Your devs now have to learn a custom syntax instead of focusing on model behavior and domain logic.</p></li></ul><p><strong>This is classic hype-driven engineering</strong>:</p><ol><li><p>Pick a trendy technology.</p></li><li><p>Force it into your stack.</p></li><li><p>Then discover all the new problems it created.</p></li><li><p>Spend months fixing those instead of actual business issues.</p></li></ol><h3>6. What I Recommend Instead</h3><p>Before you even think about TOON, do this:</p><ul><li><p>Start with <strong>plain text prompts</strong>.<br>Make them clear, explicit, and well-structured.</p></li><li><p>Use <strong>CSV</strong> for large, regular tables of data.<br>Simple, compact, proven, easy to work with.</p></li><li><p>Use <strong>compact JSON</strong> where structure truly matters.<br>Avoid bloat. Remove unnecessary nesting and repetitive keys when you can.</p></li><li><p>Measure first, don&#8217;t assume.<br>Run the same task with:</p><ul><li><p>plain text + some structure,</p></li><li><p>CSV,</p></li><li><p>compact JSON,</p></li><li><p>and, if you really want, TOON.</p></li></ul></li></ul><p>Then compare:</p><ul><li><p>token count,</p></li><li><p>latency,</p></li><li><p>model quality for your specific domain,</p></li><li><p>complexity of your codebase.</p></li></ul><p>Most of the time, you&#8217;ll discover:</p><ul><li><p>TOON is not magic,</p></li><li><p>your existing tools are already good enough,</p></li><li><p>your biggest gain comes from better prompts, not brand-new formats.</p></li></ul>]]></content:encoded></item><item><title><![CDATA[Ship Fast, Roll Back Faster: Release Strategy for Desktop Apps.]]></title><description><![CDATA[Release and rollback for desktop apps is not a &#8220;nice to have.&#8221; It&#8217;s your last line of defense against the fact that we are humans shipping code into an unpredictable world.]]></description><link>https://www.maksnotes.com/p/ship-fast-roll-back-faster-release</link><guid isPermaLink="false">https://www.maksnotes.com/p/ship-fast-roll-back-faster-release</guid><dc:creator><![CDATA[Maks Danylenko]]></dc:creator><pubDate>Tue, 09 Dec 2025 07:30:48 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!fdY-!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F502109c7-126e-4871-8c70-dfa2c4308ade_800x800.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>You can test like crazy, run all the QA scripts, and still get CrowdStrike-level failures. The more complex the system, the more ways it can fail &#8211; and you will never fully enumerate them. The only honest response is to design for <strong>fast, automated rollback</strong> from day one.</p><h3>Why rollback matters more than &#8220;perfect releases&#8221;</h3><p>We love to pretend we can predict everything with tests, reviews, and checklists. But look at the last few years:</p><ul><li><p><strong>CrowdStrike 2024</strong>: a faulty Falcon Sensor content update bricked ~8.5M Windows machines with BSOD, disrupting airlines, banks, hospitals, and governments worldwide, with losses estimated around <strong>$10B+</strong>. The protection agent behaved like malware itself &#8211; pushed everywhere, with no quick escape hatch.</p></li><li><p><strong>Cloudflare 2019</strong>: a bad regex in the WAF config &#8594; 100% CPU across edge servers &#8594; global outage.</p></li><li><p><strong>Facebook 2021</strong>: a planned BGP change &#8594; entire network disappears from the internet.</p></li><li><p><strong>Cloudflare 2025</strong>: another cascading failure, again showing how small config changes can trigger massive outages.</p></li></ul><p>In every one of these, the <em>technical bug</em> is almost boring. The <strong>real story</strong> is: they had no safe way to roll back instantly once things started going wrong.</p><p>That&#8217;s the lesson for us: the question is not <strong>&#8220;How do we avoid all bugs?&#8221;</strong> but <strong>&#8220;When we inevitably ship a bad one, how fast can we get out of it?&#8221;</strong></p><p>For desktop apps, this is even more brutal: you&#8217;re pushing code onto thousands or millions of independent machines you <strong>don&#8217;t control</strong>. If you mess up, you can&#8217;t just fix the server and be done &#8211; you&#8217;ve delivered a time bomb to every endpoint. That&#8217;s why your <strong>release and rollback strategy</strong> is part of your product, not just your CI/CD config.</p><h3>The mindset shift: from &#8220;prevent failure&#8221; to &#8220;survive failure&#8221;</h3><p>I&#8217;m not a fan of the belief that <strong>&#8220;with enough planning, nothing bad will happen.&#8221;</strong> Complexity doesn&#8217;t care about your optimism. Every new feature, library, integration, and OS version multiplies your failure modes.</p><p>So instead of chasing some fantasy of perfect prediction, design for these realities:</p><ul><li><p><strong>You will ship a bad build.</strong></p></li><li><p>You will only discover the worst failures <strong>in production, under real user conditions.</strong></p></li><li><p>Sometimes your monitoring won&#8217;t even catch it; your first signal is a flood of support tickets.</p></li><li><p>When that happens, your only question is: <em><strong>Can we safely undo this in minutes, not days?</strong></em></p></li></ul><p>That&#8217;s what a good desktop release strategy buys you.</p><h3>Principles for sane desktop release &amp; rollback</h3><p>For most of us (unlike CrowdStrike, where security constraints are extreme), we absolutely can and should build <strong>automatic release &amp;</strong> <strong>rollback</strong>. At minimum strategy looks like this:</p><ol><li><p><strong>Release in chunks, never &#8220;all at once&#8221;</strong></p></li></ol><p>You want to control your blast radius.</p><p>For desktop:</p><ul><li><p>Start with <strong>internal / dogfood</strong> (your own machines, IT, support, engineering).</p></li><li><p>Then maybe <strong>1&#8211;5% of external users</strong> (a &#8220;ring 1&#8221; or canary cohort).</p></li><li><p>Only then ramp up to 25%, 50%, 100% &#8211; with checks and pauses in between.</p></li></ul><p>This is the desktop equivalent of <strong>ring deployments</strong> or <strong>canary releases</strong> on the server side. If CrowdStrike had shipped that content update to 1% first, they&#8217;d still have had a bad day &#8211; but not a $10B disaster.</p><ol start="2"><li><p><strong>Implement a ring / wave model</strong></p></li></ol><p>Microsoft&#8217;s classic model is:</p><ul><li><p><strong>Ring 0</strong> &#8211; internal/dev, very tolerant of bugs.</p></li><li><p><strong>Ring 1</strong> &#8211; early adopters, opt&#8209;in, understand risk.</p></li><li><p><strong>Ring 2+</strong> &#8211; broader user base, more conservative.</p></li></ul><p>For a desktop updater, that means:</p><ul><li><p>The update service knows which ring a machine belongs to.</p></li><li><p>New versions or definitions are <strong>first offered to inner rings</strong>.</p></li><li><p>You only promote an update to the next ring if metrics look healthy.</p></li></ul><ol start="3"><li><p><strong>Health checks and auto&#8209;revert on the client</strong></p></li></ol><p>Don&#8217;t just ship a binary and hope. The desktop agent itself should protect the user:</p><ul><li><p><strong>Startup sanity checks</strong>: after updating, the app should verify basic invariants: can it start, can it talk to the server, is config readable, no critical exceptions on boot.</p></li><li><p><strong>Watchdog / supervisor</strong>: a small, stable component that monitors the new version. If it sees repeated crashes or failed starts, it can:</p><ul><li><p>Flip back to the <strong>previous known&#8209;good version</strong>.</p></li><li><p>Disable the broken feature flag.</p></li><li><p>Contact the update server with a <strong>failure signal</strong>.</p></li></ul></li></ul><p>This is the &#8220;health check&#8221; equivalent for desktop. On the server we use probes and metrics; on desktop we need built&#8209;in &#8220;is this update killing the app or the OS?&#8221; checks.</p><ol start="4"><li><p><strong>Be able to roll back immediately</strong></p></li></ol><p>Rollback must not be a meeting. It must be:</p><ul><li><p>A <strong>single operation</strong> in your release system: &#8220;promote previous version&#8221;, &#8220;disable version X&#8221;, or &#8220;switch canary off&#8221;.</p></li><li><p>For desktop, ideally:</p><ul><li><p>The update server <strong>stops offering</strong> the bad version.</p></li><li><p>For machines that already updated, the agent can:</p><ul><li><p>Roll back to the older package that it still has cached.</p></li><li><p>Or receive a <strong>special rollback command</strong> that forces downgrade.</p></li></ul></li></ul></li></ul><p>Your rule of thumb: if rollback requires humans logging into endpoints or writing manual instructions to customers, <strong>you don&#8217;t have rollback</strong>. You have damage control.</p><ol start="5"><li><p><strong>Strong validation of updates and configuration</strong></p></li></ol><p>CrowdStrike&#8217;s specific failure was &#8220;wrong file uploaded.&#8221; That&#8217;s a deeply mundane way to blow up the world.</p><p>You want <strong>multiple layers</strong> of defense before anything reaches endpoints:</p><ul><li><p><strong>Schema and type validation</strong> of any config or content updates.</p></li><li><p><strong>Digital signatures and checksums</strong>: endpoints must refuse any file that doesn&#8217;t match what the server expects.</p></li><li><p><strong>Format and sanity checks on the client</strong>: if the file looks weird (size, structure, version mismatch), don&#8217;t apply it.</p></li><li><p><strong>Slow promotion</strong>: even if something bad slips through validation, your ringed rollout catches it before it hits everyone.</p></li></ul><p>You cannot rely on &#8220;the right file will always be uploaded.&#8221; Assume the opposite.</p><ol start="6"><li><p><strong>Observe your release like it&#8217;s a production incident</strong></p></li></ol><p>Every deployment is a small incident you <em>hope</em> ends well.</p><p>So you want:</p><ul><li><p><strong>Real&#8209;time metrics</strong> for the new version: crash rate, launch time, key errors, support tickets per minute.</p></li><li><p>Per&#8209;version and per&#8209;ring dashboards: &#8220;How&#8217;s 3.2.5 performing on ring 1 vs 3.2.4?&#8221;</p></li><li><p>Alerting with clear runbooks: &#8220;If crash rate &gt; X% for new version, stop rollout and trigger rollback.&#8221;</p></li></ul><p>Don&#8217;t just log things. Tie them to <strong>automated decisions</strong>: pause, roll forward, roll back.</p><h3>Breaking changes: ship them in rollback&#8209;friendly phases</h3><p>People love asking: &#8220;How do we release breaking server changes with zero downtime?&#8221; The desktop equivalent is: &#8220;How do we change protocols, storage formats, APIs, without bricking old clients?&#8221;</p><p>The answer is the same: you don&#8217;t do one big jump; you do <strong>several compatible steps</strong>:</p><ul><li><p><strong>Phase 1 &#8211; Expand</strong>: add new fields / endpoints / paths, but keep old behavior working. The server understands both old and new formats.</p></li><li><p><strong>Phase 2 &#8211; Dual&#8209;write / dual&#8209;read</strong>: clients can talk via both old and new paths. You can roll back either side because both still work.</p></li><li><p><strong>Phase 3 &#8211; Migrate</strong>: move data/users gradually, monitor.</p></li><li><p><strong>Phase 4 &#8211; Contract</strong>: only after you are absolutely sure, remove old code paths.</p></li></ul><p>This &#8220;expand and contract&#8221; pattern makes every step <strong>reversible</strong>. If something goes wrong in phase 3, you can still fall back to the old behavior because you haven&#8217;t yet burned the bridge.</p><p>For desktop specifically:</p><ul><li><p>Don&#8217;t couple &#8220;new binary&#8221; + &#8220;irreversible data migration&#8221; in one shot.</p></li><li><p>Let the app <strong>upgrade data in a way that&#8217;s reversible</strong> or at least survivable by the previous version (e.g., additive schema changes, versioned formats).</p></li><li><p>Only remove legacy paths once you&#8217;ve lived with the new path in production for a while.</p></li></ul><h3>A practical checklist for your desktop release pipeline</h3><p>If you&#8217;re a tech lead or CTO designing this from scratch, this is the minimum you want:</p><ul><li><p>You <strong>never</strong> ship to 100% of users first. Always rings/waves.</p></li><li><p>Your updater:</p><ul><li><p>Keeps at least one <strong>previous stable version</strong> locally.</p></li><li><p>Can <strong>downgrade itself</strong> without manual steps.</p></li><li><p>Does health checks after update and auto&#8209;revert if needed.</p></li></ul></li><li><p>Your backend:</p><ul><li><p>Knows which machine is on which version and ring.</p></li><li><p>Can remotely <strong>disable specific versions</strong> or features.</p></li><li><p>Has dashboards per version with error/crash metrics.</p></li></ul></li><li><p>Your process:</p><ul><li><p>Treats &#8220;rollback&#8221; as a <strong>first&#8209;class step</strong> in every release runbook.</p></li><li><p>Rehearses rollback in staging, not just forward deploys.</p></li><li><p>Defines <strong>clear thresholds</strong>: when do we stop rollout, when do we roll back?</p></li></ul></li></ul><p>Because in the end, we&#8217;re just engineers. We don&#8217;t control the OS, the drivers, the networks, or everything our users install. We don&#8217;t see every edge case. And with every bit of complexity we add, the space of &#8220;weird things that can go wrong&#8221; explodes.</p><p>What we <em>do</em> control is our ability to <strong>make safe mistakes</strong>: deploy small, observe quickly, and roll back instantly and automatically when reality doesn&#8217;t match our expectations.</p><p></p>]]></content:encoded></item><item><title><![CDATA[No‑Code vs AI Vibe Coding: Why I Stopped Fighting Automation Platforms]]></title><description><![CDATA[I didn&#8217;t need a startup&#8209;grade platform. I needed my small business to stop bleeding time on invoices and timesheets.]]></description><link>https://www.maksnotes.com/p/nocode-vs-ai-vibe-coding-why-i-stopped</link><guid isPermaLink="false">https://www.maksnotes.com/p/nocode-vs-ai-vibe-coding-why-i-stopped</guid><dc:creator><![CDATA[Maks Danylenko]]></dc:creator><pubDate>Sun, 07 Dec 2025 12:31:47 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!fdY-!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F502109c7-126e-4871-8c70-dfa2c4308ade_800x800.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>On paper, the job looked &#8220;simple&#8221;: automate invoice handling. In reality, the workflow was richer than expected:</p><ul><li><p>Scan emails for invoices and save them to the correct Google Drive folder (by year, month, and vendor)</p></li><li><p>Generate client invoices from developer timesheets and email them automatically</p></li><li><p>Remind developers to submit timesheets on time</p></li><li><p>Handle edge cases and conditions around all of the above</p></li></ul><p>This is the kind of &#8220;small&#8221; back&#8209;office work that quietly eats evenings</p><h3>The No&#8209;Code Promise (And Where It Broke)</h3><p>If you scroll LinkedIn long enough, the conclusion is always the same:<br>&#8220;Use a no&#8209;code platform. You don&#8217;t need technical people anymore. Old&#8209;school CTOs bring no value.&#8221;</p><p>Founders proudly share how they built full products on tools like <strong>N8N</strong> in a week or two, without a single developer. So I followed the hype and started with a no&#8209;code automation platform.</p><p>Almost immediately, I hit three walls.</p><p><strong>First,</strong> I had to learn the platform&#8217;s entire mini&#8209;universe: concepts, terminology, UI, how they think about flows, triggers, and blocks. Instead of focusing on <em><strong>my</strong></em> domain (emails, invoices, vendors, months, timesheets), I had to first understand <em><strong>their</strong></em> domain.</p><p><strong>Second,</strong> the platform wrapped Gmail, Drive, and everything else behind its own abstractions. I know roughly how Google&#8217;s APIs are structured, but inside the tool the mapping wasn&#8217;t intuitive. The real power of the APIs was there, but half&#8209;hidden and renamed.</p><p><strong>Third,</strong> debugging was painful. To test whether a tiny part of the logic worked, I had to run the whole flow manually and step through it. As a CTO I&#8217;ve spent years teaching teams to move from &#8220;click&#8209;debugging&#8221; to proper testing. Here I was, back to clicking, waiting, and hoping.</p><p><strong>Fourth,</strong> ai chat inside or around the platform didn&#8217;t save me either. The UI changes fast, documentation is incomplete, and anything slightly non&#8209;standard (&#8220;detect invoice, route to vendor folder, use timesheets to generate invoices&#8221;) often falls between the cracks.</p><p>After 1&#8211;2 weeks, the automation mostly worked. But it took way more effort than it should have. I even started considering hiring a <em><strong>no&#8209;code specialist</strong></em> to handle it for me &#8212; which is a funny twist on &#8220;you don&#8217;t need technical people anymore.&#8221;</p><h3>Switching To Vibe Coding With AI</h3><p>At that point I asked a different question:</p><p>What if I stop fighting the no&#8209;code tool and instead use AI to help me write small, focused pieces of <strong>real code</strong>? So I moved the whole thing to <strong>Google Apps Script</strong>, but with AI as my pair&#8209;programmer.</p><p>I described what I needed in natural language:<br>how to scan emails, detect invoices, route them into folders by year/month/vendor, process timesheets, generate invoices, send them out, and ping developers for reminders.</p><p>AI helped me draft the scripts, structure the modules, and wire them into Gmail and Drive. I then iterated: added tests, refined the logic, and used the real API docs whenever something subtle was needed.</p><p>In about <strong>two days</strong>, I had:</p><ul><li><p>Scripts that inspect emails and attachments for invoices.</p></li><li><p>Logic that saves files into <code>year/month/vendor</code> folders automatically.</p></li><li><p>Workflows to process developers&#8217; timesheets, generate invoices, and email them to clients.</p></li><li><p>Reminders to developers to fill or verify their timesheets.</p></li><li><p>Tests around the critical paths, so changes don&#8217;t break everything.</p></li></ul><p>No visual flows, no hidden abstractions &#8212; just code I understand and own.</p><h3>Why AI Coding Won</h3><p>For me, vibe coding with AI beat no&#8209;code on three key axes.</p><p><strong>Control:</strong> I can open any script, see exactly what&#8217;s happening, and change it. If the workflow grows, I&#8217;m not stuck waiting for a vendor to add just&#8209;one&#8209;more&#8209;block.</p><p><strong>Testing:</strong> I can write small tests around essential behavior instead of manually replaying whole flows, again and again, for every small change.</p><p><strong>Reality:</strong> I work directly with real APIs and documentation. AI helps me bridge the gaps, but the underlying model is transparent and durable.</p><h3>The Industry Shift (And Where I&#8217;m Betting)</h3><p>To be fair, no&#8209;code platforms are also moving toward AI. Some now let you describe a flow in natural language and they generate it for you. That&#8217;s a healthy direction and I might test it again in the future.</p><p>But the larger shift, which I wrote about in more detail in:<br><strong>&#8220;SaaS Without AI Integration Will Die &#8212; Here&#8217;s Why&#8221;</strong> on <a href="https://www.maksnotes.com/p/saas-without-ai-integration-will">Maks Notes</a>, is this:</p><p>The core skill isn&#8217;t &#8220;dragging blocks&#8221; or even &#8220;writing code by hand.&#8221;<br>It&#8217;s being able to <strong>express intent clearly</strong> and let AI translate that into something executable &#8212; ideally on a platform you truly control.</p><p>For my business, that currently means AI&#8209;assisted coding beats no&#8209;code.</p><h3>If You&#8217;re On The AI Coding Path</h3><p>If you&#8217;re already leaning into AI coding, you can push it even further.</p><p>At Clear Solutions, we&#8217;re building tools exactly for that:</p><ul><li><p><strong>AI Commit by Mavka</strong> helps you write clean, professional commit messages without wasting brainpower on wording.[<a href="https://commit.mavka.ai/">link</a>]</p></li><li><p><strong>AI Test by Mavka</strong> helps you automate test creation, so you don&#8217;t slide back into manual debugging when your scripts grow.[<a href="https://plugins.jetbrains.com/plugin/27702-ai-tests-by-mavka">link</a>]</p></li></ul><p>If you&#8217;re interested in trying them, contact me &#8212; I&#8217;m happy to share a <strong>free license</strong> so you can feel what happens when AI is paired with real code, proper testing, and full control, not just another visual layer on top.</p>]]></content:encoded></item><item><title><![CDATA[SaaS Without AI Integration Will Die — Here's Why]]></title><description><![CDATA[You know that feeling when a tool makes you less productive? When you spend more time figuring out how to use it than actually doing the work? If yes, this article is for you!]]></description><link>https://www.maksnotes.com/p/saas-without-ai-integration-will</link><guid isPermaLink="false">https://www.maksnotes.com/p/saas-without-ai-integration-will</guid><dc:creator><![CDATA[Maks Danylenko]]></dc:creator><pubDate>Thu, 27 Nov 2025 15:17:55 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/e4ed6c35-6252-4100-8f79-2f569dc1853f_750x461.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I&#8217;ve always used Balsamiq. I used it from my student years&#8212;it helps create product mockups fast. I need to sketch ideas quickly, align teams early, and move forward.</p><p>For years, this worked. But something changed.</p><h2>The Productivity Crisis I Didn&#8217;t See Coming</h2><p>A few months ago, I needed to create mockups for a new site. I had a similar design from before&#8212;shouldn&#8217;t take long, right?</p><p>I was wrong.</p><p>Using traditional wireframe tools, I spent hours just trying to recall<em> how to use the interface</em>. Creating buttons, adjusting spacing, organizing layers. After a full day of work, I had maybe 20% of what I needed. My estimate? A full week to finish.</p><p>That&#8217;s not productivity. I just wasted my time for nothing.</p><p>I realized the problem wasn&#8217;t the tool&#8217;s simplicity&#8212;it was that <strong>the tool required me to be both a tool specialist AND a person with an idea</strong>. I had to learn its UI tools before I could express my ideas.</p><h2>The AI Integration Breakthrough</h2><p>Then I discovered Frame0.</p><p>Frame0 is the same app, with the same functionality. UI/UX is pretty similar. Instead of forcing me to learn their interface, they built an <strong>API and AI integration that understood my intent</strong>. I could describe what I wanted in natural language, and the AI would translate that into actions within the tool.</p><p>Fifteen minutes. That&#8217;s all it took.</p><p>I went from frustrated to focused. From &#8220;how do I create this button?&#8221; to &#8220;what should this design actually communicate?&#8221;</p><p><strong>My productivity increased 5x.</strong></p><p>But here&#8217;s what really mattered: I had energy left for the details. For the design thinking. For the strategy. The tool stopped being an obstacle and became an extension of my thinking.</p><p>Small demo, just to illustrate how it was:</p><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;68a18bec-9753-4376-834b-969ec0556188&quot;,&quot;duration&quot;:null}"></div><h2>The Human-AI Collaboration Model</h2><p>This isn&#8217;t about replacing humans with AI. It&#8217;s about <strong>amplifying human capability</strong>.</p><p>When Frame0 added AI integration, they didn&#8217;t remove the design interface. They added a layer that lets humans focus on strategy while AI handles execution. The result? Better designs, faster delivery, happier users.</p><p>This is the model that wins in 2025:</p><ul><li><p><strong>Humans</strong> provide intent, strategy, and judgment</p></li><li><p><strong>AI</strong> handles execution, optimization, and pattern recognition</p></li><li><p><strong>The tool</strong> becomes invisible&#8212;just a means to an end<br></p></li></ul><h3>Users Don&#8217;t Want to Learn Your Interface&#8212;They Want Results</h3><p>Your users are developers, product managers, engineers. They&#8217;re busy. They don&#8217;t want to spend time mastering your tool&#8217;s quirks. They want to accomplish their goal <em>through</em> your tool, not <em>despite</em> it.</p><p>When you add AI integration&#8212;especially through APIs and MCP servers&#8212;you let users interact with your product in their language, not yours. They describe what they need. The AI handles the translation.</p><p>This is the difference between a tool and a friction point.</p><h2>The Tools That Get It Right</h2><p>At Clear Solutions, we&#8217;ve been building AI-enhanced products that understand this shift:</p><p><strong><a href="https://commit.mavka.ai/">AI Commit by Mavka</a></strong> &#8212; Automates commit message generation and code organization. Developers spend less time on documentation, more time on logic.</p><p><strong>AI Tests by Mavka</strong> &#8212; Generates unit test cases and tests automatically. Development teams move faster. Coverage improves. Bugs decrease.</p><p><strong>AI Code Review by Mavka</strong> &#8212; Provides intelligent code review feedback in real-time. Engineers focus on architecture decisions, not style guides.</p><p>These aren&#8217;t tools that force you to learn a new interface. They&#8217;re tools that integrate into your existing workflow and make you more productive.</p><p><strong>Want to see the difference?</strong> Try them. If you&#8217;re interested in a demo, reach out to me directly via <a href="https://www.linkedin.com/in/maksym-danylenko-2a2b8747/">LinkedIn</a>. We&#8217;ll show you what 5x productivity looks like.</p><p></p>]]></content:encoded></item><item><title><![CDATA[How AI Gives Developers a Voice]]></title><description><![CDATA[Have you noticed how AI is changing who gets heard in tech?]]></description><link>https://www.maksnotes.com/p/how-ai-gives-developers-a-voice</link><guid isPermaLink="false">https://www.maksnotes.com/p/how-ai-gives-developers-a-voice</guid><dc:creator><![CDATA[Maks Danylenko]]></dc:creator><pubDate>Mon, 24 Nov 2025 19:24:58 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!bylF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F428f427f-34da-4aff-a68e-347c9c86aa1f_847x847.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>For years, many engineers&#8212;including me&#8212;quietly built, coded, and solved problems behind the scenes. But in 2025, with the rise of advanced AI, something remarkable happened: developers finally have a voice.</p><p>Today, platforms powered by AI make it possible for engineers to share their experiences and insights at a professional level&#8212;just like professional bloggers and journalists. Our stories and ideas can now reach a much wider audience, and we&#8217;re able to join the bigger conversation about where technology is headed.</p><p>Here&#8217;s my own example: I recently wrote my first post for the <a href="https://commit.mavka.ai/">AI Commit tool</a>, powered by Mavka. I tried to answer the big question&#8212;will <a href="https://commit.mavka.ai/blog/will-ai-replace-programmers">AI replace developers</a>? Writing that post felt like a turning point. Suddenly, I wasn&#8217;t just a silent contributor. I was part of a public dialogue, sharing my perspective and connecting with other professionals.</p><p>AI Commit doesn&#8217;t just automate tasks. It empowers developers to write more clearly and consistently commit messages.</p><p>Right now, AI is bringing me a voice. It&#8217;s giving all of us&#8212;engineers, coders, architects&#8212;the chance to express ourselves, to share our expertise, and to shape the future of our industry. Whether you&#8217;re writing about the impact of AI on software development or sharing best practices for using new tools, AI is making it easier than ever to be heard. And that, in my view, is one of the most exciting changes happening in tech today.</p>]]></content:encoded></item></channel></rss>