<?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[Swym Stories]]></title><description><![CDATA[Discover insights and stories from the Swym team as we explore the intersection of e-commerce, technology, and customer experience. Through blogs, videos, and podcasts, we share our lessons learned, fresh perspectives and expertise]]></description><link>https://stories.getswym.com</link><image><url>https://substackcdn.com/image/fetch/$s_!_B_G!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1092240-7c5c-4cfb-aaf7-ab6ad9f84ffb_270x270.png</url><title>Swym Stories</title><link>https://stories.getswym.com</link></image><generator>Substack</generator><lastBuildDate>Tue, 14 Apr 2026 05:26:52 GMT</lastBuildDate><atom:link href="https://stories.getswym.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Swym Corp]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[swymming@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[swymming@substack.com]]></itunes:email><itunes:name><![CDATA[Swym Stories]]></itunes:name></itunes:owner><itunes:author><![CDATA[Swym Stories]]></itunes:author><googleplay:owner><![CDATA[swymming@substack.com]]></googleplay:owner><googleplay:email><![CDATA[swymming@substack.com]]></googleplay:email><googleplay:author><![CDATA[Swym Stories]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Swym x Shopify Markets]]></title><description><![CDATA[Unlocking Global Sales with Shopify]]></description><link>https://stories.getswym.com/p/swym-x-shopify-markets</link><guid isPermaLink="false">https://stories.getswym.com/p/swym-x-shopify-markets</guid><dc:creator><![CDATA[Sakshi Gupta]]></dc:creator><pubDate>Wed, 01 Apr 2026 04:29:14 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/192743281/67c5389fb8dc41ebab83c3a8e17a79b3.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p>This episode explores Shopify Markets, a powerful tool for global e-commerce, featuring insights from product manager Renuka and platform engineer Adam. Discover how Shopify enables merchants to sell internationally with localized experiences, the technical challenges faced, and future AI-driven enhancements.</p><ul><li><p>Shopify Markets overview and benefits</p></li><li><p>Technical architecture and challenges of implementing Markets</p></li><li><p>Market-aware shopper experience and personalization</p></li><li><p>Data and marketing strategies for global merchants</p></li><li><p>Future AI integrations and product roadmap</p></li></ul><h4>Chapters</h4><p>00:00 Introduction to Shopify Markets</p><p>02:58 Understanding Shopify Markets</p><p>05:27 Shopper Experience in Global Markets</p><p>08:17 Technical Challenges and Solutions</p><p>10:55 Marketing Insights for Merchants</p><p>13:55 Product Challenges and Edge Cases</p><p>16:46 Building for Scale and Complexity</p><p>19:13 Future of Market Support</p><p>22:12 Advice for Developers and Merchants</p><p></p><h4>Resources</h4><p><a href="https://shopify.com/markets">Shopify Markets Overview</a><br><a href="https://www.getswym.com/blog/wishlist-plus-shopify-markets-support">Swym&#8217;s Shopify Markets details</a><br><br></p><p><br><br></p><p> </p>]]></content:encoded></item><item><title><![CDATA[The Silent Signal: Enabling Shopper Intent directly on Shopify core]]></title><description><![CDATA[How we use Product Metafield to enable fast and efficient social proof on Shopify storefronts. Bonus - Works with Shopify Flow!]]></description><link>https://stories.getswym.com/p/the-silent-signal-enabling-shopper</link><guid isPermaLink="false">https://stories.getswym.com/p/the-silent-signal-enabling-shopper</guid><dc:creator><![CDATA[Ishaan Shettigar]]></dc:creator><pubDate>Wed, 25 Feb 2026 16:59:39 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!f528!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8aa115e-a3f6-4176-999e-9e6083f76fb7_2815x1237.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<blockquote><p><strong>Note from the Author</strong><br>This document reflects my perspective on how we built and enabled the capability, not really a how-to-use. If you are looking to try it out or looking for <a href="https://developers.getswym.com/docs/wishlist-social-count-from-product-metafields">our product documentation</a> or support features, <a href="https://getswym.com">our web portal</a> is the best place to start or try <a href="https://apps.shopify.com/swym-relay?utm_source=stories.getswym.com">our app</a> on your store.</p></blockquote><p>There&#8217;s a silent conversation happening on every storefront, every single day.</p><p>It&#8217;s the moment a shopper hovers over an item, pauses, and clicks that heart button. They aren&#8217;t ready to buy - not yet - but they&#8217;ve just raised their hand. They&#8217;ve signaled intent.</p><p>For years, we at Swym have tracked this social proof (the number of times a product is added to a wishlist) and enabled access via APIs. We knew which products were simmering just below the surface of a &#8220;Best Seller&#8221; list. Quite a few merchants leveraged it but not without limitations. Eg: a product details page will show just one product&#8217;s social proof, but a collection page needs to show all products in that all collection. That meant there were more API calls to pull and render it. Plus this wasn&#8217;t easily available to build customizations that are directly connected to the catalog filtering. It was a &#8220;Swym capability,&#8221; not a entirely general &#8220;Storefront reality.&#8221;</p><p>By making this nugget available on <strong><a href="https://shopify.dev/">Shopify Product Metafields</a>, </strong>it makes many use cases previously complicated to a simpler usage pattern and not compromised based on the implementation philosophy (if you know Shopify, you know there are infinite options to implement the same thing and usually most of them don&#8217;t end up with efficiency and speed goals the implementation starts with)</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://stories.getswym.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to read new stories!</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h3>Start with why</h3><p>Like usual, we start with why. So let me dive a bit deeper</p><p>Ecommerce business philosophy is somewhat obsessed with &#8220;Best Sellers.&#8221; It&#8217;s one of the loudest metric out there. But sales data only tells us what happened <em>yesterday</em>.</p><p>The Wishlist Social Proof (aka Wishlist Social Count) tells us what is going to happen <em>tomorrow</em>. By syncing this intent data point natively into Shopify Metafields, this  a way to listen to the <em>Most Desired</em> products - the ones that are trending in the hearts of shoppers before they get to the checkout line eventually.</p><div><hr></div><h3>Why should Shopify Native matter?</h3><p>This is something that needs context more than technicality. So when we sat down to build this, we had plenty of merchants leveraging this social proof in their experience flows. But it was nowhere straightforward. Clearly we need to multiple the craft of the modern developer, not add more complexities</p><p>By pushing into a metafield, we&#8217;ve enabled access to the data from an API call to a native Shopify attribute, ie it&#8217;s available where Shopify renders the rest of the ecommerce context that the merchant wants.</p><p>So it may not be obvious, but the answer goes far beyond just <strong>Storefront Efficiency</strong> (though that&#8217;s a huge part of it).</p><ol><li><p><strong>Render at Liquid speed:</strong> Think of the metafield as an extended edge cache for <a href="https://developers.getswym.com/docs/fetch-wishlist-social-count-batch-rest">the Swym API</a> (ie render first, refresh later if needed). So by storing these values directly on the Shopify Product object, the storefront load doesn&#8217;t have to make any additional API call to finish rendering. <br>eg: Reference to the social count directly on a Liquid theme file<br><br><code>{{ product.metafields.swym_wishlist.wishlist_social_count }}<br></code><br>This is critical for rendering social counts on <strong>Collection Pages</strong> where there may be 50+ products displayed at once. The result? <strong>No layout shift, no &#8220;loading&#8221; spinners, and zero impact to PageSpeed scores due to any missed implementation constraint. </strong>I am sure we don&#8217;t have to say this, but this is a huge dev experience lever.</p></li><li><p><strong>Native Automation:</strong> As the data point is available inside Shopify, it is accessible on tools like <strong>Shopify Flow</strong>. It opens up ideas we haven&#8217;t even thought about, like using a flow trigger workflow based on the change in soccial count of a product. eg: Do something cool when product.wishlist_social_count &gt; 1000.</p></li><li><p><strong>AI Readiness:</strong> I am sure pretty much every Shopify admin is already using Shopify <strong>Sidekick. </strong>So now that can also parse this &#8220;popularity&#8221; construct to help make better decisions, be it merchandising or support cool segments or widgets to the storefront experience.</p></li><li><p><strong>The future - Seamless Ecosystem Enablement:</strong> This essentially normalizes access to Swym for <strong>theme developers, agencies, or other apps</strong> in the ecommerce tech stack (like search provider or loyalty program). This means the experiences are faster to build (low complexity), cheaper to maintain (we maintain it!), and require little to no API work.</p></li></ol><div><hr></div><h3>The Technical &#8220;How-To&#8221;</h3><p>We push the Social Count to our namespace to enable ease of use. </p><h4>Using it in Liquid</h4><p>Displaying this on Product Details Page (PDP) or Collection Page is now literally one Liquid render:</p><p>Sample Code snippet</p><pre><code><code>{% if product.metafields.swym_wishlist.wishlist_social_count &gt; 10 %}
  &lt;span class="swym-wishlist-plus-badge"&gt;
    &#128293; {{ product.metafields.swym_wishlist.wishlist_social_count }} people want this!
  &lt;/span&gt;
{% endif %}
</code></code></pre><div><hr></div><h3>The Power of the TOML: Seamless Integration</h3><p>Sure it&#8217;s easy to build something, but to deploy it at our scale (50K and growing) requires an equally reliable way to deploy and monitor. Not to mention to rollback if things go awry. So we leveraged <strong>Metafield Definitions</strong> directly within the app' <strong>TOML configuration</strong>. giving our silent tip of the hat to Shopify&#8217;s evolving dev experience. </p><p>With this incredible automation powered by the Shopify platform itself, it&#8217;s a big chunk off our todo-list. Literally, we pushed these standardized definitions to our all of those <strong>50K+ merchants</strong> without a hitch. </p><p>It&#8217;s clean, it&#8217;s standardized and it&#8217;s simple.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;toml&quot;,&quot;nodeId&quot;:&quot;ccb0d007-528e-4963-b03d-01a00de7635c&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-toml">[product.metafields.app.wishlist_social_count]
name = &#8220;Wishlist Social Count&#8221;
description = &#8220;The number of times this product has been added to a shopper&#8217;s wishlist&#8221;
type = &#8220;number_integer&#8221;
capabilities.admin_filterable = true
access.customer_account = &#8220;read&#8221;
access.storefront = &#8220;public_read&#8221;
access.admin = &#8220;merchant_read&#8221;</code></pre></div><p>The above was the seemingly simple part, in the background we manage the scale per merchant per intent update through our systems. We deliberated on efficient ways on doing this sync. Here is a small brief on what we discussed</p><ul><li><p>When&#8217;s the best time to sync a product?</p></li><li><p>What triggers should initiate a refresh?</p></li><li><p>What&#8217;s a good SLA?</p></li><li><p>How do we measure the above-mentioned SLA?</p></li><li><p>How do we &#8220;onboard&#8221; past social proof for existing scale?</p></li><li><p>This one is super tricky - How do we manage retries and rate limits? (both internal services and Shopify&#8217;s API rate limits)</p></li></ul><p>Without going into the details, we have decisions and factors considered into it. We&#8217;ll reassess and upgrade our approach as we learn more or if factors change/new factors enter the picture</p><div><hr></div><h3>Intent proof finding voice</h3><h4>1. Automated Merchandising with Shopify Flow</h4><p>Set up a workflow that monitors wishlist social counts. If a product&#8217;s social count hits a &#8220;Viral&#8221; threshold (For example, a social count value of 100), have Flow automatically add it to a &#8220;Trending Now&#8221; collection or tag it for a social media spotlight.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zlzT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17d83c65-d906-4e66-8d5f-3a1ccd2ae8ee_1138x604.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zlzT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17d83c65-d906-4e66-8d5f-3a1ccd2ae8ee_1138x604.gif 424w, https://substackcdn.com/image/fetch/$s_!zlzT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17d83c65-d906-4e66-8d5f-3a1ccd2ae8ee_1138x604.gif 848w, https://substackcdn.com/image/fetch/$s_!zlzT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17d83c65-d906-4e66-8d5f-3a1ccd2ae8ee_1138x604.gif 1272w, https://substackcdn.com/image/fetch/$s_!zlzT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17d83c65-d906-4e66-8d5f-3a1ccd2ae8ee_1138x604.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zlzT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17d83c65-d906-4e66-8d5f-3a1ccd2ae8ee_1138x604.gif" width="1138" height="604" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/17d83c65-d906-4e66-8d5f-3a1ccd2ae8ee_1138x604.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:604,&quot;width&quot;:1138,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2166876,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/gif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://stories.getswym.com/i/188986452?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17d83c65-d906-4e66-8d5f-3a1ccd2ae8ee_1138x604.gif&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!zlzT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17d83c65-d906-4e66-8d5f-3a1ccd2ae8ee_1138x604.gif 424w, https://substackcdn.com/image/fetch/$s_!zlzT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17d83c65-d906-4e66-8d5f-3a1ccd2ae8ee_1138x604.gif 848w, https://substackcdn.com/image/fetch/$s_!zlzT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17d83c65-d906-4e66-8d5f-3a1ccd2ae8ee_1138x604.gif 1272w, https://substackcdn.com/image/fetch/$s_!zlzT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17d83c65-d906-4e66-8d5f-3a1ccd2ae8ee_1138x604.gif 1456w" sizes="100vw" loading="lazy"></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><figcaption class="image-caption">Merchant using wishlist_social_count metafield in Shopify Flow</figcaption></figure></div><h4>2. Automated Urgency with Shopify Flow</h4><p>Imagine a workflow where, if a product&#8217;s Social Count hits 100 but inventory drops below 10, an automatic &#8220;High Demand&#8221; tag is added to the product.</p><h4>3. AI-Generated Badges with Sidekick</h4><p>Use Shopify Sidekick to effortlessly design UI elements based on it, surface it any which way.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!JOH1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9abae6bd-128e-4528-8904-c70627b8d75f_1127x652.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JOH1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9abae6bd-128e-4528-8904-c70627b8d75f_1127x652.gif 424w, https://substackcdn.com/image/fetch/$s_!JOH1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9abae6bd-128e-4528-8904-c70627b8d75f_1127x652.gif 848w, https://substackcdn.com/image/fetch/$s_!JOH1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9abae6bd-128e-4528-8904-c70627b8d75f_1127x652.gif 1272w, https://substackcdn.com/image/fetch/$s_!JOH1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9abae6bd-128e-4528-8904-c70627b8d75f_1127x652.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!JOH1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9abae6bd-128e-4528-8904-c70627b8d75f_1127x652.gif" width="1127" height="652" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9abae6bd-128e-4528-8904-c70627b8d75f_1127x652.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:652,&quot;width&quot;:1127,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2079206,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/gif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://stories.getswym.com/i/188986452?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9abae6bd-128e-4528-8904-c70627b8d75f_1127x652.gif&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!JOH1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9abae6bd-128e-4528-8904-c70627b8d75f_1127x652.gif 424w, https://substackcdn.com/image/fetch/$s_!JOH1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9abae6bd-128e-4528-8904-c70627b8d75f_1127x652.gif 848w, https://substackcdn.com/image/fetch/$s_!JOH1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9abae6bd-128e-4528-8904-c70627b8d75f_1127x652.gif 1272w, https://substackcdn.com/image/fetch/$s_!JOH1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9abae6bd-128e-4528-8904-c70627b8d75f_1127x652.gif 1456w" sizes="100vw" loading="lazy"></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><figcaption class="image-caption">Sidekick building a widget with swym_wishlist.wishlist_social_count</figcaption></figure></div><p></p><h4>4. Collection Sort</h4><p>Go beyond &#8220;Best Selling&#8221; or &#8220;Price: Low to High.&#8221; Create a <strong>&#8220;Most Wanted&#8221;</strong> sort option. This allows shoppers to filter the catalog by what the community is currently eyeing, creating a trend-driven shopping experience that feels real and alive.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!JNr5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6675e3da-af16-47be-bcfb-30aed99ed64d_913x907.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JNr5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6675e3da-af16-47be-bcfb-30aed99ed64d_913x907.gif 424w, https://substackcdn.com/image/fetch/$s_!JNr5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6675e3da-af16-47be-bcfb-30aed99ed64d_913x907.gif 848w, https://substackcdn.com/image/fetch/$s_!JNr5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6675e3da-af16-47be-bcfb-30aed99ed64d_913x907.gif 1272w, https://substackcdn.com/image/fetch/$s_!JNr5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6675e3da-af16-47be-bcfb-30aed99ed64d_913x907.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!JNr5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6675e3da-af16-47be-bcfb-30aed99ed64d_913x907.gif" width="913" height="907" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6675e3da-af16-47be-bcfb-30aed99ed64d_913x907.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:907,&quot;width&quot;:913,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1806280,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/gif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://stories.getswym.com/i/188986452?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6675e3da-af16-47be-bcfb-30aed99ed64d_913x907.gif&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!JNr5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6675e3da-af16-47be-bcfb-30aed99ed64d_913x907.gif 424w, https://substackcdn.com/image/fetch/$s_!JNr5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6675e3da-af16-47be-bcfb-30aed99ed64d_913x907.gif 848w, https://substackcdn.com/image/fetch/$s_!JNr5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6675e3da-af16-47be-bcfb-30aed99ed64d_913x907.gif 1272w, https://substackcdn.com/image/fetch/$s_!JNr5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6675e3da-af16-47be-bcfb-30aed99ed64d_913x907.gif 1456w" sizes="100vw" loading="lazy"></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><figcaption class="image-caption">GIF Showing the creation of a Smart Collection based on the Wishlist Social Count Metafield Value</figcaption></figure></div><div><hr></div><h3>The Heart of the Story</h3><p>We didn&#8217;t enable this sync just to move numbers from point A to point B. We built it because we believe the most successful experiences are the ones that connect best products with the shoppers in the best way possible - ie the experiences that are best at listening to what the shopper &#8220;wants&#8221;.</p><p>We can see the crowd gathering from our end and now, so can our merchants and their shoppers as easily as we do.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!f528!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8aa115e-a3f6-4176-999e-9e6083f76fb7_2815x1237.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!f528!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8aa115e-a3f6-4176-999e-9e6083f76fb7_2815x1237.png 424w, https://substackcdn.com/image/fetch/$s_!f528!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8aa115e-a3f6-4176-999e-9e6083f76fb7_2815x1237.png 848w, https://substackcdn.com/image/fetch/$s_!f528!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8aa115e-a3f6-4176-999e-9e6083f76fb7_2815x1237.png 1272w, https://substackcdn.com/image/fetch/$s_!f528!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8aa115e-a3f6-4176-999e-9e6083f76fb7_2815x1237.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!f528!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8aa115e-a3f6-4176-999e-9e6083f76fb7_2815x1237.png" width="1456" height="640" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c8aa115e-a3f6-4176-999e-9e6083f76fb7_2815x1237.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:640,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:5941184,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://stories.getswym.com/i/188986452?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8aa115e-a3f6-4176-999e-9e6083f76fb7_2815x1237.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!f528!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8aa115e-a3f6-4176-999e-9e6083f76fb7_2815x1237.png 424w, https://substackcdn.com/image/fetch/$s_!f528!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8aa115e-a3f6-4176-999e-9e6083f76fb7_2815x1237.png 848w, https://substackcdn.com/image/fetch/$s_!f528!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8aa115e-a3f6-4176-999e-9e6083f76fb7_2815x1237.png 1272w, https://substackcdn.com/image/fetch/$s_!f528!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8aa115e-a3f6-4176-999e-9e6083f76fb7_2815x1237.png 1456w" sizes="100vw" loading="lazy"></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></p><div><hr></div><p>P.S: Here is <a href="https://developers.getswym.com/docs/wishlist-social-count-from-product-metafields">our product documentation again</a> in case you want to try it out</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://stories.getswym.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to read new stories!</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[[RECAP] The Great Library Merge: A Journal on Taming Complexity]]></title><description><![CDATA[From Many to One: Our Journey in Merging Repos to Conquer Complexity]]></description><link>https://stories.getswym.com/p/recap-the-great-library-merge-a-journal</link><guid isPermaLink="false">https://stories.getswym.com/p/recap-the-great-library-merge-a-journal</guid><dc:creator><![CDATA[Raj Laddha]]></dc:creator><pubDate>Wed, 25 Feb 2026 10:45:29 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!k7jV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bcc0fd7-4463-4086-8357-6331fbed75e8_2048x2048.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_!k7jV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bcc0fd7-4463-4086-8357-6331fbed75e8_2048x2048.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!k7jV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bcc0fd7-4463-4086-8357-6331fbed75e8_2048x2048.jpeg 424w, https://substackcdn.com/image/fetch/$s_!k7jV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bcc0fd7-4463-4086-8357-6331fbed75e8_2048x2048.jpeg 848w, https://substackcdn.com/image/fetch/$s_!k7jV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bcc0fd7-4463-4086-8357-6331fbed75e8_2048x2048.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!k7jV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bcc0fd7-4463-4086-8357-6331fbed75e8_2048x2048.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!k7jV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bcc0fd7-4463-4086-8357-6331fbed75e8_2048x2048.jpeg" width="728" height="728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0bcc0fd7-4463-4086-8357-6331fbed75e8_2048x2048.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&quot;width&quot;:1456,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:1303773,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://stories.getswym.com/i/168832858?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bcc0fd7-4463-4086-8357-6331fbed75e8_2048x2048.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!k7jV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bcc0fd7-4463-4086-8357-6331fbed75e8_2048x2048.jpeg 424w, https://substackcdn.com/image/fetch/$s_!k7jV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bcc0fd7-4463-4086-8357-6331fbed75e8_2048x2048.jpeg 848w, https://substackcdn.com/image/fetch/$s_!k7jV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bcc0fd7-4463-4086-8357-6331fbed75e8_2048x2048.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!k7jV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bcc0fd7-4463-4086-8357-6331fbed75e8_2048x2048.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><figcaption class="image-caption">AI-generated</figcaption></figure></div><p>In the world of software engineering, growth is a good problem to have. But with growth in services, code, and people comes its inevitable companion: complexity. At Swym, we undertook a significant project to tackle this head-on by merging our numerous internal Clojure library repositories into a single, unified repo.</p><p>This wasn't just a technical exercise in tidying up. It was a strategic move to simplify our systems, reduce cognitive overhead for our engineers, and pave the way for a more efficient future. This is the story of that project&#8212;our motivations, our strategy, our risks, and the lessons we learned along the way.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://stories.getswym.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to read more stories from the Swym team!</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h3>The Tipping Point: Why We Had to Change</h3><p>Like many growing companies, our architecture evolved. The initial choice to have separate repositories for different services and libraries made sense at the time, but as we scaled, this separation started to create friction. The real-world trigger for the merge was the sheer complexity involved in what should have been simple tasks: needing to build, deploy, test, and manage numerous components for a single function was becoming a bottleneck. The cost of adding value was becoming too high compared to the value itself.</p><p>Our stack is built on Clojure, a powerful and dynamic language running on the JVM. By its nature, Clojure allows for a lot of flexibility through guidelines rather than rigid rules. While this is a strength, it also meant that over time, inconsistencies grew across our many repos. This lack of a singular, enforceable guideline was a constant challenge.</p><p>There was also a subtle, forward-looking trigger: a centralised context would be hugely beneficial for the AI tools we are increasingly relying on. While not the sole reason, it was a necessary condition to unlock their full potential. We knew we had to re-evaluate our architectural choices to get ready for the future.</p><h3>The Game Plan: A "Band-Aid Rip-Off"</h3><p>We had attempted this before and paused, knowing the problem had merit but that the timing wasn't right. This time, we had a clear strategy. Aravind Baskaran, who spearheaded the initiative, called it the <strong>"band-aid rip-off" approach</strong>.</p><p>The core idea was to make the change swiftly and cleanly, focusing <em>only</em> on simplifying deployment and structure without altering any existing functionality in the first phase. All the code would move, the structure would change, but the underlying logic would remain untouched.</p><p>This approach had a few key principles:</p><ul><li><p><strong>No Functionality Changes:</strong> This was critical. By ensuring the core logic was the same, we could be confident that, with baseline tests passing, the system would behave as expected.</p></li><li><p><strong>Active Monitoring is Key:</strong> After the merge, we had to be incredibly watchful. We paid close attention to key metrics like build and deploy times&#8212;which we expected to be reduced by 50-60%&#8212;but also watched for any negative runtime implications.</p></li><li><p><strong>A Stable Technical Foundation:</strong> A key technical goal was to have a solid map of all our component versions&#8212;from the JVM and Clojure itself to our Kubernetes environment variables&#8212;to ensure a smooth and predictable rollout.</p></li></ul><h3>Navigating the Risks: Don't Stop the Train</h3><p>A project of this scale is not without its risks. The biggest fear was the point of no return. Aravind likened it to <strong>"stopping and reversing a large train"</strong>. An undertaking this large had to be atomic&#8212;it was either done or not done, with no room for a "half-done" intermediate state.</p><p>Other significant risks included:</p><ul><li><p><strong>Lack of Signals:</strong> The fear that even with testing, we might not have adequate signals to detect subtle issues once the changes hit our production Kubernetes environments.</p></li><li><p><strong>Feature Release Conflicts:</strong> We are constantly shipping new features. Trying to coordinate this merge with twenty other feature releases could have created a processing nightmare.</p></li></ul><p>To mitigate this, the project was given a <strong>critical "shelf life"</strong>. It had to be completed within a specific, tight time window to avoid causing more damage than it solved. If it took too long, the disruption to business requirements would outweigh the benefits. We carefully planned this window to execute the project with minimal disruption, ensuring no other deployments proceeded without a "green flag" from the merge team.</p><p></p><h3>Lessons from the Trenches: Our Key Takeaways</h3><p>This project was a tremendous learning experience. Here are our biggest takeaways for any team considering a similar endeavor.</p><h4>1. This is Not a Side Project</h4><p>Our previous attempts had stalled because the work was treated as a "side experiment". The most significant learning was that for a project of this magnitude to succeed, it cannot be a side project. <strong>It has to be </strong><em><strong>the</strong></em><strong> project</strong>. It requires focus and commitment to get it done.</p><h4>2. Empower a Single Driver</h4><p>While input from many is crucial, the execution needs a single, responsible owner to avoid "room for committee" based negotiations. We found success by letting the person who wants to take it forward build the proposal and enabling them to succeed, knowing they will be responsible for making and fixing mistakes along the way.</p><h4>3. Embrace Your Tools (and Your Team)</h4><p>The AI tooling available today significantly reduced the manual grunt work that would have made this project much more arduous in the past. But tools are only part of the equation. The project's success was driven by the team's conviction that this was a necessary pain point to address and by their confidence in the system's scalability and reliability.</p><h4>4. The Merge is a Foundation for the Future</h4><p>This project wasn't just about cleaning up the past; it was about building a better future. By bringing our Clojure code together, we now have the closest shot at developing and enforcing community-driven guidelines and standards internally. It allows our internal community to grow and build its legacy in terms of how we build software in 2025 and beyond.</p><h3>The Journey to Simplicity Continues</h3><p>The great library merge is complete, but it marks a beginning, not an end. Our journey toward simplicity is ongoing. Over the next few weeks and months, we will be closely observing the ripple effects of this change&#8212;both good and bad&#8212;to continue learning and refining our processes. The immediate next steps involve improving our monitoring signals so we can understand system health without digging into every detail, making our operations even more efficient.</p><p>This merge has given us more than just a cleaner codebase; it has provided a simplified, stable foundation. It enables us to finally attack the larger opportunities we had previously put on hold. By taking on this challenge, we've not only improved our day-to-day development reality but have also reaffirmed a core engineering principle: sometimes, to go faster, you first have to simplify.</p><h3><strong>Reflections from 2026</strong></h3><p>Looking back from early 2026, the &#8220;Great Library Merge&#8221; of August 2025 has proven to be a watershed moment for our engineering velocity. The most immediate win was the dramatic slash in overhead; our <strong>build and deployment times dropped</strong>, transforming what used to be a sluggish bottleneck into a streamlined, rapid-fire process. However, the most strategic advantage emerged in our AI integration. By consolidating our entire Clojure ecosystem into a single, unified source of truth, we provided our <strong>AI agents with a comprehensive, centralized context.</strong> This &#8220;one-stop shop&#8221; for code architecture has made it significantly easier to build agents that understand our entire system&#8217;s nuances without getting lost in repository sprawl. What started as a cleanup project has become the essential foundation for our AI-driven future.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://stories.getswym.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to read more stories from the Swym team!</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[The Engineering Pulse]]></title><description><![CDATA[Where engineering does not just stop at shipping but starts owning outcomes]]></description><link>https://stories.getswym.com/p/the-engineering-pulse</link><guid isPermaLink="false">https://stories.getswym.com/p/the-engineering-pulse</guid><dc:creator><![CDATA[Sakshi Gupta]]></dc:creator><pubDate>Sun, 08 Feb 2026 12:56:46 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/187283364/84e9bbcb736d2a67b5a0b8d840dba294.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p></p><p></p><h3><strong>Navigating Change: Inside Swym&#8217;s Evolving Engineering Culture</strong></h3><p>In this episode, Rishin, Aravind and I discuss the significant shifts happening within Swym&#8217;s engineering practices, emphasizing the move towards more autonomous, signal-driven decision-making powered by AI and automation. They explore how these changes impact daily routines, team ownership, and future growth strategies in a rapidly transforming tech landscape.</p><h6><strong>Key topics:</strong></h6><ul><li><p>Transition from traditional product-defined workflows to the &#8220;engineering pulse&#8221; approach</p></li><li><p>The role of daily rituals and automation in aligning teams with impact-driven goals</p></li><li><p>How AI is revolutionizing repetitive tasks in infrastructure and code development</p></li><li><p>New metrics and signals replacing old success measures</p></li><li><p>The importance of ownership, autonomy, and deep work in an AI-enhanced environment</p></li><li><p>Future of engineering careers in a fast-evolving AI-driven world</p></li><li><p>The significance of continuous learning, experimentation, and honest reflection</p></li></ul><h6><strong>Timestamps:</strong></h6><p>00:00 - Introduction to Swym&#8217;s internal shift towards the &#8220;engineering pulse&#8221;<br>02:31 - The importance of daily rituals and reducing hype with consistent routines<br>04:48 - How metrics are evolving and the shift in success signals<br>06:19 - Deep impact, automation, and focusing on what truly matters<br>09:03 - Making the abstract concrete: transferring learning and the power of repetition<br>12:19 - The future of engineer careers with AI and ownership of outcomes<br>15:01 - AI as a stepping stone for rapid experimentation and deep work<br>17:16 - Changing roles, titles, and the focus on intent over seniority<br>18:39 - Envisioning 2026: key truths about the evolving software landscape<br>21:14 - Preparing for exponential growth and strategic positioning<br>24:50 - The importance of discipline, boring routines, and continuous iteration<br>28:27 - Reflecting on company metrics, growth expectations, and upcoming targets<br>29:39 - Closing thoughts on ongoing support, transparency, and future initiatives</p><p></p><h6><strong>Resources &amp; Links:</strong></h6><ul><li><p><strong><a href="https://getswym.com">Swym Official Website</a></strong></p></li><li><p>Want to join us - Read below !</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;2c0a5de7-8958-447e-ae91-cd17b363aa6a&quot;,&quot;caption&quot;:&quot;As a recruiter, I&#8217;ve seen it all. I&#8217;ve seen the &#8220;Wait, which company is this?&#8221; emails, the accidental Google filters, and the total ghosting. I get it. Job hunting is a marathon in a rainstorm.&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Swymming, Not Sinking: A Guide to Our Interview Process &#127946;&#8205;&#9794;&#65039; &quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:361957232,&quot;name&quot;:&quot;Danica Lobo&quot;,&quot;bio&quot;:null,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!wzOW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27b4d72e-a91e-4ef2-af9c-d03866a530a9_720x1280.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-01-30T13:16:26.889Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!_B_G!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1092240-7c5c-4cfb-aaf7-ab6ad9f84ffb_270x270.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://stories.getswym.com/p/swymming-not-sinking-a-guide-to-our&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:186284224,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:4,&quot;comment_count&quot;:1,&quot;publication_id&quot;:2886569,&quot;publication_name&quot;:&quot;Swym Stories&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!_B_G!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1092240-7c5c-4cfb-aaf7-ab6ad9f84ffb_270x270.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p></p></li></ul><h6><strong>Note:</strong></h6><p>This conversation reflects Swym&#8217;s internal evolution and its strategic emphasis on automation, ownership, and agility amid technological shifts driven by AI advancements.</p>]]></content:encoded></item><item><title><![CDATA[An Engine for Enhancing Customer Journeys]]></title><description><![CDATA[From Intent to Loyalty - How your customer thinks?]]></description><link>https://stories.getswym.com/p/an-engine-for-enhancing-customer</link><guid isPermaLink="false">https://stories.getswym.com/p/an-engine-for-enhancing-customer</guid><dc:creator><![CDATA[Saai Sudarsanan D]]></dc:creator><pubDate>Tue, 03 Feb 2026 10:59:33 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!vtEL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b42b1a6-be19-4fd9-801c-f7d360a7614c_1000x400.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<blockquote><p><strong>Note from the Author</strong><br>This document reflects my perspective on how Swym functions as a Customer Journey Management engine. It is shaped by my understanding of the product, its design philosophy, and how I see journeys being modeled and executed in practice.</p><p>It is my attempt to explain the underlying ideas in a way that connects customer experience thinking with systems that operate at scale. </p><p>If you are looking for our product documentation or support features, <a href="https://www.getswym.com/">our web portal</a> is the best place to start or try <a href="https://apps.shopify.com/swym-relay?utm_source=stories.getswym.com">our app</a> on your store.</p></blockquote><h2>Context is King: Navigating the Fine Line Between Boosting Sales and Losing Trust</h2><p>For any merchant getting started with their online store, there are  too many apps out there waiting to help you take your sales through the roof and make your business boom. But why isn&#8217;t every merchant successful then? A sword is only as good as the person who wields it; the merchant decides whether it will kill or create their business.</p><p>One merchant might track specific points of their customer&#8217;s interactions on their page and send out minimal and targeted emails, which enhances both the customer&#8217;s experience with their brand and also boosts their business. Another sends out emails for every price drop and every discount on their store, and eventually end up in their customers&#8217; spam folder or even worse, get unsubscribed.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://stories.getswym.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Swym Stories! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>The difference here is perception. A merchant must ensure a customer&#8217;s overall view of a brand stays positive because the loss of trust is irreversible.</p><p>A real-life instance I found while researching customer trust is a complete disconnect between how messaging without context (or in the wrong context) can end up being pretty bad. <a href="https://www.bbc.com/news/world-us-canada-39641002">In 2017, </a><strong><a href="https://www.bbc.com/news/world-us-canada-39641002">Adidas</a></strong><a href="https://www.bbc.com/news/world-us-canada-39641002"> sent an automated email to Boston Marathon participants with the subject line, &#8220;</a><em><a href="https://www.bbc.com/news/world-us-canada-39641002">Congrats, you survived the Boston Marathon.</a></em><a href="https://www.bbc.com/news/world-us-canada-39641002">&#8221;</a> The intent was positive, but the message ignored critical context. Just a few years earlier, the Boston Marathon had been the site of a deadly bombing. What should have been celebratory came across as insensitive, forcing Adidas to issue a public apology.</p><p>Read more here on <a href="https://medium.com/better-marketing/how-adidas-recovered-from-their-boston-marathon-marketing-blunder-2aaae987a7bc">how they recovered</a> from that. </p><p><strong>Tools lacking context can create moments where the brand value erodes, needing additional effort to recover.</strong></p><div><hr></div><h2>What is a Customer Journey Map and why does it matter?</h2><p>A Customer Journey Map (CJM) is a visual representation of a customer&#8217;s experience with your brand. It provides an understanding of needs and concerns that either motivate or inhibit action. While we often discuss these as four distinct phases, it is important to remember that <strong>human behavior is rarely linear.</strong> Customers often loop back to previous stages or jump ahead unexpectedly. For this discussion, we will look at these four primary phases:</p><h3>Discovery Phase </h3><p>The customer becomes aware of a problem or desire and first encounters your brand through ads, content, word-of-mouth, or organic discovery. </p><p>Take Alice, she uses the local train to commute to work every day. She gets tired of the crowd, discomfort, and delays while using public transport, and the idea of buying a car pops into her head as a solution to the problems of time, comfort, and convenience.</p><h3>Research Phase</h3><p>The customer compares options, evaluates credibility, reads reviews, and looks for signals of trust, value, and relevance before committing.</p><p>Alice compares car models, prices, fuel types, EMI options, reviews, maintenance costs, and resale value while shortlisting brands that fit their budget and lifestyle.</p><h3>Decision Phase</h3><p>The customer decides to purchase based on price, confidence, timing, and experience, converting intent into action.</p><p>As Alice visits multiple car showrooms, most offer similar prices and features. One dealer, however, stands out: transparent pricing, flexible financing, a smooth test-drive experience, and timely follow-ups without pressure. </p><p>At this point, Alice isn&#8217;t choosing a car anymore; she&#8217;s choosing <strong>who she trusts</strong>. That confidence tips the decision, and she makes the purchase.</p><h3>Delight Phase</h3><p>Post-purchase experiences reinforce trust, build loyalty, and turn customers into repeat buyers and advocates through thoughtful communication and value.</p><p>After the purchase, Alice&#8217;s experience with the brand truly begins. Smooth delivery, clear onboarding, timely service reminders, responsive support, and thoughtful follow-ups reinforce her decision. Over time, consistent positive experiences turn satisfaction into trust, and trust into loyalty and recommendations.</p><h3>The Non-Linear Loop</h3><p>In reality, a customer might be in the Research phase and suddenly get pulled back into Discovery by a new technology, or they might stay in a loop between Research and Decision for months.</p><p>External factors also play a massive role in providing context. For example, a car dealership might see a sudden price drop or a spike in promotions. Is it just a sale, or is it because a heavy snowstorm has stopped everyone from driving, forcing the dealer to adjust? A merchant who understands that &#8220;it&#8217;s snowing, so no one is thinking about test drives&#8221; can adjust their messaging to be more empathetic rather than just pushy.</p><div><hr></div><h2>How to Make a Customer Journey Map?</h2><h4>Define a Persona (a generic customer)</h4><p>Create a representative customer profile that reflects your target audience&#8217;s goals, behavior, and constraints.</p><h4>Define the Journey Phases</h4><p>Outline the key stages of interaction with your brand (Discovery, Research, Decision, Delight).</p><h4>Map the Steps in Each Phase</h4><p>Identify the actions the customer takes at every stage.</p><h4>Analyze Each Phase</h4><ul><li><p>Questions in the customer&#8217;s mind</p></li><li><p>Thoughts and emotions driving decisions</p></li><li><p>Pain points or friction</p></li><li><p>Opportunities to improve the experience</p></li></ul><div><hr></div><h2>How to use a CJM with E-commerce Tools?</h2><p>In each phase of the map, the tool we use differs based on its relevance and effectiveness. Simple, you can&#8217;t use a screwdriver to write poems.</p><p>In the previous step, we analyzed the customer&#8217;s mindset at each phase of the journey. Use that understanding to decide which tools genuinely help the customer move through that phase with ease.</p><p>The goal isn&#8217;t to use more tools, but to use the <em>right</em> tool at the <em>right</em> moment, and sometimes, to use none at all.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vtEL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b42b1a6-be19-4fd9-801c-f7d360a7614c_1000x400.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vtEL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b42b1a6-be19-4fd9-801c-f7d360a7614c_1000x400.webp 424w, https://substackcdn.com/image/fetch/$s_!vtEL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b42b1a6-be19-4fd9-801c-f7d360a7614c_1000x400.webp 848w, https://substackcdn.com/image/fetch/$s_!vtEL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b42b1a6-be19-4fd9-801c-f7d360a7614c_1000x400.webp 1272w, https://substackcdn.com/image/fetch/$s_!vtEL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b42b1a6-be19-4fd9-801c-f7d360a7614c_1000x400.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vtEL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b42b1a6-be19-4fd9-801c-f7d360a7614c_1000x400.webp" width="1000" height="400" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8b42b1a6-be19-4fd9-801c-f7d360a7614c_1000x400.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:400,&quot;width&quot;:1000,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Wrong Tool For The Job&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Wrong Tool For The Job" title="Wrong Tool For The Job" srcset="https://substackcdn.com/image/fetch/$s_!vtEL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b42b1a6-be19-4fd9-801c-f7d360a7614c_1000x400.webp 424w, https://substackcdn.com/image/fetch/$s_!vtEL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b42b1a6-be19-4fd9-801c-f7d360a7614c_1000x400.webp 848w, https://substackcdn.com/image/fetch/$s_!vtEL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b42b1a6-be19-4fd9-801c-f7d360a7614c_1000x400.webp 1272w, https://substackcdn.com/image/fetch/$s_!vtEL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b42b1a6-be19-4fd9-801c-f7d360a7614c_1000x400.webp 1456w" sizes="100vw" loading="lazy"></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 example, an email tool might be used in one phase to run a broad, targeted marketing campaign, while in another it may simply send a single price-drop alert to a customer who has already shown clear interest in a product.</p><p>Hence, the same tool can be used multiple times across a journey, but in very different ways.</p><div><hr></div><h2>The CJM Engine</h2><p>Understanding a journey is one thing, but <strong>executing it consistently at scale</strong> is another. Imagine a sous chef in a restaurant. They don&#8217;t invent the recipes; they focus on consistent execution. They wait for orders, observe the kitchen, and react when the time is right. They coordinate the stoves, ovens, and knives using only what the dish needs.</p><p>A CJM engine works the same way. It executes the journey by following intent with judgment. The merchant defines the &#8220;recipe&#8221; (the instructions of when and what to do) and the engine follows it.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Nfr8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5287cd78-7912-44a4-b75b-f5b7621aec92_346x146.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Nfr8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5287cd78-7912-44a4-b75b-f5b7621aec92_346x146.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Nfr8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5287cd78-7912-44a4-b75b-f5b7621aec92_346x146.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Nfr8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5287cd78-7912-44a4-b75b-f5b7621aec92_346x146.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Nfr8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5287cd78-7912-44a4-b75b-f5b7621aec92_346x146.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Nfr8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5287cd78-7912-44a4-b75b-f5b7621aec92_346x146.jpeg" width="346" height="146" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5287cd78-7912-44a4-b75b-f5b7621aec92_346x146.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:146,&quot;width&quot;:346,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;YARN | follow his recipes. follow the recipe. | Ratatouille (2007) | Video  gifs by quotes | 56c5c5a8 | &#32023;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="YARN | follow his recipes. follow the recipe. | Ratatouille (2007) | Video  gifs by quotes | 56c5c5a8 | &#32023;" title="YARN | follow his recipes. follow the recipe. | Ratatouille (2007) | Video  gifs by quotes | 56c5c5a8 | &#32023;" srcset="https://substackcdn.com/image/fetch/$s_!Nfr8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5287cd78-7912-44a4-b75b-f5b7621aec92_346x146.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Nfr8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5287cd78-7912-44a4-b75b-f5b7621aec92_346x146.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Nfr8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5287cd78-7912-44a4-b75b-f5b7621aec92_346x146.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Nfr8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5287cd78-7912-44a4-b75b-f5b7621aec92_346x146.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p></p><h3>The Recipe</h3><p>For the engine to work, <strong>the recipe must be clear</strong>. This is your data model: a structured description of what starts a journey, what conditions matter, and when it should end.</p><p>Just like in a kitchen, vague recipes lead to inconsistent dishes.<br>A well-defined recipe allows the engine to execute journeys reliably, repeatedly, and at scale.</p><p>This is how intent becomes something software can understand and follow.</p><h3>Example: A Shoe Brand&#8217;s Customer Journey Recipe</h3><p><strong>Persona:</strong><br>A customer looking for comfortable running shoes for daily workouts.</p><p><strong>Discovery</strong><br>The customer sees a social media ad about lightweight running shoes and visits the brand&#8217;s website to browse.</p><p><strong>Research</strong><br>They read reviews, compare models, check sizing guides, and shortlist one pair. They add the shoes to their wishlist.</p><p><strong>Decision</strong><br>A few days later, the price drops slightly. The customer receives a single, well-timed notification highlighting the offer and free returns. They complete the purchase.</p><p><strong>Delight</strong><br>After delivery, the brand sends care tips, running advice, and a reminder to review the product. Over time, the customer receives loyalty rewards and early access to new launches.</p><p>This entire flow can be written as a <strong>recipe</strong>.<br>The CJM engine follows it, deciding when to act, when to wait, and when to stop.</p><p>Let&#8217;s now try writing it as a recipe</p><ul><li><p><strong>Discovery Phase</strong><br>A customer views a pair of running shoes and adds them to their wishlist.<br>Which event should trigger the journey? At what point do you decide this customer is worth engaging?</p></li><li><p><strong>Research Phase</strong><br>The customer repeatedly views the product, reads reviews, and selects sizes.<br>Which signals indicate genuine interest, and what do you define as <em>clear intent</em>?</p></li><li><p><strong>Decision Phase</strong><br>The shoe&#8217;s price drops, or the stock starts running low. This could be the tipping point.<br>Which conditions should trigger communication that nudges the customer toward purchase?</p></li><li><p><strong>Delight Phase</strong><br>After purchase, request a review, offer loyalty rewards, or share care tips.<br>What actions help bring the customer back and strengthen their experience with the brand?</p></li></ul><div><hr></div><h2>Conclusion</h2><p>Customer journeys are not about sending more messages. They are about <strong>making better decisions over time</strong>. A map helps you understand what your customer needs, while an engine ensures those decisions are executed with restraint.</p><p>When journeys are treated as recipes and tools as instruments, the customer experience stops feeling reactive and starts feeling intentional. The brands that survive won&#8217;t be the ones with the most automation, but the ones that know exactly <strong>when and when not to act</strong>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3_QI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dc04829-7b17-4988-85ac-ec4afd96cbba_693x462.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3_QI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dc04829-7b17-4988-85ac-ec4afd96cbba_693x462.jpeg 424w, https://substackcdn.com/image/fetch/$s_!3_QI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dc04829-7b17-4988-85ac-ec4afd96cbba_693x462.jpeg 848w, https://substackcdn.com/image/fetch/$s_!3_QI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dc04829-7b17-4988-85ac-ec4afd96cbba_693x462.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!3_QI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dc04829-7b17-4988-85ac-ec4afd96cbba_693x462.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3_QI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dc04829-7b17-4988-85ac-ec4afd96cbba_693x462.jpeg" width="693" height="462" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5dc04829-7b17-4988-85ac-ec4afd96cbba_693x462.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:462,&quot;width&quot;:693,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Plating Food: how to arrange a plate like a top chef&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Plating Food: how to arrange a plate like a top chef" title="Plating Food: how to arrange a plate like a top chef" srcset="https://substackcdn.com/image/fetch/$s_!3_QI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dc04829-7b17-4988-85ac-ec4afd96cbba_693x462.jpeg 424w, https://substackcdn.com/image/fetch/$s_!3_QI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dc04829-7b17-4988-85ac-ec4afd96cbba_693x462.jpeg 848w, https://substackcdn.com/image/fetch/$s_!3_QI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dc04829-7b17-4988-85ac-ec4afd96cbba_693x462.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!3_QI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dc04829-7b17-4988-85ac-ec4afd96cbba_693x462.jpeg 1456w" sizes="100vw" loading="lazy"></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><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://stories.getswym.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Swym Stories! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Swymming, Not Sinking: A Guide to Our Interview Process 🏊‍♂️ ]]></title><description><![CDATA[A candid look at how we hire, what it takes to thrive here, and why self-selection matters]]></description><link>https://stories.getswym.com/p/swymming-not-sinking-a-guide-to-our</link><guid isPermaLink="false">https://stories.getswym.com/p/swymming-not-sinking-a-guide-to-our</guid><dc:creator><![CDATA[Danica Lobo]]></dc:creator><pubDate>Fri, 30 Jan 2026 13:16:26 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!_B_G!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1092240-7c5c-4cfb-aaf7-ab6ad9f84ffb_270x270.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>As a recruiter, I&#8217;ve seen it all. I&#8217;ve seen the &#8220;Wait, which company is this?&#8221; emails, the accidental Google filters, and the total ghosting. I get it. Job hunting is a marathon in a rainstorm.</p><p>At Swym, we don&#8217;t use fancy bots to reject you in milliseconds. We&#8217;re humans. We&#8217;re small, we&#8217;re scaling (and we want to stay small keeping exponential growth in mind), and we care more about your drive than your ability to keyword-stuff a resume.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://stories.getswym.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Swym Stories! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>If you&#8217;ve been wondering what happens after you hit &#8220;Apply,&#8221; here is the real story.</p><h2><strong>&#128681; Is Swym Actually For You? (The Vibe Check)</strong></h2><p>Before we talk about interviews, let&#8217;s see if we&#8217;re a match. If you&#8217;re looking for a long form manual on how to do your job, we are most definitely not the one.</p><p><strong>You&#8217;ll love it here if:</strong></p><ul><li><p>You see ambiguity and think &#8220;Cool, I get to build the map&#8221; rather than &#8220;Help, I&#8217;m lost&#8221;, because you understand that wrapped within the ambiguity is the true size of the opportunity that nobody else can unravel other the ones working on it constantly</p></li><li><p>You care about making an impact much more than having a fancy title, because you understand that the voice of impact speaks more consistently, confidently (and louder) than the voice of a title in most rooms if not all, especially in our rooms. </p></li><li><p>You know that remote-first doesn&#8217;t mean work from under a rock disconnected from reality, because you understand remote-first is a convenience that everyone pays for in bits-and-pieces and more importantly you win by making others win and vice versa and that needs consistent communication that is &#8220;persistent&#8221; (calls/meetings are not considered communication btw).</p></li><li><p>You know that the AI-enabled-you &gt; &gt; &gt;  no-AI-you, because you understand that if you don&#8217;t take advantage of technology, what you do will eventually become obsolete (in most cases) and you are already eliminating those &#8220;grunt&#8221; work that bother you from pursuing deeper problems</p><p></p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ffyn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a21b9fc-484f-493c-93fd-f45127ac9064_2816x1312.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ffyn!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a21b9fc-484f-493c-93fd-f45127ac9064_2816x1312.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ffyn!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a21b9fc-484f-493c-93fd-f45127ac9064_2816x1312.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ffyn!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a21b9fc-484f-493c-93fd-f45127ac9064_2816x1312.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ffyn!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a21b9fc-484f-493c-93fd-f45127ac9064_2816x1312.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ffyn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a21b9fc-484f-493c-93fd-f45127ac9064_2816x1312.jpeg" width="2816" height="1312" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0a21b9fc-484f-493c-93fd-f45127ac9064_2816x1312.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1312,&quot;width&quot;:2816,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:496640,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://stories.getswym.com/i/186284224?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8507045-6810-4554-b708-0ad032b8ed70_2816x1536.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ffyn!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a21b9fc-484f-493c-93fd-f45127ac9064_2816x1312.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ffyn!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a21b9fc-484f-493c-93fd-f45127ac9064_2816x1312.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ffyn!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a21b9fc-484f-493c-93fd-f45127ac9064_2816x1312.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ffyn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a21b9fc-484f-493c-93fd-f45127ac9064_2816x1312.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><figcaption class="image-caption"><strong>This is fine&#8230;..</strong></figcaption></figure></div><h2><strong>&#128736; The Swym Roadmap: From Hello to Hired</strong></h2><p>We respect your time. We aim to wrap things up in 2 to 3 weeks. No six month marathons here.</p><h3><strong>Stage 1 - Questionnaire - All about you</strong></h3><p><strong>&#128173;What Happens?  - </strong>A quick screen to see how you think</p><p><strong>&#128161;Pro Tip - </strong>Be yourself. We can tell when it&#8217;s authentic</p><h3><strong>Stage 2 - Chat with me</strong></h3><p><strong>&#128173;What Happens?  - </strong>A vibe check with me (Danica!)</p><p><strong>&#128161;Pro Tip - </strong>Ask about the culture. I&#8217;ll give you the real tea</p><h3><strong>Stage 3 - Discuss with us</strong></h3><p><strong>&#128173;What Happens?  - </strong>Talk shop with a future teammate</p><p><strong>&#128161;Pro Tip - </strong>This is where you nerd out about the role, everything is on the proverbial table</p><h3><strong>Stage 4 - Solve/Build with us</strong></h3><p><strong>&#128173;What Happens?  - </strong>A practical take-home, real world challenge</p><p><strong>&#128161;Pro Tip - </strong>Show us your thought process, ask questions/discuss, not just the final answer</p><h3><strong>Stage 5 - Align with us</strong></h3><p><strong>&#128173;What Happens?  - </strong>Align with leads on the vision and how we want to get there</p><p><strong>&#128161;Pro Tip - </strong>45 minutes. No trick questions, just real talk</p><h2><strong>&#128161; How to Put Your Best Foot Forward</strong></h2><h3><strong>1. Do a Little Homework &#128214;</strong></h3><p>If I ask &#8220;What do we do?&#8221; and you say &#8220;I think you guys sell swimsuits?&#8221; we&#8217;re off to a rocky start. Check our <a href="https://www.linkedin.com/company/swym-corporation">LinkedIn</a>, read our blog (you are already here!), or <a href="https://getswym.com/">just browse our site</a> for five minutes (or more hopefully).</p><h3><strong>2. The STAR Method</strong></h3><p>When we ask about a time you failed or solved a problem, try the STAR method: <strong>S</strong>ituation<strong>, T</strong>ask<strong>, A</strong>ction<strong>, R</strong>esult<strong>.</strong> It keeps you from rambling. We&#8217;ve all been there!</p><h3><strong>3. Be a Human</strong></h3><p>We want to see your brain work. The &#8220;ums&#8221; and &#8220;ahs&#8221; are fine. We value a thoughtful conversation over a rehearsed script. </p><h3><strong>4. Laptop Over Phone &#128187;</strong></h3><p>Technical glitches happen, but joining a video interview from a shaky phone while walking your dog makes it hard for us to focus on your story.</p><blockquote></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hhhG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd762d87a-53be-43bf-9fa7-463416830cc8_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hhhG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd762d87a-53be-43bf-9fa7-463416830cc8_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!hhhG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd762d87a-53be-43bf-9fa7-463416830cc8_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!hhhG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd762d87a-53be-43bf-9fa7-463416830cc8_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!hhhG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd762d87a-53be-43bf-9fa7-463416830cc8_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hhhG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd762d87a-53be-43bf-9fa7-463416830cc8_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d762d87a-53be-43bf-9fa7-463416830cc8_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!hhhG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd762d87a-53be-43bf-9fa7-463416830cc8_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!hhhG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd762d87a-53be-43bf-9fa7-463416830cc8_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!hhhG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd762d87a-53be-43bf-9fa7-463416830cc8_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!hhhG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd762d87a-53be-43bf-9fa7-463416830cc8_1536x1024.png 1456w" sizes="100vw" loading="lazy"></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><h2><strong>&#129516; What Makes a &#8220;Swymmer&#8221;?</strong></h2><p>We aren&#8217;t looking for robots. We look for people who are honest about their values and how they work. We care deeply about:</p><ul><li><p><strong>Ownership</strong>: You aren&#8217;t here just to do the thing; you own the outcome. </p></li><li><p><strong>Big Impact and</strong> <strong>High-Agency:</strong> You won&#8217;t let anything stop you from getting to your outcome, be it your lack of experience or context or know-how, all of those can be acquired when fully aligned. You drive towards the impact, it doesn&#8217;t &#8220;just happen&#8221;.</p></li><li><p><strong>Growth Mindset</strong>: We win together - You thrive on collaboration and learn from the smart people we have around. Even more important is that you actively raise the bar for the smart folks that we are, making us grow our combined depth/knowledge.</p></li><li><p><strong>Customer-First</strong>: You always start and end with how this helps the people using what we build, be it an internal customer or an external one.</p></li><li><p><strong>Data aware aka &#8220;Guessing&#8221; with Data</strong>:  First principle thinking on using data to build your hypotheses - you make decisions based on accessible real info, not all info but the necessary and sufficient info to let you iterate.</p></li><li><p><strong>Sustainable Ambition aka Work AND Life</strong>: We value hard work but continued hard work is hazardous without healthy boundaries. You know how to define those boundaries responsibly, that prioritizes your life without compromising your or your team&#8217;s goals. </p></li><li><p><strong>Pure Passion</strong>: Whether it&#8217;s your craft, a cause, or a personal side project, share it with us. We love seeing what drives your conviction in action.</p></li><li><p><strong>AI-enabled:</strong> You think and use AI effectively to maximize time spent on deep work. This enables pretty much every other point laid above this, simply impossible to sustain without this first-principle.</p></li></ul><h2><strong>&#10067; Frequently Asked (and Honestly Answered) Questions</strong></h2><p><strong>Is it remote?</strong></p><p>Yes. We are remote-first. We also believe active collaboration is a serious competitive advantage and love working together as well. Our Bangalore space plays the part of an office during those days of intensity. (Cubbon Park is literally a stone&#8217;s throw away if the view matters)</p><p><strong>Will I get ghosted?</strong></p><p>No. We aim to give feedback within 48 hours of each stage. If it isn&#8217;t a fit, we will tell you why.</p><p><strong>What are you actually looking for?</strong></p><p>Ownership, data-informed decisions, and passion. Whether you&#8217;re obsessed with scalable systems or great experiences or sourdough baking, we want people who care about something.</p><p><strong>What are the responsibilities and deliverables for this role? Where is this role going?</strong></p><p>This will sound odd - A lot of the roles that are needed to do justice to our true opportunity have not been defined yet. Knowing that, we don&#8217;t always go heavy on the JDs. We instead align on our non-negotiables and your non-negotiables, let the other details evolve with time-bound milestones. Some of our best people have come in as role &#8220;X&#8221;, shaped up into role &#8220;Y&#8221; that is carved out based on what the opportunity needed - We love making this happen.</p><h2><strong>The Bottom Line</strong></h2><p>We aren&#8217;t looking for perfection. We&#8217;re looking for your ability to take your potential to its limits and have fun along the way (not just yours, push our collective potential to higher limits). If you want to build things that matter with people who actually like each other, we want to hear from you.</p><p><strong>Ready to jump in?</strong> Shoot me an email at <strong>danica.lobo@swymcorp.com</strong>. Let&#8217;s build something cool (aka Swym &#128522;) together.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://stories.getswym.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Swym Stories! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[BFCM 2025 - A Magical time for Shoppers, Merchants and Engineers]]></title><description><![CDATA[How we kept our systems healthy at 1 Million+ RPM]]></description><link>https://stories.getswym.com/p/bfcm-2025-a-magical-time-for-shoppers</link><guid isPermaLink="false">https://stories.getswym.com/p/bfcm-2025-a-magical-time-for-shoppers</guid><dc:creator><![CDATA[Saai Sudarsanan D]]></dc:creator><pubDate>Sat, 13 Dec 2025 07:15:59 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/e00b0f4c-111f-4ee1-b7fb-a24a515e0f74_3360x1899.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>You&#8217;ve just had a wonderful thanksgiving dinner, you hit the bed early, and as soon as you wake up, you must be prepared for one of the biggest sales of the year! BFCM, Black Friday - Cyber Monday, is one of the most important periods on the commerce calendar, with an ever-growing YoY revenue. </p><p>When most folks were getting ready to buy all your favorite products, at Swym we took this chance to display our ability and engineering excellence at scale.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://stories.getswym.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Swym Stories! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>This was our 10th BFCM at Swym, poised to be the biggest BFCM yet. We onboarded a lot of merchants BFCM&#8217;24, but we were also the most prepared this year. We moved all of our services to better infra and improved a lot of our infra practices - we handled <strong>1 Million+ RPM</strong> with low turbulence, almost like a breeze, if we daresay.</p><p>Here is a quick recap of what we enabled BFCM 2025 for our merchants</p><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;ea351848-cd58-4494-8d5e-88023e302ebc&quot;,&quot;duration&quot;:null}"></div><p><a href="https://www.linkedin.com/posts/swym-corporation_bfcm2025-ecommercegrowth-swym-activity-7405271587299565568-WR9x?utm_source=share&amp;utm_medium=member_desktop&amp;rcm=ACoAAAMk_uUBi-HKYYbuAfYaY-OZt7iT2HXBPoU">More here</a></p><p>This post is the story behind how we engineered this BFCM at Swym.  </p><p>Let&#8217;s divide and conquer the process, we had multiple focus areas that we worked on to make our systems ready for BFCM, we cover them one by one.</p><div><hr></div><h3>Migrating to Kubernetes</h3><p>Kubernetes was a huge thing in Swym, we were using it for all our queue processors and NodeJS Services, but the bulk of our ecosystem was written in Clojure and they were still on VMs. </p><p>During BFCM 2024, we had to provision new VMs and do some capacity planning to make sure we didn&#8217;t go down under the BFCM load, but this January this year we realized that we have had enough of this manual provisioning (We used Terraform, but still, it was too slow), so we decided to move our Clojure (pseudo) microservices to Kubernetes as well. (<a href="https://stories.getswym.com/p/why-clojure-though">If you are asking Why Clojure? &#129300;</a>)</p><p>A 2-month long consistent effort was required to onboard all our services to Kubernetes. Every service we onboarded presented its own problems. For example, our Clojure Services presented had some statefulness in them, we had to rewrite the stateful parts of the service to make them stateless. There were also changes in the way configuration was loaded into the services, eg: Clojure services used EDN files for configuration (a Clojure native data notation), which wasn&#8217;t the case in NodeJS services.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!N_3D!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb632c354-ef28-4514-a1f4-0c4a206aa43f_800x437.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!N_3D!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb632c354-ef28-4514-a1f4-0c4a206aa43f_800x437.jpeg 424w, https://substackcdn.com/image/fetch/$s_!N_3D!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb632c354-ef28-4514-a1f4-0c4a206aa43f_800x437.jpeg 848w, https://substackcdn.com/image/fetch/$s_!N_3D!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb632c354-ef28-4514-a1f4-0c4a206aa43f_800x437.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!N_3D!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb632c354-ef28-4514-a1f4-0c4a206aa43f_800x437.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!N_3D!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb632c354-ef28-4514-a1f4-0c4a206aa43f_800x437.jpeg" width="800" height="437" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b632c354-ef28-4514-a1f4-0c4a206aa43f_800x437.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:437,&quot;width&quot;:800,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Why does migrating to Kubernetes feel like digging dead bodies? Migrating  to Kubernetes has become the new norm. It's like we've all bought into the  promise of a silver bullet for our&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Why does migrating to Kubernetes feel like digging dead bodies? Migrating  to Kubernetes has become the new norm. It's like we've all bought into the  promise of a silver bullet for our" title="Why does migrating to Kubernetes feel like digging dead bodies? Migrating  to Kubernetes has become the new norm. It's like we've all bought into the  promise of a silver bullet for our" srcset="https://substackcdn.com/image/fetch/$s_!N_3D!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb632c354-ef28-4514-a1f4-0c4a206aa43f_800x437.jpeg 424w, https://substackcdn.com/image/fetch/$s_!N_3D!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb632c354-ef28-4514-a1f4-0c4a206aa43f_800x437.jpeg 848w, https://substackcdn.com/image/fetch/$s_!N_3D!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb632c354-ef28-4514-a1f4-0c4a206aa43f_800x437.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!N_3D!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb632c354-ef28-4514-a1f4-0c4a206aa43f_800x437.jpeg 1456w" sizes="100vw" loading="lazy"></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>But in the end after we fixed all the bugs, we saw light at the end of the tunnel, the K8s Migration was complete and our microservices were autoscaling. </p><p>We tuned the autoscaler according to our needs and waved a fond Goodbye to the days of manual VM creation and management.</p><h3>Observability Overhaul (Prometheus, Jaeger, OpenSearch fixes)</h3><p>When you receive <strong>800-900K requests per minute</strong>, you generate 2 to 4 times the amount of logs and traces. We were processing at least <strong>3000 spans per second</strong> and about <strong>80-100GB of logs per hour</strong>, pre-BFCM. The scale like we anticipated spiked during BFCM.</p><h5>Logging</h5><p>Our logging architecture had to improve exponentially to handle this scale. We shifted from logstash to a <a href="https://fluentbit.io/">fluentbit-fluentd based agent-aggregator architecture</a>, for the log collection mechanism.</p><ul><li><p><strong>Fluentbit pods (agents)</strong>, running as a part of a daemonset collected the logs from the services and just forwarded (using the fluent forward protocol) them to the Fluentd aggregator. The Agents ran as daemon-sets in their respective nodepools. You can configure a daemonset to run only on a specific set of nodes by setting node affinity. </p></li><li><p><strong>The Fluentd aggregator</strong> decided which index on <strong>OpenSearch</strong> to push the logs to, using an custom Lua Script. This helped us ensure that none of the logs were lost</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!DV9y!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04e6c2d5-2115-493f-9915-26bdfea6971a_3513x2588.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!DV9y!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04e6c2d5-2115-493f-9915-26bdfea6971a_3513x2588.png 424w, https://substackcdn.com/image/fetch/$s_!DV9y!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04e6c2d5-2115-493f-9915-26bdfea6971a_3513x2588.png 848w, https://substackcdn.com/image/fetch/$s_!DV9y!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04e6c2d5-2115-493f-9915-26bdfea6971a_3513x2588.png 1272w, https://substackcdn.com/image/fetch/$s_!DV9y!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04e6c2d5-2115-493f-9915-26bdfea6971a_3513x2588.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!DV9y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04e6c2d5-2115-493f-9915-26bdfea6971a_3513x2588.png" width="1456" height="1073" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/04e6c2d5-2115-493f-9915-26bdfea6971a_3513x2588.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1073,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:306909,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://stories.getswym.com/i/180418424?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04e6c2d5-2115-493f-9915-26bdfea6971a_3513x2588.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!DV9y!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04e6c2d5-2115-493f-9915-26bdfea6971a_3513x2588.png 424w, https://substackcdn.com/image/fetch/$s_!DV9y!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04e6c2d5-2115-493f-9915-26bdfea6971a_3513x2588.png 848w, https://substackcdn.com/image/fetch/$s_!DV9y!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04e6c2d5-2115-493f-9915-26bdfea6971a_3513x2588.png 1272w, https://substackcdn.com/image/fetch/$s_!DV9y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04e6c2d5-2115-493f-9915-26bdfea6971a_3513x2588.png 1456w" sizes="100vw" loading="lazy"></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><a href="https://opensearch.org/">OpenSearch</a> created the indices and maintained them using <strong>ISM (Index State Management) policies</strong>, which were used to configure <strong>log retention and priority</strong>, thus keeping storage costs and maintenance manageable.</p><h5>Tracing</h5><p><a href="https://www.jaegertracing.io/">Jaeger</a> is the absolute core of our debugging workflow&#8212;losing spans or a Jaeger outage during BFCM would be equivalent to operating blind. Our previous setup wouldn&#8217;t cut it, demanding a much more resilient cluster and an upgrade to <strong>Jaeger V2</strong>.</p><p>To future-proof the system, we introduced redundancy:</p><ol><li><p>Services push spans to <strong><a href="https://opentelemetry.io/">OpenTelemetry</a> (Otel) Collectors</strong>.</p></li><li><p>Otel Collectors push the spans into a temporary <strong>Kafka buffer</strong> (our &#8220;Kafka-Span-Buffer&#8221;).</p></li><li><p>Otel Kafka Consumers read the spans and write them to OpenSearch.</p></li></ol><p>This Kafka buffer was designed to prevent span loss during temporary downstream issues. However, the sheer write load exposed a major bottleneck: the underlying <strong>hard disks (HDDs) reached maximum throughput</strong>, causing critical latency spikes.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!OvJI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2179636f-83e7-484f-9a7e-a1e23dd2dab9_6530x2608.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!OvJI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2179636f-83e7-484f-9a7e-a1e23dd2dab9_6530x2608.png 424w, https://substackcdn.com/image/fetch/$s_!OvJI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2179636f-83e7-484f-9a7e-a1e23dd2dab9_6530x2608.png 848w, https://substackcdn.com/image/fetch/$s_!OvJI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2179636f-83e7-484f-9a7e-a1e23dd2dab9_6530x2608.png 1272w, https://substackcdn.com/image/fetch/$s_!OvJI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2179636f-83e7-484f-9a7e-a1e23dd2dab9_6530x2608.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!OvJI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2179636f-83e7-484f-9a7e-a1e23dd2dab9_6530x2608.png" width="1456" height="582" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2179636f-83e7-484f-9a7e-a1e23dd2dab9_6530x2608.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:582,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1006778,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://stories.getswym.com/i/180418424?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2179636f-83e7-484f-9a7e-a1e23dd2dab9_6530x2608.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!OvJI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2179636f-83e7-484f-9a7e-a1e23dd2dab9_6530x2608.png 424w, https://substackcdn.com/image/fetch/$s_!OvJI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2179636f-83e7-484f-9a7e-a1e23dd2dab9_6530x2608.png 848w, https://substackcdn.com/image/fetch/$s_!OvJI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2179636f-83e7-484f-9a7e-a1e23dd2dab9_6530x2608.png 1272w, https://substackcdn.com/image/fetch/$s_!OvJI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2179636f-83e7-484f-9a7e-a1e23dd2dab9_6530x2608.png 1456w" sizes="100vw" loading="lazy"></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><strong>The Fix:</strong> We immediately provisioned a <strong>high-performance SSD</strong> dedicated exclusively for the primary <strong>write index</strong> in OpenSearch. After a brief, high-throughput period (e.g., one hour), the index would automatically roll over, and the data stored on the expensive SSDs was migrated to a low-performance archival node. This tactical use of hardware ensured zero write latency during peak traffic periods, while keeping the costs low.</p><p>This way we were able to process and save 2.5 billion+ spans during the 4 days of BFCM.  </p><h3>JVM Optimization</h3><p>Obvious but requisite context - <strong>Java compiles to byte code and the byte code runs on the Java Virtual Machine, which in-turn runs on bare metal.</strong> This makes Java a versatile and cross-platform programming language. Fun fact, though its heavy, it is faster (comparable to C or C++) when it comes to runtime on a single core CPU. This is because the JVM optimizes your byte code multiple times during runtime. It generates hotpaths for frequently executed code. The JVM can be tuned to give max performance. We missed a very important JVM flag when migrating our services to kubernetes! This caused our services to severely under utilize the available memory. </p><p>We had forgotten the <strong>MaxRAMPercentage Flag</strong> and JVM was <strong>defaulting to 25% </strong>&#129760; &#129760; &#129760; <strong>!!! </strong></p><p>Relearning that from our VM-based deployments quickly, the memory utilization of our VMs became extremely optimal after setting it to 75% and this one flag gave us a lot of perf gains including a significant ART reduction (190-300ms across our services) and a good fistful of dollars saved per hour! </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!P-7d!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13bc4140-b806-40a0-895d-14ddcfc1e49a_500x659.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!P-7d!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13bc4140-b806-40a0-895d-14ddcfc1e49a_500x659.jpeg 424w, https://substackcdn.com/image/fetch/$s_!P-7d!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13bc4140-b806-40a0-895d-14ddcfc1e49a_500x659.jpeg 848w, https://substackcdn.com/image/fetch/$s_!P-7d!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13bc4140-b806-40a0-895d-14ddcfc1e49a_500x659.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!P-7d!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13bc4140-b806-40a0-895d-14ddcfc1e49a_500x659.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!P-7d!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13bc4140-b806-40a0-895d-14ddcfc1e49a_500x659.jpeg" width="500" height="659" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/13bc4140-b806-40a0-895d-14ddcfc1e49a_500x659.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:659,&quot;width&quot;:500,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!P-7d!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13bc4140-b806-40a0-895d-14ddcfc1e49a_500x659.jpeg 424w, https://substackcdn.com/image/fetch/$s_!P-7d!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13bc4140-b806-40a0-895d-14ddcfc1e49a_500x659.jpeg 848w, https://substackcdn.com/image/fetch/$s_!P-7d!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13bc4140-b806-40a0-895d-14ddcfc1e49a_500x659.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!P-7d!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13bc4140-b806-40a0-895d-14ddcfc1e49a_500x659.jpeg 1456w" sizes="100vw" loading="lazy"></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><strong>Pro tip -</strong> <strong>JVM Flags are critical, if someone tells you otherwise, they&#8217;re probably C# developers &#128521;.</strong></p><p>I cannot do justice to this finding in such a short paragraph, let me explain the different JVM flags we use and why, in a separate post.</p><h3>Queue Processor Optimization</h3><p>A major design choice in our VMs was, the service that was serving API requests was also tasked with processing messages across queues.</p><p>The tight coupling of real-time <strong>API serving</strong> and <strong>asynchronous queue processing</strong> was a major part of our original VM architecture. While it was manageable at a lower scale, this mixing of responsibilities was inefficient and prevented us from maximizing resource utilization. While separation of concerns sounds like an obvious answer that you would get most engineering minds nodding in agreement, the reality of maintaining more sub-systems for little-to-no-value is something we take seriously. Hence the &#8220;why&#8221; we need to do it had to go into first principles alignment without throwing the proverbial baby with the bath water.</p><h5>The Decoupling Strategy</h5><p>To solve this and fully leverage our Kubernetes migration, we implemented a complete separation of concerns:</p><ol><li><p><strong>API Services:</strong> Responsible only for handling synchronous, user-facing requests and pushing asynchronous work onto the queue. These services require high availability and predictable performance.</p></li><li><p><strong>Queue Processors:</strong> Responsible only for consuming messages from the queue and executing short-lived, asynchronous tasks. These services can tolerate disruption and have variable capacity needs.</p></li></ol><h5>Leveraging Azure Spot VMs for Cost Optimization</h5><p>This separation was key to an immediate and substantial <strong>cost optimization</strong>.</p><p>We achieved this by utilizing <strong>Azure Spot Virtual Machines</strong> through Azure Kubernetes Service (AKS) Spot Nodepools:</p><ul><li><p><strong>API Services Deployment:</strong> These were deployed onto <strong>Reserved Instances</strong> (standard, high-availability nodepools) to ensure zero downtime and consistent API performance.</p></li><li><p><strong>Queue Processors Deployment:</strong> These were moved entirely to <strong>Spot Nodepools</strong> (using Azure Spot VMs). The disruptable nature of Spot VMs&#8212;where Azure can reclaim the resource with a short notice&#8212;was entirely acceptable for our queue processors, as the queued messages would simply be picked up by another available Spot VM or, if necessary, a reserved VM once it became available.</p></li></ul><p>Azure Spot Virtual Machines, are basically leftover capacity that Azure wants to use in an effective way.  Say Azure has 100 Virtual Machines, and it has rented out 30 to <strong>Swym</strong> and 20 to <strong>CompanyX</strong>, now, it has <strong>50 unused VMs</strong>. Azure offers these under the Spot Category at fraction of the actual price!! But the caveat is that Azure can reclaim these VMs if it needs them for something else, say, <strong>CompanyZ</strong> wants 50 VMs. Azure gives a 30 second, eviction notice before reclaiming the capacity.</p><p>The above explanation is a very crude one, please read more about Azure Spot VMs <a href="https://learn.microsoft.com/en-us/azure/virtual-machines/spot-vms">here</a>.</p><p>The practical implementation was simple: we used an environment flag within our application to toggle between the API-serving logic and the asynchronous processing logic. By running these two configurations on different nodepools, we effectively:</p><ul><li><p><strong>Improved API Performance:</strong> By dedicating highly available resources solely to low-latency API calls.</p></li><li><p><strong>Optimized Costs:</strong> By running the resource-intensive, interrupt-tolerant asynchronous tasks on highly discounted Spot VMs.</p></li></ul><div><hr></div><h3>Code Freeze!</h3><p>There was a strict code freeze during the entire span of the BFCM period, no deployments or config changes were allowed during this period (unless they were bug fixes). To be our own critic - That doesn&#8217;t sound like a 2025-ready decision. But we chose to stop deploying any new lines of code without a strong reason that can&#8217;t wait for the 5-7 days. This is an area of improvement for 2026, something we keep tinkering on how to enable true CI/CD.</p><p>In the meantime, we upgraded our kubernetes clusters, and applied multiple security patches to the existing codebase, further hardening our systems for the impending fun onslaught &#128526;.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!oIp9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5727b271-fd12-4253-b3e0-3c9b68fbe0c2_642x394.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!oIp9!,w_424,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5727b271-fd12-4253-b3e0-3c9b68fbe0c2_642x394.gif 424w, https://substackcdn.com/image/fetch/$s_!oIp9!,w_848,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5727b271-fd12-4253-b3e0-3c9b68fbe0c2_642x394.gif 848w, https://substackcdn.com/image/fetch/$s_!oIp9!,w_1272,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5727b271-fd12-4253-b3e0-3c9b68fbe0c2_642x394.gif 1272w, https://substackcdn.com/image/fetch/$s_!oIp9!,w_1456,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5727b271-fd12-4253-b3e0-3c9b68fbe0c2_642x394.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!oIp9!,w_1456,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5727b271-fd12-4253-b3e0-3c9b68fbe0c2_642x394.gif" width="642" height="394" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5727b271-fd12-4253-b3e0-3c9b68fbe0c2_642x394.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:394,&quot;width&quot;:642,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Prayer Server Meme - Prayer Server Fixing - Discover &amp; Share GIFs&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Prayer Server Meme - Prayer Server Fixing - Discover &amp; Share GIFs" title="Prayer Server Meme - Prayer Server Fixing - Discover &amp; Share GIFs" srcset="https://substackcdn.com/image/fetch/$s_!oIp9!,w_424,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5727b271-fd12-4253-b3e0-3c9b68fbe0c2_642x394.gif 424w, https://substackcdn.com/image/fetch/$s_!oIp9!,w_848,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5727b271-fd12-4253-b3e0-3c9b68fbe0c2_642x394.gif 848w, https://substackcdn.com/image/fetch/$s_!oIp9!,w_1272,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5727b271-fd12-4253-b3e0-3c9b68fbe0c2_642x394.gif 1272w, https://substackcdn.com/image/fetch/$s_!oIp9!,w_1456,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5727b271-fd12-4253-b3e0-3c9b68fbe0c2_642x394.gif 1456w" sizes="100vw" loading="lazy"></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>Finally, most of the engineering team (almost all Swymmers are engineers &#128105;&#8205;&#128187;&#128104;&#8205;&#128187;) got together in Bengaluru and kept an eye aka stared at the BFCM Grafana dashboards for days and nights on a shift basis to celebrate every spike and stat that showed how much of the global ecommerce volumes we helped supporting. Thankfully, there were just murmurings of incidents or outages, lots of (welcome) false flags that drove us to finding better ways of monitoring/concluding if a peak/trough was concerning or not.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hyim!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95637c1c-d72b-46c5-8e1c-a6a32176e71d_500x368.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hyim!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95637c1c-d72b-46c5-8e1c-a6a32176e71d_500x368.jpeg 424w, https://substackcdn.com/image/fetch/$s_!hyim!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95637c1c-d72b-46c5-8e1c-a6a32176e71d_500x368.jpeg 848w, https://substackcdn.com/image/fetch/$s_!hyim!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95637c1c-d72b-46c5-8e1c-a6a32176e71d_500x368.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!hyim!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95637c1c-d72b-46c5-8e1c-a6a32176e71d_500x368.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hyim!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95637c1c-d72b-46c5-8e1c-a6a32176e71d_500x368.jpeg" width="500" height="368" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/95637c1c-d72b-46c5-8e1c-a6a32176e71d_500x368.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:368,&quot;width&quot;:500,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Computer Guy meme&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Computer Guy meme" title="Computer Guy meme" srcset="https://substackcdn.com/image/fetch/$s_!hyim!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95637c1c-d72b-46c5-8e1c-a6a32176e71d_500x368.jpeg 424w, https://substackcdn.com/image/fetch/$s_!hyim!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95637c1c-d72b-46c5-8e1c-a6a32176e71d_500x368.jpeg 848w, https://substackcdn.com/image/fetch/$s_!hyim!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95637c1c-d72b-46c5-8e1c-a6a32176e71d_500x368.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!hyim!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95637c1c-d72b-46c5-8e1c-a6a32176e71d_500x368.jpeg 1456w" sizes="100vw" loading="lazy"></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><div><hr></div><h2>Conclusion</h2><p>True to our core values, we hoped for the best but planned for the worst. And thankfully we surged ahead along with the BFCM rush for our merchants &#8212; and our <strong>engineering held up to the standards we wanted to set for ourselves &#128588;</strong>.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!kbSS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3118097e-76b4-4a8f-9388-af052aaadd9d_318x212.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kbSS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3118097e-76b4-4a8f-9388-af052aaadd9d_318x212.jpeg 424w, https://substackcdn.com/image/fetch/$s_!kbSS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3118097e-76b4-4a8f-9388-af052aaadd9d_318x212.jpeg 848w, https://substackcdn.com/image/fetch/$s_!kbSS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3118097e-76b4-4a8f-9388-af052aaadd9d_318x212.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!kbSS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3118097e-76b4-4a8f-9388-af052aaadd9d_318x212.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kbSS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3118097e-76b4-4a8f-9388-af052aaadd9d_318x212.jpeg" width="624" height="416" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3118097e-76b4-4a8f-9388-af052aaadd9d_318x212.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:212,&quot;width&quot;:318,&quot;resizeWidth&quot;:624,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Success Kid - Wikipedia&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Success Kid - Wikipedia" title="Success Kid - Wikipedia" srcset="https://substackcdn.com/image/fetch/$s_!kbSS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3118097e-76b4-4a8f-9388-af052aaadd9d_318x212.jpeg 424w, https://substackcdn.com/image/fetch/$s_!kbSS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3118097e-76b4-4a8f-9388-af052aaadd9d_318x212.jpeg 848w, https://substackcdn.com/image/fetch/$s_!kbSS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3118097e-76b4-4a8f-9388-af052aaadd9d_318x212.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!kbSS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3118097e-76b4-4a8f-9388-af052aaadd9d_318x212.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>The shift to <strong>Kubernetes</strong> turned capacity spikes into non-events, replacing manual firefighting with automated, cost-efficient elasticity that sailed past 1 million+ RPM (repetitive but we are super thrilled &#128516;). Our <strong>Observability Overhaul</strong> paid dividends, processing 2.5 billion+ spans and transforming potential blind spots into clear operational awareness and intelligence across teams.</p><p>From relearning like the critical <strong>JVM MaxRAMPercentage</strong> fix to deploying advanced <strong>Spot VM</strong> cost-optimizations, every strategic move has helped move our platform forward. Our<strong> infrastructure is set for the next phase of our growth.</strong> We are scaling, optimizing and ready for whatever the next peak 2026 throws our way.</p><p>Here are a few episodes from our podcast on pre-BFCM prep and even an episode in the middle of BFCM &#129397; &#128526;</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;e924aa64-5ed2-4526-b90d-6b05cec86fa9&quot;,&quot;caption&quot;:&quot;In this episode, we take you behind the scenes into Swym&#8217;s pre-BFCM preparation, from infrastructure hardening to real-time monitoring setups, support readiness, incident protocols, and everything our team puts in place before the biggest shopping weekend of the year.&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;How Swym Prepares for the Biggest Weekend in Retail &quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:260109033,&quot;name&quot;:&quot;Sakshi Gupta&quot;,&quot;bio&quot;:&quot;Travel, Technology, Product and Thoughts&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b28faeb6-2b88-476d-89e1-9307bad7eb82_496x496.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-12-01T16:49:51.688Z&quot;,&quot;cover_image&quot;:&quot;https://substack-video.s3.amazonaws.com/video_upload/post/180419960/47a9b710-ae96-4081-b326-7bf4c8dd76fc/transcoded-1764607774.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://stories.getswym.com/p/how-swym-prepares-for-the-biggest&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:&quot;47a9b710-ae96-4081-b326-7bf4c8dd76fc&quot;,&quot;id&quot;:180419960,&quot;type&quot;:&quot;podcast&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:1,&quot;publication_id&quot;:2886569,&quot;publication_name&quot;:&quot;Swym Stories&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!_B_G!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1092240-7c5c-4cfb-aaf7-ab6ad9f84ffb_270x270.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;b222ddb6-7898-4dfd-bfa8-e69cd706105a&quot;,&quot;caption&quot;:&quot;Part 2 of our BFCM series dives into the live weekend.&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Inside BFCM: Real-Time Ops, Monitoring &amp; Support at Scale&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:260109033,&quot;name&quot;:&quot;Sakshi Gupta&quot;,&quot;bio&quot;:&quot;Travel, Technology, Product and Thoughts&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b28faeb6-2b88-476d-89e1-9307bad7eb82_496x496.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-12-01T17:36:54.093Z&quot;,&quot;cover_image&quot;:&quot;https://substack-video.s3.amazonaws.com/video_upload/post/180420657/d07ceda6-3e28-41b7-9237-b32545ef063e/transcoded-1764610592.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://stories.getswym.com/p/inside-bfcm-real-time-ops-monitoring&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:&quot;d07ceda6-3e28-41b7-9237-b32545ef063e&quot;,&quot;id&quot;:180420657,&quot;type&quot;:&quot;podcast&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:1,&quot;publication_id&quot;:2886569,&quot;publication_name&quot;:&quot;Swym Stories&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!_B_G!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1092240-7c5c-4cfb-aaf7-ab6ad9f84ffb_270x270.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;1da34ade-8cc3-4ea2-a744-15e351bf0cb8&quot;,&quot;caption&quot;:&quot;Join me, as I delve into the intricacies of customer experience with Krishnan, the Director of Customer Experience and Support. Discover how Swym bridges the gap between technical expertise and strategic guidance to transform customer interactions into lasting loyalty. This episode explores the critical role of customer experience in driving growth and &#8230;&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;BFCM &amp; Beyond&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:260109033,&quot;name&quot;:&quot;Sakshi Gupta&quot;,&quot;bio&quot;:&quot;Travel, Technology, Product and Thoughts&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b28faeb6-2b88-476d-89e1-9307bad7eb82_496x496.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null},{&quot;id&quot;:365970212,&quot;name&quot;:&quot;Krishnan A J&quot;,&quot;bio&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dd95aaf5-9dc0-4862-a54b-4ca4d04e39a6_144x144.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-11-10T16:18:29.079Z&quot;,&quot;cover_image&quot;:&quot;https://substack-video.s3.amazonaws.com/video_upload/post/178511525/2669724e-3582-496d-b249-64335a67f703/transcoded-1762872447.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://stories.getswym.com/p/the-customer-experience-engine&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:&quot;2669724e-3582-496d-b249-64335a67f703&quot;,&quot;id&quot;:178511525,&quot;type&quot;:&quot;podcast&quot;,&quot;reaction_count&quot;:3,&quot;comment_count&quot;:0,&quot;publication_id&quot;:2886569,&quot;publication_name&quot;:&quot;Swym Stories&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!_B_G!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1092240-7c5c-4cfb-aaf7-ab6ad9f84ffb_270x270.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://stories.getswym.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Swym Stories! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Shopify Winter ’26: The Ecosystem's "Renaissance"]]></title><description><![CDATA[What These Updates Really Mean for App Developers]]></description><link>https://stories.getswym.com/p/shopify-winter-26-the-ecosystems</link><guid isPermaLink="false">https://stories.getswym.com/p/shopify-winter-26-the-ecosystems</guid><dc:creator><![CDATA[Sakshi Gupta]]></dc:creator><pubDate>Thu, 11 Dec 2025 14:15:34 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Svo1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F208a1c37-6033-4575-a400-5befb4cf1007_1472x704.png" 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_!Svo1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F208a1c37-6033-4575-a400-5befb4cf1007_1472x704.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Svo1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F208a1c37-6033-4575-a400-5befb4cf1007_1472x704.png 424w, https://substackcdn.com/image/fetch/$s_!Svo1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F208a1c37-6033-4575-a400-5befb4cf1007_1472x704.png 848w, https://substackcdn.com/image/fetch/$s_!Svo1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F208a1c37-6033-4575-a400-5befb4cf1007_1472x704.png 1272w, https://substackcdn.com/image/fetch/$s_!Svo1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F208a1c37-6033-4575-a400-5befb4cf1007_1472x704.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Svo1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F208a1c37-6033-4575-a400-5befb4cf1007_1472x704.png" width="1456" height="696" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/208a1c37-6033-4575-a400-5befb4cf1007_1472x704.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:696,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1460362,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://stories.getswym.com/i/181316632?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F208a1c37-6033-4575-a400-5befb4cf1007_1472x704.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Svo1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F208a1c37-6033-4575-a400-5befb4cf1007_1472x704.png 424w, https://substackcdn.com/image/fetch/$s_!Svo1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F208a1c37-6033-4575-a400-5befb4cf1007_1472x704.png 848w, https://substackcdn.com/image/fetch/$s_!Svo1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F208a1c37-6033-4575-a400-5befb4cf1007_1472x704.png 1272w, https://substackcdn.com/image/fetch/$s_!Svo1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F208a1c37-6033-4575-a400-5befb4cf1007_1472x704.png 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><figcaption class="image-caption">All credits to Shopify for the image and Nano Banana for the Wishlist Fairy </figcaption></figure></div><p></p><p>Every Shopify Editions drops a wave of features, but Winter &#8217;26 feels different. This one wasn&#8217;t just about tooling. It was about a shift in how merchants expect to operate and how Shopify expects its ecosystem to evolve.</p><p>If you&#8217;re building apps on Shopify, this update cycle is a reminder of one thing:<br><strong>The bar is rising, and the opportunity space is widening at the same time.</strong></p><p>A quiet question has started buzzing through developer threads:<br><em>&#8220;Is this the beginning of apps becoming obsolete?&#8221;</em></p><p>Short answer: <strong>no.</strong><br>Long answer: Shopify is expanding the canvas, not closing it. And Winter &#8217;26 proves it.</p><div><hr></div><h2><strong>1. Sidekick Extensibility: The Most Important Developer Update</strong></h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!StDI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9eed24bc-98a1-49c8-8c12-93aff55c775a_1444x703.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!StDI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9eed24bc-98a1-49c8-8c12-93aff55c775a_1444x703.png 424w, https://substackcdn.com/image/fetch/$s_!StDI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9eed24bc-98a1-49c8-8c12-93aff55c775a_1444x703.png 848w, https://substackcdn.com/image/fetch/$s_!StDI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9eed24bc-98a1-49c8-8c12-93aff55c775a_1444x703.png 1272w, https://substackcdn.com/image/fetch/$s_!StDI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9eed24bc-98a1-49c8-8c12-93aff55c775a_1444x703.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!StDI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9eed24bc-98a1-49c8-8c12-93aff55c775a_1444x703.png" width="1444" height="703" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9eed24bc-98a1-49c8-8c12-93aff55c775a_1444x703.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:703,&quot;width&quot;:1444,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:324178,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://stories.getswym.com/i/181316632?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41bf0f54-d3ba-4ea0-9d68-3a9ad84d41db_1480x752.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!StDI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9eed24bc-98a1-49c8-8c12-93aff55c775a_1444x703.png 424w, https://substackcdn.com/image/fetch/$s_!StDI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9eed24bc-98a1-49c8-8c12-93aff55c775a_1444x703.png 848w, https://substackcdn.com/image/fetch/$s_!StDI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9eed24bc-98a1-49c8-8c12-93aff55c775a_1444x703.png 1272w, https://substackcdn.com/image/fetch/$s_!StDI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9eed24bc-98a1-49c8-8c12-93aff55c775a_1444x703.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><a href="https://shopify.dev/docs/apps/build/sidekick">https://shopify.dev/docs/apps/build/sidekick</a></p><p>If you read only one section of the Editions recap, let it be this.<br><strong>Sidekick Extensions</strong> fundamentally change how merchants interact with apps.</p><p>You&#8217;re no longer building features that live <em>next to</em> merchant workflows.<br>You&#8217;re building intelligence that lives <em>inside</em> their workflows.</p><p>Developers can now:</p><ul><li><p>Expose app capabilities through natural-language prompts</p></li><li><p>Allow merchants to trigger app actions without UI friction</p></li><li><p>Inject their logic directly into Sidekick&#8217;s conversational interface</p></li><li><p>Even construct <strong>custom app behaviors</strong> through Sidekick itself</p></li></ul><p>Yes, merchants can &#8220;build&#8221; with Sidekick now. But that doesn&#8217;t diminish the role of apps.</p><p>If anything, it expands it.</p><p>Merchants can prototype ideas with Sidekick.<br>But when they need scale, reliability, debugging, audits, security, or ongoing evolution, they will turn to apps.</p><p><strong>Sidekick becomes the on-ramp, not the substitute.</strong></p><p>At Swym, we&#8217;re already thinking about what this unlocks.<br>Imagine a merchant asking Sidekick:</p><blockquote><p>&#8220;Show me the top wishlisted items that are back in stock this week and schedule reminders automatically.&#8221;</p></blockquote><p>That type of workflow isn&#8217;t a UI feature.<br>It&#8217;s conversational commerce infrastructure.<br>And apps like Wishlist Plus are uniquely positioned to power it.</p><div><hr></div><h2><strong>2. Native A/B Testing: A Signal About Merchant Maturity</strong></h2><p>Shopify adding first-class A/B testing is not about replacing experimentation apps, it&#8217;s about legitimizing behavioral testing as a core operating model.</p><p>For developers, this means:</p><ul><li><p>Standardized schemas for experiment variants</p></li><li><p>Cleaner integrations for optimization or personalization apps</p></li><li><p>A merchant base newly conditioned to test, measure, and refine</p></li></ul><p>This shift matters.<br>Apps that interpret test results, automate variant creation, or correlate experiments with user behavior will thrive.</p><p>For Swym, this could mean letting merchants:</p><ul><li><p>Test different wishlist CTA styles</p></li><li><p>Understand how nudges perform</p></li><li><p>Optimize back-in-stock timing or messaging</p></li></ul><p>The platform giving merchants testing muscle means apps get to offer more sophisticated strategies on top of it.</p><p>Added bonus is <a href="https://apps.shopify.com/simgym">Simgym</a>, an AI-driven <strong>shopper behavior simulator</strong> that works like a <em>pre-launch predictive testing environment</em>. Instead of only relying on real traffic and A/B experiments after deployment, SimGym lets merchants run AI shopper simulations based on data from billions of past transactions to estimate how changes might perform. </p><div><hr></div><h2><strong>3. Shopify Network: The Unbundled, Everywhere Shopify</strong></h2><p>The introduction of <strong>Shopify Network</strong> makes one thing clear:<br>Shopify knows the ecosystem now lives far beyond the storefront.</p><p>This layer connects shoppers, channels, apps, and stores into a cohesive experience.</p><p>For developers, this unlocks:</p><ul><li><p>More surfaces where your app can provide value</p></li><li><p>More events that flow between touchpoints</p></li><li><p>More opportunities to be part of a shopper&#8217;s journey</p></li></ul><p>Swym has always believed commerce isn&#8217;t linear.<br>A shopper moves between emails, search engines, social feeds, PDPs, and back again.<br>A wishlist event shouldn&#8217;t be siloed, it should fuel the entire network.</p><p>Shopify Network validates this philosophy.</p><div><hr></div><h2><strong>4. Global Catalog Moves Center Stage</strong></h2><p>Global Catalog used to be powerful but peripheral.<br>Winter &#8217;26 brings it into the center of everything.</p><p>It&#8217;s now the authoritative source for:</p><ul><li><p>Global product attributes</p></li><li><p>Multi-market pricing</p></li><li><p>Translations</p></li><li><p>Inventory synchronization</p></li><li><p>Multi-store governance</p></li></ul><p>And this aligns beautifully with the new <strong>Merchant Hub</strong>, built around omnichannel control.</p><p>For app developers, the implications are clear:</p><p><strong>Think global-first, not store-first.</strong></p><p>Apps need to handle:</p><ul><li><p>Cross-market logic</p></li><li><p>Product variants that differ by region</p></li><li><p>Attribute-driven automation</p></li><li><p>Centralized intelligence</p></li></ul><p>For Swym, this shift is huge. A wishlist isn&#8217;t just a &#8220;store&#8221; feature anymore. It&#8217;s a <strong>product affinity layer</strong> across all markets.</p><p>Building on Global Catalog allows wishlist and nudge intelligence to become globally consistent while respecting local rules.</p><div><hr></div><h2><strong>5. Metafield Filtering: Quiet but Transformative</strong></h2><p>One of the quieter updates, metafield filtering and richer querying, is actually a major win for developers.</p><p>You can now:</p><ul><li><p>Query metafields with more precision</p></li><li><p>Filter based on conditions</p></li><li><p>Build richer admin experiences</p></li><li><p>Reduce API overhead</p></li></ul><p>For any app that depends on merchant-defined product attributes (which is most apps), this is a quality-of-life upgrade.</p><div><hr></div><h2><strong>6. Token Expiry for Offline Access Tokens</strong></h2><p>A light-touch update but an important one. Offline access tokens now expire, which means apps need to refresh tokens periodically.</p><p>This is good security practice.<br>It doesn&#8217;t change how apps fundamentally operate, it simply formalizes a more responsible model.</p><p>It&#8217;s not something to highlight to merchants; it&#8217;s just something developers should quietly adopt.</p><div><hr></div><h2><strong>7. So Are Apps Becoming Obsolete? Absolutely Not.</strong></h2><p>With Sidekick, Network, Global Catalog, testing, and new admin surfaces, it&#8217;s easy to wonder if Shopify is closing in on the space apps occupy.</p><p>But the opposite is happening.</p><p><strong>Shopify is strengthening the foundation so apps can build the differentiated value.</strong></p><p>Every update in Winter &#8217;26 signals that:</p><ul><li><p>Shopify wants AI-native workflows</p></li><li><p>Shopify wants globally consistent product data</p></li><li><p>Shopify wants omnichannel-first execution</p></li><li><p>Shopify wants more interconnected flows</p></li><li><p>Shopify wants apps deeply embedded into merchant operations</p></li></ul><p>This is not a land-grab. It&#8217;s a platform uplift.</p><p>When Shopify raises the floor, app developers get to raise the ceiling.</p><p>And Swym&#8217;s perspective here is simple:<br>These updates don&#8217;t reduce the role of apps, <strong>they increase the expectations of what great apps should do.</strong></p><p>Merchants will expect smarter automation, deeper personalization, and intelligence across surfaces.<br>Apps that lean into this will shape the next generation of commerce experiences.</p><div><hr></div><h2><strong>8. The Path Forward for App Developers</strong></h2><p>Here&#8217;s what the next era of Shopify apps will be built around:</p><ul><li><p>Conversational workflows powered by Sidekick</p></li><li><p>Global Catalog as the canonical product data layer</p></li><li><p>Omnichannel orchestration via Merchant Hub</p></li><li><p>Optimization powered by native A/B testing infrastructure</p></li><li><p>Network-informed shopper journeys</p></li><li><p>Richer, cleaner data access</p></li></ul><p>For Swym, this means doubling down on our core belief:<br><strong>helping merchants engage shoppers intelligently, across channels, with minimal workflow friction.</strong></p><p>The platform is giving us the surfaces, it&#8217;s up to apps to bring the intelligence.</p><div><hr></div><h2><strong>Final Thought</strong></h2><p>Winter &#8217;26 isn&#8217;t the story of Shopify replacing apps.<br>It&#8217;s the story of Shopify expanding what apps can be.</p><p>For any team building in this ecosystem, this is the moment to lean in, because merchants are about to expect more intelligence, more automation, more omnichannel visibility, and more embedded experiences than ever.</p><p>And the apps that embrace this shift will define the next cycle of commerce innovation.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://stories.getswym.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Swym Stories! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Inside BFCM: Real-Time Ops, Monitoring & Support at Scale]]></title><description><![CDATA[BFCM 2025 - Part 2]]></description><link>https://stories.getswym.com/p/inside-bfcm-real-time-ops-monitoring</link><guid isPermaLink="false">https://stories.getswym.com/p/inside-bfcm-real-time-ops-monitoring</guid><dc:creator><![CDATA[Sakshi Gupta]]></dc:creator><pubDate>Mon, 01 Dec 2025 17:36:54 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/180420657/5ebf89de7d29a2e2ae3d88f9b0681ba5.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p>Part 2 of our BFCM series dives into the <em>live</em> weekend.<br>We break down what happens behind the scenes as Swym powers millions of shopper interactions in real time.BFCM is where preparation meets execution &#8212; and this episode captures that moment.<br>Watch Episode 3 for prep insights, and stay tuned for Episode 5: our post-BFCM Retrospective.#BlackFriday #BlackFridaySale #CyberMonday #HolidayShopping #Ecommerce #OnlineRetail #RetailMarketing #ConversionTips #BFCM</p>]]></content:encoded></item><item><title><![CDATA[How Swym Prepares for the Biggest Weekend in Retail ]]></title><description><![CDATA[BFCM 2025 - Part 1]]></description><link>https://stories.getswym.com/p/how-swym-prepares-for-the-biggest</link><guid isPermaLink="false">https://stories.getswym.com/p/how-swym-prepares-for-the-biggest</guid><dc:creator><![CDATA[Sakshi Gupta]]></dc:creator><pubDate>Mon, 01 Dec 2025 16:49:51 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/180419960/2c74dd090b16ddefb57aba1a89098b95.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p>In this episode, we take you behind the scenes into Swym&#8217;s pre-BFCM preparation, from infrastructure hardening to real-time monitoring setups, support readiness, incident protocols, and everything our team puts in place before the biggest shopping weekend of the year.<br><br>This episode opens the series, guiding us from pre-BFCM prep - through the live rush - into the final retrospect.<br>Subscribe to our youtube channel so you don&#8217;t miss the next parts. &#128153;<br><br><a href="https://www.youtube.com/hashtag/blackfriday">#blackfriday</a>  <a href="https://www.youtube.com/hashtag/blackfridaysale">#BlackFridaySale</a> <a href="https://www.youtube.com/hashtag/cybermonday">#CyberMonday</a> <a href="https://www.youtube.com/hashtag/holidayshopping">#HolidayShopping</a> <a href="https://www.youtube.com/hashtag/ecommerce">#Ecommerce</a> <a href="https://www.youtube.com/hashtag/onlineretail">#OnlineRetail</a> <a href="https://www.youtube.com/hashtag/retailmarketing">#RetailMarketing</a> <a href="https://www.youtube.com/hashtag/conversiontips">#ConversionTips</a> <a href="https://www.youtube.com/hashtag/bfcm">#BFCM</a></p>]]></content:encoded></item><item><title><![CDATA[BFCM & Beyond]]></title><description><![CDATA[How Customer Experience Becomes a Superpower]]></description><link>https://stories.getswym.com/p/the-customer-experience-engine</link><guid isPermaLink="false">https://stories.getswym.com/p/the-customer-experience-engine</guid><dc:creator><![CDATA[Sakshi Gupta]]></dc:creator><pubDate>Mon, 10 Nov 2025 16:18:29 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/178511525/fa4a6072d86702df8cbe38f445a0c273.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p></p><p>Join me, as I delve into the intricacies of customer experience with <strong>Krishnan</strong>, the <strong>Director of Customer Experience and Support</strong>. Discover how Swym bridges the gap between technical expertise and strategic guidance to transform customer interactions into lasting loyalty. This episode explores the critical role of customer experience in driving growth and navigating high-pressure environments. Tune in to learn how Swym&#8217;s team turns challenges into opportunities for building trust and delivering exceptional value to merchants.</p><p></p><h3>A Quick Recap of Our Conversation</h3><ul><li><p><strong>Segment 1: The CX Philosophy</strong> We started by defining what &#8220;CustomerExperience&#8221; (CX) truly means. It&#8217;s not just &#8220;support.&#8221; We explored the guiding principles for our team&#8217;s very first interaction with a stressed merchant and why that empathetic, strategic approach is different.</p></li><li><p><strong>Segment 2: The Everyday Practice</strong> We talked about the &#8220;how.&#8221; Krishnan detailed how we&#8217;re structured with Technical Support Engineers (TSEs) and Customer Success Managers (CSMs) to provide a high-touch experience. We also touched on how AI is influencing this practice and the critical importance of hiring for empathy and ownership intent, not just technical skills.</p></li><li><p><strong>Segment 3: The Stress Test (BFCM)</strong> This is where the engine is truly tested. Krishnan shared the playbook for how we <strong>10x</strong> our <em>efficiency</em> (not our staff) for the surge and maintain a human touch under pressure. He also shared a great story from a past BFCM where the team turned a potential disaster into a merchant &#8216;wow&#8217; moment.</p></li><li><p><strong>Segment 4: Advice for Our Partners</strong> We finished by turning our lessons into actionable advice. Krishnan pointed out the single biggest mistake we should avoid making in support. Krishnan<strong> </strong>shared<strong> </strong>what he wishes <em>every</em> product builder understood about what customers <em>really</em> need.</p><p></p></li></ul><h4><strong>Some Key Takeaways</strong></h4><ul><li><p>Customer experience is more than just support; it&#8217;s about building trust.</p></li><li><p>Swym&#8217;s team transforms challenges into opportunities for loyalty.</p></li><li><p>Technical expertise and strategic guidance are key to customer success.</p></li><li><p>Empathy is crucial in customer interactions.</p></li><li><p>AI tools help streamline repetitive tasks, allowing focus on important issues.</p></li><li><p>Customer feedback is a valuable resource for product improvement.</p></li><li><p>Swym&#8217;s customer experience team is integral to company growth.</p></li><li><p>Effective communication is essential in high-pressure situations.</p></li><li><p>Swym&#8217;s approach to customer experience involves multiple functions working together.</p></li><li><p>Building long-term relationships with customers is a priority.</p></li></ul>]]></content:encoded></item><item><title><![CDATA[How Shopify's Next Gen Dev Platform Supercharged Our Workflow at Swym ]]></title><description><![CDATA[Our first-hand take on the massive workflow wins from Shopify's new dev experience.]]></description><link>https://stories.getswym.com/p/how-shopifys-next-gen-dev-platform</link><guid isPermaLink="false">https://stories.getswym.com/p/how-shopifys-next-gen-dev-platform</guid><dc:creator><![CDATA[Ishaan Shettigar]]></dc:creator><pubDate>Mon, 27 Oct 2025 11:22:11 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!F3eF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b653bb6-ab57-4064-affd-27fa2ea00f6c_1600x1200.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Here at Swym, we&#8217;re obsessed with creating best-in-class experiences for Shopify merchants. With a team of over 60 dedicated individuals, including a robust engineering team that makes up almost a third of our company, we pour our energy into building powerful apps like <strong>Swym Wishlist Plus</strong>, <strong>Swym Back in Stock Alerts</strong>, and <strong>Swym Gift Lists &amp; Registries</strong> that help brands engage their customers and grow their business.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://stories.getswym.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Swym Stories! Subscribe for more!</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>So, when we got the opportunity to get early access to Shopify&#8217;s new Next Gen Developer Platform, we jumped at the chance. We were eager to see what the future of Shopify app development looked like, and we successfully migrated our apps to the new platform even before it was opened up to the entire ecosystem.</p><p>We want to give a huge thank you to the team at Shopify for their incredible support. As we navigated the beta migration to the new platform, their help was instrumental. A special shout-out to <strong>Nick Wesselman</strong> for his guidance, helping to make the transition as smooth as possible.</p><p>Now that we&#8217;re on the other side, we wanted to share our perspective on the new platform, what we love, the massive wins for developers, and why we believe this is a game-changing leap forward for the entire ecosystem.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!F3eF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b653bb6-ab57-4064-affd-27fa2ea00f6c_1600x1200.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!F3eF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b653bb6-ab57-4064-affd-27fa2ea00f6c_1600x1200.jpeg 424w, https://substackcdn.com/image/fetch/$s_!F3eF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b653bb6-ab57-4064-affd-27fa2ea00f6c_1600x1200.jpeg 848w, https://substackcdn.com/image/fetch/$s_!F3eF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b653bb6-ab57-4064-affd-27fa2ea00f6c_1600x1200.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!F3eF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b653bb6-ab57-4064-affd-27fa2ea00f6c_1600x1200.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!F3eF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b653bb6-ab57-4064-affd-27fa2ea00f6c_1600x1200.jpeg" width="1456" height="1092" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1b653bb6-ab57-4064-affd-27fa2ea00f6c_1600x1200.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1092,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!F3eF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b653bb6-ab57-4064-affd-27fa2ea00f6c_1600x1200.jpeg 424w, https://substackcdn.com/image/fetch/$s_!F3eF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b653bb6-ab57-4064-affd-27fa2ea00f6c_1600x1200.jpeg 848w, https://substackcdn.com/image/fetch/$s_!F3eF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b653bb6-ab57-4064-affd-27fa2ea00f6c_1600x1200.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!F3eF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b653bb6-ab57-4064-affd-27fa2ea00f6c_1600x1200.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><h3><strong>The Big Wins: A New Era for App Development</strong></h3><p>This isn&#8217;t just an incremental update; it&#8217;s a fundamental re-engineering of the developer experience. Here are the highlights that got our team most excited.</p><h4><strong>1. Truly Isolated and Parallel Development is Here!</strong></h4><p>This is, without a doubt, the most significant win for our team. Shopify has completely re-engineered the <code>shopify app dev</code> command, and with it comes a new paradigm for app previews.</p><p>To really appreciate the improvement, let&#8217;s look at how things used to work. Our development process involved each developer running their own local instance of the app. However, to test changes in a stable, shared environment that mirrored production, we relied on a single &#8220;Dev&#8221; version of our app in the Shopify Partner Dashboard. This is where the bottleneck appeared.</p><p>Imagine <em>Developer A</em> is building a new checkout extension. They&#8217;d do their work locally, but to properly test it and get feedback, they would need to push their changes&#8212;and update the preview URLs to our central &#8220;Dev&#8221; app. While they were doing this, that &#8220;Dev&#8221; app was effectively &#8216;occupied&#8217;. If <em>Developer B</em> finished their work on an admin dashboard widget and also needed to test it in that same stable environment, they had to wait. Pushing their changes would overwrite <em>Developer A&#8217;s</em> work-in-progress. This forced us into a queue, where only one developer could safely work in our stable dev environment at a time, significantly slowing down our velocity.</p><p><strong>Now, app previews are tied to a specific dev store.</strong> This is a massive improvement!</p><p>With the new platform, <em>Developer A</em> can connect their local environment to <em>their own</em> dev store, and <em>Developer B</em> can connect to a <em>completely separate</em> dev store. They can both work on their features, see live previews, and test their changes simultaneously, in complete isolation. There&#8217;s no more queue and no more risk of overwriting a colleague&#8217;s work.</p><p>This unlocks true parallel development, allowing our team to move faster and more efficiently.</p><p><strong>As a bonus</strong>, it <strong>eliminates the risk of accidentally updating production URLs &#128552;</strong> during development, a welcome relief for any engineering lead.</p><p></p><h4><strong>2. From Scripts to Schemas: A New Way to Manage Metafields &amp; Metaobjects</strong></h4><p>If you&#8217;ve ever had to manage metafields or metaobjects across thousands of merchant stores, you know the pain. With the new platform, this nightmare is over. <strong>Metafield and metaobject definitions are now declarative</strong>, living inside your shopify.app.toml file.</p><p>What does this mean in practice? Let&#8217;s say you need to add a new metafield. Instead of writing code to create it programmatically on app installation, you simply declare its structure in the TOML file. A simple definition can be just one line. Shopify takes on the responsibility of ensuring this definition is migrated and updated across all merchant stores.</p><p>This offloads a huge operational burden from developers to the platform itself. For us, the migration was as simple as removing all our old logic for creating metafields and defining them in the configuration file. The result? Cleaner code, less maintenance, and more time spent building valuable features.</p><p></p><h4><strong>3. App-Scoped Limits: Predictability and Scale</strong></h4><p>Hallelujah! This is a change that will make every developer&#8217;s life easier. Previously, rate limits for resources like metafields and metaobjects were set at the <em>shop</em> level. This meant your app&#8217;s ability to function could be impacted by other apps a merchant had installed. If another app consumed most of the store&#8217;s metafield limit, your app could fail, leading to confusing support tickets.</p><p><strong>Now, every app gets its own set of limits.</strong> This provides predictability and ensures that your app has the resources it needs to operate correctly, regardless of what other apps are installed on a store. It&#8217;s a change that allows us to build more robust and scalable solutions with confidence.</p><p></p><h4><strong>4. Quality-of-Life Improvements Everywhere</strong></h4><p>Beyond the major architectural shifts, there are several smaller changes that make a big difference in the day-to-day workflow:</p><ul><li><p><strong>Improved Partner Dashboard UI:</strong> The user interface in the Partner Dashboard has received a noticeable facelift, making it cleaner and more intuitive to navigate.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6nD8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe696bd97-b068-4c07-ba76-3091c7fdb65c_990x784.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6nD8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe696bd97-b068-4c07-ba76-3091c7fdb65c_990x784.png 424w, https://substackcdn.com/image/fetch/$s_!6nD8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe696bd97-b068-4c07-ba76-3091c7fdb65c_990x784.png 848w, https://substackcdn.com/image/fetch/$s_!6nD8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe696bd97-b068-4c07-ba76-3091c7fdb65c_990x784.png 1272w, https://substackcdn.com/image/fetch/$s_!6nD8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe696bd97-b068-4c07-ba76-3091c7fdb65c_990x784.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6nD8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe696bd97-b068-4c07-ba76-3091c7fdb65c_990x784.png" width="392" height="310.43232323232326" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e696bd97-b068-4c07-ba76-3091c7fdb65c_990x784.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:784,&quot;width&quot;:990,&quot;resizeWidth&quot;:392,&quot;bytes&quot;:85153,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://stories.getswym.com/i/177257215?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe696bd97-b068-4c07-ba76-3091c7fdb65c_990x784.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!6nD8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe696bd97-b068-4c07-ba76-3091c7fdb65c_990x784.png 424w, https://substackcdn.com/image/fetch/$s_!6nD8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe696bd97-b068-4c07-ba76-3091c7fdb65c_990x784.png 848w, https://substackcdn.com/image/fetch/$s_!6nD8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe696bd97-b068-4c07-ba76-3091c7fdb65c_990x784.png 1272w, https://substackcdn.com/image/fetch/$s_!6nD8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe696bd97-b068-4c07-ba76-3091c7fdb65c_990x784.png 1456w" sizes="100vw" loading="lazy"></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></li><li><p><strong>Targeted Dev Stores:</strong> You can now easily create dev stores with specific Shopify plans, like Shopify Plus. This is fantastic for testing plan-specific features without complex workarounds. For apps like ours that offer tailored experiences for Plus merchants, this is an invaluable tool.</p></li><li><p><strong>Consistent Extension UUIDs:</strong> The hassle of managing extension UUIDs is a thing of the past. Now, an extension&#8217;s UUID remains the same across your dev and production app versions. This simplifies configuration management and eliminates the confusion of tracking different IDs across environments.</p></li><li><p><strong>Enhanced Webhook Observability:</strong> Troubleshooting webhooks is now much simpler. The ability to quickly filter deliveries by status, shop, or topic makes diagnosing and fixing issues significantly faster.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!domr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e742dc7-c023-4d99-9191-f1fbb8bfc3a0_800x748.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!domr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e742dc7-c023-4d99-9191-f1fbb8bfc3a0_800x748.gif 424w, https://substackcdn.com/image/fetch/$s_!domr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e742dc7-c023-4d99-9191-f1fbb8bfc3a0_800x748.gif 848w, https://substackcdn.com/image/fetch/$s_!domr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e742dc7-c023-4d99-9191-f1fbb8bfc3a0_800x748.gif 1272w, https://substackcdn.com/image/fetch/$s_!domr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e742dc7-c023-4d99-9191-f1fbb8bfc3a0_800x748.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!domr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e742dc7-c023-4d99-9191-f1fbb8bfc3a0_800x748.gif" width="512" height="478.72" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8e742dc7-c023-4d99-9191-f1fbb8bfc3a0_800x748.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:748,&quot;width&quot;:800,&quot;resizeWidth&quot;:512,&quot;bytes&quot;:2116298,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/gif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://stories.getswym.com/i/177257215?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e742dc7-c023-4d99-9191-f1fbb8bfc3a0_800x748.gif&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!domr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e742dc7-c023-4d99-9191-f1fbb8bfc3a0_800x748.gif 424w, https://substackcdn.com/image/fetch/$s_!domr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e742dc7-c023-4d99-9191-f1fbb8bfc3a0_800x748.gif 848w, https://substackcdn.com/image/fetch/$s_!domr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e742dc7-c023-4d99-9191-f1fbb8bfc3a0_800x748.gif 1272w, https://substackcdn.com/image/fetch/$s_!domr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e742dc7-c023-4d99-9191-f1fbb8bfc3a0_800x748.gif 1456w" sizes="100vw" loading="lazy"></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></p><h3><strong>A Minor Hiccup (And a Quick Fix on the Way)</strong></h3><p>No major platform overhaul is without a few growing pains. One small workflow change we noticed is related to team collaboration on dev stores.</p><p>Previously, if a developer on our team created a dev store, anyone else within our Swym Partner organization could easily access it. Now, access is more restricted. The creator of the dev store needs to manually invite other team members as staff members through the store&#8217;s settings. It&#8217;s a few extra clicks in the process.</p><p>The good news? We&#8217;ve already shared this feedback with the team at Shopify, and true to form, they were receptive and confirmed they are actively working on a solution. We don&#8217;t expect this to be an issue for much longer, which is a testament to Shopify&#8217;s commitment to refining the developer experience.</p><p></p><h3><strong>The Verdict: A Huge Leap Forward</strong></h3><p>Shopify&#8217;s Next Gen Developer Platform is more than just an update&#8212;it&#8217;s a clear signal that Shopify is deeply invested in its developer community. The changes they&#8217;ve implemented address long-standing pain points and provide a faster, more robust, and more scalable foundation for building apps.</p><p>For us at Swym, this new platform unlocks a higher level of productivity and allows us to focus on what matters most: building incredible tools that help Shopify merchants succeed. We are incredibly excited for the future and can&#8217;t wait to see what we can build next!</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://stories.getswym.com/p/how-shopifys-next-gen-dev-platform?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Swym Stories! This post is public so feel free to share it!</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://stories.getswym.com/p/how-shopifys-next-gen-dev-platform?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://stories.getswym.com/p/how-shopifys-next-gen-dev-platform?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div>]]></content:encoded></item><item><title><![CDATA[Nov 9 2016]]></title><description><![CDATA[Path to my first BFCM]]></description><link>https://stories.getswym.com/p/nov-9-2016</link><guid isPermaLink="false">https://stories.getswym.com/p/nov-9-2016</guid><dc:creator><![CDATA[Swym Stories]]></dc:creator><pubDate>Fri, 10 Oct 2025 06:48:41 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!MA4P!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d43fc4f-5d34-43c1-8672-c11f699f8bef_498x413.gif" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>With BFCM 2025 being ~48 days away, it looks like it is on track to break the previous year&#8217;s ceiling again. I am sure all of us in this ecosystem are running through some checklist or the other to maximize it for our merchants. This will be my 10th BFCM, no more just the weekend, it feels like BFCM week or BFMC month or even BFCM quarter for some of our merchants &#128517;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.getswym.com/blog/win-your-wishlist-pre-bfcm-campaign-strategy-to-grow-list-conversions" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0Y0K!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F534bda3f-4276-4bec-9b52-1f7fd49f8a44_5000x3000.png 424w, https://substackcdn.com/image/fetch/$s_!0Y0K!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F534bda3f-4276-4bec-9b52-1f7fd49f8a44_5000x3000.png 848w, https://substackcdn.com/image/fetch/$s_!0Y0K!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F534bda3f-4276-4bec-9b52-1f7fd49f8a44_5000x3000.png 1272w, https://substackcdn.com/image/fetch/$s_!0Y0K!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F534bda3f-4276-4bec-9b52-1f7fd49f8a44_5000x3000.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0Y0K!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F534bda3f-4276-4bec-9b52-1f7fd49f8a44_5000x3000.png" width="724" height="434.5989010989011" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/534bda3f-4276-4bec-9b52-1f7fd49f8a44_5000x3000.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:874,&quot;width&quot;:1456,&quot;resizeWidth&quot;:724,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://www.getswym.com/blog/win-your-wishlist-pre-bfcm-campaign-strategy-to-grow-list-conversions&quot;,&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="" srcset="https://substackcdn.com/image/fetch/$s_!0Y0K!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F534bda3f-4276-4bec-9b52-1f7fd49f8a44_5000x3000.png 424w, https://substackcdn.com/image/fetch/$s_!0Y0K!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F534bda3f-4276-4bec-9b52-1f7fd49f8a44_5000x3000.png 848w, https://substackcdn.com/image/fetch/$s_!0Y0K!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F534bda3f-4276-4bec-9b52-1f7fd49f8a44_5000x3000.png 1272w, https://substackcdn.com/image/fetch/$s_!0Y0K!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F534bda3f-4276-4bec-9b52-1f7fd49f8a44_5000x3000.png 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>Perhaps a good time to revisit some of my earliest lessons on the path to scaling Swym for our merchants and partners, hope it helps or just share in the fun we had early on.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://stories.getswym.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Swym Stories! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><p>It was Nov 9, 2016. We were just about exploding in never before seen daily merchant growth at Swym. It was a day for a SaaS-y unlearning I cherish and look back. Background context I usually don&#8217;t spend time talking/writing about, but will be useful to share my learnings - Prior to Swym, I was at CloudPact for a good chunk of time where we built Mowbly (<a href="https://www.sttinfo.fi/tiedote/66698221/asg-technologies-acquires-mowblys-process-mobility-platform?publisherId=58763726">acquired by ASG</a> which <a href="https://www.rocketsoftware.com/en-us/news/rocket-software-extends-its-technology-and-global-reach-agreement-acquire-asg-technologies">was acquired by Rocket Software</a>). Mowbly was an end-to-end cross-platform MADP. The entire team size was sub-10 folks for most of my tenure &#128516;, stretched to the limits (by choice) that even I have done solo sales prospecting meets, complete with exchanging visiting cards in the <a href="https://youtu.be/2cjGDvMnnyE?t=179">traditional sales-y etiquette</a>. Yup, one doesn&#8217;t hand it off just like that, which of course I did and for some reason that lead never went anywhere &#129300; - clearly no Dwight Schrute even if I tried.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!JHH0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce406463-7b7a-4fba-b85a-6e37c8553008_640x640.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JHH0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce406463-7b7a-4fba-b85a-6e37c8553008_640x640.gif 424w, https://substackcdn.com/image/fetch/$s_!JHH0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce406463-7b7a-4fba-b85a-6e37c8553008_640x640.gif 848w, https://substackcdn.com/image/fetch/$s_!JHH0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce406463-7b7a-4fba-b85a-6e37c8553008_640x640.gif 1272w, https://substackcdn.com/image/fetch/$s_!JHH0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce406463-7b7a-4fba-b85a-6e37c8553008_640x640.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!JHH0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce406463-7b7a-4fba-b85a-6e37c8553008_640x640.gif" width="640" height="640" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ce406463-7b7a-4fba-b85a-6e37c8553008_640x640.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:640,&quot;width&quot;:640,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3046897,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/gif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://stories.getswym.com/i/175772862?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce406463-7b7a-4fba-b85a-6e37c8553008_640x640.gif&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!JHH0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce406463-7b7a-4fba-b85a-6e37c8553008_640x640.gif 424w, https://substackcdn.com/image/fetch/$s_!JHH0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce406463-7b7a-4fba-b85a-6e37c8553008_640x640.gif 848w, https://substackcdn.com/image/fetch/$s_!JHH0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce406463-7b7a-4fba-b85a-6e37c8553008_640x640.gif 1272w, https://substackcdn.com/image/fetch/$s_!JHH0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce406463-7b7a-4fba-b85a-6e37c8553008_640x640.gif 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></p><p>Coming back to my comfort zone, ie technology - It was a PaaS offering, not a SaaS - build, run, host and manage mobile/cross-platform apps - sorta of an amalgamation on MDM, MAM and RAD tooling with OTA updates. Each customer/enterprise was a full tenant, ie each tenant occupied the whole rental unit, ie separate, not shared infra. There was a cloud offering which was hosted on Google Cloud&#8217;s App Engine &#8212; For which <a href="https://yourstory.com/2011/11/cloud-conclave-2011-unveiling-top-5-cloud-startups">we also won/featured in few early YourStory Cloud Conclave events back in 2011</a> and <a href="https://pn.ispirt.in/ciose-selects-8-madeinindia-product-companies-to-showcase-on-global-platform/">pre-SaaSBoomi ones like iSPIRT</a>). Some enterprises chose the cloud, but most enterprises deployed on their own air-gapped in-house bare metal servers with <a href="https://en.wikipedia.org/wiki/DMZ_(computing)">their DMZs and other fun stuff</a>. Every tenant was managed almost with their own resources and more specifically served by their own dedicated database, compute, etc. We probably had 100s to 1000s of such tenants running. (Fun fact for the unfamiliar - DMZ (Demilitarized Zone) is also the same terminology used to define a buffer zone in areas with military conflicts &#128563;.)</p><p>Now back to Swym &#8212; In 2016, we were in the process of building the early pieces of our SaaS stack aimed at enabling merchants give their shoppers great experience across channels. Now we power over 46K brands across the world. But in 2016, we were in the order of early 1000s, a few months before we were in <a href="https://www.geekwire.com/2017/swym-corporation/">Techstars Seattle class of 2017</a>.  Drawing from my past expertise at designing a scalable solution, I went about making certain decisions and one of those that had to be unwound on Nov 9, 2016. We were an extremely tiny team back then, ~5 &#8212; some of us were &#8220;part-time&#8221; but committed full-time &#128583;&#8205;&#9794;&#65039;. Out of those 5, most were up until ~3:57 am on Nov 8. And for some reason some of those same folks were up again at ~7 am. Clearly not for the faint hearted and clarifying upfront &#8212; I wasn&#8217;t one of those people.</p><p>I&#8217;ll try and run through the events, based on our slack messages from that day (and leading) to avoid misremembering notes other than any exchanges via calls.</p><h3><strong>Nov 8 2016 7:16 am</strong></h3><p>A merchant pinged us stating that they were getting this error.</p><blockquote><pre><code>502 - Web server received an invalid response while acting as a gateway or proxy server.
There is a problem with the page you are looking for, and it cannot be displayed. When the Web server (while acting as a gateway or proxy) contacted the upstream content server, it received an invalid response from the content server.</code></pre></blockquote><p>Context - We had an unrelated DNS outage the previous night, hence the 3:57am messages, but it was resolved. So we let it settle in for a bit longer since the errors were intermittent.</p><p>Then we discussed our sync-up plans - even back in 2016 getting all of us in one place at the same time was an accomplishment in itself. Remote FTW!</p><p>Things were quiet in terms of errors and whatever alarms we had running for the rest of the day until the night.</p><h3><strong>Nov 8 2016 10:07 pm</strong></h3><p>The trend of merchants dropping off was trending upwards - something was fishy. We tried to repro and thankfully found that something is clogging up the service resources very very quickly and leading to the same 502 above.</p><p>At that point, our options were to maybe increase the VM size? or maybe add another node? - But, applying a resolution like that was just a mask, we needed to have a reasonable hypothesis.</p><p>We dug deeper into each functional step, and fortunately we found out the resource crunch quickly. This wasn&#8217;t yet completely clear, we had isolated the erring service and then we began even deeper sifting through resource consumption patterns.</p><p>Perhaps the traffic was spiking up? No, no evidence for that, especially not concurrently.</p><p>Is it a bot? No, cannot be. But there was a bot running at the same moment. Distracting from the source reason? Perhaps.</p><h3><strong>Nov 8 2016 10:43 pm (faster typing, words &gt; sentences)</strong></h3><p>502 again. CPU at 100% - bingo!</p><p>Memory leaks? No - CPU.</p><p>How about the processes? DB? No, that&#8217;s under 22%</p><p>No wait, CPU dropped to 0 in all. Fishy...</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-JTG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d4f00bc-3a57-438f-8edc-cf03906286d9_498x366.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-JTG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d4f00bc-3a57-438f-8edc-cf03906286d9_498x366.gif 424w, https://substackcdn.com/image/fetch/$s_!-JTG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d4f00bc-3a57-438f-8edc-cf03906286d9_498x366.gif 848w, https://substackcdn.com/image/fetch/$s_!-JTG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d4f00bc-3a57-438f-8edc-cf03906286d9_498x366.gif 1272w, https://substackcdn.com/image/fetch/$s_!-JTG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d4f00bc-3a57-438f-8edc-cf03906286d9_498x366.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-JTG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d4f00bc-3a57-438f-8edc-cf03906286d9_498x366.gif" width="498" height="366" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3d4f00bc-3a57-438f-8edc-cf03906286d9_498x366.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:366,&quot;width&quot;:498,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2557148,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/gif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://stories.getswym.com/i/175772862?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d4f00bc-3a57-438f-8edc-cf03906286d9_498x366.gif&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!-JTG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d4f00bc-3a57-438f-8edc-cf03906286d9_498x366.gif 424w, https://substackcdn.com/image/fetch/$s_!-JTG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d4f00bc-3a57-438f-8edc-cf03906286d9_498x366.gif 848w, https://substackcdn.com/image/fetch/$s_!-JTG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d4f00bc-3a57-438f-8edc-cf03906286d9_498x366.gif 1272w, https://substackcdn.com/image/fetch/$s_!-JTG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d4f00bc-3a57-438f-8edc-cf03906286d9_498x366.gif 1456w" sizes="100vw" loading="lazy"></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>Okay let&#8217;s work on what we know - our logging was excessive, let&#8217;s cut that down</p><p>The drop-off rates were matching with the CPU charts we were seeing. That&#8217;s good-ish.</p><p>We were narrowing to the culprit - the db process, building up a hypothesis that supported it. It was blocking everything.</p><p>I was against any hypothesis around the database, ie functions/feature problems, looking for any other alternative theory than the db. Why &#8212; That meant there were fundamental design mistakes made, ie I made bad choices. So, I wanted to be super certain there could be no other reason.</p><p>At that point, we switched from English words to just direct Clojure on Slack comms.</p><pre><code>(if existing_site? (go to dashboard) (continue here with setup))</code></pre><p>Along with the above modification, we upgraded the node capacity and reduced logging &#8212; let&#8217;s see &#129310;</p><h3><strong>Nov 8 2016 11:50 pm</strong></h3><p>What routes were suspect? Which method or webhook?. We landed on a couple.</p><p>At the same time &#8212; 74% CPU on the upgraded nodes.</p><p>This was going to be a long night. (nevertheless we were prepped to bring our best &#128588;)</p><h3><strong>Nov 8 2016 11:54 pm</strong></h3><blockquote><p><em>Should I upload the new code?</em></p><p><em>Your call.</em></p><p><em>*Gulps* (not visible on slack :P)</em></p></blockquote><p>Amidst all that, one of us connected to the dev instance and proclaimed &#8220;wait a min...&#8221;. But no lucky breaks that night.</p><h3><strong>Nov 9 2016 12:06 am</strong></h3><blockquote><p><em>mysqld is taking more than 100% CPU</em></p></blockquote><p>There it was, plain and simple.</p><p>A lot of queries with &#8220;Waiting for table level lock&#8221;</p><p>At this stage, we jumped on a quick call to decide if we fight now or patch and punt it for later. We applied a couple of patches and decided to call it an official downtime to give space to analyze further. </p><p>We shut shop for new merchants pretty much. It was a gutting feel &#128542;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!tg5W!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b5957b1-dbad-4c42-a2c5-f59b1955502a_1600x873.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!tg5W!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b5957b1-dbad-4c42-a2c5-f59b1955502a_1600x873.jpeg 424w, https://substackcdn.com/image/fetch/$s_!tg5W!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b5957b1-dbad-4c42-a2c5-f59b1955502a_1600x873.jpeg 848w, https://substackcdn.com/image/fetch/$s_!tg5W!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b5957b1-dbad-4c42-a2c5-f59b1955502a_1600x873.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!tg5W!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b5957b1-dbad-4c42-a2c5-f59b1955502a_1600x873.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!tg5W!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b5957b1-dbad-4c42-a2c5-f59b1955502a_1600x873.jpeg" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4b5957b1-dbad-4c42-a2c5-f59b1955502a_1600x873.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!tg5W!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b5957b1-dbad-4c42-a2c5-f59b1955502a_1600x873.jpeg 424w, https://substackcdn.com/image/fetch/$s_!tg5W!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b5957b1-dbad-4c42-a2c5-f59b1955502a_1600x873.jpeg 848w, https://substackcdn.com/image/fetch/$s_!tg5W!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b5957b1-dbad-4c42-a2c5-f59b1955502a_1600x873.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!tg5W!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b5957b1-dbad-4c42-a2c5-f59b1955502a_1600x873.jpeg 1456w" sizes="100vw" loading="lazy"></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><figcaption class="image-caption">Not on the outside, but inside.</figcaption></figure></div><p>We needed a break and distance from the problem, so quite a few unsure moments till sunrise</p><h3><strong>Nov 9 2016 9:31 am</strong></h3><p>Our rockstar dev (Who is this you wonder? Not me for sure. IYKYK &#128516;) had figured out the methods/routes for the overload and she was adding more diagnostics.</p><p>We wanted to upgrade MySQL connection types to InnoDB, but come on, table level locks still can&#8217;t be a thing in 2016, no? All relevant indexes were added for the major queries as part of our first deployment - &#8220;what is going on&#8221; feel.</p><p>Over the sync up call, we argued &#8212; well it was mostly me arguing why it wasn&#8217;t a problem even though it most definitely was the problem. It was a challenging call for all of us. We had no new merchants at a time when we were just starting to gain momentum.</p><p>The crux of our problem - When we implemented that system, I had insisted on a design to generate new table namespaces for each new merchant we had - clearly that made sense to me based on how I had seen systems scale (ie CloudPact/Mowbly context from earlier). This was the blunder that caused the downtime pretty much - loading more table definitions per merchant we acquired at our scale was disastrous. The scale was tens of thousands, not 100s/1000s that I was thinking of earlier.</p><p>The above realization and conclusion came about as I was cycling my usual 5K to work (i.e. our 4-seater space at NASSCOM 10K Startup Warehouse at Diamond District). It was clear &#8212; I had to unlearn that path of scale. The cost and value are very very different than what I was familiar with. Something I didn&#8217;t need to be told, I had to adapt to the problem at hand, not a great feeling but the correct one to put myself through. The cycling to office was part of the process as well.</p><h3><strong>Nov 9 2016 10:11 am</strong></h3><p>When I stepped in to restart the discussion, we were all in agreement somehow, even though I had argued for the opposite just 30 mins ago. </p><p>That was another moment I have come to cherish &#8212; despite how wrong I was and the heated debate, all of us moved on to what was important - getting us back LIVE. Super grateful to be surrounded by such folks, both at Swym and CloudPact before that. (gifs for representation only)</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ENy3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4639ec2-0e30-4500-ac26-8af831253a46_340x154.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ENy3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4639ec2-0e30-4500-ac26-8af831253a46_340x154.gif 424w, https://substackcdn.com/image/fetch/$s_!ENy3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4639ec2-0e30-4500-ac26-8af831253a46_340x154.gif 848w, https://substackcdn.com/image/fetch/$s_!ENy3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4639ec2-0e30-4500-ac26-8af831253a46_340x154.gif 1272w, https://substackcdn.com/image/fetch/$s_!ENy3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4639ec2-0e30-4500-ac26-8af831253a46_340x154.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ENy3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4639ec2-0e30-4500-ac26-8af831253a46_340x154.gif" width="502" height="227.3764705882353" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e4639ec2-0e30-4500-ac26-8af831253a46_340x154.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:154,&quot;width&quot;:340,&quot;resizeWidth&quot;:502,&quot;bytes&quot;:1424577,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/gif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://stories.getswym.com/i/175772862?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4639ec2-0e30-4500-ac26-8af831253a46_340x154.gif&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ENy3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4639ec2-0e30-4500-ac26-8af831253a46_340x154.gif 424w, https://substackcdn.com/image/fetch/$s_!ENy3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4639ec2-0e30-4500-ac26-8af831253a46_340x154.gif 848w, https://substackcdn.com/image/fetch/$s_!ENy3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4639ec2-0e30-4500-ac26-8af831253a46_340x154.gif 1272w, https://substackcdn.com/image/fetch/$s_!ENy3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4639ec2-0e30-4500-ac26-8af831253a46_340x154.gif 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dzar!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95de0295-44e7-455e-b772-061b14b54769_498x280.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dzar!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95de0295-44e7-455e-b772-061b14b54769_498x280.gif 424w, https://substackcdn.com/image/fetch/$s_!dzar!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95de0295-44e7-455e-b772-061b14b54769_498x280.gif 848w, https://substackcdn.com/image/fetch/$s_!dzar!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95de0295-44e7-455e-b772-061b14b54769_498x280.gif 1272w, https://substackcdn.com/image/fetch/$s_!dzar!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95de0295-44e7-455e-b772-061b14b54769_498x280.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dzar!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95de0295-44e7-455e-b772-061b14b54769_498x280.gif" width="498" height="280" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/95de0295-44e7-455e-b772-061b14b54769_498x280.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:280,&quot;width&quot;:498,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3654446,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/gif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://stories.getswym.com/i/175772862?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95de0295-44e7-455e-b772-061b14b54769_498x280.gif&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!dzar!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95de0295-44e7-455e-b772-061b14b54769_498x280.gif 424w, https://substackcdn.com/image/fetch/$s_!dzar!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95de0295-44e7-455e-b772-061b14b54769_498x280.gif 848w, https://substackcdn.com/image/fetch/$s_!dzar!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95de0295-44e7-455e-b772-061b14b54769_498x280.gif 1272w, https://substackcdn.com/image/fetch/$s_!dzar!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95de0295-44e7-455e-b772-061b14b54769_498x280.gif 1456w" sizes="100vw" loading="lazy"></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>Getting back to next steps - we quickly concluded on a clear 7-step plan including the table namespace changes, logging changes, archival of spam namespaces and deployment. 7-steps = 1 step per hour at least, no? &#128513;</p><h3><strong>Nov 9 2016 3:37 pm</strong></h3><blockquote><p><em>Pushing to prod now</em></p><p><em>Any objections?</em></p><p><em>Nope</em></p><p><em>All done, CPU at &lt;5%</em></p></blockquote><p>Alright, alright, alright - We were back. A lesson unlearnt, a new lesson learnt, a lesson implemented.</p><p>It was time to get back on the mountain of other things that we were ignoring &#127939;&#8205;&#9794;&#65039;.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!MA4P!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d43fc4f-5d34-43c1-8672-c11f699f8bef_498x413.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MA4P!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d43fc4f-5d34-43c1-8672-c11f699f8bef_498x413.gif 424w, https://substackcdn.com/image/fetch/$s_!MA4P!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d43fc4f-5d34-43c1-8672-c11f699f8bef_498x413.gif 848w, https://substackcdn.com/image/fetch/$s_!MA4P!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d43fc4f-5d34-43c1-8672-c11f699f8bef_498x413.gif 1272w, https://substackcdn.com/image/fetch/$s_!MA4P!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d43fc4f-5d34-43c1-8672-c11f699f8bef_498x413.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!MA4P!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d43fc4f-5d34-43c1-8672-c11f699f8bef_498x413.gif" width="668" height="553.9839357429719" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6d43fc4f-5d34-43c1-8672-c11f699f8bef_498x413.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:413,&quot;width&quot;:498,&quot;resizeWidth&quot;:668,&quot;bytes&quot;:2654549,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/gif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://stories.getswym.com/i/175772862?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d43fc4f-5d34-43c1-8672-c11f699f8bef_498x413.gif&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!MA4P!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d43fc4f-5d34-43c1-8672-c11f699f8bef_498x413.gif 424w, https://substackcdn.com/image/fetch/$s_!MA4P!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d43fc4f-5d34-43c1-8672-c11f699f8bef_498x413.gif 848w, https://substackcdn.com/image/fetch/$s_!MA4P!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d43fc4f-5d34-43c1-8672-c11f699f8bef_498x413.gif 1272w, https://substackcdn.com/image/fetch/$s_!MA4P!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d43fc4f-5d34-43c1-8672-c11f699f8bef_498x413.gif 1456w" sizes="100vw" loading="lazy"></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>Last slack message for Nov 9 2016 was 9:29 pm. But then again on Nov 10 the first channel message was 3:52 am - back at it &#9202;&#65039;</p><div><hr></div><p>Now back to 2025, we have completely eliminated the above system including the self-hosted MySQL instance in question. That system was running our Shopify integration and extensions connecting back to our platform. We have moved all of that to a unified design taking advantage of the latest Shopify extensibility and <a href="https://shopify.dev/docs/apps/build/dev-dashboard">toml-based deployments including the new dev dashboard + cli</a>. </p><p>Speaking of November, <a href="https://www.getswym.com/resources/holidayhub?utm_source=swymstories&amp;utm_medium=story&amp;utm_campaign=nov92016">here is the latest from our team to enable you to maximize the rest of 2025 with the holiday season imminent</a></p><p>May the force be with all of us this BFCM &#128588;&#9996;&#65039;</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://stories.getswym.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Swym Stories! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Building on Shopify & the Shopify Community ]]></title><description><![CDATA[Code, Community, and Commerce.]]></description><link>https://stories.getswym.com/p/building-on-shopify-and-the-shopify</link><guid isPermaLink="false">https://stories.getswym.com/p/building-on-shopify-and-the-shopify</guid><dc:creator><![CDATA[Sakshi Gupta]]></dc:creator><pubDate>Mon, 22 Sep 2025 15:09:52 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/174254059/6c22e9bd68d75debfd48637f41d8d16f.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p>Join me, Sakshi Gupta from Swym, for my very first podcast episode where we dive into the world of Shopify development, community, and collaboration! &#128640;</p><p>I&#8217;m joined by an incredible lineup of guests:</p><p>&#128105;&#8205;&#128187; Trudy &amp; Anne &#8211; the brilliant duo behind Design Packs</p><p>&#128717;&#65039; Prakhar &#8211; co-founder of FoxSell and a super active Shopify community contributor</p><p>&#128161; Aravind &#8211; VP of Engineering at Swym</p><p>&#10024; Developer Experience: How these founders got started on Shopify, their favorite tools, and the biggest challenges in building for the platform</p><p>&#129309; App Collaborations: Behind-the-scenes of successful app partnerships, including Wishlist Plus, and lessons learned</p><p>&#127757; Community in Action: How the Shopify community supports each other, from Slack tips to long-term collaborations</p><p>&#129302; Future of Shopify Development: Exploring AI&#8217;s impact on coding, design, and merchant support</p><p>&#128218; Advice for New Developers: Practical tips to get started and thrive in the Shopify ecosystem</p><p>&#128161; Plus, hear fun stories, insights from leadership and dev perspectives, and a glimpse into the future of building on Shopify!</p><p>If you&#8217;re a developer, founder, or just curious about Shopify&#8217;s ecosystem and community, this episode is packed with inspiration and actionable insights.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!agWX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3299a3ec-b27a-40f8-81ab-ee688bdf1bfa_1280x720.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!agWX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3299a3ec-b27a-40f8-81ab-ee688bdf1bfa_1280x720.png 424w, https://substackcdn.com/image/fetch/$s_!agWX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3299a3ec-b27a-40f8-81ab-ee688bdf1bfa_1280x720.png 848w, https://substackcdn.com/image/fetch/$s_!agWX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3299a3ec-b27a-40f8-81ab-ee688bdf1bfa_1280x720.png 1272w, https://substackcdn.com/image/fetch/$s_!agWX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3299a3ec-b27a-40f8-81ab-ee688bdf1bfa_1280x720.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!agWX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3299a3ec-b27a-40f8-81ab-ee688bdf1bfa_1280x720.png" width="1280" height="720" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3299a3ec-b27a-40f8-81ab-ee688bdf1bfa_1280x720.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:720,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!agWX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3299a3ec-b27a-40f8-81ab-ee688bdf1bfa_1280x720.png 424w, https://substackcdn.com/image/fetch/$s_!agWX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3299a3ec-b27a-40f8-81ab-ee688bdf1bfa_1280x720.png 848w, https://substackcdn.com/image/fetch/$s_!agWX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3299a3ec-b27a-40f8-81ab-ee688bdf1bfa_1280x720.png 1272w, https://substackcdn.com/image/fetch/$s_!agWX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3299a3ec-b27a-40f8-81ab-ee688bdf1bfa_1280x720.png 1456w" sizes="100vw" loading="lazy"></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>]]></content:encoded></item><item><title><![CDATA[How to Tame Your AI [1]- Prompts]]></title><description><![CDATA[Tips to make AI understand what you want]]></description><link>https://stories.getswym.com/p/how-to-tame-your-ai-1-prompts</link><guid isPermaLink="false">https://stories.getswym.com/p/how-to-tame-your-ai-1-prompts</guid><dc:creator><![CDATA[Mani]]></dc:creator><pubDate>Thu, 28 Aug 2025 08:30:31 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!jUHY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03a19833-1514-4a70-aaae-8e06222d1f2c_1536x715.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>We've all been there. You spend 10 minutes crafting what feels like the perfect prompt, hit send, and get back something that looks like it was written by a confused guy having a bad day</p><p><strong>Sounds familiar?</strong></p><p>The problem isn't that AI is broken. The problem is you're directing it like you're taking a blurry vacation selfie&#8230;.when you should be guiding it like you're filming an Oscar-winning movie</p><p>Let me try to fix that for you</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://stories.getswym.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Swym Stories! Subscribe to read more stories from the Swym team!</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2>Shorter Prompts = Better Results</h2><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jUHY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03a19833-1514-4a70-aaae-8e06222d1f2c_1536x715.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jUHY!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03a19833-1514-4a70-aaae-8e06222d1f2c_1536x715.png 424w, https://substackcdn.com/image/fetch/$s_!jUHY!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03a19833-1514-4a70-aaae-8e06222d1f2c_1536x715.png 848w, https://substackcdn.com/image/fetch/$s_!jUHY!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03a19833-1514-4a70-aaae-8e06222d1f2c_1536x715.png 1272w, https://substackcdn.com/image/fetch/$s_!jUHY!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03a19833-1514-4a70-aaae-8e06222d1f2c_1536x715.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jUHY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03a19833-1514-4a70-aaae-8e06222d1f2c_1536x715.png" width="480" height="223.5164835164835" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/03a19833-1514-4a70-aaae-8e06222d1f2c_1536x715.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:678,&quot;width&quot;:1456,&quot;resizeWidth&quot;:480,&quot;bytes&quot;:2623326,&quot;alt&quot;:&quot;Generated image&quot;,&quot;title&quot;:&quot;Generated image&quot;,&quot;type&quot;:&quot;image/png&quot;,&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="Generated image" title="Generated image" srcset="https://substackcdn.com/image/fetch/$s_!jUHY!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03a19833-1514-4a70-aaae-8e06222d1f2c_1536x715.png 424w, https://substackcdn.com/image/fetch/$s_!jUHY!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03a19833-1514-4a70-aaae-8e06222d1f2c_1536x715.png 848w, https://substackcdn.com/image/fetch/$s_!jUHY!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03a19833-1514-4a70-aaae-8e06222d1f2c_1536x715.png 1272w, https://substackcdn.com/image/fetch/$s_!jUHY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03a19833-1514-4a70-aaae-8e06222d1f2c_1536x715.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><p>This breaks everyone's brain, but it's true: <strong>Long prompts make AI dumber (because of reasoning).</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5WoS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a2ce18d-c830-4f9f-a7a0-85f0ea3eb610_733x604.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5WoS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a2ce18d-c830-4f9f-a7a0-85f0ea3eb610_733x604.png 424w, https://substackcdn.com/image/fetch/$s_!5WoS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a2ce18d-c830-4f9f-a7a0-85f0ea3eb610_733x604.png 848w, https://substackcdn.com/image/fetch/$s_!5WoS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a2ce18d-c830-4f9f-a7a0-85f0ea3eb610_733x604.png 1272w, https://substackcdn.com/image/fetch/$s_!5WoS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a2ce18d-c830-4f9f-a7a0-85f0ea3eb610_733x604.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5WoS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a2ce18d-c830-4f9f-a7a0-85f0ea3eb610_733x604.png" width="480" height="395.52523874488406" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7a2ce18d-c830-4f9f-a7a0-85f0ea3eb610_733x604.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:604,&quot;width&quot;:733,&quot;resizeWidth&quot;:480,&quot;bytes&quot;:108999,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://mani471368.substack.com/i/171628298?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a2ce18d-c830-4f9f-a7a0-85f0ea3eb610_733x604.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!5WoS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a2ce18d-c830-4f9f-a7a0-85f0ea3eb610_733x604.png 424w, https://substackcdn.com/image/fetch/$s_!5WoS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a2ce18d-c830-4f9f-a7a0-85f0ea3eb610_733x604.png 848w, https://substackcdn.com/image/fetch/$s_!5WoS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a2ce18d-c830-4f9f-a7a0-85f0ea3eb610_733x604.png 1272w, https://substackcdn.com/image/fetch/$s_!5WoS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a2ce18d-c830-4f9f-a7a0-85f0ea3eb610_733x604.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>Think of reasoning AI like a goldfish. The more information you dump on it, the more it forgets (neglects) what you actually wanted.</p><p><strong>Bad prompt (87 words):</strong></p><blockquote><p>"I need you to write a comprehensive, detailed, and thorough email that professionally communicates to my team about the upcoming quarterly review meeting, making sure to include all the relevant details about timing, preparation requirements, agenda items, and expectations while maintaining a friendly but professional tone that encourages participation."</p></blockquote><p><strong>Good prompt (12 words):</strong></p><blockquote><p>"Write a team email about quarterly review meeting. Include timing, agenda, prep."</p></blockquote><p><strong>Result?</strong> The short prompt consistently produces better emails.</p><p><a href="https://geminitokencounter.dbanswan.com/">Token Counter Link</a></p><div><hr></div><h2>Show, Don't Tell (The Magic of One Example)</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!KCWi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fada2bf97-1db4-404d-bf46-3fe9aa54b996_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!KCWi!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fada2bf97-1db4-404d-bf46-3fe9aa54b996_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!KCWi!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fada2bf97-1db4-404d-bf46-3fe9aa54b996_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!KCWi!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fada2bf97-1db4-404d-bf46-3fe9aa54b996_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!KCWi!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fada2bf97-1db4-404d-bf46-3fe9aa54b996_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!KCWi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fada2bf97-1db4-404d-bf46-3fe9aa54b996_1536x1024.png" width="480" height="320.1098901098901" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ada2bf97-1db4-404d-bf46-3fe9aa54b996_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:480,&quot;bytes&quot;:2503542,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://mani471368.substack.com/i/171628298?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fada2bf97-1db4-404d-bf46-3fe9aa54b996_1536x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!KCWi!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fada2bf97-1db4-404d-bf46-3fe9aa54b996_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!KCWi!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fada2bf97-1db4-404d-bf46-3fe9aa54b996_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!KCWi!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fada2bf97-1db4-404d-bf46-3fe9aa54b996_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!KCWi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fada2bf97-1db4-404d-bf46-3fe9aa54b996_1536x1024.png 1456w" sizes="100vw" loading="lazy"></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>Here's something that sounds fake but isn't: <strong>One good example beats ten mediocre ones.</strong></p><p>It's like teaching someone to make a perfect omelet. You don't show them 10 different omelet techniques. You show them ONE perfect omelet.</p><p><strong>Without example:</strong></p><blockquote><p><strong>Prompt</strong>: "Write product bullet points"</p><p><strong>AI Output</strong>: </p><p>"&#8226; Great product features</p><p>  &#8226; Amazing quality</p><p>  &#8226; Best in class"</p><p>(Useless generic garbage)</p></blockquote><p><strong>With ONE example:</strong></p><blockquote><p><strong>Prompt</strong>: </p><p>"Write product bullet points like this example:</p><p>&#8226; Noise cancellation blocks 99% of background chatter (perfect for open offices)</p><p>Now write 3 more for wireless headphones:"</p><p><strong>AI Output:</strong> </p><p>"&#8226; 40-hour battery life means charging once per week, not daily</p><p>  &#8226; Touch controls respond to taps, not accidental brushes</p><p>  &#8226; Folds flat to fit in laptop bags under 2 inch thick"</p><p>(Actually useful!) </p></blockquote><div><hr></div><h2>AI Isn&#8217;t like Google (It works differently)</h2><p><strong>Reality check:</strong> By default, AI doesn&#8217;t &#8220;look things up.&#8221; It predicts answers based on patterns&#8230;.which means it can invent details with total confidence.</p><p><strong>With tools:</strong> Sure, AI can pull in the latest stock prices, sports results, or web data. But even then, its real strength isn&#8217;t <em>retrieving facts</em>&#8230;.it&#8217;s helping you interpret them.</p><p><strong>Smart approach:</strong></p><blockquote><p>&#10060; <em>&#8220;What&#8217;s the Apple stock price right now?&#8221;</em><br>&#9989; <em>&#8220;Here&#8217;s Apple stock data [paste or fetch with a tool]. What trends or risks do you see?&#8221;</em></p></blockquote><div><hr></div><h2>Be Stupidly Specific</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!s4gx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc48f9de-87eb-4db8-8113-57f97415a5b3_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!s4gx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc48f9de-87eb-4db8-8113-57f97415a5b3_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!s4gx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc48f9de-87eb-4db8-8113-57f97415a5b3_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!s4gx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc48f9de-87eb-4db8-8113-57f97415a5b3_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!s4gx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc48f9de-87eb-4db8-8113-57f97415a5b3_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!s4gx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc48f9de-87eb-4db8-8113-57f97415a5b3_1536x1024.png" width="480" height="320.1098901098901" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dc48f9de-87eb-4db8-8113-57f97415a5b3_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:480,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Generated image&quot;,&quot;title&quot;:&quot;Generated image&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Generated image" title="Generated image" srcset="https://substackcdn.com/image/fetch/$s_!s4gx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc48f9de-87eb-4db8-8113-57f97415a5b3_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!s4gx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc48f9de-87eb-4db8-8113-57f97415a5b3_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!s4gx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc48f9de-87eb-4db8-8113-57f97415a5b3_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!s4gx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc48f9de-87eb-4db8-8113-57f97415a5b3_1536x1024.png 1456w" sizes="100vw" loading="lazy"></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>Vague prompts are like asking someone to "make dinner." Cool&#8230;enjoy your bowl of cereal now&#8230;&#128578;</p><p><strong>Vague prompt:</strong></p><blockquote><p>"Write a report about our sales"</p></blockquote><p><strong>AI thinks:</strong> </p><blockquote><p><em>Report could mean anything. Sales from when? How long? What format? Screw it, I'll just write whatever.</em></p></blockquote><p><strong>Specific prompt:</strong></p><blockquote><p>"Write a 300-word sales summary for October 2024. Include total revenue, top 3 products, and biggest challenge. Use bullet points."</p></blockquote><p><strong>AI thinks:</strong> </p><blockquote><p><em>Oh, now I know exactly what to do.</em></p></blockquote><div><hr></div><h2>The "Spartan" Hack</h2><p>Want responses without fluff? Use this one weird word: <strong>"Spartan"</strong></p><p>Seriously&#8230;.It's like a magic spell that makes AI cut the BS...</p><p><strong>Normal prompt:</strong></p><blockquote><p>"Explain why our website is slow"</p></blockquote><p><strong>AI gives you:</strong> </p><blockquote><p><em>A 300-word essay about server optimization, CDNs etc&#8230;</em></p></blockquote><p><strong>Spartan prompt:</strong></p><blockquote><p>"Explain why our website is slow. Be Spartan."</p></blockquote><p><strong>AI gives you:</strong> </p><blockquote><p><em>Too many plugins. Large images not compressed. Hosting plan is basic...</em></p></blockquote><div><hr></div><h2>Test Your Prompts Like a Scientist</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!O0sV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2293db4d-a7ab-407f-8830-69b28acc66e0_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!O0sV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2293db4d-a7ab-407f-8830-69b28acc66e0_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!O0sV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2293db4d-a7ab-407f-8830-69b28acc66e0_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!O0sV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2293db4d-a7ab-407f-8830-69b28acc66e0_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!O0sV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2293db4d-a7ab-407f-8830-69b28acc66e0_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!O0sV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2293db4d-a7ab-407f-8830-69b28acc66e0_1536x1024.png" width="480" height="320.1098901098901" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2293db4d-a7ab-407f-8830-69b28acc66e0_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:480,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Generated image&quot;,&quot;title&quot;:&quot;Generated image&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Generated image" title="Generated image" srcset="https://substackcdn.com/image/fetch/$s_!O0sV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2293db4d-a7ab-407f-8830-69b28acc66e0_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!O0sV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2293db4d-a7ab-407f-8830-69b28acc66e0_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!O0sV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2293db4d-a7ab-407f-8830-69b28acc66e0_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!O0sV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2293db4d-a7ab-407f-8830-69b28acc66e0_1536x1024.png 1456w" sizes="100vw" loading="lazy"></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>A prompt that works once is like a lottery ticket that has won once. Meaningless.</p><p><strong>The 10-Test Rule:</strong></p><ul><li><p>Run your prompt 10 times</p></li><li><p>Count how many outputs you'd actually use</p></li><li><p>If less than 7/10 are good, refine and repeat</p></li></ul><div><hr></div><h2>The 5-Part Prompt Formula</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!AThg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F114ead60-f301-4b4b-97df-5ca0abd2c461_1024x1145.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!AThg!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F114ead60-f301-4b4b-97df-5ca0abd2c461_1024x1145.png 424w, https://substackcdn.com/image/fetch/$s_!AThg!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F114ead60-f301-4b4b-97df-5ca0abd2c461_1024x1145.png 848w, https://substackcdn.com/image/fetch/$s_!AThg!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F114ead60-f301-4b4b-97df-5ca0abd2c461_1024x1145.png 1272w, https://substackcdn.com/image/fetch/$s_!AThg!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F114ead60-f301-4b4b-97df-5ca0abd2c461_1024x1145.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!AThg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F114ead60-f301-4b4b-97df-5ca0abd2c461_1024x1145.png" width="224" height="250.46875" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/114ead60-f301-4b4b-97df-5ca0abd2c461_1024x1145.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1145,&quot;width&quot;:1024,&quot;resizeWidth&quot;:224,&quot;bytes&quot;:2526905,&quot;alt&quot;:&quot;Generated image&quot;,&quot;title&quot;:&quot;Generated image&quot;,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Generated image" title="Generated image" srcset="https://substackcdn.com/image/fetch/$s_!AThg!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F114ead60-f301-4b4b-97df-5ca0abd2c461_1024x1145.png 424w, https://substackcdn.com/image/fetch/$s_!AThg!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F114ead60-f301-4b4b-97df-5ca0abd2c461_1024x1145.png 848w, https://substackcdn.com/image/fetch/$s_!AThg!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F114ead60-f301-4b4b-97df-5ca0abd2c461_1024x1145.png 1272w, https://substackcdn.com/image/fetch/$s_!AThg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F114ead60-f301-4b4b-97df-5ca0abd2c461_1024x1145.png 1456w" sizes="100vw" loading="lazy"></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>Every great prompt follows this recipe:</p><ol><li><p><strong>Context</strong> (Set the scene)</p></li><li><p><strong>Task</strong> (What to do)</p></li><li><p><strong>Format</strong> (How to deliver it)</p></li><li><p><strong>Rules</strong> (Constraints)</p></li><li><p><strong>Example</strong> (Show don't tell)</p></li></ol><p><strong>Bad prompt:</strong></p><blockquote><p>"Write about our company"</p></blockquote><p><strong>Good prompt using the formula:</strong></p><blockquote><p><strong>Context:</strong> You're writing for busy executives who have 30 seconds to understand what we do. </p><p><strong>Task:</strong> Write a company description.<br><strong>Format:</strong> 2 sentences max. </p><p><strong>Rules:</strong> No jargon, no buzzwords. </p><p><strong>Example:</strong> "Slack helps teams communicate without email. Over 10 million people use it daily."</p></blockquote><div><hr></div><h2>Conclusion</h2><p>These days companies winning with AI aren't the ones with the biggest budgets or fanciest tools; they&#8217;re the ones that know how to talk to AI like a sharp intern who just needs clear instructions. So let&#8217;s start optimizing our prompts from the drafting phase itself</p><p>Thats all for today, I've got more AI stuff brewing&#8230;.will comeback with few soon&#8230;.Bye bye &#129761;</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://stories.getswym.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Swym Stories! Subscribe to read more stories from the Swym team!</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[From 43 Seconds to 3 - How I Optimised My SQL Query to Run 13x Faster]]></title><description><![CDATA[tl;dr - let's not be DISTINCT]]></description><link>https://stories.getswym.com/p/from-43-seconds-to-3-how-i-optimised</link><guid isPermaLink="false">https://stories.getswym.com/p/from-43-seconds-to-3-how-i-optimised</guid><dc:creator><![CDATA[Aditya Srinivas]]></dc:creator><pubDate>Thu, 28 Aug 2025 07:24:01 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03dc2b31-b9b0-416a-8a40-c8bfe52e48f3_1024x1536.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Ever stare at a query progress bar, feeling like you could brew a pot of chai (or maybe even two here in Bengaluru!) before it finishes? I&#8217;ve been there. Just recently, I hit a wall with a PostgreSQL query that was taking a <strong>whopping 43 seconds</strong> to run. Annoying, right?</p><p>But stick around, because this story has a happy ending - a <em>3.2-second</em> ending, to be precise! It involves a large table, a seemingly obvious query, a facepalm moment, and a crucial reminder about the fundamentals we sometimes overlook. Whether you're just dipping your toes into databases or you're a seasoned pro, I bet you'll find something useful (or at least relatable) here.</p><h4>The Mission: Counting Unique User Devices</h4><p>My task seemed simple enough: In our <code>event_logs</code> table (a beast with over <strong>312 MILLION rows</strong>, consuming about <strong>43 GB</strong> of disk space!), I needed to find the total number of <em>unique</em> combinations of <code>session_key</code> and <code>user_tag</code> for one specific <code>account_id</code>.</p><p>Easy peasy, right? My brain immediately went: "Unique? That's a job for <code>DISTINCT</code>!" So, I proudly typed out something like this:</p><p>SQL</p><pre><code><strong>-- My "Logical" First Attempt
SELECT</strong>
    <strong>COUNT(DISTINCT (session_key, user_tag))</strong> -- Count unique pairs, right?
<strong>FROM
    event_logs
WHERE
    account_id = 'some_specific_account_id';</strong></code></pre><p>Looks reasonable, doesn't it? We filter by the account, then ask Postgres to count the distinct pairs of session_key and user_tag. Job done?</p><h4>The Reality Check: 43 Seconds of Waiting...</h4><p>I hit 'Run' and... waited. And waited.</p><p><em>(Imagine a clock ticking loudly here... maybe a tumbleweed rolling past)</em></p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jOx7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85a4ce77-2843-4d00-a878-a799e8ed4902_2230x549.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jOx7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85a4ce77-2843-4d00-a878-a799e8ed4902_2230x549.png 424w, https://substackcdn.com/image/fetch/$s_!jOx7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85a4ce77-2843-4d00-a878-a799e8ed4902_2230x549.png 848w, https://substackcdn.com/image/fetch/$s_!jOx7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85a4ce77-2843-4d00-a878-a799e8ed4902_2230x549.png 1272w, https://substackcdn.com/image/fetch/$s_!jOx7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85a4ce77-2843-4d00-a878-a799e8ed4902_2230x549.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jOx7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85a4ce77-2843-4d00-a878-a799e8ed4902_2230x549.png" width="1456" height="358" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/85a4ce77-2843-4d00-a878-a799e8ed4902_2230x549.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:358,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:60166,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://adityasrinivas.substack.com/i/161013118?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59d88046-b3ed-4cc2-9af7-5b5bbb92502d_2230x726.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!jOx7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85a4ce77-2843-4d00-a878-a799e8ed4902_2230x549.png 424w, https://substackcdn.com/image/fetch/$s_!jOx7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85a4ce77-2843-4d00-a878-a799e8ed4902_2230x549.png 848w, https://substackcdn.com/image/fetch/$s_!jOx7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85a4ce77-2843-4d00-a878-a799e8ed4902_2230x549.png 1272w, https://substackcdn.com/image/fetch/$s_!jOx7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85a4ce77-2843-4d00-a878-a799e8ed4902_2230x549.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p><strong>43.3 seconds later</strong>, I got my number. Okay, getting the result is good, but over 40 seconds for a count? On a production system, that could feel like an eternity for users or downstream processes. Something wasn't right. The massive table size was obviously a factor, but could it be <em>this</em> slow?</p><h4>The Investigation: Do We Have Backup? (Checking Indexes!)</h4><p>Alright, Query Optimization 101: If a query filtering on a column (<code>account_id</code> in my case) is slow on a huge table, the first suspect is usually a missing index. So, I went digging.</p><p>Aha! We <em>did</em> have indexes:</p><ol><li><p><code>event_logs_account_id_event_time_idx</code> on <code>(account_id, event_time)</code> - Okay, helpful for the <code>WHERE</code> clause, but doesn't help with the <code>session_key</code> or <code>user_tag</code> part.</p></li><li><p><code>event_logs_pkey</code> on <code>(account_id, session_key, user_tag)</code> - Wait a minute... Primary Key? Unique index? On <em>all three</em> columns involved?</p></li></ol><p><em>(Lightbulb flickering on)</em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3PxZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67d3a56a-fd7e-4ed3-960f-f1575b373252_1024x608.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3PxZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67d3a56a-fd7e-4ed3-960f-f1575b373252_1024x608.png 424w, https://substackcdn.com/image/fetch/$s_!3PxZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67d3a56a-fd7e-4ed3-960f-f1575b373252_1024x608.png 848w, https://substackcdn.com/image/fetch/$s_!3PxZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67d3a56a-fd7e-4ed3-960f-f1575b373252_1024x608.png 1272w, https://substackcdn.com/image/fetch/$s_!3PxZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67d3a56a-fd7e-4ed3-960f-f1575b373252_1024x608.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3PxZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67d3a56a-fd7e-4ed3-960f-f1575b373252_1024x608.png" width="1024" height="608" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/67d3a56a-fd7e-4ed3-960f-f1575b373252_1024x608.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:608,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!3PxZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67d3a56a-fd7e-4ed3-960f-f1575b373252_1024x608.png 424w, https://substackcdn.com/image/fetch/$s_!3PxZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67d3a56a-fd7e-4ed3-960f-f1575b373252_1024x608.png 848w, https://substackcdn.com/image/fetch/$s_!3PxZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67d3a56a-fd7e-4ed3-960f-f1575b373252_1024x608.png 1272w, https://substackcdn.com/image/fetch/$s_!3PxZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67d3a56a-fd7e-4ed3-960f-f1575b373252_1024x608.png 1456w" sizes="100vw" loading="lazy"></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><figcaption class="image-caption">Eureka moment!</figcaption></figure></div><h4><strong>The Eureka Moment: The Primary Key's Superpower!</strong></h4><p>This is where my dusty college notes suddenly felt relevant! Specifically, that Primary Key guarantee is a direct example of the <strong>'C' for Consistency</strong> in ACID properties - ensuring the database state always respects the defined rules and constraints. </p><p>A <strong>Primary Key</strong> (or any Unique Index) guarantees that the combination of values in its columns is <strong>unique across the entire table</strong>.</p><p>Our primary key is on <code>(account_id, session_key, user_tag)</code>.</p><p>Let's think about this:</p><ul><li><p>We are filtering for <em>one specific</em> <code>account_id</code>.</p></li><li><p>For <em>every</em> row matching that <code>account_id</code>, the combination of <code>(account_id, session_key, user_tag)</code> <em>must</em> be unique.</p></li><li><p>If the <code>account_id</code> part is the <em>same</em> for all these rows... what does that mean for the remaining <code>(session_key, user_tag)</code> part?</p></li></ul><p><strong>It means </strong><code>(session_key, user_tag)</code><strong> </strong><em><strong>must also be unique</strong></em><strong> within that filtered set!</strong></p><p>If we had two rows for the <em>same account</em> with the <em>same session_key and user_tag</em>, it would violate the primary key!</p><p>My <code>COUNT(DISTINCT (session_key, user_tag))</code> was completely <strong>redundant</strong>! I was asking the database to do a whole lot of extra work to find uniqueness that was already guaranteed by the table structure itself!</p><h4>The Fix: Embrace Simplicity!</h4><p>Realizing this, the fix was laughably simple. If every row for that account already represents a unique <code>(session_key, user_tag)</code> pair, I don't need to find the <em>distinct</em> pairs... I just need to count the <strong>total number of rows</strong> for that account!</p><p>SQL</p><pre><code>-- The Gloriously Simple &amp; FAST Query
<strong>SELECT
    COUNT(*)</strong> -- Just count all the rows matching the account!
<strong>FROM
    event_logs
WHERE
    account_id = 'some_specific_account_id';</strong></code></pre><h4>The Result: Blazing Speed! (3.2 Seconds!)</h4><p>I ran this new query, holding my breath... and BOOM!<br><strong>3.2 seconds.</strong></p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!U4LM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde189db6-30c5-47a6-a5b1-fb4c2124a9e7_2228x553.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!U4LM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde189db6-30c5-47a6-a5b1-fb4c2124a9e7_2228x553.png 424w, https://substackcdn.com/image/fetch/$s_!U4LM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde189db6-30c5-47a6-a5b1-fb4c2124a9e7_2228x553.png 848w, https://substackcdn.com/image/fetch/$s_!U4LM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde189db6-30c5-47a6-a5b1-fb4c2124a9e7_2228x553.png 1272w, https://substackcdn.com/image/fetch/$s_!U4LM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde189db6-30c5-47a6-a5b1-fb4c2124a9e7_2228x553.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!U4LM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde189db6-30c5-47a6-a5b1-fb4c2124a9e7_2228x553.png" width="1456" height="361" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/de189db6-30c5-47a6-a5b1-fb4c2124a9e7_2228x553.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:361,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:60548,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://adityasrinivas.substack.com/i/161013118?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1f8877a-5756-4c9d-a180-d2ca3a9f326d_2228x740.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!U4LM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde189db6-30c5-47a6-a5b1-fb4c2124a9e7_2228x553.png 424w, https://substackcdn.com/image/fetch/$s_!U4LM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde189db6-30c5-47a6-a5b1-fb4c2124a9e7_2228x553.png 848w, https://substackcdn.com/image/fetch/$s_!U4LM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde189db6-30c5-47a6-a5b1-fb4c2124a9e7_2228x553.png 1272w, https://substackcdn.com/image/fetch/$s_!U4LM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde189db6-30c5-47a6-a5b1-fb4c2124a9e7_2228x553.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>From 43.3 seconds to 3.2 seconds. That's nearly <strong>13 times faster</strong>! All by removing one seemingly innocent <code>DISTINCT</code>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Dkvg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03dc2b31-b9b0-416a-8a40-c8bfe52e48f3_1024x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Dkvg!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03dc2b31-b9b0-416a-8a40-c8bfe52e48f3_1024x1536.png 424w, https://substackcdn.com/image/fetch/$s_!Dkvg!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03dc2b31-b9b0-416a-8a40-c8bfe52e48f3_1024x1536.png 848w, https://substackcdn.com/image/fetch/$s_!Dkvg!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03dc2b31-b9b0-416a-8a40-c8bfe52e48f3_1024x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!Dkvg!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03dc2b31-b9b0-416a-8a40-c8bfe52e48f3_1024x1536.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Dkvg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03dc2b31-b9b0-416a-8a40-c8bfe52e48f3_1024x1536.png" width="341" height="511.5" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/03dc2b31-b9b0-416a-8a40-c8bfe52e48f3_1024x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1536,&quot;width&quot;:1024,&quot;resizeWidth&quot;:341,&quot;bytes&quot;:2590323,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://adityasrinivas.substack.com/i/161013118?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03dc2b31-b9b0-416a-8a40-c8bfe52e48f3_1024x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!Dkvg!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03dc2b31-b9b0-416a-8a40-c8bfe52e48f3_1024x1536.png 424w, https://substackcdn.com/image/fetch/$s_!Dkvg!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03dc2b31-b9b0-416a-8a40-c8bfe52e48f3_1024x1536.png 848w, https://substackcdn.com/image/fetch/$s_!Dkvg!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03dc2b31-b9b0-416a-8a40-c8bfe52e48f3_1024x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!Dkvg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03dc2b31-b9b0-416a-8a40-c8bfe52e48f3_1024x1536.png 1456w" sizes="100vw" loading="lazy"></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><h4>The Science Bit: Why is <code>DISTINCT</code> So Demanding?</h4><p>So, why was <code>DISTINCT</code> slowing things down so much? Is it evil?</p><p>Not at all! But it <em>is</em> hard work for the database. To find unique rows/values, Postgres usually has to:</p><ol><li><p>Gather <em>all</em> the matching rows (potentially millions in my case, even after filtering by <code>account_id</code>).</p></li><li><p>Either <strong>Sort</strong> all that data based on the distinct columns and then pick out the unique ones.</p></li><li><p>Or <strong>Hash</strong> each row/value into a temporary table in memory, checking for duplicates as it goes.</p></li></ol><p>Both sorting and hashing huge amounts of data take significant CPU time and memory. If it needs more memory than allocated (<code>work_mem</code> setting in Postgres), it starts using the disk, and performance plummets dramatically.</p><p>In my first query, the database was likely doing a massive sort or hash operation on all the <code>(session_key, user_tag)</code> pairs for that account only to arrive at the same number, <code>COUNT(*)</code> would have given instantly (well, almost instantly!). We were saved because the primary key let us skip that whole expensive process.</p><h4>The Takeaway: Know Your Constraints!</h4><p>This whole adventure was a powerful reminder:</p><ol><li><p><strong>Understand Your Data &amp; Schema:</strong> Constraints like Primary Keys and Unique Indexes aren't just for data integrity; they provide valuable information the query planner can use (and that <em>you</em> can use to write smarter queries!).</p></li><li><p><strong>Question Your Assumptions:</strong> The "obvious" query isn't always the best. <code>DISTINCT</code> seemed logical, but the context of the unique index made it unnecessary.</p></li><li><p><strong>Indexes are Your Friends:</strong> While the primary key was the hero here, proper indexing is fundamental for database performance, especially on large tables.</p></li><li><p><code>DISTINCT</code><strong> is Powerful but Costly:</strong> Use it when you <em>need</em> it, but be aware of its performance implications and double-check if it's truly necessary.</p></li></ol><p>So, next time your query feels sluggish, take a moment to revisit your table structure, your indexes, and your constraints. You might find, a simple key (pun intended!) unlocks massive performance gains.</p><p>Have you had similar "Eureka!" moments optimizing queries? Share your stories in the comments below - let's learn from each other!</p><p>Happy querying!</p>]]></content:encoded></item><item><title><![CDATA[Clojure's future: Friend or Foe at 50k RPS?]]></title><description><![CDATA[Real-world concurrency considerations for your Clojure services.]]></description><link>https://stories.getswym.com/p/clojures-future-friend-or-foe-at</link><guid isPermaLink="false">https://stories.getswym.com/p/clojures-future-friend-or-foe-at</guid><dc:creator><![CDATA[Aditya Srinivas]]></dc:creator><pubDate>Sat, 23 Aug 2025 06:48:36 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4542c8b-b3ae-4ebd-80fe-50ac894b00c3_1024x608.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Alright, fellow Clojurians, gather 'round! Let me tell you about a little adventure I had recently. I hit a point where I need to call a function, let's call it <code>super-cruncher</code>, and I <em>really</em> don't want my main request thread waiting around for it. </p><p>"Aha!" thinks my brain, "Async! That's a job for <code>future</code>!"</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://stories.getswym.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Swym Stories! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>It felt so right, so <em>Clojure-y</em>. Just wrap the call in <br><code>(future (super-cruncher args))</code> and boom! Instant background task, right? My main thread is free, latency stays low, everyone's happy.</p><p><strong>Then came the plot twist.</strong></p><p>This <code>super-cruncher</code> function? It's popular. Like, <em>really</em> popular. We're potentially talking <strong>50,000 requests per second</strong> needing to call this thing. Suddenly, my simple, elegant <code>future</code> started looking... less simple.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fwzH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faec244ee-4874-4659-885d-20e6bf0fb4b5_1024x608.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fwzH!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faec244ee-4874-4659-885d-20e6bf0fb4b5_1024x608.png 424w, https://substackcdn.com/image/fetch/$s_!fwzH!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faec244ee-4874-4659-885d-20e6bf0fb4b5_1024x608.png 848w, https://substackcdn.com/image/fetch/$s_!fwzH!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faec244ee-4874-4659-885d-20e6bf0fb4b5_1024x608.png 1272w, https://substackcdn.com/image/fetch/$s_!fwzH!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faec244ee-4874-4659-885d-20e6bf0fb4b5_1024x608.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!fwzH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faec244ee-4874-4659-885d-20e6bf0fb4b5_1024x608.png" width="1024" height="608" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/aec244ee-4874-4659-885d-20e6bf0fb4b5_1024x608.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:608,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&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="" title="" srcset="https://substackcdn.com/image/fetch/$s_!fwzH!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faec244ee-4874-4659-885d-20e6bf0fb4b5_1024x608.png 424w, https://substackcdn.com/image/fetch/$s_!fwzH!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faec244ee-4874-4659-885d-20e6bf0fb4b5_1024x608.png 848w, https://substackcdn.com/image/fetch/$s_!fwzH!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faec244ee-4874-4659-885d-20e6bf0fb4b5_1024x608.png 1272w, https://substackcdn.com/image/fetch/$s_!fwzH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faec244ee-4874-4659-885d-20e6bf0fb4b5_1024x608.png 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><figcaption class="image-caption">High load of incoming requests.</figcaption></figure></div><p>My Spidey-sense tingled. Could just throwing 50,000 <code>future</code> calls a second into the ether actually <em>work</em> without, you know, causing a digital apocalypse in production? Time for a quick huddle with the collective wisdom (and some helpful LLMs).</p><p>And here's the <strong>mind-blown</strong> moment I had, which might be new to you too:</p><p><code>future</code><strong> isn't magic pixie dust; it's a Thread-Summoning Spell!</strong></p><p>Okay, maybe not a <em>spell</em>, but here's the crucial bit: Every time you call <code>future</code>, Clojure dips into its <strong>shared, fixed-size agent thread pool</strong> and grabs a thread to run your code.</p><p>"Shared?" you ask. Yes! "Fixed-size?" Double yes!</p><p>Think of it like a popular coffee shop with a limited number of baristas (threads). If one or two people order complex drinks (long-running tasks wrapped in <code>future</code>), it's fine. The other baristas keep the line moving.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mhai!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f617736-1cf8-482a-8a63-07d19284fed2_1024x608.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mhai!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f617736-1cf8-482a-8a63-07d19284fed2_1024x608.png 424w, https://substackcdn.com/image/fetch/$s_!mhai!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f617736-1cf8-482a-8a63-07d19284fed2_1024x608.png 848w, https://substackcdn.com/image/fetch/$s_!mhai!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f617736-1cf8-482a-8a63-07d19284fed2_1024x608.png 1272w, https://substackcdn.com/image/fetch/$s_!mhai!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f617736-1cf8-482a-8a63-07d19284fed2_1024x608.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mhai!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f617736-1cf8-482a-8a63-07d19284fed2_1024x608.png" width="1024" height="608" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5f617736-1cf8-482a-8a63-07d19284fed2_1024x608.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:608,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!mhai!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f617736-1cf8-482a-8a63-07d19284fed2_1024x608.png 424w, https://substackcdn.com/image/fetch/$s_!mhai!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f617736-1cf8-482a-8a63-07d19284fed2_1024x608.png 848w, https://substackcdn.com/image/fetch/$s_!mhai!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f617736-1cf8-482a-8a63-07d19284fed2_1024x608.png 1272w, https://substackcdn.com/image/fetch/$s_!mhai!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f617736-1cf8-482a-8a63-07d19284fed2_1024x608.png 1456w" sizes="100vw" loading="lazy"></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><figcaption class="image-caption"><code>future</code> waiting to get a thread from the thread pool</figcaption></figure></div><p><strong>But what happens at 50,000 RPS?</strong></p><p>Imagine 50,000 customers <em>per second</em> slamming the counter, each demanding a dedicated barista <em>right now</em>. That cozy coffee shop? It becomes chaos!</p><ol><li><p><strong>Thread Pool Exhaustion:</strong> That "fixed-size" pool runs out of available threads FAST. New <code>future</code> calls have to wait, potentially blocking <em>other</em> things that might rely on that same shared pool (like agents!). Latency, the very thing I wanted to avoid, could skyrocket.</p></li><li><p><strong>Memory Mania:</strong> Every thread needs memory for its stack and other resources. Spinning up potentially thousands (or tens of thousands!) of threads, even if short-lived, puts a strain on memory.</p></li><li><p><strong>Context-Switching Calamity:</strong> The CPU (or JVM) has to constantly switch between active threads. With a <em>huge</em> number of threads, it spends more time <em>managing</em> the threads than actually <em>doing the work</em> inside them. It's like our baristas spending all their time bumping into each other instead of making coffee. Performance tanks.</p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!nl1-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4542c8b-b3ae-4ebd-80fe-50ac894b00c3_1024x608.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!nl1-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4542c8b-b3ae-4ebd-80fe-50ac894b00c3_1024x608.png 424w, https://substackcdn.com/image/fetch/$s_!nl1-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4542c8b-b3ae-4ebd-80fe-50ac894b00c3_1024x608.png 848w, https://substackcdn.com/image/fetch/$s_!nl1-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4542c8b-b3ae-4ebd-80fe-50ac894b00c3_1024x608.png 1272w, https://substackcdn.com/image/fetch/$s_!nl1-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4542c8b-b3ae-4ebd-80fe-50ac894b00c3_1024x608.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!nl1-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4542c8b-b3ae-4ebd-80fe-50ac894b00c3_1024x608.png" width="1024" height="608" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b4542c8b-b3ae-4ebd-80fe-50ac894b00c3_1024x608.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:608,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!nl1-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4542c8b-b3ae-4ebd-80fe-50ac894b00c3_1024x608.png 424w, https://substackcdn.com/image/fetch/$s_!nl1-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4542c8b-b3ae-4ebd-80fe-50ac894b00c3_1024x608.png 848w, https://substackcdn.com/image/fetch/$s_!nl1-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4542c8b-b3ae-4ebd-80fe-50ac894b00c3_1024x608.png 1272w, https://substackcdn.com/image/fetch/$s_!nl1-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4542c8b-b3ae-4ebd-80fe-50ac894b00c3_1024x608.png 1456w" sizes="100vw" loading="lazy"></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><figcaption class="image-caption">Thread pool exhaustion</figcaption></figure></div><p><strong>Whoa.</strong> My simple <code>future</code> plan suddenly looked like paving a highway to Production Hell with good intentions. At 50,000 RPS, relying on <code>future</code> and its shared pool is like trying to drink from a firehose &#8211; you're gonna get overwhelmed.</p><p><strong>Is </strong><code>future</code><strong> bad? Absolutely not!</strong></p><p>It's fantastic for:</p><ul><li><p>One-off background tasks.</p></li><li><p>CPU-bound work you want off the main thread <em>occasionally</em>.</p></li><li><p>Things that don't happen at insane frequencies.</p></li></ul><p>But for hyper-frequent, high-throughput async calls like my <code>super-cruncher</code> scenario? It's likely the wrong tool for the job. Using it there risks performance degradation, increased latency, and potential system instability under sustained load.</p><p><strong>My Big Takeaway:</strong></p><p>Know your tools! <code>future</code> is wonderfully simple, but understanding <em>how</em> it works (shared thread pool!) is critical before deploying it into the high-frequency async battlefield. For scenarios like mine, exploring alternatives like <code>core.async</code>, dedicated thread pools managed more carefully, message queues, or potentially non-blocking patterns might be necessary.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Y2A4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed32a88e-210e-46ec-90b2-e71cf1d26a13_1024x608.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Y2A4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed32a88e-210e-46ec-90b2-e71cf1d26a13_1024x608.png 424w, https://substackcdn.com/image/fetch/$s_!Y2A4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed32a88e-210e-46ec-90b2-e71cf1d26a13_1024x608.png 848w, https://substackcdn.com/image/fetch/$s_!Y2A4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed32a88e-210e-46ec-90b2-e71cf1d26a13_1024x608.png 1272w, https://substackcdn.com/image/fetch/$s_!Y2A4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed32a88e-210e-46ec-90b2-e71cf1d26a13_1024x608.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Y2A4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed32a88e-210e-46ec-90b2-e71cf1d26a13_1024x608.png" width="1024" height="608" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ed32a88e-210e-46ec-90b2-e71cf1d26a13_1024x608.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:608,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!Y2A4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed32a88e-210e-46ec-90b2-e71cf1d26a13_1024x608.png 424w, https://substackcdn.com/image/fetch/$s_!Y2A4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed32a88e-210e-46ec-90b2-e71cf1d26a13_1024x608.png 848w, https://substackcdn.com/image/fetch/$s_!Y2A4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed32a88e-210e-46ec-90b2-e71cf1d26a13_1024x608.png 1272w, https://substackcdn.com/image/fetch/$s_!Y2A4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed32a88e-210e-46ec-90b2-e71cf1d26a13_1024x608.png 1456w" sizes="100vw" loading="lazy"></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><figcaption class="image-caption">Know your tools and select the right one</figcaption></figure></div><p>So, next time you reach for <code>future</code>, give a little nod to that shared thread pool. Ask yourself: "How busy is this highway going to be?" It might just save you from an unexpected thread tsunami!</p><p>Happy (and mindful) coding!</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://stories.getswym.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Swym Stories! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[From 'No' to 'Go' in 3 Hours]]></title><description><![CDATA[How We Built an SFL Data Importer with Gemini's help]]></description><link>https://stories.getswym.com/p/from-no-to-go-in-3-hours</link><guid isPermaLink="false">https://stories.getswym.com/p/from-no-to-go-in-3-hours</guid><dc:creator><![CDATA[Dhanush]]></dc:creator><pubDate>Fri, 22 Aug 2025 07:49:32 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!1ZnB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68b95019-87ca-4750-aac1-813b0b740980_2048x2048.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>For quite some time, when our customers asked to import "Save for Later" actions into our app, our answer was a polite "Hmm. Not feasible". It was a reasonable request, but one that wasn't supported natively by our import tool. The process was always the same: we'd thank them for the feedback and add it to a long product backlog, knowing it would be months, if ever, before our developers could build a solution.</p><p>Recently, that changed. Faced with the same request involving nearly 600,000 Save for Later actions, it was a deal breaker for the customer. Instead of saying no, we said, "Let's try something." In just a few hours, without pulling in a single developer from our product team, we had a robust, working import solution. How? By pairing up with Gemini.</p><p>This wasn't just about getting a task done; it proved that a new way of working is possible.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1ZnB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68b95019-87ca-4750-aac1-813b0b740980_2048x2048.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1ZnB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68b95019-87ca-4750-aac1-813b0b740980_2048x2048.jpeg 424w, https://substackcdn.com/image/fetch/$s_!1ZnB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68b95019-87ca-4750-aac1-813b0b740980_2048x2048.jpeg 848w, https://substackcdn.com/image/fetch/$s_!1ZnB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68b95019-87ca-4750-aac1-813b0b740980_2048x2048.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!1ZnB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68b95019-87ca-4750-aac1-813b0b740980_2048x2048.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1ZnB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68b95019-87ca-4750-aac1-813b0b740980_2048x2048.jpeg" width="1456" height="1456" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/68b95019-87ca-4750-aac1-813b0b740980_2048x2048.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1541218,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://stories.getswym.com/i/170368335?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68b95019-87ca-4750-aac1-813b0b740980_2048x2048.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!1ZnB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68b95019-87ca-4750-aac1-813b0b740980_2048x2048.jpeg 424w, https://substackcdn.com/image/fetch/$s_!1ZnB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68b95019-87ca-4750-aac1-813b0b740980_2048x2048.jpeg 848w, https://substackcdn.com/image/fetch/$s_!1ZnB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68b95019-87ca-4750-aac1-813b0b740980_2048x2048.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!1ZnB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68b95019-87ca-4750-aac1-813b0b740980_2048x2048.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></p><h3><strong>The Challenge: A Multi-Step Data Puzzle</strong></h3><p>The goal sounded simple. Take a customer's CSV file and import their users' Save for Later items into our system. But the details were complex:</p><ol><li><p>The customer's file had the user's email and the Shopify Product ID, but it was missing the Variant ID, which is crucial for our APIs.</p></li><li><p>The dataset was huge&#8212;600,000 actions spread across 10,000 unique products.</p></li><li><p>The import itself required a precise, four-step API dance for every single user: generate a session, check for an existing list, create one if needed, and finally, add the items.</p></li></ol><p>Doing this manually was impossible, and building a one-off tool would traditionally be a significant development project.</p><h3><strong>The Journey: Building It, One Step at a Time</strong></h3><p>Here&#8217;s how we tackled it, piece by piece, with the AI acting as a patient, expert developer.</p><h4><strong>Phase 1: Enriching the Data with Shopify&#8217;s API</strong></h4><p>Our first hurdle was fetching the missing <code>variant_id</code> for the 10,000 unique products.</p><p>Gemini immediately pointed us to Shopify's <strong>Bulk Operation API</strong>&#8212;the right tool for any large-scale data job. It wrote a Python script to handle the process, but this is where the real collaboration began. We didn't just get a script; we learned as we went. We hit errors, and Gemini helped us debug them.</p><ul><li><p>A <code>KeyError</code> taught us about API permissions and how to create a custom Shopify app with the right "scopes."</p></li><li><p>A <code>400 Bad Request</code> error taught us about missing parameters in an API call.</p></li><li><p>A <code>TypeError</code> when we scaled up to thousands of products taught us about API query length limits and led us to the solution: <strong>batch processing</strong>.</p></li></ul><p>With each step, the script became more robust, finally evolving into a powerful tool that could reliably fetch data for all 10,000 products in minutes.</p><h4><strong>Phase 2: Assembling the Final File</strong></h4><p>With our new "lookup table" of variant IDs, we needed to merge it back into the main 600,000-row file. Gemini suggested using the <code>pandas</code> library and provided a clean, efficient script to perform the merge, ensuring the row order was preserved for our final import.</p><h4><strong>Phase 3: The Final Import</strong></h4><p>This was the most complex part. We had to orchestrate the four API calls for what could be tens of thousands of unique users. Gemini helped us structure the logic to be incredibly efficient:</p><ol><li><p><strong>Group by User:</strong> Instead of 600,000 loops, the script intelligently grouped the data by email, processing each user only once.</p></li><li><p><strong>Conditional Logic:</strong> It seamlessly handled the "if-then" logic: if a user has a list, use it; if not, create one.</p></li><li><p><strong>Robust Logging:</strong> For a process that would run for hours, we knew we couldn't just watch the terminal. Gemini built a detailed logging system, creating a progress summary and a separate file for any failed items, making the entire process transparent and manageable.</p></li></ol><h3><strong>Bridging the Gap: From Local Script to Production Environment</strong></h3><p>The final challenge wasn't about code. It was about the practicality of the script running. A script that needs to run for over days can't live on a personal laptop. It needed a home on a stable, production-grade server&#8212;in our case, the Azure node.</p><p>As a non-developer, accessing this kind of environment felt like a major roadblock. This is where another crucial partnership came into play&#8212;this time with our <strong>DevOps team</strong>.</p><p>We explained the goal and the tool we had built. With their help, what seemed like a complex technical barrier became a simple, straightforward step. They provided access and guidance with minimal effort, empowering us to take our solution to the finish line. It proved that when a clear business need is met with cross-team collaboration, technical hurdles disappear.</p><h3><strong>The Realization: It's More Than Just Writing Code</strong></h3><p>The "magic" wasn't just that an AI could write Python scripts. It was the collaborative process. It was the speed of iteration. A bug that might have taken hours to diagnose was solved in seconds.</p><p>This journey proved two things:</p><ol><li><p><strong>We are more capable than we think.</strong> Tasks that once seemed out of reach for non-developers are now achievable. We can be more responsive to customer needs without immediately burdening our engineering team.</p></li><li><p><strong>This is a new partnership.</strong> Working with an AI isn't about replacing our skills; it's about augmenting them. It&#8217;s like having a senior developer available 24/7 to help you think through a problem, write the boilerplate, and spot the mistakes.</p></li></ol><p>The result? We turned a request that would have been rejected into a success story. And more importantly, we&#8217;ve unlocked a new, faster, and more creative way to solve problems for our customers.</p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://stories.getswym.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Swym Stories! Subscribe for free for more Stories from the Swym team!</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[How AI Saved 30 Minutes of Debugging and Fixing JavaScript Errors]]></title><description><![CDATA[Swift Support in Action: How We Resolved a Wishlist Implementation Bug Quickly Using AI's Help]]></description><link>https://stories.getswym.com/p/how-ai-saved-30-minutes-of-debugging</link><guid isPermaLink="false">https://stories.getswym.com/p/how-ai-saved-30-minutes-of-debugging</guid><dc:creator><![CDATA[Dhanush]]></dc:creator><pubDate>Tue, 12 Aug 2025 05:16:06 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!8Ng5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2dec752f-ce0a-4df4-91c9-b61aa2bdfbd5_2048x2048.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>For any e-commerce business, a smooth customer experience isn't just a feature&#8212;it's essential. When an Enterprise customer recently reported that their Wishlist button wasn't working correctly on collection pages, I understood the urgency. Shoppers couldn't save items after selecting a different product variant, creating friction in the path to purchase.</p><p>Jumping into action immediately. </p><h4><strong>A Systematic Approach to Problem-Solving</strong></h4><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8Ng5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2dec752f-ce0a-4df4-91c9-b61aa2bdfbd5_2048x2048.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8Ng5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2dec752f-ce0a-4df4-91c9-b61aa2bdfbd5_2048x2048.jpeg 424w, https://substackcdn.com/image/fetch/$s_!8Ng5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2dec752f-ce0a-4df4-91c9-b61aa2bdfbd5_2048x2048.jpeg 848w, https://substackcdn.com/image/fetch/$s_!8Ng5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2dec752f-ce0a-4df4-91c9-b61aa2bdfbd5_2048x2048.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!8Ng5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2dec752f-ce0a-4df4-91c9-b61aa2bdfbd5_2048x2048.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8Ng5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2dec752f-ce0a-4df4-91c9-b61aa2bdfbd5_2048x2048.jpeg" width="1456" height="1456" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2dec752f-ce0a-4df4-91c9-b61aa2bdfbd5_2048x2048.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1510555,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://stories.getswym.com/i/169201751?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2dec752f-ce0a-4df4-91c9-b61aa2bdfbd5_2048x2048.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!8Ng5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2dec752f-ce0a-4df4-91c9-b61aa2bdfbd5_2048x2048.jpeg 424w, https://substackcdn.com/image/fetch/$s_!8Ng5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2dec752f-ce0a-4df4-91c9-b61aa2bdfbd5_2048x2048.jpeg 848w, https://substackcdn.com/image/fetch/$s_!8Ng5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2dec752f-ce0a-4df4-91c9-b61aa2bdfbd5_2048x2048.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!8Ng5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2dec752f-ce0a-4df4-91c9-b61aa2bdfbd5_2048x2048.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>The initial investigation quickly confirmed that a JavaScript error was the culprit, preventing product details from rendering correctly when a variant was changed. The specific error was an <code>Uncaught TypeError</code>, indicating that the code was trying to read a value that didn't exist.</p><pre><code><code>Uncaught TypeError: Cannot read properties of null (reading 'amount')</code></code></pre><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!V997!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fdc26a1-3b8a-4621-b74c-0ec099a99eb2_2852x364.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!V997!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fdc26a1-3b8a-4621-b74c-0ec099a99eb2_2852x364.png 424w, https://substackcdn.com/image/fetch/$s_!V997!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fdc26a1-3b8a-4621-b74c-0ec099a99eb2_2852x364.png 848w, https://substackcdn.com/image/fetch/$s_!V997!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fdc26a1-3b8a-4621-b74c-0ec099a99eb2_2852x364.png 1272w, https://substackcdn.com/image/fetch/$s_!V997!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fdc26a1-3b8a-4621-b74c-0ec099a99eb2_2852x364.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!V997!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fdc26a1-3b8a-4621-b74c-0ec099a99eb2_2852x364.png" width="1456" height="186" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7fdc26a1-3b8a-4621-b74c-0ec099a99eb2_2852x364.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:186,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:358701,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://stories.getswym.com/i/169201751?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fdc26a1-3b8a-4621-b74c-0ec099a99eb2_2852x364.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!V997!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fdc26a1-3b8a-4621-b74c-0ec099a99eb2_2852x364.png 424w, https://substackcdn.com/image/fetch/$s_!V997!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fdc26a1-3b8a-4621-b74c-0ec099a99eb2_2852x364.png 848w, https://substackcdn.com/image/fetch/$s_!V997!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fdc26a1-3b8a-4621-b74c-0ec099a99eb2_2852x364.png 1272w, https://substackcdn.com/image/fetch/$s_!V997!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fdc26a1-3b8a-4621-b74c-0ec099a99eb2_2852x364.png 1456w" sizes="100vw"></picture><div></div></div></a></figure></div><p>In situations like this, speed and accuracy are paramount. While I could have manually traced the code line-by-line, our commitment to efficient resolution means leveraging the best tools for the job. To accelerate the process, we framed the problem for an AI assistant to act as a diagnostic co-pilot.</p><h4><strong>AI as an Efficiency Co-Pilot, Not the Pilot</strong></h4><p>I provided the relevant code snippet to AI to rapidly test our hypothesis. This allowed me to bypass a lengthy manual search and instantly pinpoint the source of the issue.</p><p>The analysis confirmed the suspicion: the code was accessing a product's <code>compareAtPrice</code> field without first checking if the product was actually on sale. If a product variant didn't have a "compare at" price, the value was <code>null</code>, causing the script to fail.</p><p>The problematic line was a simple conditional check:</p><pre><code><code>if(item.node.variants.edges[0].node.compareAtPrice.amount &gt; item.node.variants.edges[0].node.price.amount) {</code></code></pre><p>It explained that I was trying to access <code>.amount</code> from <code>compareAtPrice</code> without first checking if <code>compareAtPrice</code> even existed. If a product wasn't on sale, that object would be <code>null</code>, and the code would crash.</p><p><strong>Next, it became my guide.</strong> A good theory needs proof. It didn't just tell me what was wrong; it gave me the exact ways to confirm it. It suggested I add a series of <code>console.log</code> statements to act as a trail of breadcrumbs, letting me watch the data as it flowed through the script.</p><pre><code><code>const firstVariant = item.node.variants.edges[0]?.node; console.log("Debugging Product Variants:", item.node.variants.edges); console.log("First Variant:", firstVariant); console.log("compareAtPrice:", firstVariant?.compareAtPrice); console.log("compareAtPrice.amount:", firstVariant?.compareAtPrice?.amount); console.log("price:", firstVariant?.price?.amount);</code></code></pre><p>I dropped the logs in and re-ran the code.</p><p><strong>Then came the "Aha!" moment.</strong> The console lit up, and the evidence was undeniable. Staring right back at me was the proof:</p><pre><code><code>Debugging Product Variants: (5) [{&#8230;}, {&#8230;}, {&#8230;}, {&#8230;}, {&#8230;}] First Variant: {id: 'gid://shopify/ProductVariant/321', title: 'abc', sku: '123', availableForSale: false, quantityAvailable: 0, &#8230;} compareAtPrice: null compareAtPrice.amount: undefined price: 109.99</code></code></pre><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!c3gB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F341f08ca-6b6f-44f5-bc5f-96004e1602fc_2048x2048.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!c3gB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F341f08ca-6b6f-44f5-bc5f-96004e1602fc_2048x2048.jpeg 424w, https://substackcdn.com/image/fetch/$s_!c3gB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F341f08ca-6b6f-44f5-bc5f-96004e1602fc_2048x2048.jpeg 848w, https://substackcdn.com/image/fetch/$s_!c3gB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F341f08ca-6b6f-44f5-bc5f-96004e1602fc_2048x2048.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!c3gB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F341f08ca-6b6f-44f5-bc5f-96004e1602fc_2048x2048.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!c3gB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F341f08ca-6b6f-44f5-bc5f-96004e1602fc_2048x2048.jpeg" width="1456" height="1456" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/341f08ca-6b6f-44f5-bc5f-96004e1602fc_2048x2048.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1503271,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://stories.getswym.com/i/169201751?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F341f08ca-6b6f-44f5-bc5f-96004e1602fc_2048x2048.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!c3gB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F341f08ca-6b6f-44f5-bc5f-96004e1602fc_2048x2048.jpeg 424w, https://substackcdn.com/image/fetch/$s_!c3gB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F341f08ca-6b6f-44f5-bc5f-96004e1602fc_2048x2048.jpeg 848w, https://substackcdn.com/image/fetch/$s_!c3gB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F341f08ca-6b6f-44f5-bc5f-96004e1602fc_2048x2048.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!c3gB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F341f08ca-6b6f-44f5-bc5f-96004e1602fc_2048x2048.jpeg 1456w" sizes="100vw" loading="lazy"></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>We had our culprit. The theory was correct. The hunt was over.</p><p><strong>Finally, it provided the elegant solution.</strong> It immediately recommended a safe way to access the property: assign it a default value of &#8220;0&#8220; when passed <code>null,</code> and proceed to the IF condition only then. <br><br>The existing IF condition was replaced by the below:</p><pre><code><code>const firstVariant = item.node.variants.edges[0]?.node; const compareAtPrice = firstVariant?.compareAtPrice?.amount ?? 0; // Set default to 0 if null const price = firstVariant?.price?.amount ?? 0; if (compareAtPrice &gt; price) {</code></code></pre><h4><strong>The Outcome: Support That Just Works</strong></h4><p>The result? From diagnosis to the entire fix was completed in <strong>under five minutes</strong>.</p><p>The Wishlist button now works flawlessly, ensuring their customers enjoy the seamless shopping experience they expect.</p><p>This incident is a perfect example of our support philosophy. AI isn't a replacement for expertise; it's a powerful enabler. By using AI as a co-pilot, we empower our skilled team to achieve business goals faster. It allows us to accelerate debugging, pinpoint issues with incredible speed, and deliver the fast, effective support that helps our clients succeed.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://stories.getswym.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Swym Stories! Subscribe for free to receive new posts and support our work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Scalability Doesn’t Start with Infra — It Starts with a Strong Schema Foundation]]></title><description><![CDATA[Think like a Gardener - Build fast, but prune and structure as you go.]]></description><link>https://stories.getswym.com/p/scalability-doesnt-start-with-infra</link><guid isPermaLink="false">https://stories.getswym.com/p/scalability-doesnt-start-with-infra</guid><dc:creator><![CDATA[Supritha]]></dc:creator><pubDate>Mon, 21 Jul 2025 04:24:26 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Y-s8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa95388e1-3b0e-43f8-b5cd-16349add19fd_866x858.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>&#127961;&#65039; <strong>The Skyscraper Analogy Expanded: A Lesson in Fragile Growth</strong></p><p>Imagine a team of ambitious engineers hired to build a skyscraper in record time. Their focus?</p><ul><li><p>&#128640; <em>&#8220;Let&#8217;s go taller &#8212; add 30 more floors!&#8221;</em></p></li><li><p>&#9889; <em>&#8220;Install high-speed elevators that reach the top in seconds!&#8221;</em></p></li><li><p>&#128188; <em>&#8220;Let&#8217;s make space for 10,000 people to work inside!&#8221;</em></p></li></ul><p>From the outside, it looks like innovation and progress. But here&#8217;s what they <em>missed</em>:</p><blockquote><p>&#129521; <strong>The foundation is barely reinforced.</strong><br>It wasn&#8217;t designed to handle even half the load they&#8217;re now pushing.</p></blockquote><p>So, what happens?</p><ul><li><p>Hairline <strong>cracks appear</strong> in the walls.</p></li><li><p>Some floors begin to <strong>tilt</strong> under uneven stress.</p></li><li><p>Elevators start <strong>jamming</strong> because the building is shifting.</p></li></ul><p>Despite the cutting-edge materials, smart design of the top floors, and fast construction &#8212; the entire structure becomes dangerous.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Y-s8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa95388e1-3b0e-43f8-b5cd-16349add19fd_866x858.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Y-s8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa95388e1-3b0e-43f8-b5cd-16349add19fd_866x858.png 424w, https://substackcdn.com/image/fetch/$s_!Y-s8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa95388e1-3b0e-43f8-b5cd-16349add19fd_866x858.png 848w, https://substackcdn.com/image/fetch/$s_!Y-s8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa95388e1-3b0e-43f8-b5cd-16349add19fd_866x858.png 1272w, https://substackcdn.com/image/fetch/$s_!Y-s8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa95388e1-3b0e-43f8-b5cd-16349add19fd_866x858.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Y-s8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa95388e1-3b0e-43f8-b5cd-16349add19fd_866x858.png" width="590" height="584.5496535796767" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a95388e1-3b0e-43f8-b5cd-16349add19fd_866x858.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:858,&quot;width&quot;:866,&quot;resizeWidth&quot;:590,&quot;bytes&quot;:1500675,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://suprithapapanna.substack.com/i/168824283?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa95388e1-3b0e-43f8-b5cd-16349add19fd_866x858.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!Y-s8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa95388e1-3b0e-43f8-b5cd-16349add19fd_866x858.png 424w, https://substackcdn.com/image/fetch/$s_!Y-s8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa95388e1-3b0e-43f8-b5cd-16349add19fd_866x858.png 848w, https://substackcdn.com/image/fetch/$s_!Y-s8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa95388e1-3b0e-43f8-b5cd-16349add19fd_866x858.png 1272w, https://substackcdn.com/image/fetch/$s_!Y-s8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa95388e1-3b0e-43f8-b5cd-16349add19fd_866x858.png 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><figcaption class="image-caption">Weak Foundation</figcaption></figure></div><h2>&#129513; Software Analogy: Scaling Infrastructure Without Schema</h2><p>Now, switch to software.</p><p>The equivalent of "building more floors" is:</p><ul><li><p>Adding <strong>more services</strong> (e.g. microservices).</p></li><li><p>Deploying <strong>Kubernetes clusters</strong>.</p></li><li><p>Adding <strong>more engineers</strong> to &#8220;scale up fast.&#8221;</p></li><li><p>Expanding <strong>APIs</strong>, <strong>data pipelines</strong>, or <strong>regions</strong>.</p></li></ul><p>But underneath it all, they never <strong>defined a strong schema</strong> &#8212; a structured, validated data model that all services agree on.</p><h3>&#128293; The cracks in this software skyscraper:</h3><ul><li><p><strong>Silent overwrites</strong>: One service changes <code>price</code> for a flash sale; another for a discount &#8212; one wins, one loses, no visibility.</p></li><li><p><strong>Schema drift</strong>: JSON blobs evolve differently in different services &#8212; nobody knows what the data really looks like anymore.</p></li><li><p><strong>Debugging chaos</strong>: &#8220;Where did this null come from? Who updated this field? Why is this product live in Canada with no inventory?&#8221;</p></li></ul><h2>&#9989; Real Scalability Begins with Schema + Reason</h2><p>To avoid this, systems need a <strong>schema-first</strong> and <strong>reason-aware</strong> architecture.</p><div><hr></div><h3>&#128313; Step 1: Define a Strong, Structured Schema</h3><p>Use schema validation tools like:</p><ul><li><p>&#129002; <strong>Malli</strong> for Clojure</p></li><li><p>&#128309; <strong>Zod</strong> for TypeScript</p></li><li><p>&#129000; <strong>Avro</strong> for data pipelines</p></li></ul><pre><code><code>(def Product
  [:map
   [:id string?]
   [:price [:map
            [:value number?]
            [:source [:enum :manual :promo :flash-sale]]]]
   [:title [:map
            [:value string?]
            [:source [:enum :default :seo :localization]]]]
   [:vendor string?]])</code></code></pre><p>&#128204; <strong>Benefits:</strong></p><ul><li><p>You know <strong>who</strong> made the change</p></li><li><p>You can <strong>enforce source-specific rules</strong></p></li><li><p>You <strong>prevent silent overwrites</strong></p></li></ul><div><hr></div><h3>&#128313; Step 2: Isolate Updates by Reason</h3><p>Now, each update must carry <strong>context</strong> &#8212; a reason code or intent.</p><pre><code><code>{
  "reason": "seo-title-optimization",
  "updates": {
    "title": {
      "value": "Top 10 Snowboards for 2025",
      "source": "seo"
    }
  }
}</code></code></pre><p>&#9989; With this structure, you can now:</p><ul><li><p>Allow only certain fields to be updated per reason</p></li><li><p>Reject updates that don&#8217;t align with purpose</p></li></ul><p>&#129504; <strong>Think of this like:</strong></p><blockquote><p>No one&#8217;s allowed to enter a room without stating why they&#8217;re there.</p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mVET!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17f804ee-474c-41a5-9895-bba245386059_1472x832.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mVET!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17f804ee-474c-41a5-9895-bba245386059_1472x832.jpeg 424w, https://substackcdn.com/image/fetch/$s_!mVET!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17f804ee-474c-41a5-9895-bba245386059_1472x832.jpeg 848w, https://substackcdn.com/image/fetch/$s_!mVET!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17f804ee-474c-41a5-9895-bba245386059_1472x832.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!mVET!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17f804ee-474c-41a5-9895-bba245386059_1472x832.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mVET!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17f804ee-474c-41a5-9895-bba245386059_1472x832.jpeg" width="1456" height="823" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/17f804ee-474c-41a5-9895-bba245386059_1472x832.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:823,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:193048,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://suprithapapanna.substack.com/i/168824283?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17f804ee-474c-41a5-9895-bba245386059_1472x832.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!mVET!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17f804ee-474c-41a5-9895-bba245386059_1472x832.jpeg 424w, https://substackcdn.com/image/fetch/$s_!mVET!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17f804ee-474c-41a5-9895-bba245386059_1472x832.jpeg 848w, https://substackcdn.com/image/fetch/$s_!mVET!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17f804ee-474c-41a5-9895-bba245386059_1472x832.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!mVET!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17f804ee-474c-41a5-9895-bba245386059_1472x832.jpeg 1456w" sizes="100vw" loading="lazy"></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><figcaption class="image-caption">Reason for every update is crystal clear</figcaption></figure></div><div><hr></div><h3>&#128313; Step 3: Versioning and Validation</h3><p>Schemas evolve. Build with versioning from day one.</p><pre><code><code>(def ProductV2
  [:merge Product
   [:map
    [:inventory [:map
                 [:available boolean?]
                 [:quantity pos-int?]]]]])</code></code></pre><p>Your system can now:</p><ul><li><p>Enforce rules by schema version</p></li><li><p>Handle backward-compatible fallbacks</p></li><li><p>Alert teams when consumers use outdated formats</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Yscq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe97d582c-82c5-41d4-839d-8466ba7317bb_1472x832.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Yscq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe97d582c-82c5-41d4-839d-8466ba7317bb_1472x832.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Yscq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe97d582c-82c5-41d4-839d-8466ba7317bb_1472x832.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Yscq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe97d582c-82c5-41d4-839d-8466ba7317bb_1472x832.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Yscq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe97d582c-82c5-41d4-839d-8466ba7317bb_1472x832.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Yscq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe97d582c-82c5-41d4-839d-8466ba7317bb_1472x832.jpeg" width="1456" height="823" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e97d582c-82c5-41d4-839d-8466ba7317bb_1472x832.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:823,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:84641,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://suprithapapanna.substack.com/i/168824283?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe97d582c-82c5-41d4-839d-8466ba7317bb_1472x832.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!Yscq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe97d582c-82c5-41d4-839d-8466ba7317bb_1472x832.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Yscq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe97d582c-82c5-41d4-839d-8466ba7317bb_1472x832.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Yscq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe97d582c-82c5-41d4-839d-8466ba7317bb_1472x832.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Yscq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe97d582c-82c5-41d4-839d-8466ba7317bb_1472x832.jpeg 1456w" sizes="100vw" loading="lazy"></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><figcaption class="image-caption">Schema Version Evolution</figcaption></figure></div><h2>&#10060; Why Infra Isn&#8217;t the Fix</h2><p>Scaling infrastructure doesn&#8217;t solve these <strong>fundamental modeling failures</strong>:</p><ul><li><p>Race conditions due to overlapping updates</p></li><li><p>Misleading dashboards and metrics</p></li><li><p>Bugs in prod that no one can trace back</p></li></ul><p>&#129521; <strong>Infra scales operations. But if your foundation is broken, it just scales the chaos.</strong></p><h2>&#9889;&#65039; <strong>Speed Is a Feature &#8212; But So Is Stability</strong></h2><p>As a startup, there&#8217;s relentless pressure to <strong>move fast</strong>:</p><ul><li><p>Ship the MVP.</p></li><li><p>Prove traction.</p></li><li><p>Get user feedback.</p></li><li><p>Iterate rapidly.</p></li></ul><p>In this race, it&#8217;s easy &#8212; and often encouraged &#8212; to <strong>skip the architectural &#8220;nice-to-haves&#8221;</strong> like schema design, validation layers, traceability, or contract enforcement between services. After all:</p><blockquote><p>&#8220;We&#8217;ll fix it when it breaks.&#8221;<br>&#8220;We need speed now; structure can come later.&#8221;</p></blockquote><p>And in the early days, this approach seems to <em>work</em>:</p><ul><li><p>Features get shipped in days.</p></li><li><p>APIs evolve freely.</p></li><li><p>Bugs are fixed quickly by the people who built them.</p></li></ul><p>But here's the hidden cost:</p><blockquote><p><strong>You're accumulating invisible structural debt.</strong></p></blockquote><div><hr></div><h2>&#129521; <strong>The Building Blocks You're Skipping</strong></h2><p>What gets skipped?</p><ul><li><p>&#9989; <strong>Schema design</strong>: No contract for what data should look like.</p></li><li><p>&#9989; <strong>Ownership boundaries</strong>: No clarity on which service owns what field.</p></li><li><p>&#9989; <strong>Reason for change</strong>: No traceability for why a field was updated.</p></li><li><p>&#9989; <strong>Validation rules</strong>: Inconsistent assumptions across services.</p></li><li><p>&#9989; <strong>Versioning</strong>: Every consumer assumes they understand the shape of the data.</p></li></ul><p>These are not gold-plating. These are the <strong>load-bearing walls</strong> of your future system.</p><div><hr></div><h2>&#128680; What Happens When You Scale</h2><p>As usage increases, or your team grows:</p><ol><li><p><strong>Engineers run into each other</strong>:</p><ul><li><p>&#8220;Why did my service break after your deployment?&#8221;</p></li><li><p>&#8220;Who changed this product title? I can't tell from logs.&#8221;</p></li></ul></li><li><p><strong>Customers see broken behavior</strong>:</p><ul><li><p>Flash sales priced incorrectly.</p></li><li><p>Products unavailable but still visible.</p></li></ul></li><li><p><strong>Your team gets slower</strong>:</p><ul><li><p>Every new engineer has to <em>reverse-engineer</em> what the system expects.</p></li><li><p>Debugging takes hours because there&#8217;s no audit trail.</p></li><li><p>New features introduce regressions in unpredictable places.</p></li></ul></li></ol><p>You started fast &#8212; but now you're <strong>spending that speed as interest on your foundation debt</strong>.</p><div><hr></div><h2>&#129657; <strong>Patching Over Cracks Doesn&#8217;t Work</strong></h2><p>When this happens, many startups reach for quick patches:</p><ul><li><p>More tests.</p></li><li><p>More rules in code.</p></li><li><p>More monitoring.</p></li></ul><p>But if the foundation is inconsistent &#8212; if your data can&#8217;t be trusted &#8212; then these patches only paper over <strong>systemic instability</strong>.</p><blockquote><p>Imagine trying to reinforce a skyscraper with duct tape. That&#8217;s what patching feels like without revisiting your core data model.</p></blockquote><div><hr></div><h2>&#9989; The Balanced Approach: Build Fast, Revisit Foundations</h2><p>You don&#8217;t need to design the perfect system on day one. But you <em>do</em> need to:</p><ul><li><p>&#127793; Start with minimal, clear schemas &#8212; even if lightweight.</p></li><li><p>&#129504; Capture the <strong>reason</strong> behind each change early.</p></li><li><p>&#129517; Make traceability a <strong>first-class concern</strong>.</p></li><li><p>&#128260; Revisit and refine your building blocks <em>regularly</em>.</p></li></ul><p>Treat it like a <strong>gardener&#8217;s mindset</strong>, not an architect&#8217;s fantasy:</p><ul><li><p>Build fast, but prune and structure as you go.</p></li><li><p>Let your data grow, but don&#8217;t let it grow wild.</p></li></ul><div><hr></div><h2>&#127937; Final Word</h2><blockquote><p>&#9888;&#65039; <strong>Moving fast on a broken foundation feels like speed &#8212; until it turns into chaos.</strong></p></blockquote><p>If you're serious about scalability, customer experience, and developer velocity, then <strong>schema design, ownership clarity, and structured evolution are not optional. </strong>It is <strong>one of the important core blocks of building scalable software.</strong></p><p>They're the rails that let your train go fast <em>without derailing.</em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://stories.getswym.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Swym Stories! Subscribe for more stories from the team!</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item></channel></rss>