<?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[v1Labs]]></title><description><![CDATA[Sharpen your ability to evolve interfaces with real examples from the world wide web.]]></description><link>https://newsletter.v1labs.com</link><image><url>https://substackcdn.com/image/fetch/$s_!Sq_n!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9940dc6e-c9eb-4bf6-8f4a-aff923db9da5_512x512.png</url><title>v1Labs</title><link>https://newsletter.v1labs.com</link></image><generator>Substack</generator><lastBuildDate>Mon, 06 Apr 2026 05:34:43 GMT</lastBuildDate><atom:link href="https://newsletter.v1labs.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Dane Lyons]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[danelyons@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[danelyons@substack.com]]></itunes:email><itunes:name><![CDATA[Dane Lyons]]></itunes:name></itunes:owner><itunes:author><![CDATA[Dane Lyons]]></itunes:author><googleplay:owner><![CDATA[danelyons@substack.com]]></googleplay:owner><googleplay:email><![CDATA[danelyons@substack.com]]></googleplay:email><googleplay:author><![CDATA[Dane Lyons]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Racing Against AI: Rethinking Intellectual Property ]]></title><description><![CDATA[Innovating in 2025 (and beyond)&#8212;in 179 words &#128168;]]></description><link>https://newsletter.v1labs.com/p/racing-against-ai-rethinking-intellectual</link><guid isPermaLink="false">https://newsletter.v1labs.com/p/racing-against-ai-rethinking-intellectual</guid><dc:creator><![CDATA[Dane Lyons]]></dc:creator><pubDate>Sun, 18 May 2025 18:04:49 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!jJ9_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd18f7761-1299-408e-9672-fdbc2aa083cf_1456x816.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_!jJ9_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd18f7761-1299-408e-9672-fdbc2aa083cf_1456x816.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jJ9_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd18f7761-1299-408e-9672-fdbc2aa083cf_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!jJ9_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd18f7761-1299-408e-9672-fdbc2aa083cf_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!jJ9_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd18f7761-1299-408e-9672-fdbc2aa083cf_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!jJ9_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd18f7761-1299-408e-9672-fdbc2aa083cf_1456x816.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jJ9_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd18f7761-1299-408e-9672-fdbc2aa083cf_1456x816.png" width="1456" height="816" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d18f7761-1299-408e-9672-fdbc2aa083cf_1456x816.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:816,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:740851,&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://newsletter.v1labs.com/i/163860751?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd18f7761-1299-408e-9672-fdbc2aa083cf_1456x816.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_!jJ9_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd18f7761-1299-408e-9672-fdbc2aa083cf_1456x816.png 424w, https://substackcdn.com/image/fetch/$s_!jJ9_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd18f7761-1299-408e-9672-fdbc2aa083cf_1456x816.png 848w, https://substackcdn.com/image/fetch/$s_!jJ9_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd18f7761-1299-408e-9672-fdbc2aa083cf_1456x816.png 1272w, https://substackcdn.com/image/fetch/$s_!jJ9_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd18f7761-1299-408e-9672-fdbc2aa083cf_1456x816.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>Artificial intelligence has dramatically shortened the gap between an original idea and a copycat. Previously, entrepreneurs relied on a natural head start&#8212;a window of time to turn a new idea into a business before &#8220;me too&#8221; rivals could catch up. Formal protections like patents often felt unnecessary or even harmful, since healthy competition fuels markets. I&#8217;ve always preferred cooperation with peers over operating in stealth or imposing artificial roadblocks.</p><p>Now, with AI able to rapidly replicate products, brands, and features, that head start can vanish in days or even hours. This challenges my belief that a head start alone is enough to incentivize innovation.</p><p>Given this shift, it&#8217;s worth asking: Are traditional patents the answer? If not, how should entrepreneurs protect and launch new ideas in a world where AI is rewriting the rules?</p><div><hr></div><p>While a head start can no longer protect new ideas, I&#8217;m still not convinced we need legal safeguards in most cases. Speed has a way of making ideas more derivative, and I believe there&#8217;s now an opportunity to become more collaborative and less competitive.</p><div><hr></div><div class="poll-embed" data-attrs="{&quot;id&quot;:319363}" data-component-name="PollToDOM"></div><div class="poll-embed" data-attrs="{&quot;id&quot;:319364}" data-component-name="PollToDOM"></div><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.v1labs.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 v1Labs! 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[Creating an online game with V0 – Grabby Aliens ]]></title><description><![CDATA[Part 2 &#8211; Iterations 11-20]]></description><link>https://newsletter.v1labs.com/p/creating-an-online-game-with-v0-grabby</link><guid isPermaLink="false">https://newsletter.v1labs.com/p/creating-an-online-game-with-v0-grabby</guid><dc:creator><![CDATA[Dane Lyons]]></dc:creator><pubDate>Wed, 05 Mar 2025 05:56:19 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Te3m!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c989601-0026-4b6f-9520-0b357f01ca3a_2224x1510.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>This post is a continuation of the development of an online game called <strong>Grabby Aliens</strong>. It is built with Vercel&#8217;s V0 tool for writing code with AI. <a href="https://newsletter.v1labs.com/p/creating-an-online-game-with-v0-by">Read iterations 1-10 here.</a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.v1labs.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://newsletter.v1labs.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>Iteration #11</h2><p>It&#8217;s time to start fixing gameplay balance and UX issues.</p><h3>Chat Input</h3><blockquote><p>Good work computer! Here are a few improvements:</p><ol><li><p>Let's try a 20x20 grid. The current grid size feels a little large.</p></li><li><p>When a ship is selected, let's make it orange and blink. Currently, the highlighting animation is a little too subtle.</p></li><li><p>The movement hints shouldn't extend across warp zones. So if a ship is on the top/middle of the quadrant, there shouldn't be a full movement hint at the bottom of the quadrant. This makes it visually confusing where the selected ship is. Maybe instead of a full movement hint across warp zones, a single sector could be highlighted to let players know they can warp and where the ship will come out on the other side.</p></li><li><p>When a ship warps, the direction should remain the same. Currently, if you warp from the top of the quadrant to the bottom, the ship flips direction and faces down. It should remain facing up.</p></li><li><p>Ships that aren't selected should be black. Let's also put the number of the ship on the ship so users can anticipate which ship will be selected next.</p></li></ol></blockquote><h3>V0 Output</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Te3m!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c989601-0026-4b6f-9520-0b357f01ca3a_2224x1510.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Te3m!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c989601-0026-4b6f-9520-0b357f01ca3a_2224x1510.png 424w, https://substackcdn.com/image/fetch/$s_!Te3m!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c989601-0026-4b6f-9520-0b357f01ca3a_2224x1510.png 848w, https://substackcdn.com/image/fetch/$s_!Te3m!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c989601-0026-4b6f-9520-0b357f01ca3a_2224x1510.png 1272w, https://substackcdn.com/image/fetch/$s_!Te3m!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c989601-0026-4b6f-9520-0b357f01ca3a_2224x1510.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Te3m!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c989601-0026-4b6f-9520-0b357f01ca3a_2224x1510.png" width="1456" height="989" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3c989601-0026-4b6f-9520-0b357f01ca3a_2224x1510.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:989,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:180273,&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://newsletter.v1labs.com/i/158184619?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c989601-0026-4b6f-9520-0b357f01ca3a_2224x1510.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_!Te3m!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c989601-0026-4b6f-9520-0b357f01ca3a_2224x1510.png 424w, https://substackcdn.com/image/fetch/$s_!Te3m!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c989601-0026-4b6f-9520-0b357f01ca3a_2224x1510.png 848w, https://substackcdn.com/image/fetch/$s_!Te3m!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c989601-0026-4b6f-9520-0b357f01ca3a_2224x1510.png 1272w, https://substackcdn.com/image/fetch/$s_!Te3m!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c989601-0026-4b6f-9520-0b357f01ca3a_2224x1510.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>Mixed results here. Missed part of the request for the move highlighting, and the visuals for active vs inactive ships could be better. The size of the grid feels better.</p><div><hr></div><h2>Iteration #12</h2><p>Let&#8217;s add an intro screen and continue cleaning things up. I don&#8217;t expect the design to get to a good spot with AI alone. I&#8217;ll do a mini design sprint to clean things up once we get the functionality in place.</p><h3>Chat Input</h3><blockquote><p>Improvements:</p><ol><li><p>It's a little frustrating when the game toggles to a new ship and you inadvertently move in the wrong direction. We might need to change the way switching works. For now, could we introduce the ability to undo the last move?</p></li><li><p>The warp movement hint is confusing. Could we remove that and go with the regular movement hint? It's still important that movement hints don't extend beyond the edges of the map.</p></li><li><p>Let's create an intro screen. The player should be able to choose between easy and hard mode.</p></li><li><p>The easy mode should have starting energy plus energy boosts equal to 130% of the number of sectors. Hard mode should make the total available energy equal to 110% of the number of sectors.</p></li><li><p>Inactive ships should have 75% opacity and the active ship should have 100% opacity.</p></li><li><p>The numbers on ships should be pushed 2 pixels towards the bottom of the ship to be more visually centered.</p></li></ol></blockquote><h3>V0 Output</h3><p>Playable but the grid is still slightly large for a casual gamer.</p><div><hr></div><h2>Iteration #13</h2><p>The annoying transition between ships where you accidentally move the newly selected ship has to be fixed.</p><h3>Chat Input</h3><blockquote><p>Looking good. Improvements:</p><ol><li><p>It would be nice to undo multiple moves. Can we save a history of 5 moves that can be undone if the player clicks undo multiple times?</p></li><li><p>The transition between ships is jarring. I think there should be a short "power up" sequence between switching ships. The newly activated ship should switch color, then every 50 milliseconds the movement hint should grow from 1 radius to the current radius.</p></li><li><p>While a ship is powering up, movement and actions should be disabled. Once a ship is fully powered up, the player regains access to all actions.</p></li><li><p>Let's remove the ability for players to combine ships. Instead, ships should be treated as obstacles. A player shouldn't be able to move into a sector containing a ship.</p></li><li><p>Resetting the game should take the player back to the intro screen.</p></li><li><p>Let's add a colonization streak. When a player wins by colonizing the quadrant, the streak should be incremented by 1. When they replay, the streak remains until they lose by failing to colonize the quadrant.</p></li></ol></blockquote><h3>V0 Output</h3><p>So much more usable and the animation for switching ships is pleasant! Also, somehow V0 reverted the logic where moving over a colonized sector causes war and reverts it to uncolonized. I actually think I like this better. Otherwise, the punishment for trying to convert an isolated sector in the middle of colonized sectors is too harsh. This way you waste energy moving over already colonized space, but it&#8217;s more reasonable.</p><p>I also introduced a colonization streak. It&#8217;s currently buggy. I&#8217;ll fix it next.</p><div><hr></div><h2>Iteration #14</h2><p>The grid needs to start smaller for new players and grow as the player clears quadrants.</p><h3>Chat Input</h3><blockquote><p>Improvements:</p><ol><li><p>If a player fails to colonize a quadrant, the streak should get reset to 0.</p></li><li><p>Let's try making the grid size variable. When the streak is 0, the grid should start out 10x10. Every time the streak goes up, increase the dimensions by 1. (when the streak gets reset, go back to 10x10)</p></li><li><p>The warping interaction is a little confusing. Let's make it so you can warp in any direction. The D-pad could have a single chevron from a 1 energy, 1 sector movement. Clicking on a double chevron button could be a 2 energy, 4 sector warp in that direction. The hotkey for warping should be shift+arrow.</p></li><li><p>Now that we have a more obvious transition between ships, let's go back to every ship having a different color. Remove the numbers on the ships. The active ship should have 100% opacity, the next ship to be active should have 75% opacity, then 50% opacity, then 25% opacity.</p></li><li><p>Let's remove the energy power-ups.</p></li><li><p>The max energy each ship gets should be the size divided by 2, rounded down. So a 10x10 grid has a size of 10 and each ship get's 5 energy before switching ships.</p></li></ol></blockquote><h3>V0 Output</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2Pts!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42b334a6-0e76-4632-86ee-f776766b7a31_2650x1524.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2Pts!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42b334a6-0e76-4632-86ee-f776766b7a31_2650x1524.png 424w, https://substackcdn.com/image/fetch/$s_!2Pts!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42b334a6-0e76-4632-86ee-f776766b7a31_2650x1524.png 848w, https://substackcdn.com/image/fetch/$s_!2Pts!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42b334a6-0e76-4632-86ee-f776766b7a31_2650x1524.png 1272w, https://substackcdn.com/image/fetch/$s_!2Pts!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42b334a6-0e76-4632-86ee-f776766b7a31_2650x1524.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2Pts!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42b334a6-0e76-4632-86ee-f776766b7a31_2650x1524.png" width="1456" height="837" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/42b334a6-0e76-4632-86ee-f776766b7a31_2650x1524.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:837,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:600406,&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://newsletter.v1labs.com/i/158184619?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42b334a6-0e76-4632-86ee-f776766b7a31_2650x1524.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_!2Pts!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42b334a6-0e76-4632-86ee-f776766b7a31_2650x1524.png 424w, https://substackcdn.com/image/fetch/$s_!2Pts!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42b334a6-0e76-4632-86ee-f776766b7a31_2650x1524.png 848w, https://substackcdn.com/image/fetch/$s_!2Pts!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42b334a6-0e76-4632-86ee-f776766b7a31_2650x1524.png 1272w, https://substackcdn.com/image/fetch/$s_!2Pts!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42b334a6-0e76-4632-86ee-f776766b7a31_2650x1524.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>This was a rough update. V0 made a mistake in a function and couldn&#8217;t figure out the victory or losing condition. I tried to clarify and add context 11 times before diving in and fixing the function manually. I&#8217;m fine with this. As the complexity of the code base increases, it&#8217;s expected that something goes off track.</p><div><hr></div><h2>Iteration #15</h2><p>I find it annoying that ships automatically switch to a seemingly random other ship. This makes the player feel out of control and kind of ruins the satisfaction of filling the space. Let&#8217;s try a version where the player chooses which ship to select next.</p><h3>Chat Input</h3><blockquote><p>Improvements:</p><ol><li><p>Instead of automatically switching to the next ship in the sequence, let's try a manual process to select the next ship. When a ship runs out of energy, the player should be able to choose which ship power up next wither by pressing the number corresponding to the ship or clicking on a ship.</p></li><li><p>When it's time for a player to select a ship, show the corresponding number over each available ship.</p></li><li><p>The ship that just ran out of energy should not be selectable as the next ship to power up. It should be greyed out to indicate it isn't selectable.</p></li><li><p>Make all ships black instead of different colors.</p></li><li><p>Slightly reduce the size of each ship.</p></li><li><p>Make the "Reset Game", "Disable Sound", and "Undo" buttons have white text.</p></li><li><p>Instead of "Disable Sound", could we use a sound icon when sound is on and a sound icon with a line through it to indicate sound is off?</p></li><li><p>Instead of "Undo" text, can we use an undo icon to represent that action? Also, the delete key should work as the undo hotkey.</p></li></ol></blockquote><h3>V0 Output</h3><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;26cf8fd1-0260-4ffe-954c-bb23eb87f5f3&quot;,&quot;duration&quot;:null}"></div><p>This is somewhat better than randomly selecting a new ship. I think I have a better idea&#8230;</p><div><hr></div><h2>Iteration #16</h2><p>What would the game look like without energy management? Let&#8217;s explore that.</p><h3>Chat Input</h3><blockquote><p>Improvements:</p><ol><li><p>Remove the notion of energy from the game. A ship's movement should not be restricted by energy.</p></li><li><p>The movement hint should simply be a 2-sector radius around the active ship.</p></li><li><p>Change the number of ships to 3. Instead of each ship being black, make them red, green, and blue.</p></li><li><p>When a ship colonizes space, make the colonization color the same as the ship's color.</p></li><li><p>Introduce a ship selection power up. For each ship, there should be 2 powerups of the same color. They should visually be small circles of the same color in random sectors. If a ship runs into one of these power ups, the ship with the corresponding color should become active.</p></li><li><p>The new loss condition should be a ship running into an obstacle or a previously colonized sector. This is inspired by Star Trek's Prime Directive. Ships are restricted from entering a colonized sector.</p></li><li><p>Ships warping should no longer require energy. A ship can warp in any direction for free. This means a ship as the following movements available. up 1, up 4, right 1, right, 4, down 1, down 4, left 1, left 4.</p></li></ol></blockquote><h3>V0 Output</h3><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;92d12a34-9f2b-4cd0-9f70-9c90e5767336&quot;,&quot;duration&quot;:null}"></div><p>Wow. This seems to solve a lot of issues and makes actions much more predictable.</p><div><hr></div><h2>Iteration #17</h2><p>I&#8217;m going to reduce the grid size and clean a few things up.</p><h3>Chat Input</h3><blockquote><p>Improvements:</p><ol><li><p>The movement hint should be 2 sectors in a straight line and 1 sector in each diagonal direction.</p></li><li><p>Let's scrap the current D-pad and rebuild it. There should be 8 buttons. move up 1 sector, warp up 4 sectors, move right 1 sector, warp right 4 sectors, move down 1 sector, warp down 4 sectors, move left 1 sector, warp left 4 sectors.</p></li><li><p>The power ups should have a 4 pixel semi-transparent outline of the same color.</p></li><li><p>The movement hint should be black with a 15% opacity.</p></li><li><p>Make the grid size of the first level 8x8.</p></li><li><p>Replace "Grid Size: 8x8" with "Level 1 (8x8)".</p></li><li><p>Remove the "Active Ship: 3" label.</p></li><li><p>Remove the "Current Streak: 0" label.</p></li></ol></blockquote><h3>V0 Output</h3><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;9069af0f-c927-40a9-b255-927aac82670d&quot;,&quot;duration&quot;:null}"></div><p>Great iteration! Now, the game is challenging and requires some creative problem-solving. You can intentionally paint yourself into a corner, then warp out of it.</p><div><hr></div><h2>Iteration #18</h2><p>I&#8217;ll introduce a medium difficulty level and change the grid size per level.</p><h3>Chat Input</h3><blockquote><p>Good work robot! The next batch of improvements:</p><ol><li><p>Introduce an easy, medium and difficult mode. Easy mode should be a 8x8 grid with red and blue ships. Medium should be 10x10 with red, blue, and green ships. Hard should be 12x12 with red, blue, green, and orange ships.</p></li><li><p>Instead of a victory screen when colonizing a quadrand, show an unobtrusive "Colonized Quadrant" message and increment a "Quadrants Colonized" score. Then immediately randomize and reset the quadrant. The game continues until the game over screen is triggered. Then reset the quadrands colonized score to 0 when the player restarts.</p></li><li><p>The power ups should have a 4 pixel border with the same color but 20% opacity.</p></li><li><p>The movement hints shouldn't wrap beyond the edges of the grid.</p></li><li><p>The size of each sector should be 50% bigger.</p></li></ol></blockquote><h3>V0 Output</h3><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;91d363b4-3457-4687-8160-ac93ef82197e&quot;,&quot;duration&quot;:null}"></div><p>Other than the colors and layout, this is a solid foundation for a game.</p><div><hr></div><h2>Iteration #19</h2><p>It&#8217;s time to start cleaning up a few of the design elements.</p><h3>Chat Input</h3><blockquote><p>Improvements:</p><ol><li><p>The large gaps between rows in the D-pad should be reduced so the vertical and horizontal gaps are the same. (roughly 8 pixels)</p></li><li><p>At the center of the D-pad, we should add an action inspired by the infinite improbability drive from Hitchhikers Guide to the Galaxy. It can use a question mark as an icon. If clicked, the ship teleports to a random sector. If that sector happens to be an obstacle or a colonized space, it triggers the lose condition. Otherwise, the player gets luck and can continue.</p></li><li><p>When a ship runs into a power up that triggers a ship switch, it should emit a sound effect like an elongated "whoooop".</p></li><li><p>For the red ship, use this color <code>#F7525C</code>.</p></li><li><p>For the blue ship, use this color <code>#5982ED</code>.</p></li><li><p>For the green ship, use this color <code>#16DB93</code>.</p></li><li><p>For the orange ship, use this color <code>#F29E4C</code>.</p></li></ol></blockquote><h3>V0 Output</h3><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;eddb45b4-b2c0-4f58-8e50-5112a6c6869a&quot;,&quot;duration&quot;:null}"></div><p>I really need to figure out how to enable sound effects in my video capture. The movement and ship power-up sounds are solid.</p><div><hr></div><h2>Iteration #20</h2><p>More design cleanup. Let&#8217;s see if we can create an animated end-game sequence.</p><h3>Chat Input</h3><blockquote><p>Improvements:</p><ol><li><p>The end game screen should be preceded by the dying ship doing a death spiral, rotating twice while shrinking to a scale of 0%. There should also be a "woo woo woo" sound effect starting at a medium pitch and lowering as the ship shrinks.</p></li><li><p>Instead of a question mark icon for the random warp, it would be better to use a more standard random icon. The text could also be red and pulse to indicate danger.</p></li><li><p>Rename "Quadrants Colonolized" to "Streak".</p></li><li><p>Move the "Colonized Sectors", "Streak", and "Mode" stats to the bottom of the screen. They could be displayed in the footer with small uppercased text with an 80% opacity.</p></li><li><p>The "Reset Game", "Undo", and Sound toggle should be in the top right corner of the screen.</p></li><li><p>The Grabby Alien's text should be in the top left corner.</p></li></ol></blockquote><h3>V0 Output</h3><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;05d4ce24-d931-4b88-a41e-fdf7330afa91&quot;,&quot;duration&quot;:null}"></div><p>Nice design iteration. The ship &#8220;death spiral&#8221; isn&#8217;t center mass which actually makes it look somewhat natural.</p><div><hr></div><h2>Conclusion</h2><p>This game is playable after 20 iterations. Here is the <a href="https://v0.dev/chat/fork-of-grabby-aliens-4rkTCiGyiCq?b=b_jwPlED0fMxz">V0 link</a> if you want to give it a test run or fork it.</p><p>At this stage, I don&#8217;t anticipate fundamentally changing the game. The next 10 iterations will likely be focused on small improvements. Leave a comment if you have any ideas. Thanks for reading!</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.v1labs.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://newsletter.v1labs.com/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item><item><title><![CDATA[Creating an online game with V0 by Vercel – Grabby Aliens ]]></title><description><![CDATA[Iterations 1-10]]></description><link>https://newsletter.v1labs.com/p/creating-an-online-game-with-v0-by</link><guid isPermaLink="false">https://newsletter.v1labs.com/p/creating-an-online-game-with-v0-by</guid><dc:creator><![CDATA[Dane Lyons]]></dc:creator><pubDate>Mon, 03 Mar 2025 04:45:51 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!SNMH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9e1ec2e-8e45-473a-8b58-71e6c9235d87_2748x1542.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>There are a lot of misconceptions about AI as it applies to software development and, I suspect, most other industries. While it is worrying to see a sudden sharp decline in developer jobs, I believe AI will ultimately be a good thing. I wish we had a better transition path to get us from here to there, but that&#8217;s a separate discussion. My goal with this post is to show how much AI relies on human input to create something meaningful. It&#8217;s a collaborative process that requires creativity and thoughtful input on the human side combined with AI magic on the computer side.</p><p>We&#8217;re going to create a single-player game that I&#8217;m currently calling &#8220;Grabby Aliens&#8221;. It is loosely based on the <a href="https://grabbyaliens.com/">Grabby Aliens hypothesis</a> that &#8220;Loud&#8221; alien races should be rapidly expanding their spheres of influence as they eat up space in the universe. Your goal as a grabby alien federation is to colonize a quadrant of space as quickly as possible. I&#8217;ll share my chat input and V0&#8217;s output for each iteration.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.v1labs.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 v1Labs! 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><h2>Iteration #1</h2><p>We&#8217;re starting with a blank canvas. V0 prefers creating a React app with Tailwind for styling, which works well for me. So, let&#8217;s use the defaults and dive right in.</p><h3>Chat Input</h3><blockquote><p>Let's build a strategic single-player board game you play as an alien federation colonizing a quadrant of space.</p><p>Let's start with a 50x50 grid and 3 ships. Each uncolonized grid square is white. When a grid becomes colonized, it turns green.</p><p>Setup:</p><ul><li><p>Each ship starts on a random square.</p></li><li><p>All grid squares are uncolonized (white).</p></li><li><p>The player starts with 10 "movement".</p></li></ul><p>Gameplay:</p><ul><li><p>Each turn, the player can select a ship and move it a number of squares equal to the remaining movement. Once they move the ship, their remaining available movement is updated.</p></li><li><p>When the player is done moving ships, they can press a "Colonize" button. Every ship will colonize all adjacent squares that weren't previously colonized. Then the movement is reset and the next turn starts.</p></li><li><p>When all squares are colonized, the game is over. The player sees an end-game screen that congratulates the player and displays the number of turns it took to colonize the quadrant.</p></li></ul></blockquote><h3>V0 Output</h3><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;c79e30bb-91ce-4987-8cb4-e840944f6956&quot;,&quot;duration&quot;:null}"></div><p>This might not seem crazy. The game is clunky and not yet playable. But V0 understood the input and created a fantastic first iteration. We can work with this.</p><div><hr></div><h2>Iteration #2</h2><p>There are a lot of potential improvements we can make. I&#8217;m not sure how many or how few instructions I should be giving V0 per iteration. I&#8217;ll start with 5-10 and see how that works.</p><h3>Chat Input</h3><blockquote><p>Nice! Let's make a few improvements:</p><ol><li><p>Let's rename "Movement" to "Energy". This will make the resource more generalizable and usable for other purposes later.</p></li><li><p>Instead of clicking on a ship in the nav, I think ship #1 should be selected by default. The player should be able to tab to cycle through ships. Or pressing the number corresponding to the ship should select it.</p></li><li><p>I think we should disable the ability to click on a grid square to move the ship. Instead, let's have the ship move 1 square at a time using arrow keys. Each movement should consume 1 energy.</p></li><li><p>When a ship moves into an uncolonized square, immediately colonize it.</p></li><li><p>It would be nice to show how far a ship can move when selected. Squares within range could have a semi-transparent black overlay.</p></li><li><p>The white border showing a selected ship is too subtle. Maybe the ship should slowly blink like a cursor.</p></li><li><p>The quadrant is a little too large. Let's try making it 30x30.</p></li><li><p>Hitting Enter should trigger the "Colonize &amp; Next Turn" action.</p></li></ol></blockquote><h3>V0 Output</h3><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;f39f920d-d80f-4137-ae07-6a1ba79c847b&quot;,&quot;duration&quot;:null}"></div><p>An overall great iteration. V0 understood every request. The blinking ship request is way too subtle, but I don&#8217;t expect a design masterpiece out of V0. We&#8217;re really just looking for raw functionality. Once we get close to a playable demo, I&#8217;ll start manually editing the CSS to improve the design.</p><div><hr></div><h2>Iteration #3</h2><p>There are a lot of directions we could go from here. Let&#8217;s try adding the ability to buy a ship with your energy.</p><h3>Chat Input</h3><blockquote><p>Nice work! Here are a few improvements:</p><ol><li><p>Let's make each square double the width and height of the current squares.</p></li><li><p>Try making the quadrant 40x20.</p></li><li><p>For every 20 colonized squares, increase energy by 1.</p></li><li><p>The map would be more interesting with random spaces that are not colonizable. Let's randomly make 2% of the squares obstacles that ships can't enter and can't be colonized. These squares should be transparent. (instead of white)</p></li><li><p>The player should be able to spend energy to buy additional ships. Let's try making it 15 energy to buy a ship. The new ship should be placed 1 square above the selected ship. If that would place the new ship off the map, try placing it to the right of the selected ship. If that puts the new ship off the map, then fall back to placing the new ship below the selected ship.</p></li><li><p>The "Reset Game" button isn't readable. Let's make the text black.</p></li><li><p>Remove the white border around the game.</p></li></ol></blockquote><h3>V0 Output</h3><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;1780f1bd-f4af-4ca4-b13b-ee77905df90b&quot;,&quot;duration&quot;:null}"></div><p>Only 3 iterations in and we already have a hint of a playable game. You have to decide if/when to buy an additional ship and you have to be careful not to paint yourself into a corner. It&#8217;s a bit of a grind but introducing more things you can do with energy should make the process of &#8220;painting the grid&#8221; more interesting.</p><div><hr></div><h2>Iteration #4</h2><p>We should try and make the map more visually interesting and see if we can add more things to do with energy. Maybe upgrading and scrapping ships.</p><h3>Chat Input</h3><blockquote><p>Looking good. Here are a few improvements:</p><ol><li><p>Change the grid size to 30x20.</p></li><li><p>Make fewer obstacles that are larger clusters of blank squares.</p></li><li><p>The range hint appears to be broken and only extends 1 square from the ship. It should extend the number of squares the ship could move this turn.</p></li><li><p>Let's increase the energy bonus to 1 additional energy for every 10 colonized squares.</p></li><li><p>The player should be able to scrap a ship for a temporary energy boost. Hitting the spacebar should scrap the currently selected ship. The energy for the current turn should go up by 10.</p></li><li><p>Ships should be upgradable. The cost of upgrading a ship should be 10 multiplied by the current ship level.</p></li><li><p>When ships colonize at the end of each turn, they should colonize a range equal to the ship level.</p></li></ol></blockquote><h3>V0 Output</h3><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;fd9e4c79-4fa1-4bc1-91d8-b2f2f54b3f48&quot;,&quot;duration&quot;:null}"></div><p>Now we&#8217;re getting somewhere! I like the new logic for the obstacles. It makes the maps feel a little more organic vs the dotted landscape. I&#8217;m not sure about the logic for adding a ship though. Ships are so expensive, and they appear next to an existing ship so it&#8217;s questionable how valuable they are. Maybe I should reduce the cost.</p><div><hr></div><h2>Iteration #5</h2><p>Let&#8217;s try to make it feel a little more like a game by improving the visuals and adding sound effects.</p><h3>Chat Input</h3><blockquote><p>Improvements:</p><ol><li><p>It's hard to see what ship is selected based on movement hints. Maybe it would be better to make the existing movement hint lighter in opacity. To make the selected ship more obvious, there could be an innner movement hint that is darker and a max of 2 squares in range.</p></li><li><p>The map shouldn't scroll horizontally.</p></li><li><p>Let's try making the cost to buy a new ship 8 energy.</p></li><li><p>Let's add 4 energy boosts the player can pick up with ships randomly added to a non-obstacle square at the beginning of the game.</p></li><li><p>Instead of making the ships circles, could we try triangles facing in the direction of the ship's last movement? (up by default)</p></li><li><p>Is it possible to add a sound effect when moving a ship?</p></li></ol></blockquote><h3>V0 Output</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!SNMH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9e1ec2e-8e45-473a-8b58-71e6c9235d87_2748x1542.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!SNMH!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9e1ec2e-8e45-473a-8b58-71e6c9235d87_2748x1542.png 424w, https://substackcdn.com/image/fetch/$s_!SNMH!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9e1ec2e-8e45-473a-8b58-71e6c9235d87_2748x1542.png 848w, https://substackcdn.com/image/fetch/$s_!SNMH!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9e1ec2e-8e45-473a-8b58-71e6c9235d87_2748x1542.png 1272w, https://substackcdn.com/image/fetch/$s_!SNMH!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9e1ec2e-8e45-473a-8b58-71e6c9235d87_2748x1542.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!SNMH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9e1ec2e-8e45-473a-8b58-71e6c9235d87_2748x1542.png" width="1456" height="817" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a9e1ec2e-8e45-473a-8b58-71e6c9235d87_2748x1542.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:817,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:246630,&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://newsletter.v1labs.com/i/158184619?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9e1ec2e-8e45-473a-8b58-71e6c9235d87_2748x1542.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_!SNMH!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9e1ec2e-8e45-473a-8b58-71e6c9235d87_2748x1542.png 424w, https://substackcdn.com/image/fetch/$s_!SNMH!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9e1ec2e-8e45-473a-8b58-71e6c9235d87_2748x1542.png 848w, https://substackcdn.com/image/fetch/$s_!SNMH!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9e1ec2e-8e45-473a-8b58-71e6c9235d87_2748x1542.png 1272w, https://substackcdn.com/image/fetch/$s_!SNMH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9e1ec2e-8e45-473a-8b58-71e6c9235d87_2748x1542.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>Visually, it looks nicer. I didn&#8217;t add a gameplay video because the navigation changes size while playing so the map annoyingly jumps up/down based on the size of the nav. I&#8217;m tempted to dive in and make some manual design adjustments. But let's continue to focus on functionality at this stage.</p><div><hr></div><h2>Iteration #6</h2><p>The still feels a little large. It can be a bit of a grind to clear all 486 squares. Maybe a smaller map and the ability to warp from one edge to the opposite edge will help.</p><h3>Chat Input</h3><blockquote><p>Improvements:</p><ol><li><p>Let's try a 25x15 grid size.</p></li><li><p>When ships colonize, the radius should be 1 plus the level.</p></li><li><p>Ships should start every turn moving 1 space forward for free.</p></li><li><p>Hitting an arrow key should scroll you up/down the page.</p></li><li><p>Moving a ship onto another ship should cause the ships to merge into 1 ship with the level being the sum of the previous ship levels.</p></li><li><p>It should be able to warp from the edges of the grid to the opposite edge if it isn't an obstacle.</p></li></ol></blockquote><h3>V0 Output</h3><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;61343d48-b217-4fb4-a329-e5112ae885a3&quot;,&quot;duration&quot;:null}"></div><p>Maybe this is too small of a map. I think an ideal number of moves required to clear the map should be somewhere in the 30 range. This took 9 moves to clear.</p><div><hr></div><h2>Iteration #7</h2><p>The binary colonized/uncolonized might be more interesting if we try to implement the <a href="https://en.wikipedia.org/wiki/Kardashev_scale">Kardashev scale</a> and have type I, II, and III civilizations.</p><h3>Chat Input</h3><blockquote><p>Improvements:</p><ol><li><p>Let's try a 30x20 grid.</p></li><li><p>The player should start with 2 ships instead of 3.</p></li><li><p>Instead of a binary colonized/uncolonized status. Let's take inspiration from the Kardashev scale and have type 1, 2, and 3 civilizations. The first time a square is colonized, it becomes a type 1 civilization (light green), the second time, it becomes a type 2 civilization (darker green), the third time it becomes a type 3 civilization (darkest green).</p></li><li><p>If a type 3 civilization is colonized, it creates war and the civilization is wiped out making the square uncolonized.</p></li><li><p>Instead of colonizing every square to win, let's have a colonization score. Every type 1 civilization adds 1 point, 2 points for type 2, and 3 points for type 3. To win, you need a score equal to the number of available squares multiplied by 2.</p></li><li><p>The large movement hint path should be slightly darker.</p></li></ol></blockquote><h2>V0 Output</h2><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;10d20290-879b-470e-ad3c-fc324c95fdb8&quot;,&quot;duration&quot;:null}"></div><p>This was a tricky iteration. Maybe I got a little lazy with the prompt because I&#8217;ve been getting great results with somewhat ambiguous instructions. In this case, I had to regenerate 3 times and add extra prompts to get the desired result. It would have taken way longer to write this code manually.</p><div><hr></div><h2>Iteration #8</h2><p>Having 3 types of civilizations is interesting, but it&#8217;s visually too noisy. I think we need to bring it back to the binary colonized/uncolonized mechanic. I do like the war mechanic to wipe out colonies that the player attempts to recolonize.</p><h3>Chat Input</h3><blockquote><p>Improvements:</p><ol><li><p>Let's go back to the binary colonized/uncolonized gameplay. If a ship enters or colonizes an uncolonized square, it flips to colonized.</p></li><li><p>If an already colonized square is colonized, it triggers a war and flips it back to uncolonized.</p></li><li><p>Instead of squares, let's call them sectors to use sci-fi terminology.</p></li><li><p>instead of a Colonization Score, let's call it "Colonized Sectors". To win you need to colonize all sectors.</p></li><li><p>To start prepping for mobile play, lets add a D-pad to right right of the grid for moving the ship.</p></li><li><p>Let's go back to starting with 3 ships.</p></li></ol></blockquote><h3>V0 Output</h3><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;ea9c4e79-3121-468d-9bef-386920c900fe&quot;,&quot;duration&quot;:null}"></div><p>The gameplay feels cleaner. Simpler is often better. As I narrow in on a gameplay style, I&#8217;ll do less exploration and more refining.</p><div><hr></div><h2>Iteration #9</h2><p>Buying and upgrading ships seems like an unnecessary distraction at this stage. Let&#8217;s simplify and make it so you only control a set number of ships.</p><h3>Chat Input</h3><blockquote><p>Improvements:</p><ol><li><p>Let's try removing the notion of turns. Instead, the player should have a finite amount of energy to colonize the quadrant. Without energy boosts, the player should start with roughly 75% of the energy needed to colonize the quadrant. Once all the energy powerups are collected, the player should have around 110% of the energy needed. (extra energy is needed for colonies that get wiped out)</p></li><li><p>If the player runs out of energy before colonizing the quadrant, they should get a game over screen.</p></li><li><p>Without turns, there is no longer a "Colonize &amp; End Turn" action. Please clean that code up and remove the button.</p></li><li><p>Let's remove the ability to buy and upgrade ships. Also please clean up the code.</p></li><li><p>The D-pad buttons should be a little larger with white backgrounds and black text.</p></li></ol></blockquote><h3>V0 Output</h3><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;b76aa8ea-d8e8-42d2-a9ae-34df4d554110&quot;,&quot;duration&quot;:null}"></div><p>This is feeling more puzzle-like. It feels like the right direction for this game. Let&#8217;s continue iterating in this direction.</p><div><hr></div><h2>Iteration #10</h2><p>Switching between ships is clunky. We also need at least 1 additional thing you can do with energy.</p><h3>Chat Input</h3><blockquote><p>Improvements:</p><ol><li><p>Disable the ability to toggle between ships. Instead, ships are automatically toggled every 10 energy.</p></li><li><p>Only show 1 movement hint that is between the 2 opacities. Base this off the 10 available movement per ship. If the remaining energy is less than a ships available movement, use the remaining energy for the hint.</p></li><li><p>Remove the ability to scrap a ship for energy.</p></li><li><p>Let's try 4 ships.</p></li><li><p>Add the ability for a ship to warp forward 4 sectors for 2 energy if the sector isn't obstructed. Use "w" as the hotkey. Also, add a button in the center of the D-pad with "w" to warp.</p></li><li><p>If a ship is next to an obstruction and the player tries to move in that direction, leave the ship in place but reorient it in the direction of the obstacle without spending energy. This could be useful for warping over obstacles.</p></li></ol></blockquote><h3>V0 Output</h3><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;441ad0c9-a2fa-4870-ad8f-c20e40cc22f4&quot;,&quot;duration&quot;:null}"></div><p>This is starting to feel solid. I occasionally need to clarify instructions, but the accuracy is really good. In this case, V0 was a little confused by the movement hint part. It only took 1 clarification to get it right.</p><div><hr></div><h2>Iterations 11-20 Coming Soon&#8230;</h2><p>I&#8217;d share a demo, but it&#8217;ll probably take another 10 iterations to get to a good spot. We&#8217;re still knee-deep in the weeds at this stage.</p><p>Feel free to share ideas. I&#8217;ll be happy to give attribution for any concept I incorporate. Thanks for reading!</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.v1labs.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 v1Labs! 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[{39} Email Etiquette, Live Coding & Free Trials]]></title><description><![CDATA[Featuring Arvid Kahl, Michael Aubry, and Olly &#128588;]]></description><link>https://newsletter.v1labs.com/p/39-email-etiquette-live-coding-and-free-trials</link><guid isPermaLink="false">https://newsletter.v1labs.com/p/39-email-etiquette-live-coding-and-free-trials</guid><dc:creator><![CDATA[Dane Lyons]]></dc:creator><pubDate>Wed, 22 Mar 2023 16:02:52 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!9rQ-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b2f1c65-9359-4244-bffa-f8df25f64283_1344x896.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_!9rQ-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b2f1c65-9359-4244-bffa-f8df25f64283_1344x896.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9rQ-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b2f1c65-9359-4244-bffa-f8df25f64283_1344x896.png 424w, https://substackcdn.com/image/fetch/$s_!9rQ-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b2f1c65-9359-4244-bffa-f8df25f64283_1344x896.png 848w, https://substackcdn.com/image/fetch/$s_!9rQ-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b2f1c65-9359-4244-bffa-f8df25f64283_1344x896.png 1272w, https://substackcdn.com/image/fetch/$s_!9rQ-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b2f1c65-9359-4244-bffa-f8df25f64283_1344x896.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9rQ-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b2f1c65-9359-4244-bffa-f8df25f64283_1344x896.png" width="1344" height="896" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1b2f1c65-9359-4244-bffa-f8df25f64283_1344x896.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:896,&quot;width&quot;:1344,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1216765,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!9rQ-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b2f1c65-9359-4244-bffa-f8df25f64283_1344x896.png 424w, https://substackcdn.com/image/fetch/$s_!9rQ-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b2f1c65-9359-4244-bffa-f8df25f64283_1344x896.png 848w, https://substackcdn.com/image/fetch/$s_!9rQ-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b2f1c65-9359-4244-bffa-f8df25f64283_1344x896.png 1272w, https://substackcdn.com/image/fetch/$s_!9rQ-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b2f1c65-9359-4244-bffa-f8df25f64283_1344x896.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><em>Subscribe to The Daily Subset and gain the skills needed to become a multiclass developer.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.v1labs.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://newsletter.v1labs.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>Email: Etiquette</h2><h4><a href="https://thebootstrappedfounder.com/">Arvid Kahl</a></h4><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!QfS7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3293426a-b931-4e42-849d-49c73c719a16_1170x775.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!QfS7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3293426a-b931-4e42-849d-49c73c719a16_1170x775.jpeg 424w, https://substackcdn.com/image/fetch/$s_!QfS7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3293426a-b931-4e42-849d-49c73c719a16_1170x775.jpeg 848w, https://substackcdn.com/image/fetch/$s_!QfS7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3293426a-b931-4e42-849d-49c73c719a16_1170x775.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!QfS7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3293426a-b931-4e42-849d-49c73c719a16_1170x775.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!QfS7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3293426a-b931-4e42-849d-49c73c719a16_1170x775.jpeg" width="1170" height="775" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3293426a-b931-4e42-849d-49c73c719a16_1170x775.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:775,&quot;width&quot;:1170,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:73732,&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;: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_!QfS7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3293426a-b931-4e42-849d-49c73c719a16_1170x775.jpeg 424w, https://substackcdn.com/image/fetch/$s_!QfS7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3293426a-b931-4e42-849d-49c73c719a16_1170x775.jpeg 848w, https://substackcdn.com/image/fetch/$s_!QfS7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3293426a-b931-4e42-849d-49c73c719a16_1170x775.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!QfS7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3293426a-b931-4e42-849d-49c73c719a16_1170x775.jpeg 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><blockquote><p>When you write cold emails and/or follow-ups, don&#8217;t do this.</p><p>My inbox is not for you to manipulate. Nobody&#8217;s is.</p><p>In fact, you even considering this is an extremely disrespectful perspective that I will remember &#8212; about you AND the business you represent.</p><p>All the Worst,<br>Arvid</p></blockquote><p><em><a href="https://twitter.com/arvidkahl/status/1638354946318794752">original tweet</a></em></p><p>Manipulative tactics in cold emails are the worst. I will never connect on LinkedIn with anyone who leads with <em>&#8220;I&#8217;m still waiting for your response&#8230;&#8221;. </em>It implies that I was obligated to respond to an initial cold outreach, and now someone is giving off annoyed project manager vibes. No thanks.</p><p>I&#8217;m not against cold outreach. My time is not so valuable that I&#8217;m unwilling to listen to a pitch. All I ask for is basic respect. Abusive language is not acceptable. I also don&#8217;t care for flowery compliments from someone I&#8217;ve never met.</p><p>LinkedIn could be part of the solution instead of perpetuating the problem. By focusing on an ignore/accept workflow, we aren&#8217;t giving people who use manipulative tactics feedback to improve their messaging. Here is an alternative workflow:</p><ol><li><p>When you are presented with the option to connect with someone, the same ignore/accept interface could be presented.</p></li><li><p>If you click ignore, there should be more options beyond the basic &#8220;I don&#8217;t know X&#8221;. Options could include &#8220;Manipulative outreach&#8221; and &#8220;Pitch not compelling&#8221;.</p></li><li><p>Instead of immediately confronting the person with a message like &#8220;Dane doesn&#8217;t want to connect because your pitch isn&#8217;t compelling&#8221;, just treat it as an ignore and give macro feedback via analytics. Maybe send a monthly recap &#8220;60% of your missed connections were caused by manipulative outreach last month&#8221;.</p></li></ol><div><hr></div><h2>Coding: Live</h2><h4><a href="https://www.michaelaubry.com/">Michael Aubry</a></h4><blockquote><p>If I built a micro SaaS and live-streamed the process and shipped within 24 hours would you tag along and support?</p></blockquote><p><em><a href="https://twitter.com/michaelaubry/status/1638508043687317504">original tweet</a></em></p><p>I like the idea of live-streaming the process of building an app. I don&#8217;t do it because it&#8217;s challenging enough to write code. Talking through my thought process and engaging with a community is beyond my single-tracked ability.</p><p>I haven&#8217;t really followed the latest Twitch developments. Maybe what I&#8217;m about to describe is possible on Twitch or another platform. But here is a system I&#8217;d be very interested in as a producer and consumer.</p><p>Live-streaming the process of building an app should be more of a team activity and less of a situation where you are looking over the shoulder of a developer. Imagine if 1-2 designers and 1-2 developers are collaborating. When someone takes a break from designing or coding, they become a commentator and engage with the community. They explain what they&#8217;ve just accomplished, talk about what other people are working on, get feedback from the audience, and get ready to dive back into their work.</p><p>While contributors take turns commentating, viewers can either follow the commentator&#8217;s POV or follow any of the contributor screens.</p><p>The entire process would allow people to focus on one thing at a time without compromising the viewer experience. I&#8217;m sure there are super developers capable of achieving all that while working solo. I find that to be mentally draining. It&#8217;ll be interesting to see how Michael approaches live coding.</p><div><hr></div><h2>SaaS: Free Trials</h2><h4><a href="https://www.roastmylandingpage.com/">Olly</a></h4><blockquote><p>You're on a SaaS landing page.</p><p>What convinces you to start a free trial?</p></blockquote><p><em><a href="https://twitter.com/helloitsolly/status/1638261696690114571">original tweet</a></em></p><p>I personally avoid free trials whenever possible. As a user, free trials often result in negative experiences:</p><ol><li><p>You use a product that solves an immediate need, then forget about it. Several months later, you realize the free trial expired, and you&#8217;ve been paying a monthly fee for something you aren&#8217;t using.</p></li><li><p>You invest time trying to solve a problem with a free trial but don&#8217;t get to the finish line before it expires. Then you&#8217;re in an awkward position where you aren&#8217;t sure if it solves your problem, but you&#8217;re forced to make a huge commitment to continue.</p></li></ol><p>I&#8217;m far more likely to sign up for a product with a freemium offering. That gives me as much time as I need to see if the solution works for my use case. Then I can upgrade when I&#8217;m ready to ramp up usage.</p><p>I even prefer a low-tier paid option over free trials. I&#8217;m not after a free lunch as a user. I don&#8217;t mind paying to receive value from a product. I just don&#8217;t like free trials.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.v1labs.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 <strong>The Daily Subset!</strong></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[{38} Valuations, Startup Skills & Note Taking]]></title><description><![CDATA[Featuring Alex Iskold, Alex Lieberman, and elvis &#128588;]]></description><link>https://newsletter.v1labs.com/p/38-valuations-startup-skills-and-note-taking</link><guid isPermaLink="false">https://newsletter.v1labs.com/p/38-valuations-startup-skills-and-note-taking</guid><dc:creator><![CDATA[Dane Lyons]]></dc:creator><pubDate>Tue, 21 Mar 2023 16:16:31 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!YzAp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84fe7ba5-ada7-42c8-895b-5865dbd929f8_1167x726.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_!YzAp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84fe7ba5-ada7-42c8-895b-5865dbd929f8_1167x726.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YzAp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84fe7ba5-ada7-42c8-895b-5865dbd929f8_1167x726.png 424w, https://substackcdn.com/image/fetch/$s_!YzAp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84fe7ba5-ada7-42c8-895b-5865dbd929f8_1167x726.png 848w, https://substackcdn.com/image/fetch/$s_!YzAp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84fe7ba5-ada7-42c8-895b-5865dbd929f8_1167x726.png 1272w, https://substackcdn.com/image/fetch/$s_!YzAp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84fe7ba5-ada7-42c8-895b-5865dbd929f8_1167x726.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!YzAp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84fe7ba5-ada7-42c8-895b-5865dbd929f8_1167x726.png" width="1167" height="726" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/84fe7ba5-ada7-42c8-895b-5865dbd929f8_1167x726.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:726,&quot;width&quot;:1167,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1321986,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!YzAp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84fe7ba5-ada7-42c8-895b-5865dbd929f8_1167x726.png 424w, https://substackcdn.com/image/fetch/$s_!YzAp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84fe7ba5-ada7-42c8-895b-5865dbd929f8_1167x726.png 848w, https://substackcdn.com/image/fetch/$s_!YzAp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84fe7ba5-ada7-42c8-895b-5865dbd929f8_1167x726.png 1272w, https://substackcdn.com/image/fetch/$s_!YzAp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84fe7ba5-ada7-42c8-895b-5865dbd929f8_1167x726.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><em>Subscribe to The Daily Subset and gain the skills needed to become a multiclass developer.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.v1labs.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://newsletter.v1labs.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>Valuations: Pre-Seed</h2><h4><a href="https://www.2048.vc/">Alex Iskold</a></h4><blockquote><p>Raising pre-seed at inflated valuations is terrible.</p><p>Day 0 companies should not be valued at $20M. There has been $0 value created.</p><p>Founders feel like heroes now, but it takes long time to build &amp; find product market fit and 99% of these will need more capital. </p><p>Bad idea!</p></blockquote><p>A pre-seed valuation of $20M is a bad idea. I was tempted to point out edge cases. But if the founders had a big enough previous win to demand such an inflated valuation, they should be bootstrapping.</p><p>Overvaluing is setting yourself up for hard times. If your v1 isn&#8217;t a home run, and it will likely fall short of lofty expectations, you&#8217;ll have a lot of angry people to deal with. Even modest success will feel like a failure. Raising that next round is going to be a problem.</p><p>On the other end of the spectrum, founders can&#8217;t be bullied into undervaluing their company. Just because you haven&#8217;t delivered value doesn&#8217;t mean you should be giving away half of everything for a small chunk of cash. If that&#8217;s the only option on the table, don&#8217;t take it. Find a contracting gig and build on nights and weekends.</p><p>Overall, I don&#8217;t like pre-seed valuations. There are other options, such as convertible notes, <a href="https://www.ycombinator.com/documents">Safe financing documents</a>, and I&#8217;ve recently been very intrigued by revenue-based financing. Bootstrapping is an even better option if you can find a way to make it work.</p><div><hr></div><h2>Startup: Skills</h2><h4><a href="https://intro.co/AlexLieberman">Alex Lieberman</a></h4><blockquote><p>I want to be the best at spinning up businesses &amp; finding product-market fit.</p><p>Skills I need to crush to get there:<br>- copywriting<br>- web design<br>- human psychology<br>- audience building<br>- paid acquisition<br>- customer discovery<br>- product development</p><p>What's missing?</p></blockquote><p>This is a solid list. If you have some degree of skill in these areas, you can certainly spin up a business. Or you can be exceptional in only a few areas and find co-founders with complementary skills.</p><p>One skill I&#8217;ve personally lacked that could be added to the list is door-to-door sales. Building an audience and paid acquisition are both great. But in the early days, you must knock on doors and talk to people. In addition to growing your user base and revenue, you learn so much about your product.</p><p>Don&#8217;t treat customer discovery as a process you do once that gives you marching orders for 5 years. You should always be discovering opportunities to do the most good for the most users.</p><div><hr></div><h2>AI: Note Taking</h2><h4><a href="https://www.promptingguide.ai/">elvis</a></h4><blockquote><p>ChatGPT is changing how I build things.</p><p>- I use it every day<br>- I mostly use it to generate coding tutorials<br>- I also use it to fix code<br>- When it cannot find a direct solution, it can generate hints<br>- It helps me augment and organize notes</p><p>It's really good at all things code.</p></blockquote><p>A lot of ChatGPT use cases aren&#8217;t that exciting to me. I still haven&#8217;t written a single line of code using an AI tool. But note-taking is a fascinating use case. I&#8217;m personally terrible at note-taking. I rely too much on memory. If something is important enough to remember, it&#8217;s important enough to prioritize.</p><p>The problem with memory is it&#8217;s too insular. Just because something from a conversation doesn&#8217;t make my personal list of priorities doesn&#8217;t mean that it&#8217;s not worthwhile. A simple conversation insight could be extremely meaningful to someone else on the team.</p><p>If I think about notes more as a collaboration tool, it&#8217;s something I&#8217;d like to get better at. AI could make note-taking easy. Imagine a Slack integration. At the beginning of every week, ChatGPT could share a condensed list of notes from all discussions happening in all public channels. I&#8217;d pay for that.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.v1labs.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 <strong>The Daily Subset!</strong></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[{37} North Star, Arrays & Tailwind]]></title><description><![CDATA[Featuring Karan Peri, Alamin, jhey, James Mishra, and Melanie Balke]]></description><link>https://newsletter.v1labs.com/p/37-north-star-arrays-and-tailwind</link><guid isPermaLink="false">https://newsletter.v1labs.com/p/37-north-star-arrays-and-tailwind</guid><dc:creator><![CDATA[Dane Lyons]]></dc:creator><pubDate>Tue, 07 Mar 2023 17:53:25 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Rzim!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e534cdc-c2d7-485d-9e06-b8b28ba37cf3_1167x726.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_!Rzim!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e534cdc-c2d7-485d-9e06-b8b28ba37cf3_1167x726.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Rzim!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e534cdc-c2d7-485d-9e06-b8b28ba37cf3_1167x726.png 424w, https://substackcdn.com/image/fetch/$s_!Rzim!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e534cdc-c2d7-485d-9e06-b8b28ba37cf3_1167x726.png 848w, https://substackcdn.com/image/fetch/$s_!Rzim!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e534cdc-c2d7-485d-9e06-b8b28ba37cf3_1167x726.png 1272w, https://substackcdn.com/image/fetch/$s_!Rzim!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e534cdc-c2d7-485d-9e06-b8b28ba37cf3_1167x726.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Rzim!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e534cdc-c2d7-485d-9e06-b8b28ba37cf3_1167x726.png" width="1167" height="726" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0e534cdc-c2d7-485d-9e06-b8b28ba37cf3_1167x726.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:726,&quot;width&quot;:1167,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1308419,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Rzim!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e534cdc-c2d7-485d-9e06-b8b28ba37cf3_1167x726.png 424w, https://substackcdn.com/image/fetch/$s_!Rzim!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e534cdc-c2d7-485d-9e06-b8b28ba37cf3_1167x726.png 848w, https://substackcdn.com/image/fetch/$s_!Rzim!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e534cdc-c2d7-485d-9e06-b8b28ba37cf3_1167x726.png 1272w, https://substackcdn.com/image/fetch/$s_!Rzim!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e534cdc-c2d7-485d-9e06-b8b28ba37cf3_1167x726.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><em>Subscribe to The Daily Subset and gain the skills needed to become a multiclass developer.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.v1labs.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://newsletter.v1labs.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>Analytics: North Star Metric</h2><h4><a href="https://www.linkedin.com/in/karanperi/">Karan Peri</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/karanperi/status/1629460235495538688&quot;,&quot;full_text&quot;:&quot;A common mistake I notice in my discussions with product teams is prioritizing Revenue as a north-star metric. This is usually a mistake as it's lagging and often beyond the team's control. Input levers with a clear relationship to output are far more effective.&quot;,&quot;username&quot;:&quot;karanperi&quot;,&quot;name&quot;:&quot;Karan Peri&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Sat Feb 25 12:36:08 +0000 2023&quot;,&quot;photos&quot;:[],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:0,&quot;like_count&quot;:6,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:false}" data-component-name="Twitter2ToDOM"></div><p>I&#8217;m in agreement. It&#8217;s tempting to make revenue the north star metric, but it is lagging.</p><p>When I led the product team at <a href="https://hackernoon.com/">HackerNoon</a>, our north star was <strong>&#8216;words published&#8217;</strong>. We also closely tracked <strong>&#8216;minutes of reading time&#8217;</strong>. By focusing on producing content and using reading time as a quality check, we created a space increasingly desirable for sponsors.</p><p>Creating value should be your primary focus. When the amount of value generated is disproportionate to the amount of captured value, invest some effort equalizing.</p><p>In our case, we experimented with pricing and various types of ads. The sophistication of our ads increased, and we captured more of the value we created.</p><p>If we had started focusing on maximizing revenue, we would have captured a higher percentage of a much less valuable pie.</p><div><hr></div><h2>Javascript: Array Methods</h2><h4><a href="https://twitter.com/iam_chonchol">Alamin</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/iam_chonchol/status/1630984244259586048&quot;,&quot;full_text&quot;:&quot;JavaScript Array methods &#128293; &quot;,&quot;username&quot;:&quot;iam_chonchol&quot;,&quot;name&quot;:&quot;Alamin&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Wed Mar 01 17:32:00 +0000 2023&quot;,&quot;photos&quot;:[{&quot;img_url&quot;:&quot;https://substackcdn.com/image/upload/w_1028,c_limit,q_auto:best/l_twitter_play_button_rvaygk,w_88/gamw20rkqhhndwmyr1mf&quot;,&quot;link_url&quot;:&quot;https://t.co/YpwNh9bRiU&quot;,&quot;alt_text&quot;:null}],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:260,&quot;like_count&quot;:1148,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:&quot;https://video.twimg.com/ext_tw_video/1630984200198434816/pu/vid/360x270/JRXWd4jVIG7vOfBc.mp4?tag=12&quot;,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>I always mix up unshift() and shift(). I just don&#8217;t find the method names intuitive. It seems to me that &#8220;shifting&#8221; should be &#8220;making space&#8221; for a new item to be added, not removing an item and the remaining items filling the void.</p><p>But what are you going to do? Creating a library to rename methods adds to the confusion. Until something better comes along, shifting removes the first element. Seeing this animated guide helps.</p><p>One thing to note about these methods is the return values. Whenever you remove an element, the return value is the element removed. Whenever you add elements, the return value is the new length of the array.</p><div><hr></div><h2>CSS: Anchor Positioning</h2><h4><a href="https://jhey.dev/links/">jhey</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/jh3yy/status/1632798436343857153&quot;,&quot;full_text&quot;:&quot;Future CSS Tip! &#128302;\n\nDo your tooltips get cut off by the window? &#128557;\n\nAnchor positioning will solve that &#9875;&#65039; No JavaScript needed &#128064;\n\n.tip{position-fallback:--flip;}\nposition-fallback --flip{\ntry{top:anchor(bottom);}\ntry{bottom:anchor(top);}\n}\n\nRead about it in my latest article &#128071; &quot;,&quot;username&quot;:&quot;jh3yy&quot;,&quot;name&quot;:&quot;jhey &#128296;&#128059;&#10024;&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Mon Mar 06 17:40:57 +0000 2023&quot;,&quot;photos&quot;:[{&quot;img_url&quot;:&quot;https://substackcdn.com/image/upload/w_1028,c_limit,q_auto:best/l_twitter_play_button_rvaygk,w_88/tzra3fnk5li2w4zjrsrs&quot;,&quot;link_url&quot;:&quot;https://t.co/IX0ZWpUBrs&quot;,&quot;alt_text&quot;:null}],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:105,&quot;like_count&quot;:711,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:&quot;https://video.twimg.com/ext_tw_video/1632798222304391173/pu/vid/540x540/vEGQ5yfuFyLrw87t.mp4?tag=12&quot;,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>I love that CSS is evolving to find ways to make javascript hacks obsolete. This is a particularly thorny JS hack. You have to account for several factors, including the position of the tooltip relative to the viewport. Small things like the triggering element being near the right edge vs the top/right edge can trip you up.</p><p>The CSS might not look pretty, but it&#8217;s much cleaner than JS solutions.</p><div><hr></div><h2>CSS: Tailwind</h2><h4><a href="https://www.jamesmishra.com/">James Mishra</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/rishmishra/status/1633101995920744450&quot;,&quot;full_text&quot;:&quot;Frontend devs on Twitter love to make fun of Tailwind.\n\nBut guess what?\n\nBeing mocked by an elitist is the frontend equivalent of winning a Grammy.&quot;,&quot;username&quot;:&quot;rishmishra&quot;,&quot;name&quot;:&quot;James Mishra&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Tue Mar 07 13:47:12 +0000 2023&quot;,&quot;photos&quot;:[],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:0,&quot;like_count&quot;:8,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>I&#8217;ve held off using Tailwind for various reasons. The biggest was the assumption that it is Bootstrap v2. I hate that Bootstrap tends to make apps look and feel the same. A lot of Tailwind apps also share a similar look and feel. But that is not due to the framework. Tailwind is extremely flexible. The common vibe is due to people not doing the work to customize their implementation.</p><p>James&#8217; comment about elitists hating on the framework is fair. The anti-semantic nature of Tailwind tends to turn off a lot of developers. While I certainly don&#8217;t count myself in the elitist bucket, the ugly code was probably my #2 deterrent.</p><p>Over the last few weeks, I&#8217;ve dipped my toes in the Tailwind pool. I&#8217;m liking how fast it is to rapidly put together a good-looking interface with a minimal amount of effort required to do things like write CSS and think about properly naming things.</p><p>Users don&#8217;t care how ugly your code is. They&#8217;re happy as long as your ugly code outputs something useful.</p><p>I do believe Tailwind introduces some interesting tech debt questions. A rapid implementation of Tailwind is great for launching a v1. It&#8217;s not necessarily great for building a maintainable codebase that is easy to improve. A component library and a design system can help. I&#8217;ll talk about that more in the future.</p><div><hr></div><h2>Product: Launch</h2><h4><a href="https://www.theemailmarketers.com/">Melanie Balke</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/Melanie_Balke/status/1633150574676803584&quot;,&quot;full_text&quot;:&quot;&#128640; Product Launch Email Schedule &#128640;\nBookmark this one!\n\n2 weeks before: Tease your new product &amp;amp; offer early access &#128187;\n\n1 week before: Announce the product &amp;amp; make them bookmark their calendar &#128467;\n\n1 day before: Remind your audience about the product launch &#127895;\n(1/2)&quot;,&quot;username&quot;:&quot;Melanie_Balke&quot;,&quot;name&quot;:&quot;Melanie Balke&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Tue Mar 07 17:00:14 +0000 2023&quot;,&quot;photos&quot;:[],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:0,&quot;like_count&quot;:0,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>I like this approach to scheduling communication leading up to a product launch. Updating too frequently before the 2 week mark risks your pings turning into noise. The 2 weeks, 1 week, and 1 day message strategy feels right to me.</p><p>I&#8217;ll test this out on my next launch. &#128640;</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.v1labs.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 <strong>The Daily Subset!</strong></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><p></p>]]></content:encoded></item><item><title><![CDATA[{36} Morphing Shapes, Reversibility & Prompting]]></title><description><![CDATA[Featuring Jared Spool, algorithmic, Martin Fowler, Damon Chen, and Nick St. Pierre]]></description><link>https://newsletter.v1labs.com/p/36-morphing-shapes-reversibility-prompting</link><guid isPermaLink="false">https://newsletter.v1labs.com/p/36-morphing-shapes-reversibility-prompting</guid><dc:creator><![CDATA[Dane Lyons]]></dc:creator><pubDate>Thu, 02 Mar 2023 23:33:33 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!yjAr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff25e59bb-7f12-4f2d-a609-9582ee45f8a2_1167x726.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_!yjAr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff25e59bb-7f12-4f2d-a609-9582ee45f8a2_1167x726.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!yjAr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff25e59bb-7f12-4f2d-a609-9582ee45f8a2_1167x726.png 424w, https://substackcdn.com/image/fetch/$s_!yjAr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff25e59bb-7f12-4f2d-a609-9582ee45f8a2_1167x726.png 848w, https://substackcdn.com/image/fetch/$s_!yjAr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff25e59bb-7f12-4f2d-a609-9582ee45f8a2_1167x726.png 1272w, https://substackcdn.com/image/fetch/$s_!yjAr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff25e59bb-7f12-4f2d-a609-9582ee45f8a2_1167x726.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!yjAr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff25e59bb-7f12-4f2d-a609-9582ee45f8a2_1167x726.png" width="1167" height="726" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f25e59bb-7f12-4f2d-a609-9582ee45f8a2_1167x726.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:726,&quot;width&quot;:1167,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1487587,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!yjAr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff25e59bb-7f12-4f2d-a609-9582ee45f8a2_1167x726.png 424w, https://substackcdn.com/image/fetch/$s_!yjAr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff25e59bb-7f12-4f2d-a609-9582ee45f8a2_1167x726.png 848w, https://substackcdn.com/image/fetch/$s_!yjAr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff25e59bb-7f12-4f2d-a609-9582ee45f8a2_1167x726.png 1272w, https://substackcdn.com/image/fetch/$s_!yjAr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff25e59bb-7f12-4f2d-a609-9582ee45f8a2_1167x726.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><em>Subscribe to The Daily Subset and gain the skills needed to become a multiclass developer.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.v1labs.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://newsletter.v1labs.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>NPS: Alternative</h2><h4><a href="https://www.uie.com/">Jared Spool</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/jmspool/status/1344105473210011649&quot;,&quot;full_text&quot;:&quot;Looking for an alternative to NPS that could tell you if your design changes are improving your user&#8217;s experiences? \n\nThis is an example of something that might work.\n\n(You&#8217;d want to tailor the answers to real problems you&#8217;re trying to address in the design work.) &quot;,&quot;username&quot;:&quot;jmspool&quot;,&quot;name&quot;:&quot;Jared Spool&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Wed Dec 30 02:18:11 +0000 2020&quot;,&quot;photos&quot;:[{&quot;img_url&quot;:&quot;https://pbs.substack.com/media/Eqc4bBCXMAEekTF.jpg&quot;,&quot;link_url&quot;:&quot;https://t.co/G2nejkJkHB&quot;,&quot;alt_text&quot;:null}],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:4,&quot;like_count&quot;:22,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:false}" data-component-name="Twitter2ToDOM"></div><p>People are generally pro-NPS (<a href="https://zapier.com/blog/nps-net-promoter-score/?utm_source=google&amp;utm_medium=cpc&amp;utm_campaign=gaw-usa-nua-search-blog-dsa&amp;utm_adgroup=&amp;utm_term=&amp;utm_content=_pcrid_636924846413_pkw__pmt__pdv_c_slid__pgrid_148973485332_ptaid_aud-809502765494:dsa-1906533069558_&amp;gclid=CjwKCAiAjPyfBhBMEiwAB2CCIvBhny5J0yKRnXWEoEpfkCcvwh5ynhytcwGzKU8wluvZTNFxwB0G4hoC1mAQAvD_BwE">net promoter score</a>), so this opinion is unpopular, but I don&#8217;t like it. It&#8217;s a low-effort survey that produces a weak signal for determining how well your product is performing.</p><p>Managers might be motivated to implement NPS because good results can justify a raise. If the results aren&#8217;t great, they could be used as an accountability tool to punish the product team and get people to work harder.</p><p>To be fair, feeding a manager&#8217;s ego isn&#8217;t the only way to use an NPS score. It is possible to follow up with detractors and do things to activate promoters. But I can almost guarantee this doesn&#8217;t happen in practice. I&#8217;ve clicked 0 on many NPS surveys over the years, and I&#8217;ve not had a single follow-up.</p><p>Why are we wasting time doing the easy thing that doesn&#8217;t tell us anything meaningful about our products? With a little more effort, we can ask much more meaningful questions.</p><p>Directionally, I like what Eastern Bank is doing by asking more specific questions. People often avoid giving negative feedback because they worry about potentially causing someone to lose their job. So I&#8217;d opt for more positive wording. Here is an example:</p><p><strong>Thanks for using our app! How can we improve? (check all that apply)</strong></p><ul><li><p>Faster load times</p></li><li><p>More intuitive instructions</p></li><li><p>More responsive customer service</p></li><li><p>Improved design or layout</p></li><li><p>New functionality (we&#8217;ll follow-up over SMS)</p></li><li><p>None of the above, great job &#128588;</p></li></ul><p>A survey like this would still be low-friction, but I&#8217;d be much happier to see it as a user. It would make me feel like my input is valued and I&#8217;m not just a number from 0-10. Product teams would also get a lot more value from the results.</p><div><hr></div><h2>SVG: Morphing Paths</h2><h4><a href="https://twitter.com/algoritmic">algorithmic</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/algoritmic/status/1541786470482149379&quot;,&quot;full_text&quot;:&quot;Smoothly interpolate between variations of SVG paths <a class=\&quot;tweet-url\&quot; href=\&quot;https://github.com/Minibrams/svg-path-morph\&quot;>github.com/Minibrams/svg-&#8230;</a> &quot;,&quot;username&quot;:&quot;algoritmic&quot;,&quot;name&quot;:&quot;algoritmic&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Tue Jun 28 14:11:54 +0000 2022&quot;,&quot;photos&quot;:[{&quot;img_url&quot;:&quot;https://substackcdn.com/image/upload/w_1028,c_limit,q_auto:best/l_twitter_play_button_rvaygk,w_88/fah7imiembo2o1vsixpu&quot;,&quot;link_url&quot;:&quot;https://t.co/7QFkBetaH1&quot;,&quot;alt_text&quot;:null}],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:309,&quot;like_count&quot;:2788,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:&quot;https://video.twimg.com/ext_tw_video/1541786374566707201/pu/vid/504x720/Fk8ei2scfrEsuPBC.mp4?tag=12&quot;,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>Animating paths in SVG isn&#8217;t too difficult, but there are caveats.</p><ol><li><p>A basic CSS animation with paths really only works when you transition between 2 paths. If you need to combine more than 2 paths, you&#8217;ll likely need a JS solution that involves iterating over points and doing the math to determine new x/y coordinates. I assume that&#8217;s what this library does.</p></li><li><p>I&#8217;ve found it difficult to work with paths that don&#8217;t have the same number of points. The transition is usually pretty janky.</p></li></ol><p>The demo looks smooth. I&#8217;ll have to think about use cases to test it out.</p><div><hr></div><h2>Product Philosophy: Reversibility</h2><h4><a href="https://www.martinfowler.com/">Martin Fowler</a> &amp; <a href="https://www.kentbeck.com/">Kent Beck</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/martinfowler/status/1627754143887593472&quot;,&quot;full_text&quot;:&quot;Extreme Programming provides an undo button, a game-changer for a single team - <span class=\&quot;tweet-fake-link\&quot;>@KentBeck</span> . But multiple teams need ways to manage inter-dependencies. I particularly like that he indicates the importance of Slack\n\n&quot;,&quot;username&quot;:&quot;martinfowler&quot;,&quot;name&quot;:&quot;Martin Fowler&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Mon Feb 20 19:36:44 +0000 2023&quot;,&quot;photos&quot;:[],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:25,&quot;like_count&quot;:141,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{&quot;url&quot;:&quot;https://tidyfirst.substack.com/p/scaling-extreme-programming-dependencies&quot;,&quot;image&quot;:&quot;https://substackcdn.com/image/fetch/w_1200,h_600,c_fill,f_jpg,q_auto:good,fl_progressive:steep,g_auto/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F982f94cf-5817-4624-b2f9-342de56d1e40_2238x2320.png&quot;,&quot;title&quot;:&quot;Scaling Extreme Programming: Dependencies&quot;,&quot;description&quot;:&quot;(This will be the first in a series of posts about XP. I&#8217;m publishing them here because the overlap with Tidy First? readers seems substantial &amp; the subscriber list is long. Please lmk if you&#8217;d rather I had channel/topic.) I have written before about Professor Zaninotto&#8217;s framework for understanding&#8230;&quot;,&quot;domain&quot;:&quot;tidyfirst.substack.com&quot;},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>I&#8217;m not an extreme programming expert. I&#8217;ve probably spent 1 week of time in an XP environment over the last 20 years. But I find Kent&#8217;s article to be intriguing because it hits on 2 key concepts that teams should pay more attention to:</p><ol><li><p><strong>Reversibility</strong> &#8211; It&#8217;s shocking to me how teams act as if every decision is permanent. If a decision actually is irreversible, take more time making sure you get it right. But the vast majority of decisions are reversible. For those decisions, you don&#8217;t need 100% confidence before taking the leap. Just do it, learn, and revert if needed. </p></li><li><p><strong>Dependencies</strong> &#8211; Kent really seems to embrace the idea that dependencies are just a fact of life when writing software. If your team is trying to move fast, you don&#8217;t always have the luxury of waiting for a design to finalize before you start building. He offers a lot of tips on working around that constraint such as merging teams to maximize communication or automating processes so people are less likely to become bottlenecks.<br><br>I think it&#8217;s possible to remove a lot of dependencies without going full-on waterfall for project management. I should probably write a whole blog post about this but fundamentally developers should try to work in small iteration cycles and avoid projects with outstanding dependencies.<br><br>For example, if a design is in progress and you are starting a new development cycle, avoid work related to the design. Go work on a project that doesn&#8217;t have dependencies. Bug fixing is always an option. If the design is ready when you start your next development cycle, pick it up and run with it.<br><br>An autonomous workflow is required to minimize dependencies. A manager friendly environment with tight deadlines, no &#8220;slack&#8221;, and a focus on utilization will be dependency heavy.</p></li></ol><div><hr></div><h2>Deployments: Bugs!</h2><h4><a href="https://testimonial.to/wall-of-love">Damon Chen</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/damengchen/status/1631422401010618369&quot;,&quot;full_text&quot;:&quot;Old me working in a big tech company: 'Oh no, it's a bug!'\n\nNew me working for my own startup: 'Let's just ship it!&quot;,&quot;username&quot;:&quot;damengchen&quot;,&quot;name&quot;:&quot;Damon Chen&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Thu Mar 02 22:33:05 +0000 2023&quot;,&quot;photos&quot;:[],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:0,&quot;like_count&quot;:0,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>There is no obvious answer for determining when a deployment should be held up by bugs or code cleanup. Sometimes you should delay and &#8220;do it right&#8221;. Other times it&#8217;s better to deploy. I agree with Damon. The more experienced I get, the more likely I am to ship a bug.</p><p>Here is a question you can ask yourself when you find a last minute bug <em>&#8220;Am I delaying the deploy purely because of my ego?&#8221;</em>. If you are trying to avoid the embarrassment of someone seeing something that isn&#8217;t perfect, then you should get over it and ship the bug. Only hold things up if there is a good reason not related to your ego. An example might be a broken form that prevents users from accomplishing a key task.</p><div><hr></div><h2>Generative Art: Additive Prompting</h2><h4><a href="https://www.youtube.com/watch?v=d56AWKOxG50&amp;ab_channel=NickSt.Pierre">Nick St. Pierre</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/nickfloats/status/1631346749297106958&quot;,&quot;full_text&quot;:&quot;Here's a compilation of my Midjourney threads so far, including tutorials on how I use my Additive Prompting framework to generate characters/models, design sets, &amp;amp; more.\n\nTaking today off Twitter to work on animations &amp;amp; visuals for my YouTube series (link in bio)\n\n&#129525;Thread &quot;,&quot;username&quot;:&quot;nickfloats&quot;,&quot;name&quot;:&quot;Nick St. Pierre&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Thu Mar 02 17:32:28 +0000 2023&quot;,&quot;photos&quot;:[{&quot;img_url&quot;:&quot;https://pbs.substack.com/media/FqOt15KXoBsijHs.jpg&quot;,&quot;link_url&quot;:&quot;https://t.co/ddWCxOR4cc&quot;,&quot;alt_text&quot;:null}],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:40,&quot;like_count&quot;:349,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>If you find it frustrating trying to achieve a certain effect with generative art and Midjourney in particular, check out this thread. Nick goes into exhaustive depth covering a lot of common use cases.</p><p>His examples are primarily high resolution photos. But many of the techniques could be used for generating illustrations, sketches, and other styles.</p>]]></content:encoded></item><item><title><![CDATA[{35} Build First, Generalists & Debugging]]></title><description><![CDATA[Featuring Brian, Andrew Gazdecki, Julie Zhuo, Safeyah, and Harold Sinnott]]></description><link>https://newsletter.v1labs.com/p/35-build-first-generalists-and-debugging</link><guid isPermaLink="false">https://newsletter.v1labs.com/p/35-build-first-generalists-and-debugging</guid><dc:creator><![CDATA[Dane Lyons]]></dc:creator><pubDate>Tue, 28 Feb 2023 18:00:11 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Ha6V!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3008bbc9-a714-41fe-865e-bd6d0a2ae98c_1167x726.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_!Ha6V!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3008bbc9-a714-41fe-865e-bd6d0a2ae98c_1167x726.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Ha6V!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3008bbc9-a714-41fe-865e-bd6d0a2ae98c_1167x726.png 424w, https://substackcdn.com/image/fetch/$s_!Ha6V!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3008bbc9-a714-41fe-865e-bd6d0a2ae98c_1167x726.png 848w, https://substackcdn.com/image/fetch/$s_!Ha6V!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3008bbc9-a714-41fe-865e-bd6d0a2ae98c_1167x726.png 1272w, https://substackcdn.com/image/fetch/$s_!Ha6V!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3008bbc9-a714-41fe-865e-bd6d0a2ae98c_1167x726.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Ha6V!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3008bbc9-a714-41fe-865e-bd6d0a2ae98c_1167x726.png" width="1167" height="726" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3008bbc9-a714-41fe-865e-bd6d0a2ae98c_1167x726.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:726,&quot;width&quot;:1167,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1560771,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Ha6V!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3008bbc9-a714-41fe-865e-bd6d0a2ae98c_1167x726.png 424w, https://substackcdn.com/image/fetch/$s_!Ha6V!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3008bbc9-a714-41fe-865e-bd6d0a2ae98c_1167x726.png 848w, https://substackcdn.com/image/fetch/$s_!Ha6V!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3008bbc9-a714-41fe-865e-bd6d0a2ae98c_1167x726.png 1272w, https://substackcdn.com/image/fetch/$s_!Ha6V!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3008bbc9-a714-41fe-865e-bd6d0a2ae98c_1167x726.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><em>Subscribe to The Daily Subset and gain the skills needed to become a multiclass developer.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.v1labs.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://newsletter.v1labs.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>Product Philosophy: Build First</h2><h4><a href="https://www.hungrywriter.xyz/">Brian</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/thebrianto/status/1629118963790782468&quot;,&quot;full_text&quot;:&quot;Don't wait until you 'win' so you can build in public.\n\nPeople love the journey not just the outcome.\n\nSo start building now :)&quot;,&quot;username&quot;:&quot;thebrianto&quot;,&quot;name&quot;:&quot;Brian To \&quot;Creating Simple ChatGPT Guide 4 Writers\&quot;&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Fri Feb 24 14:00:03 +0000 2023&quot;,&quot;photos&quot;:[],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:1,&quot;like_count&quot;:9,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:false}" data-component-name="Twitter2ToDOM"></div><p>This is my mood today. Stop worrying about all the bullshit you think you need to have in place in order to build. Just build.</p><p>You don&#8217;t need the perfect idea or someone to validate that it&#8217;s even a good idea. You don&#8217;t need a &#8216;win&#8217;. You don&#8217;t need the &#8216;right&#8217; tools or all the necessary skills neatly lined up. You don&#8217;t need a framework, a mentor, a support group, a sabbatical, or a degree.</p><p>There are very few legitimate reasons preventing most people from getting started. Once you get the ball rolling, you&#8217;re halfway there. Then think like a captain of a ship. Think about where you are headed and the micro-adjustments needed to get there.</p><p>I agree with Brian, learn to love the journey. Getting to a nice destination is great, but you&#8217;ve got to love the grind.</p><div><hr></div><h2>Scaling: Specialists vs Generalists</h2><h4><a href="https://acquire.com/">Andrew Gazdecki</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/agazdecki/status/1477307237278175232&quot;,&quot;full_text&quot;:&quot;Startup building &amp;amp; scaling 101...\n\nBuilding: just make it work\nScaling: make it better\n\nBuilding: get customers\nScaling: retain customers\n\nBuilding: process is nice to have\nScaling: process is mandatory\n\nBuilding: hire generalists\nScaling: hire specialists&quot;,&quot;username&quot;:&quot;agazdecki&quot;,&quot;name&quot;:&quot;Andrew Gazdecki&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Sat Jan 01 15:54:27 +0000 2022&quot;,&quot;photos&quot;:[],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:184,&quot;like_count&quot;:874,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>Hiring generalists as you create a startup and specialists as you scale is generally good advice. I agree with it in principle, but it is more nuanced.</p><p>What do generalists and specialists bring to the table?</p><ul><li><p><strong>Generalists discover opportunities</strong> &#8211; Generalists are able to combine knowledge from different domains in order to find new solutions. In other words, generalists are &#8220;innovators&#8221;.</p></li><li><p><strong>Specialists capture value</strong> &#8211; Once you&#8217;ve got a solution validated by the market, specialists are better at refining it. As the solution improves, you capture more and more value from the market.</p></li></ul><p>The problem with hiring generalists early and specialists to scale is you lose the ability to innovate. As the market evolves, competitors drive prices down, and needs shift. The well dries up.</p><p>It&#8217;s more sustainable to think about how you can maintain a team of generalists to continually discover opportunities. As solutions get validated, hire specialists to help scale. At every stage, you need a mixture of generalists and specialists. The composition should change based on product lifecycles.</p><p>As products reach the end of their lifecycles, they should go into &#8220;maintenance mode&#8221;. Reduce how much you invest in new development. Focus on performance, security, and stability.</p><p>Instead of laying off all the specialists who scaled the product up, shift people to new, freshly validated opportunities.</p><div><hr></div><h2>Team: Cross-functional Roles</h2><h4><a href="https://lg.substack.com/">Julie Zhuo</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/joulee/status/1375116163781292034&quot;,&quot;full_text&quot;:&quot;I've participated in too many conversations about the role of design / pm / eng to count. \n\nOf course there are differences. \n\nBut every tech manager role, regardless of discipline, ends up converging at higher levels. \n\nWhat does this mean for you as a manager? \n\nThread below &#128071;&quot;,&quot;username&quot;:&quot;joulee&quot;,&quot;name&quot;:&quot;Julie Zhuo&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Thu Mar 25 16:03:36 +0000 2021&quot;,&quot;photos&quot;:[],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:106,&quot;like_count&quot;:660,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>After my previous discussion about specialists vs generalists, I&#8217;d like to point out that nobody is purely a generalist or specialist. Even the most well-balanced generalist has specializations. And the most narrow specialist is not a one-trick pony.</p><p>This is a great thread by Julie that talks about the value of cross-functional roles in larger companies. Even with a high degree of specialization, I firmly believe that siloing people is bad. You don&#8217;t necessarily need people who are highly skilled at everything, that isn&#8217;t a reasonable expectation. But you do need highly skilled people who are focused on different problems to work together.</p><div><hr></div><h2>Oil Painting: Tips</h2><h4><a href="https://www.patreon.com/safeyahaljabouri">Safeyah</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/Aljabouri2/status/1627343377170669579&quot;,&quot;full_text&quot;:&quot;Oil painting tips I wish I knew sooner &#128396;&#127912; &quot;,&quot;username&quot;:&quot;Aljabouri2&quot;,&quot;name&quot;:&quot;Safeyah&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Sun Feb 19 16:24:30 +0000 2023&quot;,&quot;photos&quot;:[{&quot;img_url&quot;:&quot;https://substackcdn.com/image/upload/w_1028,c_limit,q_auto:best/l_twitter_play_button_rvaygk,w_88/rfqbyu67hguh8jfrczs8&quot;,&quot;link_url&quot;:&quot;https://t.co/fBRW6pDEuf&quot;,&quot;alt_text&quot;:null}],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:30,&quot;like_count&quot;:312,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:&quot;https://video.twimg.com/ext_tw_video/1627343123008438280/pu/vid/720x1280/ATMqogztVoJoHB6P.mp4?tag=12&quot;,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>Enough about building teams and just getting started. Here are a few oil painting tips by Safeyah. Watching artists manipulate color, light, and texture never gets old.</p><p>I&#8217;d love to see a redesigned coffee shop that functions like a colosseum where the gladiators are artists. Every morning people start their day by gathering in an open space to watch skilled people perform their craft.</p><p>It would be great for artists to get exposure in a community without the pressure to teach. Not everyone is a teacher. It would also energize and inspire the community.</p><div><hr></div><h2>Debugging: Flowchart</h2><h4><a href="https://twitter.com/HaroldSinnott">Harold Sinnott</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/HaroldSinnott/status/1627156056018223106&quot;,&quot;full_text&quot;:&quot;<span class=\&quot;tweet-fake-link\&quot;>#Python</span> Debugging Cheat Sheet\n\n<span class=\&quot;tweet-fake-link\&quot;>#DeepLearning</span> <span class=\&quot;tweet-fake-link\&quot;>#MachineLearning</span> <span class=\&quot;tweet-fake-link\&quot;>#ArtificialIntelligence</span> <span class=\&quot;tweet-fake-link\&quot;>#DataScience</span> <span class=\&quot;tweet-fake-link\&quot;>#Cybersecurity</span> <span class=\&quot;tweet-fake-link\&quot;>#BigData</span> <span class=\&quot;tweet-fake-link\&quot;>#Analytics</span> <span class=\&quot;tweet-fake-link\&quot;>#AI</span> <span class=\&quot;tweet-fake-link\&quot;>#IIoT</span> <span class=\&quot;tweet-fake-link\&quot;>#IoT</span> <span class=\&quot;tweet-fake-link\&quot;>#5G</span> <span class=\&quot;tweet-fake-link\&quot;>#RStats</span> <span class=\&quot;tweet-fake-link\&quot;>#JavaScript</span> <span class=\&quot;tweet-fake-link\&quot;>#ReactJS</span> <span class=\&quot;tweet-fake-link\&quot;>#FutureOfWork</span> <span class=\&quot;tweet-fake-link\&quot;>#CES2023</span> <span class=\&quot;tweet-fake-link\&quot;>#DataScientist</span> <span class=\&quot;tweet-fake-link\&quot;>#Linux</span> <span class=\&quot;tweet-fake-link\&quot;>#MWC23</span> <span class=\&quot;tweet-fake-link\&quot;>#Programming</span> <span class=\&quot;tweet-fake-link\&quot;>#100DaysofCode</span> <span class=\&quot;tweet-fake-link\&quot;>#NLP</span> <span class=\&quot;tweet-fake-link\&quot;>#SDGs</span> <span class=\&quot;tweet-fake-link\&quot;>#Tech</span> &quot;,&quot;username&quot;:&quot;HaroldSinnott&quot;,&quot;name&quot;:&quot;Harold Sinnott #MWC23&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Sun Feb 19 04:00:09 +0000 2023&quot;,&quot;photos&quot;:[{&quot;img_url&quot;:&quot;https://pbs.substack.com/media/FpTRzuCakAEBt78.jpg&quot;,&quot;link_url&quot;:&quot;https://t.co/Lh2TZlbzOi&quot;,&quot;alt_text&quot;:null}],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:14,&quot;like_count&quot;:22,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>I haven&#8217;t written Python in a while, but every programming language should have a debugging flowchart. I don&#8217;t know how often I&#8217;ve run into an error that makes no sense. I find myself pasting gibberish into a google search, desperately looking for a human explanation. This at least gives you enough context to narrow down most issues.</p><p>Looking at the error types, I have to say Python is reasonably intuitive. I don&#8217;t think I&#8217;d have a WTF reaction to any of error types in the chart. There are other <a href="https://www.tutorialsteacher.com/python/error-types-in-python">Python error types</a> I find less intuitive, such as a <a href="https://mail.python.org/pipermail/python-dev/2006-August/068429.html">GeneratorExit</a>.</p><p>Ultimately, programming languages should invest more in the developer experience. The vast majority of errors should be immediately obvious and recoverable within minutes of seeing an error message. A lot of progress has been made over the years. But we&#8217;re not there yet.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.v1labs.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 <strong>The Daily Subset!</strong></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[{34} Creator Economy, Web Components & Long-Tail Keywords]]></title><description><![CDATA[Featuring Zack Honarvar, Keval Shah, Lea Verou, Shripal Soni, and Jonny Geller]]></description><link>https://newsletter.v1labs.com/p/34-creator-economy-web-components</link><guid isPermaLink="false">https://newsletter.v1labs.com/p/34-creator-economy-web-components</guid><dc:creator><![CDATA[Dane Lyons]]></dc:creator><pubDate>Tue, 28 Feb 2023 01:51:01 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!v8pA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e09c8a5-9b8b-4f2b-805a-be4f7cf79857_1167x726.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_!v8pA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e09c8a5-9b8b-4f2b-805a-be4f7cf79857_1167x726.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!v8pA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e09c8a5-9b8b-4f2b-805a-be4f7cf79857_1167x726.png 424w, https://substackcdn.com/image/fetch/$s_!v8pA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e09c8a5-9b8b-4f2b-805a-be4f7cf79857_1167x726.png 848w, https://substackcdn.com/image/fetch/$s_!v8pA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e09c8a5-9b8b-4f2b-805a-be4f7cf79857_1167x726.png 1272w, https://substackcdn.com/image/fetch/$s_!v8pA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e09c8a5-9b8b-4f2b-805a-be4f7cf79857_1167x726.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!v8pA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e09c8a5-9b8b-4f2b-805a-be4f7cf79857_1167x726.png" width="1167" height="726" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1e09c8a5-9b8b-4f2b-805a-be4f7cf79857_1167x726.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:726,&quot;width&quot;:1167,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1307562,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!v8pA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e09c8a5-9b8b-4f2b-805a-be4f7cf79857_1167x726.png 424w, https://substackcdn.com/image/fetch/$s_!v8pA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e09c8a5-9b8b-4f2b-805a-be4f7cf79857_1167x726.png 848w, https://substackcdn.com/image/fetch/$s_!v8pA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e09c8a5-9b8b-4f2b-805a-be4f7cf79857_1167x726.png 1272w, https://substackcdn.com/image/fetch/$s_!v8pA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e09c8a5-9b8b-4f2b-805a-be4f7cf79857_1167x726.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><em>Subscribe to The Daily Subset and gain the skills needed to become a multiclass developer.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.v1labs.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://newsletter.v1labs.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>Creator: Culture</h2><h4><a href="https://www.onedayent.com/">Zack Honarvar</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/ZackHonarvar/status/1629018884815851520&quot;,&quot;full_text&quot;:&quot;I want to mention publicly that <span class=\&quot;tweet-fake-link\&quot;>@jackconte</span> is the one of the most thoughtful and warm hearted individuals I&#8217;ve ever met.\n\nHe&#8217;s an incredibly sharp founder and has built a company that arguably empowers more creators than any other. \n\nYou deserve your flowers, Jack &#128591;&#127997;&#10084;&#65039;&quot;,&quot;username&quot;:&quot;ZackHonarvar&quot;,&quot;name&quot;:&quot;Zack Honarvar&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Fri Feb 24 07:22:22 +0000 2023&quot;,&quot;photos&quot;:[],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:1,&quot;like_count&quot;:42,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:false}" data-component-name="Twitter2ToDOM"></div><p>I love what Patreon is doing to empower creators. It has never been easier to become a solopreneur, thanks to tools like Patreon.</p><p>One major hurdle I see with today&#8217;s creator economy is the high level of risk required to get started. Most people either need to have enough cash saved up to take the leap or work nights and weekends until they hit a critical milestone.</p><p>Both options tend to be a stressful deterrent. It kills me to imagine how many creators are stuck in soulless corporate jobs right now.</p><p>Why not build a company or a collective composed of creators? In order to join, you need to be some form of community builder. It can take the form of a newsletter, blog, podcast, tutorial series, open-source project, etc.</p><p>Everyone on the team would essentially be working half-time on a collective project and the rest of their time building their personal community.</p><p>Here are some of the advantages:</p><ol><li><p><strong>No managers</strong> &#8211; Solopreneurs can be fantastic autonomous contributors with an instinct for finding opportunities to add value.</p></li><li><p><strong>No marketing</strong> &#8211; Members would be encouraged to include the collective in their bios. Then every personal project is basically a growth hack for the collective. Members would also benefit from the collective cross-promoting their projects.</p></li><li><p><strong>Less risk</strong> &#8211; The stable income extends the personal runway for each member. When they hit a milestone, they graduate and go full-time on their own project.</p></li><li><p><strong>More time</strong> &#8211; It&#8217;s damn hard to make progress on a project if you only have nights and weekends free. Working full-time while also bootstrapping is not sustainable.</p></li></ol><p>Why aren&#8217;t more tech startups structured as collectives?</p><div><hr></div><h2>Marketing: SEO</h2><h4><a href="https://www.inboundpursuit.com/consultation/">Keval Shah</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/SEOKeval/status/1630246195246366721&quot;,&quot;full_text&quot;:&quot;When doing keyword research, don't just go after keywords with the highest search volume.\n\nThese keywords are often the most competitive.\n\nAnd you probably won't be able to rank for them.\n\nTarget low competition, long-tail keywords.\n\nYou can get into the top 3 position for these&quot;,&quot;username&quot;:&quot;SEOKeval&quot;,&quot;name&quot;:&quot;Keval Shah | Ecommerce SEO &#128722;&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Mon Feb 27 16:39:16 +0000 2023&quot;,&quot;photos&quot;:[],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:2,&quot;like_count&quot;:22,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>My personal SEO strategy is simple. I don&#8217;t really care about competing for popular keywords. At least not initially. So I don&#8217;t do keyword research, link building, or follow all the micro-optimization recommendations.</p><p>Instead, I&#8217;m going with a long-tail strategy focused on uncommon keyword combinations. By writing a long-form daily newsletter covering 5 different topics, I&#8217;ll naturally create long-tail opportunities.</p><p>For example, consider this issue and the combinations that might arise from the first 2 sections. In the first section, I talked about a &#8220;startup collective&#8221;. In this section, I&#8217;m talking about &#8220;SEO&#8221;. I&#8217;ll likely rank for terms like &#8220;SEO startup collective&#8221;. With 5 sections, there are a lot of permutations. (ways to mix and match keywords)</p><p>I like that this strategy requires minimal effort and allows me to write more naturally. We&#8217;ll see how it works once I&#8217;ve produced content for 6+ months.</p><div><hr></div><h2>Web: Components</h2><h4><a href="https://lea.verou.me/">Lea Verou</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/LeaVerou/status/1629920779298127877&quot;,&quot;full_text&quot;:&quot;The point of Web Components was modularity &amp;amp; encapsulation.\n\nSadly, the vision of using WC to encapsulate blocks of functionality that you can drop into any web app and they just work and look like they belong, without dev effort to integrate the two, is largely unrealized.\n\n&#129525;&quot;,&quot;username&quot;:&quot;LeaVerou&quot;,&quot;name&quot;:&quot;Lea Verou&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Sun Feb 26 19:06:10 +0000 2023&quot;,&quot;photos&quot;:[],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:18,&quot;like_count&quot;:145,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>I&#8217;ve been thinking about components lately. Here is an interesting take on why web components are modular in theory but challenging to reuse in practice. The problem stems from not having more control over how components interact with a surrounding page&#8217;s CSS.</p><p>Components can be implemented with either the Light DOM or the Shadow DOM.</p><ul><li><p><strong>Light DOM </strong>&#8211; Works as if the component were embedded directly into the DOM. Global styles can easily override component styles. This can be problematic. The same component added to different web pages is likely to differ visually.</p></li><li><p> <strong>Shadow DOM</strong> &#8211; Components built with the Shadow DOM have scoped styles that do not inherit from global styles. This makes Shadow DOM components more visually stable but harder to configure.</p></li></ul><p>Lea <a href="https://github.com/WICG/webcomponents/issues/986">has created a proposal</a> that allows Shadow DOM component authors to declare parts of the component to be stylable from global CSS. This seems like you&#8217;d get a lot of the isolation benefits from the Shadow DOM without completely shutting the door. Let&#8217;s say your component is a form, and most styles need to be locked down, but you want the input and button elements to look like the other inputs and buttons on the page. It sounds like a nice compromise if the details can be worked out and the implementation is intuitive.</p><p>Alternatively, you could use CSS variables. This might not be a perfect solution because it&#8217;s more rigid than Lea&#8217;s proposal. You also run the risk of a component using variable names already in use which would be problematic. The advantage is variables are reasonably intuitive. Here is a <a href="https://codepen.io/chriscoyier/pen/xmEVYw">codepen example</a>. I&#8217;d likely go with this approach if I were to build a web component today.</p><div><hr></div><h2>HTML: Telephone/SMS</h2><h4><a href="https://www.codewithshripal.com/">Shripal Soni</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/codewithshripal/status/1630107237493383169&quot;,&quot;full_text&quot;:&quot;HTML Tip &#128161;\n\nMany websites need to show a telephone/SMS number.\n\nRather than showing it as text, we can provide a better UX to the users &#129321;\n\nLearn how to do it &#128071; &quot;,&quot;username&quot;:&quot;codewithshripal&quot;,&quot;name&quot;:&quot;Shripal Soni&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Mon Feb 27 07:27:06 +0000 2023&quot;,&quot;photos&quot;:[{&quot;img_url&quot;:&quot;https://pbs.substack.com/media/Fp9N3XoXwAMuyIS.jpg&quot;,&quot;link_url&quot;:&quot;https://t.co/p8vCZ9BMGt&quot;,&quot;alt_text&quot;:&quot;For tel/sms numbers, create a link with tel: / sms: url scheme, which on click opens a supported phone / message application to dial the number or send SMS. \nSample HTML Code:\n\n<a href=\&quot;tel:+1-202-555-0194\&quot;>+1-202-555-0194</a>\n<a href=\&quot;sms:+1-202-555-0194\&quot;>+1-202-555-0194</a>\n\n<!-- SMS wth pre-filled body (For Android) -->\n<a href=\&quot;sms:+1-202-555-0194?body=CODE2022\&quot;>\n        +1-202-555-0194\n</a>\n\n<!-- SMS with pre-flled body (for MacOS/iOS) -->\n<a href=\&quot;sms:+1-202-555-0194&amp;body=CODE2022\&quot;>\n        +1-202-555-0194\n</a>&quot;}],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:60,&quot;like_count&quot;:324,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>I wasn&#8217;t aware you could show a phone number that triggers an SMS with a default message. If I were to implement this on a page, I&#8217;d consider doing 2 thing:</p><ol><li><p>Show a phone icon if using a &#8220;tel:&#8221; link and a conversation bubble when adding an &#8220;sms:&#8221; link. This way, people don&#8217;t assume clicking the number will trigger a call.</p></li><li><p>I might use media queries to hide sms links for desktop. This depends on compatibility with desktop messaging apps. If compatible, I&#8217;d leave it as is. If not compatible, i&#8217;d hide sms links.</p></li></ol><div><hr></div><h2>Writing: Tips</h2><h4><a href="https://www.curtisbrown.co.uk/agent/jonny-geller">Jonny Geller</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/JonnyGeller/status/1630333553933185024&quot;,&quot;full_text&quot;:&quot;Steinbeck born <span class=\&quot;tweet-fake-link\&quot;>#OTD</span> \nHis <span class=\&quot;tweet-fake-link\&quot;>#writing</span> tips still work. &quot;,&quot;username&quot;:&quot;JonnyGeller&quot;,&quot;name&quot;:&quot;Jonny Geller&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Mon Feb 27 22:26:24 +0000 2023&quot;,&quot;photos&quot;:[{&quot;img_url&quot;:&quot;https://pbs.substack.com/media/FqAbucFXwAUDfED.jpg&quot;,&quot;link_url&quot;:&quot;https://t.co/R13ef4PFJ7&quot;,&quot;alt_text&quot;:null}],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:8,&quot;like_count&quot;:36,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>My writing is better when I say it aloud. Saying what I type makes it easier to avoid confusing combinations of words.</p><p>I should think more about writing for a specific person vs writing for a nameless, faceless audience. &#8220;Scaring you to death&#8221; might be slightly extreme, but it is directionally correct. It&#8217;s easier to connect when your words have a person in mind.</p><p>I&#8217;m less excited about the warning of becoming too emotionally attached to a scene. There is absolutely a risk of bias. But that emotional connection can also add character. So it&#8217;s a little bit of a give-and-take thing. Awareness is good, but don&#8217;t avoid it entirely.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.v1labs.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 <strong>The Daily Subset!</strong></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[{33} Time Machines, Typescript & Procreate]]></title><description><![CDATA[Featuring Nikita Bier, Joe Previte, Rapid, James Leighton, and BeeJayDeL]]></description><link>https://newsletter.v1labs.com/p/33-time-machines-typescript-and-procreate</link><guid isPermaLink="false">https://newsletter.v1labs.com/p/33-time-machines-typescript-and-procreate</guid><dc:creator><![CDATA[Dane Lyons]]></dc:creator><pubDate>Fri, 24 Feb 2023 18:41:46 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!jUlT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22b28c7a-9f04-4a78-b1c4-fdd0721bbfb3_1167x726.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_!jUlT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22b28c7a-9f04-4a78-b1c4-fdd0721bbfb3_1167x726.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jUlT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22b28c7a-9f04-4a78-b1c4-fdd0721bbfb3_1167x726.png 424w, https://substackcdn.com/image/fetch/$s_!jUlT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22b28c7a-9f04-4a78-b1c4-fdd0721bbfb3_1167x726.png 848w, https://substackcdn.com/image/fetch/$s_!jUlT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22b28c7a-9f04-4a78-b1c4-fdd0721bbfb3_1167x726.png 1272w, https://substackcdn.com/image/fetch/$s_!jUlT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22b28c7a-9f04-4a78-b1c4-fdd0721bbfb3_1167x726.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jUlT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22b28c7a-9f04-4a78-b1c4-fdd0721bbfb3_1167x726.png" width="1167" height="726" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/22b28c7a-9f04-4a78-b1c4-fdd0721bbfb3_1167x726.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:726,&quot;width&quot;:1167,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1300358,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!jUlT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22b28c7a-9f04-4a78-b1c4-fdd0721bbfb3_1167x726.png 424w, https://substackcdn.com/image/fetch/$s_!jUlT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22b28c7a-9f04-4a78-b1c4-fdd0721bbfb3_1167x726.png 848w, https://substackcdn.com/image/fetch/$s_!jUlT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22b28c7a-9f04-4a78-b1c4-fdd0721bbfb3_1167x726.png 1272w, https://substackcdn.com/image/fetch/$s_!jUlT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22b28c7a-9f04-4a78-b1c4-fdd0721bbfb3_1167x726.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><em>Subsribe to The Daily Subset and develop the skills needed to build a strong product led growth startup.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.v1labs.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://newsletter.v1labs.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>Product: Time Machine</h2><h4><a href="https://intro.co/NikitaBier">Nikita Bier</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/nikitabier/status/1628981887044837378&quot;,&quot;full_text&quot;:&quot;If you had a time machine, which product would you go back to build, believing that you could out-execute the original founder?&quot;,&quot;username&quot;:&quot;nikitabier&quot;,&quot;name&quot;:&quot;Nikita Bier&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Fri Feb 24 04:55:21 +0000 2023&quot;,&quot;photos&quot;:[],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:23,&quot;like_count&quot;:534,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:false}" data-component-name="Twitter2ToDOM"></div><p>This is an interesting thought experiment to start the day. It&#8217;s tempting to look at cases where hindsight is 20/20. What products were on the cusp of greatness only to be realized by key discoveries in future competitive iterations? There are plenty of examples during the dot-com bubble. Ebay comes to mind. That product certainly could have benefitted from future Amazon and Shopify improvements.</p><p>It&#8217;s also very tempting to go with a more altruistic approach. Could we have a better internet today if the people who created foundational technologies such as Javascript had a clearer idea of how it would eventually be used? Absolutely.</p><p>A better internet would be nice, but that might be small potatoes compared to improvements over a longer period of time. What about environment-centric opportunities? What if someone were to introduce modern lithium-ion batteries to the first electric cars built in the late 1800s? Maybe it&#8217;s possible electric vehicles could have outcompeted the combustion engine. If so, how would that change CO2 emissions over 150 years? It wouldn&#8217;t have solved the problem. But we&#8217;d likely be better off.</p><p>Ultimately, I&#8217;d probably choose an opportunity that balances altruism with a financial upside. I&#8217;m not a math wizard, so pulling this off would be damn hard. I&#8217;m assuming in this alternate reality that I&#8217;d be allowed to restructure my education as needed. I would have introduced the proof-of-stake consensus protocol to Bitcoin. It would have been far more environmentally friendly. And it would have changed the entire trajectory of crypto.</p><div><hr></div><h2>Typescript: Tutorial</h2><h4><a href="https://www.typescriptcourse.com/">Joe Previte</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/jsjoeio/status/1626311603418431488&quot;,&quot;full_text&quot;:&quot;I am stoked this is ready.\n\nMy second TypeScript tutorial is out now.\n\nAnd it's free!\n\n&#129525; &quot;,&quot;username&quot;:&quot;jsjoeio&quot;,&quot;name&quot;:&quot;Joe Previte&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Thu Feb 16 20:04:36 +0000 2023&quot;,&quot;photos&quot;:[{&quot;img_url&quot;:&quot;https://pbs.substack.com/media/FpHRx6-aUAAnsKD.jpg&quot;,&quot;link_url&quot;:&quot;https://t.co/hlIwxjJWvE&quot;,&quot;alt_text&quot;:&quot;screenshot of \&quot;build a typescript project from scratch\&quot; tutorial from typescriptcourse.com&quot;}],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:212,&quot;like_count&quot;:1468,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>Speaking of a better version of Javascript &#128070;, here is a tutorial by Joe Previte on Typescript.</p><p>I&#8217;ve long been in the camp of knowing Typescript is theoretically better than Javascript. But because I prefer to work in very small teams (often solo) and 100% reliability isn&#8217;t an absolute necessity, I prefer Javascript. I find it easier to deal with an occasional random type quirk than to continually write verbose code to disambiguate and make type a non-issue.</p><p>I know my take is frustrating to Typescript enthusiasts. It&#8217;s probably a variation of an excuse they hear all the time. But imagine if the English language required strict type declarations for parts of speech.</p><p><strong>This sentence:</strong><br>I want a glass of water.</p><p><strong>Turns into this abomination:</strong><br><strong>I</strong><em>:pronoun</em> <strong>want</strong><em>:verb</em> <strong>a</strong><em>:determiner</em> <strong>glass</strong><em>:noun</em> <strong>of</strong><em>:preposition</em> <strong>water</strong><em>:noun</em>.</p><p>I suppose the second sentence is less ambiguous, even though the first sentence was entirely straightforward. Still, I&#8217;m not anti-Typescript. Reducing ambiguity is a good thing when it comes to running programming languages. I just wish we could achieve that more concisely. I look forward to whatever JS and TS evolve into.</p><div><hr></div><h2>API: REST Tips</h2><h4><a href="https://rapidapi.com/">Rapid</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/Rapid_API/status/1629104010916503554&quot;,&quot;full_text&quot;:&quot;REST API development tips &#128071;\n\n{ 1 / 6 } &quot;,&quot;username&quot;:&quot;Rapid_API&quot;,&quot;name&quot;:&quot;Rapid&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Fri Feb 24 13:00:38 +0000 2023&quot;,&quot;photos&quot;:[{&quot;img_url&quot;:&quot;https://pbs.substack.com/media/Fpu9cCCX0AQgTNM.jpg&quot;,&quot;link_url&quot;:&quot;https://t.co/9L2QKReuRp&quot;,&quot;alt_text&quot;:&quot;Rapid Comic: REST API development tips&quot;}],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:198,&quot;like_count&quot;:918,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/Rapid_API/status/1629104016171970562&quot;,&quot;full_text&quot;:&quot;{ 2 / 6 } &quot;,&quot;username&quot;:&quot;Rapid_API&quot;,&quot;name&quot;:&quot;Rapid&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Fri Feb 24 13:00:39 +0000 2023&quot;,&quot;photos&quot;:[{&quot;img_url&quot;:&quot;https://pbs.substack.com/media/Fpu9cWrXoAA0XPG.jpg&quot;,&quot;link_url&quot;:&quot;https://t.co/U8jZHrwclb&quot;,&quot;alt_text&quot;:&quot;Always name resources consistently. Following a naming pattern will allow users of your API to assume endpoint names, making it easier to use and much more structured. As a best practice rule for naming endpoints, always use nouns to name and not verbs, and always use plural nouns for resource collections to clearly indicate that the endpoint contains multiple resources.&quot;}],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:3,&quot;like_count&quot;:30,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/Rapid_API/status/1629104021431631874&quot;,&quot;full_text&quot;:&quot;{ 3 / 6 } &quot;,&quot;username&quot;:&quot;Rapid_API&quot;,&quot;name&quot;:&quot;Rapid&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Fri Feb 24 13:00:40 +0000 2023&quot;,&quot;photos&quot;:[{&quot;img_url&quot;:&quot;https://pbs.substack.com/media/Fpu9cn-WIAEWd47.jpg&quot;,&quot;link_url&quot;:&quot;https://t.co/f4yC232V3M&quot;,&quot;alt_text&quot;:&quot;Pagination and filtering are two great techniques you can use to enhance your API's performance. Particularly with APIs with large databases, data retrieval can be slow. To combat this you can apply pagination which sorts data out into manageable pages instead of delivering one large dataset. \nAnother important tip is to secure your API well. API data can be vulnerable to various attacks, so if your API deals with sensitive data, security is the number one priority. You should apply various security measures to minimize risks and not just one type. Trusted authentication methods include OAuth and API Keys. Basic HTTP authentication should be avoided.&quot;}],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:1,&quot;like_count&quot;:25,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/Rapid_API/status/1629104027152654339&quot;,&quot;full_text&quot;:&quot;{ 4 / 6 } &quot;,&quot;username&quot;:&quot;Rapid_API&quot;,&quot;name&quot;:&quot;Rapid&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Fri Feb 24 13:00:42 +0000 2023&quot;,&quot;photos&quot;:[{&quot;img_url&quot;:&quot;https://pbs.substack.com/media/Fpu9c7RX0AEHwgM.jpg&quot;,&quot;link_url&quot;:&quot;https://t.co/8Mwtsir2N9&quot;,&quot;alt_text&quot;:&quot;Rate Limiting is another very important technique to apply to your API because it acts as a defense mechanism against request overload. Rate limiting limits the number of calls a user can make to your API per period. If the call rate is exceeded, the user will have their connection blocked and must either wait for more calls or pay for more. This is very useful in cases where you might receive a request influx (bot attack/ DoS attacks) that if left alone, can overload your API with traffic and render it useless.&quot;}],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:3,&quot;like_count&quot;:25,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/Rapid_API/status/1629104032315850754&quot;,&quot;full_text&quot;:&quot;{ 5 / 6 } &quot;,&quot;username&quot;:&quot;Rapid_API&quot;,&quot;name&quot;:&quot;Rapid&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Fri Feb 24 13:00:43 +0000 2023&quot;,&quot;photos&quot;:[{&quot;img_url&quot;:&quot;https://pbs.substack.com/media/Fpu9dOCXsAIhGra.jpg&quot;,&quot;link_url&quot;:&quot;https://t.co/OZoQYZcLIG&quot;,&quot;alt_text&quot;:&quot;When structuring your API, it's important to think of the relationship of each resource to the other and build an API with a clear resource hierarchy. This makes the use of your API easier and the structure easier to comprehend. \nWhen errors occur in your API requests or responses, you should make sure to include HTTP status codes in error responses. Doing this allows users to understand the issue, diagnose the problem, and fix it more quickly. Without this additional error information, your API responses are difficult to understand and their user-friendliness decreases.&quot;}],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:2,&quot;like_count&quot;:22,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/Rapid_API/status/1629104037831352321&quot;,&quot;full_text&quot;:&quot;{ 6 / 6 } &quot;,&quot;username&quot;:&quot;Rapid_API&quot;,&quot;name&quot;:&quot;Rapid&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Fri Feb 24 13:00:44 +0000 2023&quot;,&quot;photos&quot;:[{&quot;img_url&quot;:&quot;https://pbs.substack.com/media/Fpu9djbXEAE-Ume.jpg&quot;,&quot;link_url&quot;:&quot;https://t.co/PQkzVVNsca&quot;,&quot;alt_text&quot;:&quot;As a final tip, thoroughly plan and create documentation, and do not overlook it as part of the API building process. Well-written documentation is vital for others to be able to understand how it works, how they can implement it, and how to solve any issues that may occur as they use it. It should act as a user manual, and a first point of call should they have any questions about your API. \nGood documentation should include info on endpoints, methods, and parameter options. It should provide code snippet examples in various programming languages, debugging details for common errors, an FAQ section, and links to external resources if required. Don't forget to also keep documentation updated as your API evolves!&quot;}],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:1,&quot;like_count&quot;:23,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>Nice list of API tips! I&#8217;ve certainly been tempted to use verbs in API endpoints instead of nouns. As a refresher, the type of request you make should determine what you are doing with the resource.</p><p><strong>GET</strong> - Retrieves a resource.<br><strong>PUT</strong> - Updates a resource.<br><strong>POST</strong> - Creates a resource.<br><strong>DELETE</strong> - Removes a resource.</p><div><hr></div><h2>Steve Jobs: A Good Life</h2><h4><a href="https://www.curtisbrown.co.uk/client/james-leighton">James Leighton</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/JamesL1927/status/1629145191864041477&quot;,&quot;full_text&quot;:&quot;In 1994 STEVE JOBS shares this great tip for how to live a good life. &quot;,&quot;username&quot;:&quot;JamesL1927&quot;,&quot;name&quot;:&quot;James Leighton&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Fri Feb 24 15:44:16 +0000 2023&quot;,&quot;photos&quot;:[{&quot;img_url&quot;:&quot;https://substackcdn.com/image/upload/w_1028,c_limit,q_auto:best/l_twitter_play_button_rvaygk,w_88/xbidmyptqwd17awqtpzc&quot;,&quot;link_url&quot;:&quot;https://t.co/2GYKusiWtO&quot;,&quot;alt_text&quot;:null}],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:9,&quot;like_count&quot;:32,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:&quot;https://video.twimg.com/ext_tw_video/1629145132153950211/pu/vid/480x270/-HINPVtPGUIplDhc.mp4?tag=12&quot;,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>I hate that Steve Jobs was too much of an authoritarian. That toxic inspiration has plagued startups for years. But you can&#8217;t deny that Steve put out some brilliant quotes. This is a prime example. The fact that the world around us was built by regular people should be a daily source of inspiration.</p><p>There is no reason to be held back by imposter syndrome or any other artificial constraint. Your peers are better than you in some areas and worse in others. We all belong. We all have something to contribute.</p><div><hr></div><h2>Procreate: Shadows and Highlights</h2><h4><a href="https://beacons.ai/beejaydel/">BeeJayDeL</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/beejaydel/status/1628086532446756864&quot;,&quot;full_text&quot;:&quot;Procreate Tips #21: Adding Shadows &amp;amp; Highlights in Procreate! <span class=\&quot;tweet-fake-link\&quot;><span class=\&quot;tweet-fake-link\&quot;>#procreate</span>app</span> <span class=\&quot;tweet-fake-link\&quot;>#procreateart</span> #procreate <span class=\&quot;tweet-fake-link\&quot;>#tutorial</span> &quot;,&quot;username&quot;:&quot;beejaydel&quot;,&quot;name&quot;:&quot;BeeJayDeL&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Tue Feb 21 17:37:32 +0000 2023&quot;,&quot;photos&quot;:[{&quot;img_url&quot;:&quot;https://substackcdn.com/image/upload/w_1028,c_limit,q_auto:best/l_twitter_play_button_rvaygk,w_88/fw7mbh4cpjwbdsifv9qh&quot;,&quot;link_url&quot;:&quot;https://t.co/pSyIdkKUBY&quot;,&quot;alt_text&quot;:null}],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:5,&quot;like_count&quot;:41,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:&quot;https://video.twimg.com/ext_tw_video/1628086414930849792/pu/vid/480x852/zX9-w77lxNU6j1AX.mp4?tag=12&quot;,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>Adding shadows and highlights is so satisfying. The small tip I love in this video is that you don&#8217;t need to add pure black or white for shadows and highlights. Adding a dark purple and then dropping the opacity to blend can bring shadows to life.</p><p>A designer should put out flat layered designs for people to practice highlighting. Then everyone can share their work and learn from techniques used by other designers.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.v1labs.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 <strong>The Daily Subset!</strong></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[{32} Dev Agency, Personal Strengths & Collaboration ]]></title><description><![CDATA[Featuring Cory House, Nick Bryant, Dini Mehta, Hakan Deryal, and Alfred Nerstu]]></description><link>https://newsletter.v1labs.com/p/32-dev-agency-personal-strengths-collaboration</link><guid isPermaLink="false">https://newsletter.v1labs.com/p/32-dev-agency-personal-strengths-collaboration</guid><dc:creator><![CDATA[Dane Lyons]]></dc:creator><pubDate>Thu, 23 Feb 2023 20:05:12 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!JKcE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4706d470-25a6-487a-9420-76f4fea2de07_1167x726.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_!JKcE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4706d470-25a6-487a-9420-76f4fea2de07_1167x726.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JKcE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4706d470-25a6-487a-9420-76f4fea2de07_1167x726.png 424w, https://substackcdn.com/image/fetch/$s_!JKcE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4706d470-25a6-487a-9420-76f4fea2de07_1167x726.png 848w, https://substackcdn.com/image/fetch/$s_!JKcE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4706d470-25a6-487a-9420-76f4fea2de07_1167x726.png 1272w, https://substackcdn.com/image/fetch/$s_!JKcE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4706d470-25a6-487a-9420-76f4fea2de07_1167x726.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!JKcE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4706d470-25a6-487a-9420-76f4fea2de07_1167x726.png" width="1167" height="726" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4706d470-25a6-487a-9420-76f4fea2de07_1167x726.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:726,&quot;width&quot;:1167,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1198822,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!JKcE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4706d470-25a6-487a-9420-76f4fea2de07_1167x726.png 424w, https://substackcdn.com/image/fetch/$s_!JKcE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4706d470-25a6-487a-9420-76f4fea2de07_1167x726.png 848w, https://substackcdn.com/image/fetch/$s_!JKcE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4706d470-25a6-487a-9420-76f4fea2de07_1167x726.png 1272w, https://substackcdn.com/image/fetch/$s_!JKcE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4706d470-25a6-487a-9420-76f4fea2de07_1167x726.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><em>Subsribe to The Daily Subset and develop the skills needed to build a strong product led growth startup.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.v1labs.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://newsletter.v1labs.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>Product: Development Agency</h2><h4><a href="https://www.reactjsconsulting.com/">Cory House</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/housecor/status/1628401775047737347&quot;,&quot;full_text&quot;:&quot;Idea: Open a software development agency with one simple premise:\n\n&#8220;Our developers work directly with you.&#8221;\n\nNo docs.\nNo formal design.\nNo layers in between.\n\nJust rapid development based on real-time customer feedback.&quot;,&quot;username&quot;:&quot;housecor&quot;,&quot;name&quot;:&quot;Cory House&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Wed Feb 22 14:30:12 +0000 2023&quot;,&quot;photos&quot;:[],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:32,&quot;like_count&quot;:545,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:false}" data-component-name="Twitter2ToDOM"></div><p>I believe the idea has potential. Here are a few challenges I see and potential solutions:</p><p><strong>1) Developer buy-in</strong> &#8211; Many developers have become accustomed to fighting for high-resolution specs. This is often the result of people being held accountable for unforeseen challenges that arise after a project is poorly planned.</p><p><strong>Manager:</strong> How long will it take to build X? </p><p><strong>Developer: </strong>I don&#8217;t know. Maybe a week or two&#8230;</p><p><strong>Manager:</strong> Great. Let&#8217;s get started. I expect it to be done in a week.</p><p>A week later, the developer is scrambling to get the project to the finish line. So many layers of complexity make it obvious that it should have been a 4-week project. None of those considerations were discussed ahead of time. So now the developer has to work twice as hard to produce shitty results that nobody is happy with.</p><p>The next project has a developer thinking <em>&#8220;I don&#8217;t want to do that again. I&#8217;ll be much more conservative in my estimate, and I&#8217;ll make sure we properly spec it out&#8221;</em>.</p><p>The above scenario is not healthy. We should not incentivize people to sandbag and guard their time. We should incentivize people to take risks and explore opportunities to deliver as much value as possible. Because of that, I like the &#8220;no docs&#8221; approach. A great developer unencumbered by a heavy process has the potential to produce significantly more in a fraction of the time.</p><p>To make this work, we need to undo some negative programming. Take away the stick and focus on the carrot. Developer comp should be proportionate to the value they create. Treat developers as fractional entrepreneurs.</p><p><strong>2) The system should be less reactive</strong> &#8211; I know many people want to make customers the project managers. It&#8217;s tempting to just do what customers ask for in real time, especially as an agency. But being reactive has pros and cons. It&#8217;s nice to deliver value quickly, but with no prioritization, it&#8217;s hard for developers to maximize their time investment.</p><p>Instead of taking a real-time approach, I&#8217;d add a 1-day buffer. There should be a system of feedback collection that does not interrupt anything in progress. Just allow all the feedback to pipe up for the day. The next morning, the team should get together and evaluate yesterday&#8217;s feedback and plan their day. Once everyone has decided their focus for the day, there should be as few interruptions as possible.</p><div><hr></div><h2>Communication: Async</h2><h4><a href="https://nickbryant.fyi/">Nick Bryant</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/nickbryantfyi/status/1628772425574776832&quot;,&quot;full_text&quot;:&quot;I'm determined to find a way to do business without phone calls or video chats.&quot;,&quot;username&quot;:&quot;nickbryantfyi&quot;,&quot;name&quot;:&quot;Nick Bryant&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Thu Feb 23 15:03:02 +0000 2023&quot;,&quot;photos&quot;:[],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:0,&quot;like_count&quot;:2,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>I&#8217;ve always been a fan of async communication. It&#8217;s opt-in. You can find ways to fit it into your workflow without blocking large chunks of your day. You aren&#8217;t obligated to participate in conversations if you don&#8217;t add value. There are so many benefits.</p><p>In spite of all the advantages, we can&#8217;t seem to give up our synchronous communication addiction. I wouldn&#8217;t be surprised if the average tech worker spends at least 3 hours in meetings every day.</p><p>Maybe the problem stems from our need to verbally communicate face-to-face. We have the tools to communicate face-to-face async. You can record and post short video clips in Slack. But that functionality doesn&#8217;t seem to get a lot of usage, at least in my experience.</p><p>I don&#8217;t know the answer, but I hope we find more meaningful ways to get more out of our sync and async chats. Good luck to Nick on his quest. &#127867;</p><div><hr></div><h2>Productivity: Focus on your Strengths</h2><h4><a href="https://twitter.com/dinimehta">Dini Mehta</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/dinimehta/status/1628788851555864578&quot;,&quot;full_text&quot;:&quot;Underrated: Purely focusing and leaning into your strengths. Ignoring and outsourcing your weaknesses. \n\nMost people waste too much time in their career working on their blindspots when they should be taking advantage of their superpowers&quot;,&quot;username&quot;:&quot;dinimehta&quot;,&quot;name&quot;:&quot;Dini Mehta&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Thu Feb 23 16:08:18 +0000 2023&quot;,&quot;photos&quot;:[],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:1,&quot;like_count&quot;:4,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>It&#8217;s a good idea to focus on your core strengths. Strengthening your weaknesses makes you a better generalist, but it&#8217;s also a losing battle. You can&#8217;t possibly be good at everything. So spend most of your time doing what you are good at and be thoughtful about expanding your skillset.</p><p>The outsourcing your weaknesses part is a whole discussion in itself. I believe it is better to collaborate than to delegate. While most people believe in delegating, there is a major flaw in that thinking. How can you effectively delegate if you aren&#8217;t a subject matter expert? If it is your weakness, then you are less equipped to make decisions than the expert doing the execution.</p><p>In a collaborative environment, experts are able to contribute their strengths while trusting other experts to contribute in areas where they are weak. Creating a collaborative environment is not easy. In a lot of ways, it&#8217;s easier to just delegate. But the upside is higher.</p><div><hr></div><h2>Collaboration: Ownership</h2><h4><a href="https://twitter.com/hakanderyal">Hakan Deryal</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/hakanderyal/status/1628809326889431043&quot;,&quot;full_text&quot;:&quot;If you had to opportunity to team up with a few great people for one or more of your products, where they took ownership of the marketing and you handle the tech side, would you do it?\n\nAsking for a friend. \n\n<span class=\&quot;tweet-fake-link\&quot;>#buildinpublic</span>&quot;,&quot;username&quot;:&quot;hakanderyal&quot;,&quot;name&quot;:&quot;Hakan Deryal&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Thu Feb 23 17:29:40 +0000 2023&quot;,&quot;photos&quot;:[],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:0,&quot;like_count&quot;:1,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>This is a continuation of the discussion on productivity. &#128070;</p><p>Teaming up with people who are strong in areas you are weak is generally a good idea. One potential red flag here is the use of the word &#8220;ownership&#8221;. I don&#8217;t believe hard boundaries over domains involving absolute authority is a healthy setup. In other words, you shouldn&#8217;t say, &#8220;I decide everything tech related, and you decide everything marketing related&#8221;.</p><p>It&#8217;s better to say, &#8220;I&#8217;ll take the lead on tech, and you take the lead on marketing&#8221;. The difference might sound insignificant, but it&#8217;s meaningful. It means that you, as a technologist, aren&#8217;t excluded from marketing decisions. And marketers aren&#8217;t excluded from tech decisions. Input from both sides should not only be invited but encouraged. It builds trust and helps the team arrive at better overall solutions.</p><div><hr></div><h2>Domain: Motivation</h2><h4><a href="https://alfrednerstu.com/">Alfred Nerstu</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/alfrednerstu/status/1628716101403025408&quot;,&quot;full_text&quot;:&quot;Bought a new domain. \n\nI don&#8217;t know if I made a good deal or if I&#8217;m completely crazy. \n\n<span class=\&quot;tweet-fake-link\&quot;>#buildinpublic</span> &quot;,&quot;username&quot;:&quot;alfrednerstu&quot;,&quot;name&quot;:&quot;Alfred Nerstu&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Thu Feb 23 11:19:13 +0000 2023&quot;,&quot;photos&quot;:[{&quot;img_url&quot;:&quot;https://pbs.substack.com/media/FppcqPdXgAM4LTX.jpg&quot;,&quot;link_url&quot;:&quot;https://t.co/fcIW5UlGaB&quot;,&quot;alt_text&quot;:null}],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:0,&quot;like_count&quot;:14,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>Congrats on the name and good luck Alfred! &#127881;</p><p>It&#8217;s hard to put a price on a domain. But one major reason to pony up the cash for a name is motivation. Paying $10k for a name that you feel personally connected to might inspire you to work 10-20% harder than a name you are less excited about. Extrapolate that effort over a year, and suddenly $10k seems like a hell of an investment.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.v1labs.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 <strong>The Daily Subset!</strong></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[{31} Hiring Traits, Frontend Frameworks & Creative Confidence]]></title><description><![CDATA[Featuring Carlos Iborra, Brian Ball, jhey, Trey Nobles, and Shaurya Nagpal]]></description><link>https://newsletter.v1labs.com/p/31-hiring-traits-frontend-frameworks-creativity</link><guid isPermaLink="false">https://newsletter.v1labs.com/p/31-hiring-traits-frontend-frameworks-creativity</guid><dc:creator><![CDATA[Dane Lyons]]></dc:creator><pubDate>Wed, 22 Feb 2023 19:09:40 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!KHDc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3bfaa9bd-7eb9-422d-b443-c87092cb5d53_1167x726.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_!KHDc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3bfaa9bd-7eb9-422d-b443-c87092cb5d53_1167x726.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!KHDc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3bfaa9bd-7eb9-422d-b443-c87092cb5d53_1167x726.png 424w, https://substackcdn.com/image/fetch/$s_!KHDc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3bfaa9bd-7eb9-422d-b443-c87092cb5d53_1167x726.png 848w, https://substackcdn.com/image/fetch/$s_!KHDc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3bfaa9bd-7eb9-422d-b443-c87092cb5d53_1167x726.png 1272w, https://substackcdn.com/image/fetch/$s_!KHDc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3bfaa9bd-7eb9-422d-b443-c87092cb5d53_1167x726.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!KHDc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3bfaa9bd-7eb9-422d-b443-c87092cb5d53_1167x726.png" width="1167" height="726" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3bfaa9bd-7eb9-422d-b443-c87092cb5d53_1167x726.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:726,&quot;width&quot;:1167,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1461322,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!KHDc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3bfaa9bd-7eb9-422d-b443-c87092cb5d53_1167x726.png 424w, https://substackcdn.com/image/fetch/$s_!KHDc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3bfaa9bd-7eb9-422d-b443-c87092cb5d53_1167x726.png 848w, https://substackcdn.com/image/fetch/$s_!KHDc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3bfaa9bd-7eb9-422d-b443-c87092cb5d53_1167x726.png 1272w, https://substackcdn.com/image/fetch/$s_!KHDc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3bfaa9bd-7eb9-422d-b443-c87092cb5d53_1167x726.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><em>Subsribe to The Daily Subset and develop the skills needed to build a strong product led growth startup.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.v1labs.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://newsletter.v1labs.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>Product: Hiring Traits</h2><h4><a href="https://carlosiborra.bio.link/">Carlos Iborra</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/carigar3/status/1628127157661708288&quot;,&quot;full_text&quot;:&quot;These are the traits I look for in people before hiring them:\n\n- Proactivity\n- Going the extra mile\n- Infinite learner\n- Healthy\n- Thinking out of the box\n\nWould you add anything else?&quot;,&quot;username&quot;:&quot;carigar3&quot;,&quot;name&quot;:&quot;Carlos Iborra&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Tue Feb 21 20:18:58 +0000 2023&quot;,&quot;photos&quot;:[],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:0,&quot;like_count&quot;:6,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:false}" data-component-name="Twitter2ToDOM"></div><p>I like this list of traits. I do worry about hiring someone based on my perception of their health. That seems potentially discriminatory. But it is an otherwise solid foundation.</p><p>Here are a few additions I&#8217;d consider:</p><ol><li><p><strong>Autonomous</strong> &#8211; While being proactive is often related to autonomy, I think they are different and both valuable. Proactive contributors might rally the troops around a new opportunity. Autonomous contributors might take it upon themselves to explore the viability of a new opportunity.</p></li><li><p><strong>Diversity</strong> &#8211; Having a team composed of people who lack shared experiences means that you have a much broader set of overall experiences to draw inspiration from.</p></li><li><p><strong>Optimists</strong> &#8211; This is a trait I&#8217;ve been thinking about lately. When you encounter a new opportunity, you need a team capable of mentally exploring the space. Optimists tend to think &#8220;There is a path to get from A to B, let&#8217;s find it&#8221;. Pessimists approach ideas as &#8220;This won&#8217;t work because of X, Y, or Z&#8221;. I&#8217;ll take pragmatic optimism over pessimism any day.</p></li></ol><div><hr></div><h2>Frontend: Framework</h2><h4><a href="https://whowhatwhyai.substack.com/">Brian Ball</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/brianball/status/1628213511179603968&quot;,&quot;full_text&quot;:&quot;Status:\n1. DB set up (postgresql)\n2. API started ( node / express )\n\nHaven't decided on frontend yet, probably react or vue or svelte.\n\nWhat are you using? ( maybe I'll make my decision based on who I can chat with about it )&quot;,&quot;username&quot;:&quot;brianball&quot;,&quot;name&quot;:&quot;Brian Ball&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Wed Feb 22 02:02:06 +0000 2023&quot;,&quot;photos&quot;:[],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:0,&quot;like_count&quot;:8,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>I wouldn&#8217;t say I&#8217;m a fan of React. There are just a lot of small annoying quirks, like attribute renaming (i.e. className), state management, and JSX. I find it far more intuitive to use Vue, which does a much better job of extending pure HTML.</p><p>But I tend to use the React-based NextJS framework because it makes up for some of the quirks. One of the things I love about NextJS is the intuitive routing. You don&#8217;t have to manage any routing files. Just add files to the &#8216;pages&#8217; folder and be aware of a few naming conventions, and that&#8217;s it. The same system works for building out an API.</p><p>NextJS is also compatible with my preferred hosting platform, Vercel. The developer experience in Vercel is superb. It takes care of all the basic devops requirements you need to get started. Just push your code to a github repo, and deployments are automatic. You can even push to a feature branch, and that&#8217;ll trigger a preview deployment!</p><p>The only thing I&#8217;d like to see improved in Vercel is a more intuitive way to manage assets. Adding image assets to a repo isn&#8217;t always ideal, and there isn&#8217;t an obvious alternative solution.</p><div><hr></div><h2>CSS: Animated Transforms</h2><h4><a href="https://jhey.dev/links/">jhey</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/jh3yy/status/1628062943945322503&quot;,&quot;full_text&quot;:&quot;CSS Tip! &#10024;\n\nYou can animate individual transform properties &#128588;\n\nThey're used in this 3D cube loader &#129299;\n\nkeyframes grow {\n0% { scale: 1 1 1; }\n25% { scale: 1 1 2; }\n50% { scale: 2 1 2; }\n75%, 100% { scale: 2 2 2; }\n}\n\nKinda fun! &#128153;\n\n<span class=\&quot;tweet-fake-link\&quot;>@CodePen</span> link below! &#128071; &quot;,&quot;username&quot;:&quot;jh3yy&quot;,&quot;name&quot;:&quot;jhey &#128296;&#128059;&#10024;&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Tue Feb 21 16:03:48 +0000 2023&quot;,&quot;photos&quot;:[{&quot;img_url&quot;:&quot;https://substackcdn.com/image/upload/w_1028,c_limit,q_auto:best/l_twitter_play_button_rvaygk,w_88/fm2yrsethydpwgoqlzid&quot;,&quot;link_url&quot;:&quot;https://t.co/aXiaH7Gwy7&quot;,&quot;alt_text&quot;:null}],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:116,&quot;like_count&quot;:1068,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:&quot;https://video.twimg.com/ext_tw_video/1628060525463584768/pu/vid/320x320/sgJG8uMODxovFbMp.mp4?tag=12&quot;,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>Codepen is a great tool for learning a variety of frontend skills. In this example, you&#8217;ve got a complex loading animation with 3d transforms to scale and rotate a cube.</p><p>When I see the code shared by jhey, my first thought is to wonder about the 3rd parameter in the scale animations. I&#8217;m much more familiar with scaling everything uniformly with 1 param or scaling the x/y with 2 params&#8230;so I&#8217;d assume the 3rd param scales the z-axis. But I&#8217;m not really sure how that works in practice because you can&#8217;t really make a div &#8220;thicker&#8221;.</p><p>With Codepen, it&#8217;s easy to fork someone&#8217;s code. Then strip it down to the bare bones. Remove everything you aren&#8217;t concerned with. Remove the shadows and the jumping animation. Make the cube just sit in place so you can manually manipulate an attribute to get a better sense of its purpose.</p><p>Once you understand the foundation of how to achieve a desired outcome by adjusting attributes, you&#8217;ll be ready to add complexity. Maybe you don&#8217;t build back the same animation. Use other skills you&#8217;ve previously acquired to derive an entirely new animation.</p><div><hr></div><h2>Learning: Acquiring New Skills</h2><h4><a href="https://www.youtube.com/channel/UC4cHx9csL60bWY996c7QRdA">Trey Nobles</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/Trey_Nobles/status/1628422423522709504&quot;,&quot;full_text&quot;:&quot;You don&#8217;t &#8220;need&#8221; music theory to make music, but learning basic music theory makes the creation process so much easier. &quot;,&quot;username&quot;:&quot;Trey_Nobles&quot;,&quot;name&quot;:&quot;Trey Nobles&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Wed Feb 22 15:52:15 +0000 2023&quot;,&quot;photos&quot;:[],&quot;quoted_tweet&quot;:{&quot;full_text&quot;:&quot;what are some of your music hot takes? https://t.co/tvxND6yn7K&quot;,&quot;username&quot;:&quot;fionaspawn&quot;,&quot;name&quot;:&quot;s &#129416;&quot;},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:7,&quot;like_count&quot;:33,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>I appreciate music from afar. I enjoy how I can use it to positively impact my mood. I like the poetic nature of the lyrics. Music is simply an enjoyable part of life.</p><p>I was recently gifted an <a href="https://www.amazon.com/Professional-Keyboard-Controller-Production-Software/dp/B0886ZPWC8/">AKAI Professional MPK Mini MK3</a>, and every acronym in the name is a mystery to me. In fact, I don&#8217;t have enough technical music vocabulary to even begin to describe what I&#8217;d do with it. It&#8217;s just a device with a bunch of buttons and knobs sitting on my coffee table.</p><p>The only thing I really have going for me is that I love pushing buttons and adjusting knobs. It&#8217;s probably the perfect musical instrument for me. As soon as I find the right cables, I&#8217;m excited to make some terrible music. Then maybe I&#8217;ll advance from terrible to bad music. If I stick with it long enough, who knows? Someone once said I look like Post Malone. It&#8217;s half delusional to imagine making music professionally. I am an optimist, so I know there is some potential path from A to B. But it&#8217;s probably not the path for me.</p><p>The point is, learning something new requires you to embrace being terrible. If you don&#8217;t accept that reality, you give up before you ever get started.</p><div><hr></div><h2>Founder: Zero to One</h2><h4><a href="https://wealthyowl.in/">Shaurya Nagpal</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/shauryanagpal7/status/1628110780800589824&quot;,&quot;full_text&quot;:&quot;Being solo founder you go from zero to one a 1000 time \n\nThe zero to one journey starts like this \n0.1  I don't know how to do this \n0.2  No other option I need to learn it \n0.5  let's give it try now \n0.8  Need more iteration\n1     Done\n\nLoop &#128257; goes on &#128640; \n\n<span class=\&quot;tweet-fake-link\&quot;>#startups</span>&quot;,&quot;username&quot;:&quot;shauryanagpal7&quot;,&quot;name&quot;:&quot;Shaurya Nagpal&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Tue Feb 21 19:13:53 +0000 2023&quot;,&quot;photos&quot;:[],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:2,&quot;like_count&quot;:2,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>Founding a company and going from zero to one is similar to learning to create music. It&#8217;s a different type of skill, but some of the underlying principles are the same. You have to go through a period of time when you have no idea what the hell is going on. It might be scary and feel unnatural. If you do it enough times, you&#8217;ll start to feel comfortable with uncertainty.</p><p>You might even start to crave uncertainty. That sounds masochistic, but I don&#8217;t see it as deriving pleasure from pain. It&#8217;s the calm before the storm. It&#8217;s the excitement of a potential discovery. This is the foundation of what I call &#8220;creative confidence&#8221;.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.v1labs.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 <strong>The Daily Subset!</strong></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[{30} Problem Validation, Design Specs & Gradient Borders]]></title><description><![CDATA[Featuring Jen Abel, Vitaly Friedman, Cory House, Yanko Valera, Shripal Soni, and Chris Sev]]></description><link>https://newsletter.v1labs.com/p/30-problem-validation-design-specs-gradients</link><guid isPermaLink="false">https://newsletter.v1labs.com/p/30-problem-validation-design-specs-gradients</guid><dc:creator><![CDATA[Dane Lyons]]></dc:creator><pubDate>Tue, 21 Feb 2023 19:26:25 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!gCTO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28d591e1-f822-445d-a746-be84940f6780_1167x726.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_!gCTO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28d591e1-f822-445d-a746-be84940f6780_1167x726.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gCTO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28d591e1-f822-445d-a746-be84940f6780_1167x726.png 424w, https://substackcdn.com/image/fetch/$s_!gCTO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28d591e1-f822-445d-a746-be84940f6780_1167x726.png 848w, https://substackcdn.com/image/fetch/$s_!gCTO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28d591e1-f822-445d-a746-be84940f6780_1167x726.png 1272w, https://substackcdn.com/image/fetch/$s_!gCTO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28d591e1-f822-445d-a746-be84940f6780_1167x726.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!gCTO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28d591e1-f822-445d-a746-be84940f6780_1167x726.png" width="1167" height="726" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/28d591e1-f822-445d-a746-be84940f6780_1167x726.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:726,&quot;width&quot;:1167,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1453161,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!gCTO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28d591e1-f822-445d-a746-be84940f6780_1167x726.png 424w, https://substackcdn.com/image/fetch/$s_!gCTO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28d591e1-f822-445d-a746-be84940f6780_1167x726.png 848w, https://substackcdn.com/image/fetch/$s_!gCTO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28d591e1-f822-445d-a746-be84940f6780_1167x726.png 1272w, https://substackcdn.com/image/fetch/$s_!gCTO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28d591e1-f822-445d-a746-be84940f6780_1167x726.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><em>Subsribe to The Daily Subset and develop the skills needed to build a strong product led growth startup.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.v1labs.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://newsletter.v1labs.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>Product: Problem Validation</h2><h4><a href="https://www.jjellyfish.com/">Jen Abel</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/jjen_abel/status/1626190447830876161&quot;,&quot;full_text&quot;:&quot;Customer Discovery is a search for problem validation, NOT product validation.\n\nWhy?\n\nThe market is correct when speaking about the problem and is usually very wrong with how to best solve it.\n\nFor startups, it's essential to remember this.&quot;,&quot;username&quot;:&quot;jjen_abel&quot;,&quot;name&quot;:&quot;Jen Abel&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Thu Feb 16 12:03:10 +0000 2023&quot;,&quot;photos&quot;:[],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:3,&quot;like_count&quot;:37,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:false}" data-component-name="Twitter2ToDOM"></div><p>This is an important distinction. I&#8217;ve seen a lot of pitfalls from companies seeking product validation. It&#8217;s easy to ask a friend if a solution is good and get a false positive from someone offering words of encouragement.</p><p>You are less likely to get a false positive when asking if someone is experiencing a problem. It&#8217;s a less personal, more rational thought experiment.</p><p>It&#8217;s also important to appreciate the fact that your initial solution is likely to be garbage. Not always, sometimes companies hit the lotto on their v1. It is much more common that your v1 is suboptimal, and you get closer to a more optimal solution after many rounds of improvements.</p><p>So I agree. Early conversations should focus on validating the problem. It&#8217;s ok to also talk about solutions. That&#8217;s part of the improvement process. But validate problems, not solutions.</p><div><hr></div><h2>Figma: Design Specs</h2><h4><a href="https://smart-interface-design-patterns.com/">Vitaly Friedman</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/vitalyf/status/1627930682910560256&quot;,&quot;full_text&quot;:&quot;What a fantastic tool: EightSpaces Design Specs (<a class=\&quot;tweet-url\&quot; href=\&quot;https://www.figma.com/community/plugin/1205622541257680763/EightShapes-Specs\&quot;>figma.com/community/plug&#8230;</a>) automates design specs based on your Figma component, from anatomy to props to layout and spacing.\n\nVia <span class=\&quot;tweet-fake-link\&quot;>@nathanacurtis</span>. &#128079;&#127996;&#128079;&#127997;&#128079;&#127998;\n\n<span class=\&quot;tweet-fake-link\&quot;>#ux</span> <span class=\&quot;tweet-fake-link\&quot;>#design</span> <span class=\&quot;tweet-fake-link\&quot;>#figma</span> &quot;,&quot;username&quot;:&quot;vitalyf&quot;,&quot;name&quot;:&quot;Vitaly Friedman &#127482;&#127462;&#127987;&#65039;&#8205;&#127752;&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Tue Feb 21 07:18:14 +0000 2023&quot;,&quot;photos&quot;:[{&quot;img_url&quot;:&quot;https://pbs.substack.com/media/FpeSO2yWcAEW7_V.jpg&quot;,&quot;link_url&quot;:&quot;https://t.co/tsDNfEXKIZ&quot;,&quot;alt_text&quot;:null}],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:9,&quot;like_count&quot;:104,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>This is a neat tool. A lot of teams could produce better results with something like this.</p><p>I often worry about silo&#8217;ing the dev and design teams and essentially making the design team manage the dev team. I&#8217;ve always hated workflows that involve a non-collaborative spec handoff where design becomes a bottleneck for every change. This tool in those environments could get ugly.</p><p>If used in a healthier workflow involving a non-blocking design system, I see this helping a team get closer to pixel perfection without jamming the gears. </p><div><hr></div><h2>GraphQL: Network Inspector</h2><h4><a href="https://www.reactjsconsulting.com/">Cory House</a> &amp; <a href="https://twitter.com/yankovz">Yanko Valera</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/housecor/status/1627695678276370436&quot;,&quot;full_text&quot;:&quot;Problem: If an app makes multiple GraphQL calls on the same page, all the GraphQL calls look the same in the network tab.\n\nMy approach: Click on each call, one by one, to view the payload's query name.\n\nThis is time-consuming.\n\nAnyone have a trick for this? &quot;,&quot;username&quot;:&quot;housecor&quot;,&quot;name&quot;:&quot;Cory House&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Mon Feb 20 15:44:25 +0000 2023&quot;,&quot;photos&quot;:[{&quot;img_url&quot;:&quot;https://pbs.substack.com/media/Fpa7A3_aQAI1hvs.png&quot;,&quot;link_url&quot;:&quot;https://t.co/zjvgfyPgbl&quot;,&quot;alt_text&quot;:null}],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:88,&quot;like_count&quot;:1259,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/yankovz/status/1627696387042299904&quot;,&quot;full_text&quot;:&quot;<span class=\&quot;tweet-fake-link\&quot;>@housecor</span> I use &quot;,&quot;username&quot;:&quot;yankovz&quot;,&quot;name&quot;:&quot;Yanko Valera&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Mon Feb 20 15:47:14 +0000 2023&quot;,&quot;photos&quot;:[],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:76,&quot;like_count&quot;:1090,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{&quot;url&quot;:&quot;https://chrome.google.com/webstore/detail/graphql-network-inspector/ndlbedplllcgconngcnfmkadhokfaaln?hl=en-GB&quot;,&quot;image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/501d14c1-c6b9-4955-bc5a-2e6912f75c1e_128x128.jpeg&quot;,&quot;title&quot;:&quot;GraphQL Network Inspector&quot;,&quot;description&quot;:&quot;Simple and clean network inspector for GraphQL&quot;,&quot;domain&quot;:&quot;chrome.google.com&quot;},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>This has been one of my frustrations in troubleshooting GraphQL. Digging into GraphQL requests on the network tab in Chrome is tedious and very unintuitive. A simple extension to help name and organize requests can be life-changing.</p><div><hr></div><h2>CSS: Gradient Borders</h2><h4><a href="https://www.codewithshripal.com/">Shripal Soni</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/codewithshripal/status/1627928837949468673&quot;,&quot;full_text&quot;:&quot;CSS Tip &#129321;\n\nCreate beautiful gradient rounded border with ease using CSS&#128293; &quot;,&quot;username&quot;:&quot;codewithshripal&quot;,&quot;name&quot;:&quot;Shripal Soni&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Tue Feb 21 07:10:55 +0000 2023&quot;,&quot;photos&quot;:[{&quot;img_url&quot;:&quot;https://pbs.substack.com/media/FpeQph8XoAAj1ec.jpg&quot;,&quot;link_url&quot;:&quot;https://t.co/BpfiZidCIy&quot;,&quot;alt_text&quot;:&quot;CSS Code to create gradient rounded border: .box {\n  border: 12px solid transparent;\n  border-radius: 24px;\n  background: \n    linear-gradient(black, black) padding-box, \n    linear-gradient(\n      45deg, \n      #FF52E5, \n      #F6D242\n    ) border-box;\n}&quot;}],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:62,&quot;like_count&quot;:419,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>This is a wonderful technique that can produce a beautiful gradient border in a few lines of code. Producing an effect like this used to involve a very ugly hack involving a bunch of images and some messy markup. It would have been difficult to pull off the 45deg gradient.</p><p>Discretion is advised: <a href="http://benogle.com/2009/04/29/css-round-corners.html">Old School CSS Round Corners</a></p><div><hr></div><h2>CSS: Tailwind Apply</h2><h4><a href="https://devtr.ee/">Chris Sev</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/chris__sev/status/1264576734252294146&quot;,&quot;full_text&quot;:&quot;I always liked TailwindCSS but the first complaint is usually how long your HTML gets. Here's how you can clean it up a bit with <span class=\&quot;tweet-fake-link\&quot;>@Apply</span> \n\nDisclaimer: I don't use apply. I'd rather separate into JS components\n\n&#127880; Getting Started with Tailwind in 15 Min\n\n<a class=\&quot;tweet-url\&quot; href=\&quot;https://www.youtube.com/watch?v=6zIuAyLZPH0\&quot;>youtube.com/watch?v=6zIuAy&#8230;</a> &quot;,&quot;username&quot;:&quot;chris__sev&quot;,&quot;name&quot;:&quot;Chris Sev&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Sun May 24 15:19:22 +0000 2020&quot;,&quot;photos&quot;:[{&quot;img_url&quot;:&quot;https://substackcdn.com/image/upload/w_1028,c_limit,q_auto:best/l_twitter_play_button_rvaygk,w_88/qvoznfpz6ojm3gyl9rj9&quot;,&quot;link_url&quot;:&quot;https://t.co/kHzLTVqh1Y&quot;,&quot;alt_text&quot;:null}],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:7,&quot;like_count&quot;:55,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:&quot;https://video.twimg.com/ext_tw_video/1264575520949166081/pu/vid/1280x720/TXLVi8KTxO_40iNx.mp4?tag=10&quot;,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>I seem to be in the minority on the Tailwind &#8216;apply&#8217; debate. I don&#8217;t find the large acronym blobs to be visually parsable. The aversion to naming things in the Tailwind community is a little confusing. If you want someone to read your code and understand what the hell is going on, take the time to name things. Using &#8216;apply&#8217; is much more semantic.</p><p>I do agree with Chris that JS components are an acceptable solution. The acronym blobs still live in components, but pages/views/layouts are much more readable.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.v1labs.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 <strong>The Daily Subset!</strong></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[{29} Product Led Growth Startup]]></title><description><![CDATA[Featuring Mari Luukkainen, Justin Dorfman, Vala Afshar, George Moller, and Christian Blavier]]></description><link>https://newsletter.v1labs.com/p/29-product-led-growth-startup</link><guid isPermaLink="false">https://newsletter.v1labs.com/p/29-product-led-growth-startup</guid><dc:creator><![CDATA[Dane Lyons]]></dc:creator><pubDate>Mon, 20 Feb 2023 20:02:27 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!cMUv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa85c054a-8b93-414e-84d8-a9ec4d3146ae_1167x726.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_!cMUv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa85c054a-8b93-414e-84d8-a9ec4d3146ae_1167x726.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cMUv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa85c054a-8b93-414e-84d8-a9ec4d3146ae_1167x726.png 424w, https://substackcdn.com/image/fetch/$s_!cMUv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa85c054a-8b93-414e-84d8-a9ec4d3146ae_1167x726.png 848w, https://substackcdn.com/image/fetch/$s_!cMUv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa85c054a-8b93-414e-84d8-a9ec4d3146ae_1167x726.png 1272w, https://substackcdn.com/image/fetch/$s_!cMUv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa85c054a-8b93-414e-84d8-a9ec4d3146ae_1167x726.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!cMUv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa85c054a-8b93-414e-84d8-a9ec4d3146ae_1167x726.png" width="1167" height="726" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a85c054a-8b93-414e-84d8-a9ec4d3146ae_1167x726.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:726,&quot;width&quot;:1167,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1253519,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!cMUv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa85c054a-8b93-414e-84d8-a9ec4d3146ae_1167x726.png 424w, https://substackcdn.com/image/fetch/$s_!cMUv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa85c054a-8b93-414e-84d8-a9ec4d3146ae_1167x726.png 848w, https://substackcdn.com/image/fetch/$s_!cMUv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa85c054a-8b93-414e-84d8-a9ec4d3146ae_1167x726.png 1272w, https://substackcdn.com/image/fetch/$s_!cMUv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa85c054a-8b93-414e-84d8-a9ec4d3146ae_1167x726.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><em>Subsribe to The Daily Subset and develop the skills needed to build a strong product led growth startup.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.v1labs.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://newsletter.v1labs.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>Product: PLG</h2><h4><a href="https://linktr.ee/mariluukkainen">Mari Luukkainen</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/mariluukkainen/status/1627590142671060992&quot;,&quot;full_text&quot;:&quot;When your product is the hero of your growth strategy, you focus on delivering value and solving customer problems. <span class=\&quot;tweet-fake-link\&quot;>#productledgrowth</span>&quot;,&quot;username&quot;:&quot;mariluukkainen&quot;,&quot;name&quot;:&quot;Mari Luukkainen&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Mon Feb 20 08:45:03 +0000 2023&quot;,&quot;photos&quot;:[],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:0,&quot;like_count&quot;:0,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:false}" data-component-name="Twitter2ToDOM"></div><p>I agree that product should be the hero. In fact, I&#8217;m restructuring my newsletter to lead with a product section. While product discussions are often nebulous and philosophical, I&#8217;ll share my take on what &#8220;product led growth&#8221; means more concretely.</p><p>Following the daily product discussion, I&#8217;ll cover 4 pragmatic skills and tools needed for startup generalists. Many skills will be user-centric, such as design, UX, and front-end development. But small teams have many needs. I&#8217;ll also cover backend, marketing, sales, fundraising, planning, and more. &#128171;</p><div><hr></div><h2>Sales: Outbound PLG</h2><h4><a href="https://twitter.com/justindorfman87">Justin Dorfman</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/justindorfman87/status/1626810654773641217&quot;,&quot;full_text&quot;:&quot;Want to know how SDRs need to adjust in the current market?\n\nCurious what Outbound PLG is?\n\nInterested in how AI will impact sales development?\n\nJoin <span class=\&quot;tweet-fake-link\&quot;>@startupjorge</span> and me as we pick <span class=\&quot;tweet-fake-link\&quot;>@titobohrt</span>&#8217;s &#129504; in this super actionable episode of <span class=\&quot;tweet-fake-link\&quot;>#StartupsUnedited</span> <a class=\&quot;tweet-url\&quot; href=\&quot;https://www.youtube.com/watch?v=qRLL8hgO0ts\&quot;>youtube.com/watch?v=qRLL8h&#8230;</a> &quot;,&quot;username&quot;:&quot;justindorfman87&quot;,&quot;name&quot;:&quot;Justin Dorfman&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Sat Feb 18 05:07:39 +0000 2023&quot;,&quot;photos&quot;:[{&quot;img_url&quot;:&quot;https://pbs.substack.com/media/FpOXqsuaYAErf5m.jpg&quot;,&quot;link_url&quot;:&quot;https://t.co/SdP86Rc2Vv&quot;,&quot;alt_text&quot;:null}],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:3,&quot;like_count&quot;:5,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>I&#8217;ve been talking to Justin lately about product led growth and trying to understand how sales fits into a more sustainable PLG strategy. Freemium offerings are very appealing. I&#8217;ve always thought about it more as a marketing+product play. You start by building a self-serve freemium solution. Then use marketing to drive people to the top of the funnel. If the messaging resonates, they&#8217;ll sign up for a free trial and later upgrade if they get value.</p><p>Listening to Tito describe outbound PLG as a sales function makes me consider the importance of a sales/CS role in the process. Having a &#8220;product liaison&#8221; is particularly important when &#8220;inventing a new category&#8221;. When you invent a new category, it&#8217;s hard to drive inbound interest purely from marketing. People don&#8217;t realize a solution exists to a problem they face, so they are unlikely to search for it.</p><p>It&#8217;s often better to actively seek out the people who&#8217;d benefit. Talk to them about the problem to make them aware of the pain point. Then offer a free trial without any obligation. If they use the product, monitor their behavior and try to help them get more value. Then sell.</p><div><hr></div><h2>Design: Beauty &amp; Utility</h2><h4><a href="https://www.amazon.com/The-Pursuit-Social-Business-Excellence/dp/0985356464">Vala Afshar</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/ValaAfshar/status/1627021372802371586&quot;,&quot;full_text&quot;:&quot;Strong engineering design is about art, beauty and utility &quot;,&quot;username&quot;:&quot;ValaAfshar&quot;,&quot;name&quot;:&quot;Vala Afshar&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Sat Feb 18 19:04:58 +0000 2023&quot;,&quot;photos&quot;:[{&quot;img_url&quot;:&quot;https://substackcdn.com/image/upload/w_1028,c_limit,q_auto:best/l_twitter_play_button_rvaygk,w_88/vsgynpa8qjxf9jbilvq4&quot;,&quot;link_url&quot;:&quot;https://t.co/yqJjjncYHt&quot;,&quot;alt_text&quot;:null}],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:77,&quot;like_count&quot;:438,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:&quot;https://video.twimg.com/ext_tw_video/1525378577486647301/pu/vid/720x1270/gqECkppqYV_slpnq.mp4?tag=12&quot;,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>I often advocate for a function-first approach to design. Start with a scrappy solution that validates the utility, then iterate on the design and UX. This bridge is a good counter-example to show that utility-centric design is not always ideal, particularly in cases where you can&#8217;t easily retrofit a design.</p><p>The designers of this bridge didn&#8217;t have the option to start with a boring flat design, then add the waves in later. They had to take a risk. A much more complicated initial design that involved a more complicated engineering process requiring more material could easily backfire. Maybe this bridge required a 5x budget. The result could easily be unhappy users because it takes more effort to cross the bridge. But the upside is much higher than a boring bridge. This has the potential to be a tourist attraction.</p><p>I know nothing about the economics or decision-making that went into this design. But it&#8217;s a reminder not to be dogmatic in your approach to building things. Be flexible and willing to experiment and break the rules.</p><div><hr></div><h2>React: Project Structure</h2><h4><a href="https://georgemoller.gumroad.com/">George Moller</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/_georgemoller/status/1627283086596505602&quot;,&quot;full_text&quot;:&quot;&#9883;&#65039; Opinionated React project structure\n\nMini thread &nbsp;&#8595; &quot;,&quot;username&quot;:&quot;_georgemoller&quot;,&quot;name&quot;:&quot;George Moller&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Sun Feb 19 12:24:55 +0000 2023&quot;,&quot;photos&quot;:[{&quot;img_url&quot;:&quot;https://pbs.substack.com/media/FpVFVTRXoAEYtHL.jpg&quot;,&quot;link_url&quot;:&quot;https://t.co/PyOJ7lkNtG&quot;,&quot;alt_text&quot;:null}],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:505,&quot;like_count&quot;:2708,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>I often use NextJS, which has an entirely different structure. But if I were to work on a React app with this structure, I&#8217;d feel reasonably confident that I could figure out what is going on without too much effort.</p><p>It might take a little time to get used to this structure if you come from an MVC (model view controller) background. It&#8217;s not immediately obvious where the views live, for example. But I&#8217;m personally not a fan of the MVC pattern. It&#8217;s just not intuitive to me where code should live. MVC proponents will say I&#8217;m wrong, and it is intuitive. I&#8217;ll save that rabbit hole for later.</p><p>What&#8217;s important when organizing anything is to name containers as unambiguously as possible. The fewer containers you have to open to find something, the better. I can imagine scenarios with this structure where I might need to open 3 folders to find a file. But I&#8217;d probably find what I&#8217;m looking for in the first folder 80% of the time. That would be a much better success rate than many codebases I&#8217;ve worked on.</p><div><hr></div><h2>Analytics: Vanity Metrics</h2><h4><a href="https://readable.fm/">Christian Blavier</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/cblavier/status/1627604556832989185&quot;,&quot;full_text&quot;:&quot;New record &#128081;\nStraight into my vanity &#127919; &quot;,&quot;username&quot;:&quot;cblavier&quot;,&quot;name&quot;:&quot;Christian Blavier &#127897;&#65039;&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Mon Feb 20 09:42:20 +0000 2023&quot;,&quot;photos&quot;:[{&quot;img_url&quot;:&quot;https://pbs.substack.com/media/FpZplhhWYAYfIU2.jpg&quot;,&quot;link_url&quot;:&quot;https://t.co/OY8AOSun0B&quot;,&quot;alt_text&quot;:null}],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:0,&quot;like_count&quot;:20,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>First of all, congrats to Christian for setting a personal record! &#127881;</p><p>Previously, I&#8217;ve been critical of vanity metrics. Sometimes it feels like ALL metrics are vanity and data-driven decision making is just a pipe dream. More recently, I&#8217;ve become a little more liberal in my view. It&#8217;s not a bad thing if a lot of data is used purely as a behavior-inspiring game mechanic.</p><p>Instead of being frustrated by vanity metrics on dashboards, we should appreciate that these numbers bring people to the data. It&#8217;s then our job to surround the flashy numbers with deeper insights.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.v1labs.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 <strong>The Daily Subset!</strong></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><p></p>]]></content:encoded></item><item><title><![CDATA[{28} Pseudo Selectors, TI-86 & Scrum]]></title><description><![CDATA[Featuring Kait Tremblay, Ali, Colin, Swapstack, HTML All The Things, and Mr. Steal Your Code]]></description><link>https://newsletter.v1labs.com/p/28-pseudo-selectors-ti-86-and-scrum</link><guid isPermaLink="false">https://newsletter.v1labs.com/p/28-pseudo-selectors-ti-86-and-scrum</guid><dc:creator><![CDATA[Dane Lyons]]></dc:creator><pubDate>Wed, 15 Feb 2023 20:30:25 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Y8yh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F036d2a38-9b3c-42e8-b54e-c632776022bf_1167x726.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_!Y8yh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F036d2a38-9b3c-42e8-b54e-c632776022bf_1167x726.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Y8yh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F036d2a38-9b3c-42e8-b54e-c632776022bf_1167x726.png 424w, https://substackcdn.com/image/fetch/$s_!Y8yh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F036d2a38-9b3c-42e8-b54e-c632776022bf_1167x726.png 848w, https://substackcdn.com/image/fetch/$s_!Y8yh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F036d2a38-9b3c-42e8-b54e-c632776022bf_1167x726.png 1272w, https://substackcdn.com/image/fetch/$s_!Y8yh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F036d2a38-9b3c-42e8-b54e-c632776022bf_1167x726.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Y8yh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F036d2a38-9b3c-42e8-b54e-c632776022bf_1167x726.png" width="1167" height="726" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/036d2a38-9b3c-42e8-b54e-c632776022bf_1167x726.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:726,&quot;width&quot;:1167,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1208964,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Y8yh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F036d2a38-9b3c-42e8-b54e-c632776022bf_1167x726.png 424w, https://substackcdn.com/image/fetch/$s_!Y8yh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F036d2a38-9b3c-42e8-b54e-c632776022bf_1167x726.png 848w, https://substackcdn.com/image/fetch/$s_!Y8yh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F036d2a38-9b3c-42e8-b54e-c632776022bf_1167x726.png 1272w, https://substackcdn.com/image/fetch/$s_!Y8yh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F036d2a38-9b3c-42e8-b54e-c632776022bf_1167x726.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><em>Dane Lyons is a startup vet with hot takes and eclectic knowledge writing for the aspiring generalist.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.v1labs.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://newsletter.v1labs.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>Design: Collaborative World Building</h2><h4><a href="https://thatmonstergames.com/">Kait Tremblay</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/kait_zilla/status/1625850564419670016&quot;,&quot;full_text&quot;:&quot;My book Collaborative Worldbuilding for Video Games, a deep dive into practical, interdisciplinary worldbuilding as a story and design engine, is now available for pre-order!!\n\nIt launches on March 8th!\n\nLink &amp;amp; 20% discount code below! &quot;,&quot;username&quot;:&quot;kait_zilla&quot;,&quot;name&quot;:&quot;Kait Tremblay&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Wed Feb 15 13:32:36 +0000 2023&quot;,&quot;photos&quot;:[{&quot;img_url&quot;:&quot;https://pbs.substack.com/media/FpAud7YakAAhGF-.jpg&quot;,&quot;link_url&quot;:&quot;https://t.co/etWTihTXqq&quot;,&quot;alt_text&quot;:null}],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:44,&quot;like_count&quot;:202,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:false}" data-component-name="Twitter2ToDOM"></div><p>Collaborative design is a fascinating topic. One of my favorite games of all time is still Minecraft. I remember playing with a group of friends and coming up with wild physics-defying ideas.</p><p>We&#8217;d collectively mine resources and contribute to the idea. But our visions were always at least slightly different. This required compromise, adaptation, and a lot of communication to arrive at something we were collectively happy with.</p><p>It&#8217;s nice to see modern design frameworks embrace a collaborative workflow. Figma and Miro are great examples that allow multiple designers to work simultaneously. I imagine game design is also moving more in the direction of collaboration. I&#8217;m just not as familiar with the tools.</p><div><hr></div><h2>Frontend: The :is Pseudo Selector</h2><h4><a href="https://bio.link/alicalimli">Ali</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/alicalimli_dev/status/1625744285499891712&quot;,&quot;full_text&quot;:&quot;Simplify your CSS with :is Pseudo Selector &#128071; &quot;,&quot;username&quot;:&quot;alicalimli_dev&quot;,&quot;name&quot;:&quot;Ali &#127919;&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Wed Feb 15 06:30:17 +0000 2023&quot;,&quot;photos&quot;:[{&quot;img_url&quot;:&quot;https://pbs.substack.com/media/Fo_Nz4gXwAA-wb_.png&quot;,&quot;link_url&quot;:&quot;https://t.co/AHTCxsIIPE&quot;,&quot;alt_text&quot;:&quot;CSS :Is Pseudo Selector  Preview&quot;}],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:41,&quot;like_count&quot;:305,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>Using the :is pseudo selector nicely bundles a verbose list of selectors. I do think the more verbose format is probably easier to read/understand for contributors who aren&#8217;t CSS wizards. But I wouldn&#8217;t call the :is syntax unreadable. It&#8217;s just a new concept for a lot of people.</p><p>There are 2 alternatives:</p><ol><li><p><strong>The :not pseudo selector.</strong> If you have a particularly large list of selectors to match, it can be easier to list the selectors you don&#8217;t want to match.</p></li></ol><pre><code>.container :not(.bio){
  font-size: 24px;
}</code></pre><ol start="2"><li><p><strong>Nested CSS.</strong> While nesting is not yet widely supported by browsers, I wouldn&#8217;t be surprised to see broad support in the near future.</p></li></ol><pre><code>.container {
  &amp; h1,
  &amp; a,
  &amp; .btn {
    font-size: 24px;
  }
}</code></pre><p>I don&#8217;t particularly like the &#8220;&amp;&#8221; syntax of nesting. Hopefully, the spec changes to omit the extra &#8220;&amp;&#8221; characters. If so, that&#8217;ll be my preferred method for bundling selectors.</p><div><hr></div><h2>Backend: TI-86</h2><h4><a href="https://colinsent.me/">Colin</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/radiocolin/status/1552654184641486850&quot;,&quot;full_text&quot;:&quot;My TI-86 was my first real intro to practical applications of BASIC\n\n&quot;,&quot;username&quot;:&quot;radiocolin&quot;,&quot;name&quot;:&quot;Colin&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Thu Jul 28 13:56:19 +0000 2022&quot;,&quot;photos&quot;:[],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:0,&quot;like_count&quot;:1,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{&quot;url&quot;:&quot;https://www.polygon.com/23272242/graphing-calculator-games-texas-instruments&quot;,&quot;image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/00ba0f58-e3b7-42ef-9936-f25a4c259cc7_1200x628.jpeg&quot;,&quot;title&quot;:&quot;Meet the developers still making games for your calculator&quot;,&quot;description&quot;:&quot;A look at the thriving community developing games you can play in class&quot;,&quot;domain&quot;:&quot;polygon.com&quot;},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>I&#8217;m surprised there is still a community of game developers hacking away on the TI-86! This was my intro to programming. I have a lot of fond memories of figuring things out without the internet to provide libraries or copy-and-paste snippets.</p><p>Kids writing code these days seem to have less resilience in problem-solving. They Google a solution as soon as they hit a wall.</p><p>Don&#8217;t get me wrong. I don&#8217;t believe there should be a right of passage requiring learning through a painful process of trial and error. Writing code should be highly accessible. A kid should be able to solve a real-world problem the first day they start writing code.</p><p>I&#8217;m frustrated because we are training the next generation to avoid hard problems. When we hit a wall, we should have the instinct to spend time thinking about it. Sometimes that process will inspire us to invent a new solution. Other times that process will help us arrive at the best available solution. Both outcomes are better than the instinct to use the first available solution.</p><div><hr></div><h2>Marketing: Swapstack</h2><h4><a href="https://app.swapstack.co/login?key=signup&amp;r=0QHVv4e8&amp;utm_source=user_referral&amp;utm_medium=referral_link&amp;utm_campaign=regular_referral">Swapstack</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/SwapstackHQ/status/1625238728678551553&quot;,&quot;full_text&quot;:&quot;Our latest changelog is out! \n\n&quot;,&quot;username&quot;:&quot;SwapstackHQ&quot;,&quot;name&quot;:&quot;Swapstack | Newsletter Marketing &amp; Sponsorships &#128176;&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Mon Feb 13 21:01:23 +0000 2023&quot;,&quot;photos&quot;:[],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:0,&quot;like_count&quot;:0,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{&quot;url&quot;:&quot;https://swapstack.canny.io/changelog/refining-per-click-campaigns-squashing-bugs&quot;,&quot;image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/63f02b1a-3594-451f-baf8-70d49372bce9_2524x1384.jpeg&quot;,&quot;title&quot;:&quot;Refining Per-Click Campaigns &amp; Squashing Bugs | Swapstack Changelog&quot;,&quot;description&quot;:&quot;This cycle, we tightened up the new Per-Click experience and gave users more visibility into value and collaboration . Let&#8217;s dig in...&quot;,&quot;domain&quot;:&quot;swapstack.canny.io&quot;},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>It&#8217;s nice to see change logs published for tools that aren&#8217;t dev-centric. I&#8217;d love to see that trend continue.</p><p>I&#8217;ll test Swapstack over the next few weeks to promote The Daily Subset. It&#8217;s nice to have access to small to mid-sized newsletters with approachable price points.</p><div><hr></div><h2>Team: Scrum Alternative</h2><h4><a href="https://www.htmlallthethings.com/landing/podcast">HTML All The Things</a> &amp; <a href="https://twitter.com/EriKnowShift">Mr. Steal Your Code</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/htmleverything/status/1557388999693668352&quot;,&quot;full_text&quot;:&quot;What are the alternatives to SCRUM?\n\nI've been hearing everyone is moving away from it but haven't heard of any good alternatives.&quot;,&quot;username&quot;:&quot;htmleverything&quot;,&quot;name&quot;:&quot;Mike @ HTML All The Things Podcast &#128153;&#128155;&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Wed Aug 10 15:30:47 +0000 2022&quot;,&quot;photos&quot;:[],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:1,&quot;like_count&quot;:29,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/EriKnowShift/status/1557401778517336064&quot;,&quot;full_text&quot;:&quot;<span class=\&quot;tweet-fake-link\&quot;>@htmleverything</span> this might be helpful \n\n&quot;,&quot;username&quot;:&quot;EriKnowShift&quot;,&quot;name&quot;:&quot;Mr. Steal Your Code&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Wed Aug 10 16:21:33 +0000 2022&quot;,&quot;photos&quot;:[],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:1,&quot;like_count&quot;:8,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{&quot;url&quot;:&quot;https://blog.pragmaticengineer.com/project-management-at-big-tech/&quot;,&quot;image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d54dc3d7-f549-4ddf-a91a-8873171bd1e7_1000x512.png&quot;,&quot;title&quot;:&quot;How Big Tech Runs Tech Projects and the Curious Absence of Scrum&quot;,&quot;description&quot;:&quot;A survey of how tech projects run across the industry highlights Scrum being absent from Big Tech. Why is this, and are there takeaways others should take note of?&quot;,&quot;domain&quot;:&quot;blog.pragmaticengineer.com&quot;},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>I&#8217;m not a Scrum fan. I know developers who love it, and others who hate it. I&#8217;m happy for teams that find their Scrum sprint groove. For me, it&#8217;s too formal.</p><p>I strongly prefer a simple Kanban workflow. Instead of everyone trying to break down work into 2-week chunks, members can operate at their own pace. People working on design and rapid prototypes might be working in 1-2 day cycles. People working on bigger infrastructure projects, might have 1+ month cycles.</p><p>Kanban also avoids story estimation which is one of my least favorite parts of Scrum. Investing time randomly guessing how long an ambiguous task might take&#8230;and being held accountable when you are wrong is potentially toxic. Some teams have a healthy story estimation workflow, but it seems kind of pointless to me. Instead of imagining how long something might take, just dive in and make progress.</p><p>Kanban isn&#8217;t perfect though. The todo items are often detached from an organizations <a href="https://amplitude.com/blog/product-north-star-metric">North Star.</a> If you just have a pile of things to work on without a notion of what&#8217;s important, it&#8217;s hard to make good time investments. A good Kanban process needs some notion of priority.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.v1labs.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 <strong>The Daily Subset!</strong></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[{27} State Management, Content Calendars & Recognition]]></title><description><![CDATA[Featuring Fig, Naresh, David K., Vourneen, and Roberto Ferraro]]></description><link>https://newsletter.v1labs.com/p/27-state-management-content-calendars</link><guid isPermaLink="false">https://newsletter.v1labs.com/p/27-state-management-content-calendars</guid><dc:creator><![CDATA[Dane Lyons]]></dc:creator><pubDate>Tue, 14 Feb 2023 18:00:01 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!NuaS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cbfbcff-eeef-42ad-861d-ac49c74e8672_1167x726.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_!NuaS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cbfbcff-eeef-42ad-861d-ac49c74e8672_1167x726.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!NuaS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cbfbcff-eeef-42ad-861d-ac49c74e8672_1167x726.png 424w, https://substackcdn.com/image/fetch/$s_!NuaS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cbfbcff-eeef-42ad-861d-ac49c74e8672_1167x726.png 848w, https://substackcdn.com/image/fetch/$s_!NuaS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cbfbcff-eeef-42ad-861d-ac49c74e8672_1167x726.png 1272w, https://substackcdn.com/image/fetch/$s_!NuaS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cbfbcff-eeef-42ad-861d-ac49c74e8672_1167x726.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!NuaS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cbfbcff-eeef-42ad-861d-ac49c74e8672_1167x726.png" width="1167" height="726" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1cbfbcff-eeef-42ad-861d-ac49c74e8672_1167x726.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:726,&quot;width&quot;:1167,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1441561,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!NuaS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cbfbcff-eeef-42ad-861d-ac49c74e8672_1167x726.png 424w, https://substackcdn.com/image/fetch/$s_!NuaS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cbfbcff-eeef-42ad-861d-ac49c74e8672_1167x726.png 848w, https://substackcdn.com/image/fetch/$s_!NuaS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cbfbcff-eeef-42ad-861d-ac49c74e8672_1167x726.png 1272w, https://substackcdn.com/image/fetch/$s_!NuaS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cbfbcff-eeef-42ad-861d-ac49c74e8672_1167x726.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><em>Dane Lyons is a startup vet with hot takes and eclectic knowledge writing for the aspiring generalist.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.v1labs.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://newsletter.v1labs.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>Tools: Fig</h2><h4><a href="https://fig.io/">Fig.io</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/fig/status/1461368608072744977&quot;,&quot;full_text&quot;:&quot;&#127881; We&#8217;re incredibly excited to announce that Fig is now publicly available for _anyone_ to download!\n\n130 contributors, 200+ CLIs, 4k community members, 10s of thousands of users, and 10s of millions of autocompletes...\n\nAnd we're just getting started &#128293;\n\n<a class=\&quot;tweet-url\&quot; href=\&quot;https://fig.io/blog/post/launching-fig\&quot;>fig.io/blog/post/laun&#8230;</a>&quot;,&quot;username&quot;:&quot;fig&quot;,&quot;name&quot;:&quot;Fig&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Thu Nov 18 16:20:01 +0000 2021&quot;,&quot;photos&quot;:[],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:360,&quot;like_count&quot;:1656,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{&quot;url&quot;:&quot;https://fig.io/blog/post/launching-fig&quot;,&quot;image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a617b352-6c18-4e39-bc72-ec953cd54c6c_1200x627.jpeg&quot;,&quot;title&quot;:&quot;&#127881; Launching Fig&quot;,&quot;description&quot;:&quot;A discussion of Fig&#8217;s mission and vision on the day of our general availability launch.&quot;,&quot;domain&quot;:&quot;fig.io&quot;},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:false}" data-component-name="Twitter2ToDOM"></div><p>I&#8217;m excited about the future of command line tools. The terminal used to be a cryptic space for backend wizardry. But companies like Fig are continually improving the developer experience. Each improvement makes writing commands more approachable. I hope we get to the point where the CLI a tool for backend wizardry and &#8220;no-code developers&#8221;.</p><p>I plan to turn Subset into a collection of open-source publishing tools. I&#8217;ll explore using Fig to do a lot of the heavy lifting for setup and configuration. I&#8217;ll share an update soon!</p><div><hr></div><h2>Design: Highlight Common Options</h2><h4><a href="https://naresh.io/">Naresh</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/naresh_io/status/1464980096381595652&quot;,&quot;full_text&quot;:&quot;&#128161; UI/UX Tip #49\n\nList the most used options at the top\n\n&#9989; Easy to access\n&#9989; Less effort for the user\n\n<span class=\&quot;tweet-fake-link\&quot;>#uidesign</span> <span class=\&quot;tweet-fake-link\&quot;>#UXTips</span> &quot;,&quot;username&quot;:&quot;naresh_io&quot;,&quot;name&quot;:&quot;Naresh&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Sun Nov 28 15:30:47 +0000 2021&quot;,&quot;photos&quot;:[{&quot;img_url&quot;:&quot;https://pbs.substack.com/media/FFSnoOkXIAAm0Tp.jpg&quot;,&quot;link_url&quot;:&quot;https://t.co/RBBS2V1GFh&quot;,&quot;alt_text&quot;:null}],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:4,&quot;like_count&quot;:36,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>It can be very frustrating to select a single option from a very long list. You can often narrow the list by typing, but that doesn&#8217;t always work well in practice. Being reasonably smart about showing what option will most likely be selected is a much nicer experience.</p><p>In the example of selecting a country, you could use javascript to detect the user&#8217;s preferred language.</p><pre><code><code>navigator.language</code></code></pre><p>You&#8217;ll get back a <a href="https://datatracker.ietf.org/doc/html/rfc5646">language tag</a>. This can be used to map to suggested countries that are highly likely to be selected. For me, I get &#8216;en-US&#8217;, which maps to &#8216;United States&#8217;.</p><p>An even better solution would be to detect the preferred language and preselect the most likely option. Then the user doesn&#8217;t even have to interact with the selector if you are correct.</p><div><hr></div><h2>Development: React useReducer vs useState</h2><h4><a href="https://davidk.dev/">David K.</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/DavidKPiano/status/1604870393084665856&quot;,&quot;full_text&quot;:&quot;&#9883;&#65039; Here's a fun React tip: `useReducer` is a better `useState`, and it's easier to adopt than you may think.\n\nGroup related values together and spread them in the reducer. Then, updating is just:\n\nupdateThing({ prop: newValue })\n\nAnd there's even more benefits to `useReducer`... &quot;,&quot;username&quot;:&quot;DavidKPiano&quot;,&quot;name&quot;:&quot;David K. &#127929;&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Mon Dec 19 16:04:53 +0000 2022&quot;,&quot;photos&quot;:[{&quot;img_url&quot;:&quot;https://pbs.substack.com/media/FkWhrzHXkAA5tJS.jpg&quot;,&quot;link_url&quot;:&quot;https://t.co/7rEhlefbuj&quot;,&quot;alt_text&quot;:&quot;Screenshot of React code showing two approaches to updating state:\n\nSeparate useState hooks: \n  const [message, setMessage] = useState('');\n  const [tags, setTags] = useState([]);\n  const [status, setStatus] = useState('active');\n\nSingle useReducer hook:\n  const [todo, updateTodo] = useReducer(\n    (data, partialData) => ({\n      ...data,\n      ...partialData,\n    }),\n    { message: '', tags: [], status: 'active' }\n  );\n&quot;},{&quot;img_url&quot;:&quot;https://pbs.substack.com/media/FkWhrzHXgAMy94c.jpg&quot;,&quot;link_url&quot;:&quot;https://t.co/7rEhlefbuj&quot;,&quot;alt_text&quot;:&quot;Screenshot of React code showing the difference between updating a value:\n\nUpdating with useState:\n        onChange={(e) => {\n          setMessage(e.target.value);\n        }}\n\nUpdating with useReducer:\n        onChange={(e) => {\n          updateTodo({\n            message: e.target.value,\n          });\n        }}&quot;}],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:433,&quot;like_count&quot;:3380,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>People avoid useReducer because the useState syntax is more intuitive. I&#8217;ve certainly fallen into the trap of trying to update a complex data structure with a series of separate useState hooks. Updates get harder and harder to manage, and it&#8217;s easier to make mistakes.</p><p>I&#8217;d recommend useState for variables that are &#8220;independent&#8221; and useReducer for objects of interdependent properties.</p><pre><code>const [darkMode, setDarkMode] = useState(false);
const [article, updateArticle] = useReducer(
  (data, partialData) =&gt; ({
    ...data,
    ...partialData
  }),
  { title: "", descrition: "", tags: [], status: "draft" }
);</code></pre><div><hr></div><h2>Marketing: Content Calendar</h2><h4><a href="https://twitter.com/VourneenMcE">Vourneen</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/VourneenMcE/status/1624080973301272576&quot;,&quot;full_text&quot;:&quot;Do you have a content calendar, or do you just wing it and post whenever?&quot;,&quot;username&quot;:&quot;VourneenMcE&quot;,&quot;name&quot;:&quot;Vourneen&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Fri Feb 10 16:20:52 +0000 2023&quot;,&quot;photos&quot;:[],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:1,&quot;like_count&quot;:11,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>I&#8217;m definitely in the &#8220;wing it&#8221; camp, mainly because I work independently. I assume content calendars are more common in larger teams requiring coordination.</p><p>This has me thinking about alternative solutions. Content calendars are a &#8220;safe solution&#8221; because they optimize for reliability. But what if you take less of a planning and more of an opportunistic approach to creating value? Teams that are &#8220;over-utilized&#8221; because their time has been preallocated through rigorous planning lose the ability to adapt. </p><p> I often think about bounty systems as a way of creating timely incentives without dictating how people invest their time. Some bounties could be safer long-term bets that might mimic content calendars today. i.e. create an asset for an upcoming holiday for $$.</p><p>But imagine if your team doesn&#8217;t feel tethered to the low-risk bets. Let&#8217;s say the next version of ChatGPT is released, creating an opportunity to be a leader in the ensuing conversation. So your team creates a bounty, &#8220;Write the ultimate guide to prompt hacking ChatGPT v2 for $$$$$&#8221;. Someone on the team should be free to drop everything and spend the next 48 hours putting together the internet&#8217;s go-to guide for the next 12+ months.</p><p>People should be free to shed prior obligations to pursue high-value opportunities.</p><div><hr></div><h2>Team: Recognition</h2><h4><a href="https://robertoferraro.substack.com/">Roberto Ferraro</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/FerraroRoberto/status/1617394018295349248&quot;,&quot;full_text&quot;:&quot;&#8220;People will forget what you said, people will forget what you did, but people will never forget how you made them feel.&#8221; Maya Angelou &quot;,&quot;username&quot;:&quot;FerraroRoberto&quot;,&quot;name&quot;:&quot;Roberto Ferraro&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Mon Jan 23 05:29:18 +0000 2023&quot;,&quot;photos&quot;:[{&quot;img_url&quot;:&quot;https://pbs.substack.com/media/FnIjSNbX0AA4ffO.jpg&quot;,&quot;link_url&quot;:&quot;https://t.co/jYbbeDXg6I&quot;,&quot;alt_text&quot;:null}],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:22,&quot;like_count&quot;:113,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>Inspired by Valentine&#8217;s Day, I thought I&#8217;d cover the importance of recognition. I&#8217;m admittedly not great at giving positive reinforcement. It doesn&#8217;t occur to me that people might need it.</p><p>This stems from a self-reliance mindset. By default, I don&#8217;t tend to seek out external validation. In some ways, this is freeing, but it can also be isolating.</p><p>I&#8217;m not suggesting it is wrong to feel good when people say nice things. An over-dependence on external validation is probably unhealthy. But it&#8217;s perfectly natural to want to share your accomplishments.</p><p>Regardless of how you feel about recognition, it&#8217;s good to know people around you need it. It&#8217;s not hard to be generous with your words, just don&#8217;t be inauthentic. When someone accomplishes something, big or small, make it a point to show appreciation.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.v1labs.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 <strong>The Daily Subset!</strong></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><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[{26} Histograms, P5js & Home Offices]]></title><description><![CDATA[Featuring Infogram, Orr Kislev, Valdemar, lindsay, and miggi]]></description><link>https://newsletter.v1labs.com/p/26-histograms-p5js-and-home-offices</link><guid isPermaLink="false">https://newsletter.v1labs.com/p/26-histograms-p5js-and-home-offices</guid><dc:creator><![CDATA[Dane Lyons]]></dc:creator><pubDate>Fri, 10 Feb 2023 19:25:01 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Kobk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea7feec1-e20a-429e-9f28-1d8825df943b_900x500.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_!Kobk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea7feec1-e20a-429e-9f28-1d8825df943b_900x500.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Kobk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea7feec1-e20a-429e-9f28-1d8825df943b_900x500.png 424w, https://substackcdn.com/image/fetch/$s_!Kobk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea7feec1-e20a-429e-9f28-1d8825df943b_900x500.png 848w, https://substackcdn.com/image/fetch/$s_!Kobk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea7feec1-e20a-429e-9f28-1d8825df943b_900x500.png 1272w, https://substackcdn.com/image/fetch/$s_!Kobk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea7feec1-e20a-429e-9f28-1d8825df943b_900x500.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Kobk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea7feec1-e20a-429e-9f28-1d8825df943b_900x500.png" width="900" height="500" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ea7feec1-e20a-429e-9f28-1d8825df943b_900x500.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:500,&quot;width&quot;:900,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:399855,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Kobk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea7feec1-e20a-429e-9f28-1d8825df943b_900x500.png 424w, https://substackcdn.com/image/fetch/$s_!Kobk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea7feec1-e20a-429e-9f28-1d8825df943b_900x500.png 848w, https://substackcdn.com/image/fetch/$s_!Kobk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea7feec1-e20a-429e-9f28-1d8825df943b_900x500.png 1272w, https://substackcdn.com/image/fetch/$s_!Kobk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea7feec1-e20a-429e-9f28-1d8825df943b_900x500.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><h2>Design: Histograms</h2><h4><a href="https://infogram.com/">Infogram</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/infogram/status/895374958733520897&quot;,&quot;full_text&quot;:&quot;Exploring Histograms: What's so hard about them? <a class=\&quot;tweet-url\&quot; href=\&quot;http://hubs.ly/H08jqSl0\&quot;>hubs.ly/H08jqSl0</a> by <span class=\&quot;tweet-fake-link\&quot;>@AmeliaMN</span> <span class=\&quot;tweet-fake-link\&quot;>#data</span> <span class=\&quot;tweet-fake-link\&quot;>#design</span> &quot;,&quot;username&quot;:&quot;infogram&quot;,&quot;name&quot;:&quot;Infogram&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Wed Aug 09 20:03:20 +0000 2017&quot;,&quot;photos&quot;:[{&quot;img_url&quot;:&quot;https://pbs.substack.com/media/DG0CxvuXUAAkgcN.jpg&quot;,&quot;link_url&quot;:&quot;https://t.co/McDZuXyTq7&quot;,&quot;alt_text&quot;:null}],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:0,&quot;like_count&quot;:2,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:false}" data-component-name="Twitter2ToDOM"></div><p>I love histograms. They are often an excellent abstraction to a data set. If well-designed, they can convey so much information at a glance.</p><p>They can also be beautiful, like in this chart from Infogram. It could be simplified to convey similar information in a fraction of the space. But if you want to make it the centerpiece in a magazine or a web page, go nuts. A highly visual implementation certainly grabs a reader&#8217;s attention.</p><div><hr></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.v1labs.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://newsletter.v1labs.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>Frontend: P5js Guides</h2><h4><a href="https://www.fxhash.xyz/u/Orr%20Kislev">Orr Kislev</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/OrrKislev/status/1623024377469014039&quot;,&quot;full_text&quot;:&quot;I am very excited about this:\nmade a tool to visualize whats going on in p5js\n\nyou write a normal p5js code and it turns it into a step-by-step animated process\n\n<a class=\&quot;tweet-url\&quot; href=\&quot;https://editor.p5js.org/orrkislev/sketches/nzmWWZvliy\&quot;>editor.p5js.org/orrkislev/sket&#8230;</a> &quot;,&quot;username&quot;:&quot;OrrKislev&quot;,&quot;name&quot;:&quot;Orr Kislev&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Tue Feb 07 18:22:20 +0000 2023&quot;,&quot;photos&quot;:[{&quot;img_url&quot;:&quot;https://substackcdn.com/image/upload/w_1028,c_limit,q_auto:best/l_twitter_play_button_rvaygk,w_88/ongj593mzvkaxu8yw19s&quot;,&quot;link_url&quot;:&quot;https://t.co/iwNObjnKcG&quot;,&quot;alt_text&quot;:null}],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:117,&quot;like_count&quot;:1066,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:&quot;https://video.twimg.com/ext_tw_video/1623023831823663105/pu/vid/720x732/IFVTO9EERN-uARS2.mp4?tag=12&quot;,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>P5js is my preferred library for building custom interactive data visualization on the web. Sometimes it can be challenging to mentally keep track of the underlying grid as you transform shapes. Seeing the guide lines could be really useful while developing.</p><p>Although I find the demo to be disorienting because it dives straight into a complex example. I&#8217;d like to see a simpler demo with and without the guides.</p><div><hr></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.v1labs.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share The Daily Subset&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://newsletter.v1labs.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share The Daily Subset</span></a></p><div><hr></div><h2>Backend: DNS</h2><h4><a href="https://heyvaldemar.start.page/">Valdemar</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/heyValdemar/status/1621878268574965764&quot;,&quot;full_text&quot;:&quot;The DNS system hierarchy\n\n<span class=\&quot;tweet-fake-link\&quot;>#devops</span> <span class=\&quot;tweet-fake-link\&quot;>#devsecops</span> <span class=\&quot;tweet-fake-link\&quot;>#kubernetes</span> <span class=\&quot;tweet-fake-link\&quot;>#cicd</span> <span class=\&quot;tweet-fake-link\&quot;>#k8s</span> <span class=\&quot;tweet-fake-link\&quot;>#linux</span> <span class=\&quot;tweet-fake-link\&quot;>#docker</span> <span class=\&quot;tweet-fake-link\&quot;>#sysadmin</span> <span class=\&quot;tweet-fake-link\&quot;>#automation</span> <span class=\&quot;tweet-fake-link\&quot;>#technology</span> <span class=\&quot;tweet-fake-link\&quot;>#cloudcomputing</span> <span class=\&quot;tweet-fake-link\&quot;>#serverless</span> <span class=\&quot;tweet-fake-link\&quot;>#microservices</span> <span class=\&quot;tweet-fake-link\&quot;>#aws</span> <span class=\&quot;tweet-fake-link\&quot;>#cheatsheet</span> <span class=\&quot;tweet-fake-link\&quot;>#dns</span> &quot;,&quot;username&quot;:&quot;heyValdemar&quot;,&quot;name&quot;:&quot;Valdemar&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Sat Feb 04 14:28:06 +0000 2023&quot;,&quot;photos&quot;:[{&quot;img_url&quot;:&quot;https://pbs.substack.com/media/FoIRe1TX0AAVMLr.jpg&quot;,&quot;link_url&quot;:&quot;https://t.co/fzF5WhWkBK&quot;,&quot;alt_text&quot;:null}],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:61,&quot;like_count&quot;:160,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>DNS will never make sense to me. I&#8217;d rather fight regex battles than try and figure out why a domain configuration isn&#8217;t working. I think the frustrating thing for me is the painfully slow feedback loop. You make a change and have to wait an undetermined period of time to see if it worked.</p><p>It&#8217;s helpful to see how the underlying system is designed. I&#8217;d love to see a visual troubleshooting guide. When you run pings and other commands, how does information flow through the system to give you a response?</p><p>While my daily work depends on DNS, it&#8217;s hard to justify taking a deeper dive. It&#8217;s a reliable abstraction that works well when you get the config right. I hope DNS evolves to be a little more bulletproof and transparent. Until then, thanks to people like Valdemar for helping keep systems connected! &#127867;</p><div><hr></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.v1labs.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://newsletter.v1labs.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>Marketing: Emotional Responses</h2><h4><a href="https://exblogger.ca/">lindsay</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/LindsayDianne/status/1623491121606430720&quot;,&quot;full_text&quot;:&quot;It's not anyone's responsibility to predict your emotional response to certain words and phrases they might use (within reason).\n Obviously some things are inflammatory but this need to be babysat so your feelings never get hurt and your ideas are never challenged is not it.&quot;,&quot;username&quot;:&quot;LindsayDianne&quot;,&quot;name&quot;:&quot;lindsay &#9732;&#65039;&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Thu Feb 09 01:17:01 +0000 2023&quot;,&quot;photos&quot;:[],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:0,&quot;like_count&quot;:7,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>I agree with Lindsay. It should be rare for individuals to be held accountable for using words that trigger negative emotional responses. By setting that expectation, we discourage dialog. This is particularly worrying because people are now avoiding the hard discussions necessary to lay the groundwork for a more equitable society.</p><p>I also agree that words should not be used as inflammatory weapons. There are a lot of words that we collectively agree are inflammatory. It&#8217;s good to be thoughtful in our use of those words.</p><p>But I didn&#8217;t seek out this tweet because I wanted to rant about modern society placing limits on our vocabularies. I&#8217;m much more interested in how words can inspire a positive emotional response.</p><p>In marketing, we should try to predict an audience&#8217;s emotional response to a collection of words. That response should be in line with the brand identity. This is not malicious, it&#8217;s thoughtful communication.</p><p>I had a <a href="https://twitter.com/AndrewDiMola/status/1619070189496311808">discussion with Grammarly</a> last year about the topic.</p><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/duilen/status/1562505346706419712&quot;,&quot;full_text&quot;:&quot;I'd like to see an app that qualitatively rates every word in the English language. Data should be shared through a free API.\n\nPotential criteria: (1-10)\n- Pretentiousness\n- Usage\n- Awareness\n- Friendliness\n- Phonetic\n- Corporate\n- Pronunciation Difficulty\n- Sexual\n- Ambiguous&quot;,&quot;username&quot;:&quot;duilen&quot;,&quot;name&quot;:&quot;Dane Lyons&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Wed Aug 24 18:21:19 +0000 2022&quot;,&quot;photos&quot;:[],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:0,&quot;like_count&quot;:0,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>With that data, it would be amazing to create criteria for a brand identity. Maybe you want a brand that is &#8220;friendly, fun, and smart&#8221;. Then you could use data to highlight words in a draft document that either reinforces or violates your brand words. By maximizing highlighted green words and minimizing red words, you increase the probability of a positive emotional response.</p><div><hr></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.v1labs.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share The Daily Subset&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://newsletter.v1labs.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share The Daily Subset</span></a></p><div><hr></div><h2>Team: Home Offices</h2><h4><a href="https://www.figma.com/@miggi">miggi</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/miggi/status/1539082301522554881&quot;,&quot;full_text&quot;:&quot;Home office photos &quot;,&quot;username&quot;:&quot;miggi&quot;,&quot;name&quot;:&quot;miggi&#8482;&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Tue Jun 21 03:06:30 +0000 2022&quot;,&quot;photos&quot;:[{&quot;img_url&quot;:&quot;https://pbs.substack.com/media/FVvrMa-WIAAqEG5.jpg&quot;,&quot;link_url&quot;:&quot;https://t.co/qGbFiezNj9&quot;,&quot;alt_text&quot;:&quot;Desk&quot;},{&quot;img_url&quot;:&quot;https://pbs.substack.com/media/FVvrMa_XoAAGQV_.jpg&quot;,&quot;link_url&quot;:&quot;https://t.co/qGbFiezNj9&quot;,&quot;alt_text&quot;:&quot;Room under red and blue lights&quot;},{&quot;img_url&quot;:&quot;https://pbs.substack.com/media/FVvrMbEXwAA7W3D.jpg&quot;,&quot;link_url&quot;:&quot;https://t.co/qGbFiezNj9&quot;,&quot;alt_text&quot;:&quot;Home office Under typical lights&quot;}],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:16,&quot;like_count&quot;:339,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>With so many teams going remote, I&#8217;d love to see companies increase budgets for contributors to beef up their home offices. This is where people will spend most of their time in 2023. They should be working in spaces that are comfortable, ergonomic, and inspiring.</p><p>My personal space is a dungeon, so I won&#8217;t be sharing photos anytime soon. But I&#8217;d love to redesign it at some point.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.v1labs.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 <strong>The Daily Subset!</strong></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[{25} AI Assisted Design, Continuous Deployments & Your Style]]></title><description><![CDATA[Featuring Ben Blaiszik, Manoela Ilic, Jimmy Cleveland, Bryan Hutchinson, and Tony Fadell]]></description><link>https://newsletter.v1labs.com/p/25-ai-assisted-design-continuous</link><guid isPermaLink="false">https://newsletter.v1labs.com/p/25-ai-assisted-design-continuous</guid><dc:creator><![CDATA[Dane Lyons]]></dc:creator><pubDate>Thu, 09 Feb 2023 17:45:38 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ks1w!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dd86a19-1bf2-41ec-a0b0-bd74bfb6b846_900x500.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_!ks1w!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dd86a19-1bf2-41ec-a0b0-bd74bfb6b846_900x500.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ks1w!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dd86a19-1bf2-41ec-a0b0-bd74bfb6b846_900x500.png 424w, https://substackcdn.com/image/fetch/$s_!ks1w!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dd86a19-1bf2-41ec-a0b0-bd74bfb6b846_900x500.png 848w, https://substackcdn.com/image/fetch/$s_!ks1w!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dd86a19-1bf2-41ec-a0b0-bd74bfb6b846_900x500.png 1272w, https://substackcdn.com/image/fetch/$s_!ks1w!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dd86a19-1bf2-41ec-a0b0-bd74bfb6b846_900x500.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ks1w!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dd86a19-1bf2-41ec-a0b0-bd74bfb6b846_900x500.png" width="900" height="500" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5dd86a19-1bf2-41ec-a0b0-bd74bfb6b846_900x500.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:500,&quot;width&quot;:900,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:558552,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ks1w!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dd86a19-1bf2-41ec-a0b0-bd74bfb6b846_900x500.png 424w, https://substackcdn.com/image/fetch/$s_!ks1w!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dd86a19-1bf2-41ec-a0b0-bd74bfb6b846_900x500.png 848w, https://substackcdn.com/image/fetch/$s_!ks1w!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dd86a19-1bf2-41ec-a0b0-bd74bfb6b846_900x500.png 1272w, https://substackcdn.com/image/fetch/$s_!ks1w!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5dd86a19-1bf2-41ec-a0b0-bd74bfb6b846_900x500.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><h2>Design: AI Assisted Design</h2><h4><a href="https://scholar.google.com/citations?user=J-x5n7IAAAAJ&amp;hl=en">Ben Blaiszik</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/BenBlaiszik/status/1623505898982219776&quot;,&quot;full_text&quot;:&quot;The first company to add a <span class=\&quot;tweet-fake-link\&quot;>#midjourney</span> to web asset pipeline is going to make an insane amount of money. <span class=\&quot;tweet-fake-link\&quot;>@justinstrong18</span> \n\nRapid prototyping a new web dashboard with <span class=\&quot;tweet-fake-link\&quot;>#AI</span> art. &quot;,&quot;username&quot;:&quot;BenBlaiszik&quot;,&quot;name&quot;:&quot;Ben Blaiszik&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Thu Feb 09 02:15:44 +0000 2023&quot;,&quot;photos&quot;:[{&quot;img_url&quot;:&quot;https://pbs.substack.com/media/FofZkrKWAAAOfap.jpg&quot;,&quot;link_url&quot;:&quot;https://t.co/jfubLllcBd&quot;,&quot;alt_text&quot;:null}],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:1,&quot;like_count&quot;:5,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:false}" data-component-name="Twitter2ToDOM"></div><p>It&#8217;s a natural evolution to go from AI generated art to AI generated interfaces. What I&#8217;d like to see is an AI assisted design workflow. Here&#8217;s what I have in mind:</p><ol><li><p>A human provides the v1 design. This could be as simple as a napkin sketch or as complicated as a coded functional prototype.</p></li><li><p>AI takes the initial design along with prompts suggesting the direction the team would like to take the design.</p></li><li><p>AI provides a collection of variants that iterate on the initial design using the prompts as a guide.</p></li><li><p>The team takes a promising variant and marks it up with suggested improvements, and adjusts the prompt.</p></li><li><p>Steps 3 and 4 are repeated to refine the design until the team is happy with the results.</p></li></ol><div><hr></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.v1labs.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share The Daily Subset&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://newsletter.v1labs.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share The Daily Subset</span></a></p><div><hr></div><h2>Frontend: Reactive Shaders</h2><h4><a href="https://tympanus.net/codrops/">Manoela Ilic</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/crnacura/status/1622987054991679488&quot;,&quot;full_text&quot;:&quot;New <span class=\&quot;tweet-fake-link\&quot;>#tutorial</span> + video by <span class=\&quot;tweet-fake-link\&quot;>@tBlankensmith</span> where you'll learn how to create audio reactive shaders with <span class=\&quot;tweet-fake-link\&quot;>@shaderpark</span> + <span class=\&quot;tweet-fake-link\&quot;>@threejs</span>&#128378;&#127926;&#127912;\n\n<a class=\&quot;tweet-url\&quot; href=\&quot;https://tympanus.net/codrops/2023/02/07/audio-reactive-shaders-with-three-js-and-shader-park/\&quot;>tympanus.net/codrops/2023/0&#8230;</a>\n\n<span class=\&quot;tweet-fake-link\&quot;>#creativecoding</span> <span class=\&quot;tweet-fake-link\&quot;>#frontend</span> <span class=\&quot;tweet-fake-link\&quot;>#javascript</span> <span class=\&quot;tweet-fake-link\&quot;>#webgl</span> <span class=\&quot;tweet-fake-link\&quot;>#webdevelopment</span> \n\nThank you, Torin! &#128591;&#128293; &quot;,&quot;username&quot;:&quot;crnacura&quot;,&quot;name&quot;:&quot;Manoela Ilic&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Tue Feb 07 15:54:02 +0000 2023&quot;,&quot;photos&quot;:[{&quot;img_url&quot;:&quot;https://substackcdn.com/image/upload/w_1028,c_limit,q_auto:best/l_twitter_play_button_rvaygk,w_88/efpzxhosjkwbtbuamieg&quot;,&quot;link_url&quot;:&quot;https://t.co/avS6EDvRlM&quot;,&quot;alt_text&quot;:null}],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:22,&quot;like_count&quot;:126,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:&quot;https://video.twimg.com/ext_tw_video/1622986782999552002/pu/vid/576x360/jQ01sodKSWPBNexX.mp4?tag=12&quot;,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>It&#8217;s amazing to see what browsers can do these days with WebGL.</p><p>Taking real-time data from an audio source and applying it to a shader might seem like a &#8220;neat trick&#8221; with no real-world application. To that, I&#8217;d say:</p><ol><li><p>Art is a real-world application.</p></li><li><p>Adding techniques like this to your tool belt can come in handy in unexpected ways. Maybe one day, you find yourself working with streaming data from weather instruments. You need to find a way to make sense of it, and the static visualizations just aren&#8217;t cutting it. Suddenly you remember this tutorial and realize you can use Three.js to create a more dynamic visualization.</p></li></ol><div><hr></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.v1labs.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://newsletter.v1labs.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>Backend: Continuous Deployments</h2><h4><a href="https://blog.jimmydc.com/">Jimmy Cleveland</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/JimmyDCleveland/status/1406985078270398466&quot;,&quot;full_text&quot;:&quot;The first part of the Continuous Integration series is all live now, and the first video of the next part is up this morning.\n\nToday's video is about Continuous Deployment, using Vercel as an introduction to that world. Next will be Lighthouse CI.\n\n&quot;,&quot;username&quot;:&quot;JimmyDCleveland&quot;,&quot;name&quot;:&quot;Jimmy Cleveland&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Mon Jun 21 14:39:17 +0000 2021&quot;,&quot;photos&quot;:[],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:0,&quot;like_count&quot;:2,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{&quot;url&quot;:&quot;https://www.youtube.com/watch?v=gV9HUQTY03Q&quot;,&quot;image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b750a748-7339-4b8c-9616-995a23c911fe_1280x720.jpeg&quot;,&quot;title&quot;:&quot;CI #7 - Continuous Deployment (CI/CD) with Vercel&quot;,&quot;description&quot;:&quot;In modern projects, Continuous Deployment is a common part of the Continuous Integration workflow. It&#8217;s commonly referred to as CI/CD, but the CD part is rea...&quot;,&quot;domain&quot;:&quot;youtube.com&quot;},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>I&#8217;m a big fan of Vercel. I&#8217;m able to spend the majority of my time thinking about how my apps are designed and function without worrying about all of the supporting infrastructure that helps get my code from my personal laptop to the internet.</p><p>Even though Vercel automates everything for my preferred NextJS tech stack, it is still useful to take a deeper dive into continuous deployments. Jimmy walks you through using Vercel to deploy a minimal webpack javascript app. It&#8217;s particularly useful to see how preview deployments work on feature branches.</p><div><hr></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.v1labs.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share The Daily Subset&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://newsletter.v1labs.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share The Daily Subset</span></a></p><div><hr></div><h2>Marketing: Honing Your Style</h2><h4><a href="https://phantomgrowth.co/">Bryan Hutchinson</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/bryhutch/status/1622969972657098754&quot;,&quot;full_text&quot;:&quot;Writing tip:\n\nStudy what catches YOUR attention:\n\n&#8226; Why did you stop scrolling?\n&#8226; What compelled you to reply?\n&#8226; Why are you nearly p*ssing yourself laughing?\n\nYou're a creator now, remember? \n\nConsume to improve, not for dopamine hits!&quot;,&quot;username&quot;:&quot;bryhutch&quot;,&quot;name&quot;:&quot;Bryan Hutchinson&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Tue Feb 07 14:46:09 +0000 2023&quot;,&quot;photos&quot;:[],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:0,&quot;like_count&quot;:28,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>What I like about this tip is the emphasis on YOUR attention. You are not offloading your evaluation of &#8220;what is good&#8221; to the crowd or an external authority. This allows you to learn from the output of others while honing your personal style.</p><p>In addition to benefits to your writing and style, general awareness is living. Don&#8217;t shut yourself off to the outside world. Take it in.</p><div><hr></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.v1labs.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://newsletter.v1labs.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>Team: Design Everything</h2><h4><a href="https://tonyfadell.com/">Tony Fadell</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/tfadell/status/1623702033147600899&quot;,&quot;full_text&quot;:&quot;Everything that needs to be created needs to be designed - not just products and marketing, but processes, experiences, organizations, forms, and materials.&quot;,&quot;username&quot;:&quot;tfadell&quot;,&quot;name&quot;:&quot;Tony Fadell&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Thu Feb 09 15:15:06 +0000 2023&quot;,&quot;photos&quot;:[],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:28,&quot;like_count&quot;:152,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>The realization that you are not restricted by established conventions should be a freeing sensation. Your process, brand, schedule, work environment, revenue model, and everything in between is waiting to be designed or redesigned.</p><p>Each design is an opportunity to improve in some area. A simple shift can reduce cost, increase revenue, improve moral, add trust, or reduce effort.</p><p>This might feel overwhelming, but you don&#8217;t have to design everything at once. Do one thing at a time. Focus on making a single improvement, then move on to the next design opportunity.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.v1labs.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 <strong>The Daily Subset!</strong></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[{24} Empathy Gap, Gelato & Work Events]]></title><description><![CDATA[Featuring Dr. Pete Meyers, Emma Dawson, Gelato, The Sample, and Adam Grant]]></description><link>https://newsletter.v1labs.com/p/24-empathy-gap-gelato-work-events</link><guid isPermaLink="false">https://newsletter.v1labs.com/p/24-empathy-gap-gelato-work-events</guid><dc:creator><![CDATA[Dane Lyons]]></dc:creator><pubDate>Wed, 08 Feb 2023 18:48:49 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Hy7p!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb1b0bb4-75ce-44df-86ae-182b6c367f32_900x500.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_!Hy7p!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb1b0bb4-75ce-44df-86ae-182b6c367f32_900x500.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Hy7p!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb1b0bb4-75ce-44df-86ae-182b6c367f32_900x500.png 424w, https://substackcdn.com/image/fetch/$s_!Hy7p!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb1b0bb4-75ce-44df-86ae-182b6c367f32_900x500.png 848w, https://substackcdn.com/image/fetch/$s_!Hy7p!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb1b0bb4-75ce-44df-86ae-182b6c367f32_900x500.png 1272w, https://substackcdn.com/image/fetch/$s_!Hy7p!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb1b0bb4-75ce-44df-86ae-182b6c367f32_900x500.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Hy7p!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb1b0bb4-75ce-44df-86ae-182b6c367f32_900x500.png" width="900" height="500" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fb1b0bb4-75ce-44df-86ae-182b6c367f32_900x500.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:500,&quot;width&quot;:900,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:393086,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Hy7p!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb1b0bb4-75ce-44df-86ae-182b6c367f32_900x500.png 424w, https://substackcdn.com/image/fetch/$s_!Hy7p!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb1b0bb4-75ce-44df-86ae-182b6c367f32_900x500.png 848w, https://substackcdn.com/image/fetch/$s_!Hy7p!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb1b0bb4-75ce-44df-86ae-182b6c367f32_900x500.png 1272w, https://substackcdn.com/image/fetch/$s_!Hy7p!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb1b0bb4-75ce-44df-86ae-182b6c367f32_900x500.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><h2>Design: Empathy Gap</h2><h4><a href="https://twitter.com/dr_pete">Dr. Pete Meyers</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/dr_pete/status/963080616102301696&quot;,&quot;full_text&quot;:&quot;<span class=\&quot;tweet-fake-link\&quot;>@SEOAware</span> <span class=\&quot;tweet-fake-link\&quot;>@saffyre9</span> Honestly, I think that's the essence of most UX problems -- an inability to separate what I like or what I know from my audience. It's an empathy gap, ultimately.&quot;,&quot;username&quot;:&quot;dr_pete&quot;,&quot;name&quot;:&quot;Dr. Pete Meyers&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Mon Feb 12 16:01:26 +0000 2018&quot;,&quot;photos&quot;:[],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:0,&quot;like_count&quot;:1,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:false}" data-component-name="Twitter2ToDOM"></div><p>The <a href="https://en.wikipedia.org/wiki/Empathy_gap">empathy gap</a> is an important concept related to UX design that doesn&#8217;t get enough attention. When I search &#8220;empathy gap ux&#8221; in Twitter, here is one of the few relevant tweets from Dr. Pete Meyers. It&#8217;s from 2018!</p><p>Designers tend to use more informal language to describe the concept. You can probably find 5k tweets daily about people saying, &#8220;talk to your users&#8221;. That is essentially saying, &#8220;gather more information about your users to help close the empathy gap&#8221;. This is good, it&#8217;s the foundation for <a href="https://www.interaction-design.org/literature/topics/user-centered-design">user-centered design (UCD)</a>.</p><p>The problem that I have with the empathy gap is the underlying assumption that the more empathy, the better. The more pain you feel on behalf of an individual user when they experience friction within your app, the more motivated you are to put on blinders and do whatever it takes to relieve that pain.</p><p>There is an <strong>opportunity cost</strong> to focusing on an individual&#8217;s pain.</p><p>It forces your team into a reactive mindset that neglects the collective pain. Understanding and addressing the collective pain should be the focal point of a small team with limited time.</p><p>To rally around the collective pain, I believe it&#8217;s important to do the cliche &#8220;talk to your users&#8221;. The more information you gather, the more you close the <strong>cognitive empathy gap</strong>. This means you can think from your user&#8217;s perspectives and intellectually understand their problems.</p><p>It&#8217;s also important to avoid biases created by closing the <strong>affective empathy gap</strong>. It&#8217;s ok to feel an individual user&#8217;s pain. But it&#8217;s a good practice to put a little time between feeling the pain and reacting to it, even if it&#8217;s only a few hours. This allows you to step back and think more rationally about how you are investing your time.</p><p>Being rational instead of emotional doesn&#8217;t mean you shouldn&#8217;t communicate with compassion. Be open and honest and say, &#8220;I feel your pain. A fix is realistically at least a few months away. Here is a hack you might consider&#8230;&#8221;</p><div><hr></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.v1labs.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share The Daily Subset&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://newsletter.v1labs.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share The Daily Subset</span></a></p><div><hr></div><h2>Frontend: Description Lists</h2><h4><a href="https://www.emmadawson.dev/">Emma Dawson</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/EmmaDawsonDev/status/1621611462656417793&quot;,&quot;full_text&quot;:&quot;When defining words &amp;amp; phrases on websites HTML provides a definition tag &amp;lt; dfn &amp;gt; or definition list tags &amp;lt; dl &amp;gt; &amp;lt; dd &amp;gt; and &amp;lt; dt &amp;gt;\n\nThe aria equivalent for &amp;lt; dt &amp;gt; is role=term &amp;amp; for &amp;lt; dd &amp;gt; or &amp;lt; dfn &amp;gt; you can use role=definition. Use these if it's not possible to use semantic HTML &quot;,&quot;username&quot;:&quot;EmmaDawsonDev&quot;,&quot;name&quot;:&quot;Emma Dawson&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Fri Feb 03 20:47:55 +0000 2023&quot;,&quot;photos&quot;:[{&quot;img_url&quot;:&quot;https://pbs.substack.com/media/FoEfB2oXgAA8dCK.jpg&quot;,&quot;link_url&quot;:&quot;https://t.co/zd03FRutz9&quot;,&quot;alt_text&quot;:&quot;Code snippet with examples of aria role=term and role=definition \n<dl>\n  <dt>a11y</dt>\n  <dd>A shortened form of the word accessibility, replacing the 11 letters between a and y with the number 11</dd>\n</dl>\n\n<div>\n  <div role=\&quot;term\&quot; aria-labelledby=\&quot;a11y-definition\&quot;>a11y</div>\n  <div role=\&quot;definition\&quot; id=\&quot;a11y-definition\&quot;>A shortened form of the word accessibility, replacing the 11 letters between a and y with the number 11</div>\n</div>\n\n<p><dfn>a11y</dfn> stands for accessibility</p>\n\n<p><span role=\&quot;definition\&quot;>a11y</span> stands for accessibility</p>&quot;}],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:0,&quot;like_count&quot;:9,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>Semantic markup goes beyond organization and style, it lends context to your content. The next time you define a term in your content, consider going beyond basic <code>&lt;div&gt;</code> and <code>&lt;p&gt;</code> tags. My preference would probably be the <code>&lt;dfn&gt;</code>, <code>&lt;dl&gt;</code>, <code>&lt;dd&gt;</code>, and <code>&lt;dt&gt;</code> tags.</p><p>I do wish browsers would have created a different convention for definitions. More verbose tags would be more intuitive than acronyms. The role=term or role=definition is more verbose but less clean. &#128557;</p><div><hr></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.v1labs.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://newsletter.v1labs.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>Backend: Gelato</h2><h4><a href="https://beta.app.gelato.network/">Gelato</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/gelatonetwork/status/1623075655616176128&quot;,&quot;full_text&quot;:&quot;Web3 Functions are here to change the game &#128293; For real.\n\nWant to run decentralized cloud functions that connect your smart contracts to arbitrary off-chain data &amp;amp; computation? \n\nSay no more &#128073; <a class=\&quot;tweet-url\&quot; href=\&quot;https://bit.ly/3HJqDUF\&quot;>bit.ly/3HJqDUF</a> &quot;,&quot;username&quot;:&quot;gelatonetwork&quot;,&quot;name&quot;:&quot;Gelato&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Tue Feb 07 21:46:06 +0000 2023&quot;,&quot;photos&quot;:[{&quot;img_url&quot;:&quot;https://pbs.substack.com/media/FoZSsLDWcAE6ymy.jpg&quot;,&quot;link_url&quot;:&quot;https://t.co/VXEndKrX6O&quot;,&quot;alt_text&quot;:null}],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:3,&quot;like_count&quot;:14,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>This is an exciting development in web3 land! The ability to create decentralized cloud functions should open the door for new use cases.</p><p>My first thought is wondering if this might be compatible with oracles to trigger contracts based on off-chain events. Clicking the discover tab on Gelato brings up a lot of functions with oracle in the name, so I assume this is useful for oracles.</p><p>Here is a more in-depth description of <a href="https://docs.gelato.network/introduction/what-is-gelato">what Gelato is</a>, along with documentation.</p><div><hr></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.v1labs.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share The Daily Subset&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://newsletter.v1labs.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share The Daily Subset</span></a></p><div><hr></div><h2>Marketing: The Sample</h2><h4><a href="https://thesample.ai/?ref=7722">The Sample</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/the_sample_umm/status/1517037677152858113&quot;,&quot;full_text&quot;:&quot;New landing page copy &quot;,&quot;username&quot;:&quot;the_sample_umm&quot;,&quot;name&quot;:&quot;The Sample&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Thu Apr 21 07:09:02 +0000 2022&quot;,&quot;photos&quot;:[{&quot;img_url&quot;:&quot;https://pbs.substack.com/media/FQ2Ztd8VsAA1C1i.jpg&quot;,&quot;link_url&quot;:&quot;https://t.co/zAJxvjgCYa&quot;,&quot;alt_text&quot;:null}],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:1,&quot;like_count&quot;:3,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>As an indie writer, I want to make my content discoverable without shoving it down people&#8217;s throats via spam. So the concept of The Sample resonates with me. I can focus on content while they match up my words with readers.</p><p>I just integrated their app, so we&#8217;ll see how it works. I may post a follow-up with my thoughts on their analytics and overall service soon. &#128406;</p><div><hr></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.v1labs.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://newsletter.v1labs.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>Team: Work Events</h2><h4><a href="https://adamgrant.net/">Adam Grant</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/AdamMGrant/status/1622979025814622209&quot;,&quot;full_text&quot;:&quot;Choosing not to attend an unpaid work event doesn't reveal the absence of loyalty. It reflects the presence of other priorities.\n\nIf team-building, dinners, and parties are part of the job, they should be compensated.\n\nOtherwise, attendance should be an option, not an obligation.&quot;,&quot;username&quot;:&quot;AdamMGrant&quot;,&quot;name&quot;:&quot;Adam Grant&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Tue Feb 07 15:22:07 +0000 2023&quot;,&quot;photos&quot;:[],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:649,&quot;like_count&quot;:4126,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>I completely agree with Adam. The relationship between an employee and a company is often unhealthy. Companies should not act as if paying a salary means they own the time of their employees and can use it at their discretion. That setup is oppressive and should inspire quiet quitting.</p><p>The goal should be to create more of a partnership based on respect and aligned interests. A relationship based on respect does not involve unilateral decisions that create obligations. People should be trusted to act on behalf of the company, not forced to do so. Dinners, meetings, and everything in between should be 100% optional.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.v1labs.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 <strong>The Daily Subset!</strong></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[{23} Live Training, Cheat Sheets & Sponsor Ninja]]></title><description><![CDATA[Featuring Gergely Orosz, freeCodeCamp.org, Rohan Paul, Vincent Will, and Mohammed Furqan]]></description><link>https://newsletter.v1labs.com/p/23-live-training-cheat-sheets-sponsor-ninja</link><guid isPermaLink="false">https://newsletter.v1labs.com/p/23-live-training-cheat-sheets-sponsor-ninja</guid><dc:creator><![CDATA[Dane Lyons]]></dc:creator><pubDate>Tue, 07 Feb 2023 17:42:50 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!mDRJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78bfe49b-9ce6-4d3b-b706-d7ef4233d88d_900x500.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_!mDRJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78bfe49b-9ce6-4d3b-b706-d7ef4233d88d_900x500.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mDRJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78bfe49b-9ce6-4d3b-b706-d7ef4233d88d_900x500.png 424w, https://substackcdn.com/image/fetch/$s_!mDRJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78bfe49b-9ce6-4d3b-b706-d7ef4233d88d_900x500.png 848w, https://substackcdn.com/image/fetch/$s_!mDRJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78bfe49b-9ce6-4d3b-b706-d7ef4233d88d_900x500.png 1272w, https://substackcdn.com/image/fetch/$s_!mDRJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78bfe49b-9ce6-4d3b-b706-d7ef4233d88d_900x500.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mDRJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78bfe49b-9ce6-4d3b-b706-d7ef4233d88d_900x500.png" width="900" height="500" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/78bfe49b-9ce6-4d3b-b706-d7ef4233d88d_900x500.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:500,&quot;width&quot;:900,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:497554,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!mDRJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78bfe49b-9ce6-4d3b-b706-d7ef4233d88d_900x500.png 424w, https://substackcdn.com/image/fetch/$s_!mDRJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78bfe49b-9ce6-4d3b-b706-d7ef4233d88d_900x500.png 848w, https://substackcdn.com/image/fetch/$s_!mDRJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78bfe49b-9ce6-4d3b-b706-d7ef4233d88d_900x500.png 1272w, https://substackcdn.com/image/fetch/$s_!mDRJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78bfe49b-9ce6-4d3b-b706-d7ef4233d88d_900x500.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><h2>Design: Live Training</h2><h4><a href="https://www.pragmaticengineer.com/">Gergely Orosz</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/GergelyOrosz/status/1622918937506611200&quot;,&quot;full_text&quot;:&quot;I really struggle to understand companies where they make up for a horrible user experience by offering live training to customers to explain the twisted logic on how their product can be used.\n\nInstead of attempting to fixing said UX, or at least document it in some way.&quot;,&quot;username&quot;:&quot;GergelyOrosz&quot;,&quot;name&quot;:&quot;Gergely Orosz&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Tue Feb 07 11:23:21 +0000 2023&quot;,&quot;photos&quot;:[],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:25,&quot;like_count&quot;:444,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:false}" data-component-name="Twitter2ToDOM"></div><p>This is a problem with enterprise SaaS. Growing startups want to be that all-in-one solution, requiring a tangled rat&#8217;s nest of functionality. Live training is the bandaid solution because it&#8217;s hard to provide a good user experience as the product grows in complexity.</p><p>Companies should focus on making the core use case as obvious as possible. The onboarding experience should be about getting from A to B without being distracted by a side quest. Once users have that foundation, introduce them to a plugin marketplace to tack on value add features.</p><div><hr></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.v1labs.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share The Daily Subset&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://newsletter.v1labs.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share The Daily Subset</span></a></p><div><hr></div><h2>Frontend: Centering Things</h2><h4><a href="https://www.freecodecamp.org/">freeCodeCamp.org</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/freeCodeCamp/status/1622974465654288391&quot;,&quot;full_text&quot;:&quot;Centering things in CSS can feel like the hardest thing you'll have to do as a dev.\n\nBut don't worry &#8211; <span class=\&quot;tweet-fake-link\&quot;>@kriskoishigawa</span> is here to help you out.\n\nIn this tutorial, he shows you how to center anything with CSS - you'll learn to align a div, text, and more.\n\n&quot;,&quot;username&quot;:&quot;freeCodeCamp&quot;,&quot;name&quot;:&quot;freeCodeCamp.org&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Tue Feb 07 15:04:00 +0000 2023&quot;,&quot;photos&quot;:[],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:6,&quot;like_count&quot;:45,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{&quot;url&quot;:&quot;https://www.freecodecamp.org/news/how-to-center-anything-with-css-align-a-div-text-and-more/&quot;,&quot;image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e1daa438-1bbb-460f-b2a4-4d69888a9863_1280x959.jpeg&quot;,&quot;title&quot;:&quot;How to Center Anything with CSS - Align a Div, Text, and More&quot;,&quot;description&quot;:&quot;Centering things is one of the most difficult aspects of CSS. The methods themselves usually aren&#8217;t difficult to understand. Instead, it&#8217;s more due to the fact that there are so many ways to center things. The method you use can vary depending on the HTML element you&#8217;re trying&quot;,&quot;domain&quot;:&quot;freecodecamp.org&quot;},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>Centering things in CSS used to be complicated. You used to have to use unintuitive margin or position hacks. I still occasionally use a position+transform hack if I&#8217;m doing something uncommon. I use flexbox to center things 95% of the time.</p><pre><code>/* parent */
display: flex;
align-items: center;
justify-content: center;</code></pre><p>Even if you do use flexbox, I&#8217;d recommend reading that article. It&#8217;s useful to know other techniques. When you encounter that code in the wild, you&#8217;ll know what is going on.</p><div><hr></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.v1labs.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://newsletter.v1labs.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>Backend: Cheat Sheets</h2><h4><a href="https://www.youtube.com/@paulrohan">Rohan Paul</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/rohanpaul_ai/status/1544966714634678274&quot;,&quot;full_text&quot;:&quot;<span class=\&quot;tweet-fake-link\&quot;>#SQL</span> is probably the most important tool for <span class=\&quot;tweet-fake-link\&quot;>#DataScientists</span> \n\nHeres a quick SQL summary <span class=\&quot;tweet-fake-link\&quot;>#CheatSheet</span> refresher of SQL commands\n\n<span class=\&quot;tweet-fake-link\&quot;>#Python</span> <span class=\&quot;tweet-fake-link\&quot;>#DataAnalytics</span> <span class=\&quot;tweet-fake-link\&quot;>#Python3</span> <span class=\&quot;tweet-fake-link\&quot;>#databases</span> <span class=\&quot;tweet-fake-link\&quot;>#MachineLearning</span> <span class=\&quot;tweet-fake-link\&quot;>#DataScience</span> <span class=\&quot;tweet-fake-link\&quot;>#AI</span> <span class=\&quot;tweet-fake-link\&quot;>#Database</span> <span class=\&quot;tweet-fake-link\&quot;>#databasestorage</span> <span class=\&quot;tweet-fake-link\&quot;>#Cloud</span> <span class=\&quot;tweet-fake-link\&quot;>#Deeplearning</span> <span class=\&quot;tweet-fake-link\&quot;>#BigData</span> <span class=\&quot;tweet-fake-link\&quot;>#Analytics</span> &quot;,&quot;username&quot;:&quot;rohanpaul_ai&quot;,&quot;name&quot;:&quot;Rohan Paul&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Thu Jul 07 08:49:03 +0000 2022&quot;,&quot;photos&quot;:[{&quot;img_url&quot;:&quot;https://pbs.substack.com/media/FXDS-2laAAEVGm5.jpg&quot;,&quot;link_url&quot;:&quot;https://t.co/6gh1uMbDq8&quot;,&quot;alt_text&quot;:null},{&quot;img_url&quot;:&quot;https://pbs.substack.com/media/FXDS-2bagAEYHug.jpg&quot;,&quot;link_url&quot;:&quot;https://t.co/6gh1uMbDq8&quot;,&quot;alt_text&quot;:null}],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:19,&quot;like_count&quot;:40,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>It has been a while since I've written SQL. I&#8217;ve worked primarily with NoSQL solutions and key/value stores more recently. In the future, I&#8217;d love to explore vector databases.</p><p>Even if I&#8217;m not writing SQL today, it&#8217;s likely I&#8217;ll need revisit that skillset at some point. These cheat sheets are so valuable. Five minutes of reading through a well designed cheat sheet can save hours of Googling.</p><p>I&#8217;d love to have access to cheat sheets for every technology I&#8217;ve ever used or plan to use. Thinking about this makes me want to design a book of cheat sheets. Imagine a 300 page book covering 150 technologies. Every technology gets 2 pages so you can lay the book flat and see everything.</p><div><hr></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.v1labs.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share The Daily Subset&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://newsletter.v1labs.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share The Daily Subset</span></a></p><div><hr></div><h2>Marketing: Sponsor Ninja</h2><h4><a href="https://wweb.dev/">Vincent Will</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/wweb_dev/status/1621048404460855297&quot;,&quot;full_text&quot;:&quot;Just added my latest project <a class=\&quot;tweet-url\&quot; href=\&quot;http://sponsor.ninja\&quot;>sponsor.ninja</a> to my blog <a class=\&quot;tweet-url\&quot; href=\&quot;http://wweb.dev\&quot;>wweb.dev</a> &#128522;\n\nSo if you donate to <a class=\&quot;tweet-url\&quot; href=\&quot;http://wweb.dev\&quot;>wweb.dev</a> you will be displayed in the sidebar as a sponsor with a link to your website &#128187; <span class=\&quot;tweet-fake-link\&quot;>#BuildInPublic</span> &quot;,&quot;username&quot;:&quot;wweb_dev&quot;,&quot;name&quot;:&quot;Vincent Will&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Thu Feb 02 07:30:31 +0000 2023&quot;,&quot;photos&quot;:[{&quot;img_url&quot;:&quot;https://pbs.substack.com/media/Fn8eWwrX0AAUPuA.jpg&quot;,&quot;link_url&quot;:&quot;https://t.co/HjJNafPMUd&quot;,&quot;alt_text&quot;:null}],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:0,&quot;like_count&quot;:8,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>Self-serve sponsorship opportunities are very interesting to me. I&#8217;d much rather pay $5-10 for a low-friction sponsorship that has the potential to drive brand awareness and dozens of clicks over the lifetime of the ad than investing $5 in a single click through PPC.</p><p>As I build the next iteration of Subset, I plan to create a resource hub for self-serve sponsorship options. Apps that integrate Sponsor Ninja will be a nice starting point. I even have a domain for the project. (sponsified.com &#128526;)</p><div><hr></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.v1labs.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://newsletter.v1labs.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>Team: Managers of One</h2><h4><a href="https://www.instagram.com/thefurqanstory/">Mohammed Furqan</a></h4><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/thefurqanstory/status/1622444977967058944&quot;,&quot;full_text&quot;:&quot;Why do I have a feeling that <span class=\&quot;tweet-fake-link\&quot;>@merajismeraj</span> wrote this book?\n\nBook name - Rework &quot;,&quot;username&quot;:&quot;thefurqanstory&quot;,&quot;name&quot;:&quot;Mohammed Furqan&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Mon Feb 06 04:00:00 +0000 2023&quot;,&quot;photos&quot;:[{&quot;img_url&quot;:&quot;https://pbs.substack.com/media/FoOqjMRaQAArMRr.jpg&quot;,&quot;link_url&quot;:&quot;https://t.co/OXg6N18AhT&quot;,&quot;alt_text&quot;:null}],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:0,&quot;like_count&quot;:10,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>My wife is reading Rework currently. I&#8217;ve always been inspired by the the 37signals crew, Jason Fried in particular. They are pioneers of doing more with less. Hiring managers of one is a perfect example. You don&#8217;t need a crazy hierarchy of people owning other people&#8217;s time if you can find and inspire people to be autonomous contributors.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.v1labs.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 <strong>The Daily Subset!</strong></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>