<?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[Full Context Development]]></title><description><![CDATA[Bringing you only the highest-impact frontend news using the Full Context perspective. You can learn what's the true value of the trending tools, who they benefit and how.]]></description><link>https://www.fullctx.dev</link><image><url>https://substackcdn.com/image/fetch/$s_!Kef1!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F750db901-11fb-4167-b1ad-8ff8bd9eb665_474x474.png</url><title>Full Context Development</title><link>https://www.fullctx.dev</link></image><generator>Substack</generator><lastBuildDate>Tue, 28 Apr 2026 13:31:32 GMT</lastBuildDate><atom:link href="https://www.fullctx.dev/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[József Miskolczy]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[fullctxdev@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[fullctxdev@substack.com]]></itunes:email><itunes:name><![CDATA[Jozsef Miskolczy]]></itunes:name></itunes:owner><itunes:author><![CDATA[Jozsef Miskolczy]]></itunes:author><googleplay:owner><![CDATA[fullctxdev@substack.com]]></googleplay:owner><googleplay:email><![CDATA[fullctxdev@substack.com]]></googleplay:email><googleplay:author><![CDATA[Jozsef Miskolczy]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[How To Write High Impact Frontend Code]]></title><description><![CDATA[The Value Chain of Frontend Development With Examples]]></description><link>https://www.fullctx.dev/p/how-to-write-high-impact-frontend</link><guid isPermaLink="false">https://www.fullctx.dev/p/how-to-write-high-impact-frontend</guid><dc:creator><![CDATA[Jozsef Miskolczy]]></dc:creator><pubDate>Wed, 07 Aug 2024 11:06:52 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!bXxY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c059ccc-f5db-47b0-80d5-78947bdfd5ad_1600x900.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_!bXxY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c059ccc-f5db-47b0-80d5-78947bdfd5ad_1600x900.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!bXxY!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c059ccc-f5db-47b0-80d5-78947bdfd5ad_1600x900.png 424w, https://substackcdn.com/image/fetch/$s_!bXxY!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c059ccc-f5db-47b0-80d5-78947bdfd5ad_1600x900.png 848w, https://substackcdn.com/image/fetch/$s_!bXxY!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c059ccc-f5db-47b0-80d5-78947bdfd5ad_1600x900.png 1272w, https://substackcdn.com/image/fetch/$s_!bXxY!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c059ccc-f5db-47b0-80d5-78947bdfd5ad_1600x900.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!bXxY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c059ccc-f5db-47b0-80d5-78947bdfd5ad_1600x900.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5c059ccc-f5db-47b0-80d5-78947bdfd5ad_1600x900.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1721648,&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_!bXxY!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c059ccc-f5db-47b0-80d5-78947bdfd5ad_1600x900.png 424w, https://substackcdn.com/image/fetch/$s_!bXxY!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c059ccc-f5db-47b0-80d5-78947bdfd5ad_1600x900.png 848w, https://substackcdn.com/image/fetch/$s_!bXxY!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c059ccc-f5db-47b0-80d5-78947bdfd5ad_1600x900.png 1272w, https://substackcdn.com/image/fetch/$s_!bXxY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c059ccc-f5db-47b0-80d5-78947bdfd5ad_1600x900.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>The hype of the 2010s is over. Frontend development is not that hot anymore. The SPA revolution is gone, React won and became a server side framework apparently. Reactive state updates don&#8217;t get anyone excited anymore, Redux became boring <em>(including the Toolkit, sorry)</em>, we can now write CSS in all languages imaginable and unit test it to our heart&#8217;s content. GraphQL became a curse word for some people. And the list goes on. Also many of us got jaded by the soulless hype machine so Signals, Runes, HMTX or Server Actions don&#8217;t ignite the same spark in a lot of us. </p><p>So what do we do now? I think this is a perfect opportunity to take a step back and critically evaluate what we have been really doing while riding the hype train of the last decade and some. What did we achieve while learning all the hot stuff and what can we take away to do better in this current decade? Maybe frontend was always about more than what the industry put in our focus?</p><p>Innovation hasn&#8217;t stopped of course and I will share my views on what are the most influential current trends, but now I want us to think about some more fundamental questions:</p><ul><li><p>What&#8217;s the real point of working on the frontend? </p></li><li><p>What are the problems we are really supposed to solve? </p></li><li><p>What&#8217;s the real value add of frontend engineers?  <em>In other words, what will prevent us from being replaced by sophisticated Figma to React tools?</em></p></li></ul><h2>What&#8217;s The Point of Doing Frontend?</h2><p>It&#8217;s a crucial question, that we are honestly not conscious enough about as the FE community. Let&#8217;s clear this up once and for all. In my mental model, frontend has 2 pivotal roles:</p><ul><li><p><strong>It acts as an interface to the value provided by the backend systems. The frontend can block, hinder, deliver or enhance that value.</strong></p></li><li><p><strong>It adds its own unique features, that&#8217;s impossible to be created at any other point of network based applications.</strong></p></li></ul><p>We, frontend developers, work to create and deliver these two things. <em>(Besides the meta-goal of improving work effectiveness and efficiency itself.)</em></p><p>Many recent innovations like Next.js API routes/handlers, RSCs or the Remix &#8220;paradigm&#8221; of loaders and actions fall into the first category, helping us in more effectively surfacing the value of the BE systems. Even the <a href="https://qwik.dev/docs/concepts/think-qwik/#delay-execution">Qwik style 0 hydration</a>, instant-on applications belong to this category as the application itself is initially &#8220;value provided by the BE (host) system&#8221;. <a href="https://www.hyperfiddle.net/">Hyperfiddle</a> takes this to the next level with compiler-level networking built into the apps. This space is still dynamically evolving. I think even more than the other category. Just think Prisma, or <a href="https://orm.drizzle.team/">Drizzle</a>.</p><p>Unique to the client value is less hot, but still going strong today, first things coming to mind are the <a href="https://developer.chrome.com/blog/view-transitions-case-studies">View Transitions API</a>, <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_containment/Container_queries">Container Queries</a> or anything related to styling, accessibility, information architecture, SEO, observability or UX in general. Another, now well-established tool I learned to love during the recent years in this space is <a href="https://www.framer.com/motion/">framer-motion</a>. </p><p>To identify the specific value that any given frontend creates we need to identify the contents of these 2 broad categories for that given project.</p><p>The definition of &#8220;value&#8221; is a very contended one and I see a lot of developers who  don&#8217;t understand it deeply. In the Full Context perspective I use the following form which I think captures the essence quite well: Value is anything that solves a real life problem of the users, that helps to achieve the mission of the businesses or that helps to reach the personal goals of the developers and other colleagues.</p><blockquote><p><strong>Customer experience, company mission and developer experience are some of the key reasons why we should be writing frontend code.</strong></p></blockquote><p>So let&#8217;s lay it out plain and simple. It all boils down to how your work helps with the matrix of:</p><p><strong>(CX  ||  Mission  ||  DX) x ( BE Value || FE Value) </strong></p><p>Here are some examples of what these categories could mean for a frontend developer:</p><ul><li><p><strong>Delivering BE value</strong>:</p><ul><li><p><strong>CX</strong>: Make the customer more happy with things like optimistic updates or streaming HTML responses, or a local first/offline first approach to enrich the BE capabilities. Improve request/response times by minimizing both the payload and the requested data. Understand your APIs and the http/websocket protocols deeply to improve performance and security.</p></li><li><p><strong>Mission</strong>: A baseline example is meeting a feature requirement by integrating with an API, like adopting a new payment provider to enter a new market. More BE aspects related to mission are: achieving a non-functional requirement like https for regulatory compliance or even simpler stuff like setting up a proper cross domain policy across systems.</p></li><li><p><strong>DX</strong>: Make work easier and more fun for both BE and FE engineers by adopting contract testing via Pact or by using tRPC to streamline communication. Maybe generating some TypeScript types from OpenAPI specifications, perhaps reusing validation logic or other code bits across the network divide.</p></li></ul></li></ul><ul><li><p><strong>Adding unique FE value</strong>:</p><ul><li><p><strong>CX</strong>: Better SEO, more accessibility, better rendering performance, fancier buttons, instantaneous UI feedback on interactions, meaningful error messages, well timed tips or recommendations.</p></li><li><p><strong>Mission</strong>: The baseline example is similar here too: enabling delivery of a feature requirement by integrating a client-side tool/technique like: localization or branding/theming support to reach the target audience. It could also be about meeting non-functional requirements, like collecting analytics data to gain more user-insight (<a href="https://docs.snowplow.io/docs/destinations/analytics-sdk/analytics-sdk-javascript/">Snowplow SDK</a>?). </p></li><li><p><strong>DX</strong>: QwikCity, SolidStart, Astro, React Router v7 public-alpha, or simply ditch Webpack for Vite. Anything that the hype-train hauls our way. In all seriousness, anything that makes the codebase easier to understand and easier to change are the big wins here. Improving consistency, removing redundancy, eliminating flakiness and increasing productivity is the name of the game.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.fullctx.dev/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 Full Context Development! 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></li></ul></li></ul><h2>What Are The Problems We Are Supposed To Solve?</h2><p>If you take this idea one step further, we are really doing all of this for the people who are interacting with the code/software we deliver. Working on the frontend could become a human-centric activity, even with its technical &amp; abstract nature, if we ultimately focus on those interactions and their impact on the lives of others. </p><p>This sits at the heart of the Full Context approach too, the <a href="https://www.fullcontextdevelopment.com/book/chapter-1#7383424762e540d1b97469ce6fdfa403">Beyond You</a> idea, could be interpreted as: look at what would make the people from the 3 domains - <em>business stakeholders, coworkers and users</em> - love the software more. That&#8217;s our real job as frontend developers or in general as software engineers, to deliver improvements that will:</p><ul><li><p>Make our company more profitable - so that business stakeholders will love it more.</p></li><li><p>Make our users&#8217; lives better - so that customers will love and use it more.</p></li><li><p>Make our colleagues&#8217; lives easier - so that your teammates will be happier and love their job a little more.</p></li></ul><p><strong>What do those problems look like in our FE dev day to day lives?</strong></p><p>It all comes down to knowing the goals and pain points of the people from the 3 main groups. What makes the lives of the users, colleagues or business stakeholders hard at the moment, what are the inefficiencies or unmet needs? </p><div class="pullquote"><p>Impact is fundamentally not technical but humane.</p></div><p>There are many ways to tackle this, but one super helpful tool I have up my sleeve is the <a href="https://www.fullcontextdevelopment.com/book/chapter-5">15 Product Qualities</a>. All 3 dimensions can interpret software as a product in their own domain and map the Product Quality attributes to actionable insights that can guide a frontend developer or technical leader in finding the highest impact problems to tackle.</p><p>As this is very broad in scope (<em>at least 45 aspects to think about&#8230;</em>) I won&#8217;t repeat the mistake I&#8217;ve committed several times in the past and attempt to cover all of them here. Instead I will simply share 3 common issues that I believe have the highest chance to help you make some noticeable impact at your job&#8230; right as I cover the next big question:</p><h2>What&#8217;s The Real Value Add Of Frontend Engineers?</h2><p>Our coding ability is not the most important skill that we have! I would argue that&#8217;s just a baseline requirement. Where you should really focus on to make significant impact is finding the places where your unique professional and technical insights meet with the questions or needs of the people from the other dimensions and use it to answer/solve them in a way they could never achieve without your insights. That&#8217;s the true value add of any frontend or rather any software engineer and it won&#8217;t be replicated by code generating tools any time soon! Let&#8217;s see some tangible examples.</p><p><strong>Three high-impact areas where frontend developers can really shine</strong></p><ol><li><p><em><strong>Making collaborative decisions about what is the best place for data or computation</strong></em>. Putting a piece of information on any of the following places: client memory, browser cache, service worker, CDN, edge infra, a message queue or database, has tremendous user-experience, cost, and architectural implications and we can lead or contribute to these discussions in very meaningful ways. Same is true for computation, you can suggest where something is best calculated at and how often. All these decisions require a deep understanding of the project&#8217;s context and can steer it towards success or failure in major ways.</p><blockquote><p><em><strong>Personal example</strong></em>: In 2019 I was tasked with leading the frontend project setup of <a href="https://www.gradyent.ai/digital-twin">Gradyent AI</a>, a web app that optimizes district heating networks with a digital twin (AI). One of the fundamental decisions to make was to decide how to render the interactive map displaying the <em>near</em> real-time properties of the heating networks. The company&#8217;s founder brought in a <em>map expert</em> consultant and the stack they were pushing for was BE focused both in terms of storage and computation. That&#8217;s until I&#8217;ve found <a href="https://deck.gl/examples">DeckGL</a>. I convinced the founder and the consultant that rendering the interactive map on the client is the best move for us both in terms of infra costs, available skills in-house and user experience. I think it&#8217;s one of the key technical driving forces of the success of this application to this day!</p></blockquote></li><li><p><em><strong>Making collaborative decisions about logging and analytics,</strong></em> that cuts to the heart of what happens, or covers unusual events the other colleagues couldn&#8217;t even think about. This requires your to understand the real life usage of the product as well as the perspective of key business stakeholders but is also an area where you have unique insights into the situations the frontend code can end up in, that&#8217;s often only visible to you, the developer. Should that case be visible in the logs/metrics? With what data? And what does it tell to the business stakeholders when it happens? Should it be reported on dashboards or alerts? All questions that you can raise and find the answers to, together with colleagues from other areas. In my experience, it&#8217;s often very helpful to increase your exposure/visibility, to deepen your understanding of the business domain and to make a better product, a win-win (3x)!</p><blockquote><p><em><strong>Personal example</strong></em>: When I implemented my own online product <a href="https://fullcontextdevelopment.com">fullcontextdevelopment.com</a> I&#8217;ve tried to log every error case in a way that&#8217;s emphatic and action oriented for end users. Not long after launching the product, I got a DM on X (<em>Twitter at the time</em>) from one of the first customers about them facing an issue with signup. It was very embarrassing, as the payment was taken but their account wasn&#8217;t activated. However they told me they were impressed by the error message, something along the lines of: &#8220;Sorry to fail you at the critical time of the first login! Don&#8217;t worry however, your payment was safely processed, this is an issue on our end, if it doesn&#8217;t resolve after a few more retries please reach out to support (link)&#8221;. One of the most memorable, organic appreciation that the extra effort I&#8217;ve put in ever received from someone who is not a colleague.</p></blockquote></li><li><p><em><strong>Making collaborative decisions about improving the UX/UI design</strong></em>. You as a developer might offer alternative approaches to the look and feel of the product that make more sense from some perspective. Often it&#8217;s about reuse, how to reuse or just slight tweak something-already-existing to achieve the same goal but for 20% of the effort. Another common topic is consistency, sometimes designs are made in isolation, but in the context of the whole application/site it might make sense to just stick to an already established pattern. You might be more familiar with those, bringing that perspective to the discussions. Frontend devs can also often shine a light on unhandled edge cases. What should we do when the network fails? What about a retry? What should happen while the request is in-flight?</p><blockquote><p><em><strong>Personal example</strong></em>: While working at <a href="https://snowplow.io/">Snowplow</a> I was developing a wizard style, multi-step form for setting up a connection to different cloud storage solutions. As I was using it during development and went through the steps countless times I&#8217;ve realized, if we changed the UI a bit we could get to the same result while reducing the number of questions by 1/3. I&#8217;ve set up a call with the designer, explained my idea and got the green light right away. We both were happy about the outcome, and as an extra benefit this whole process helped in building a good working relationship between us while also improving the product for the end users.</p></blockquote></li></ol><h2>Final Words</h2><p>Hope this gives you some inspiration to look for ways to put your unique frontend skills and insights into good use! Let me know in the comments a story of how you did that, or what other techniques you have to make an impact. I believe by shifting our focus on the outcomes of our decisions rather than the options that we can choose from, we will make the next decade of frontend development better for everyone!</p><p><em>And now let&#8217;s get back to writing code that makes someone love the software even more!</em> </p><p></p><p></p><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[Chapter 3: The Fastest Next.js App Of The Galaxy]]></title><description><![CDATA[A profound lesson for the students of web performance arts]]></description><link>https://www.fullctx.dev/p/the-fastest-nextjs-react-website-of-the-galaxy</link><guid isPermaLink="false">https://www.fullctx.dev/p/the-fastest-nextjs-react-website-of-the-galaxy</guid><dc:creator><![CDATA[Jozsef Miskolczy]]></dc:creator><pubDate>Tue, 31 Oct 2023 23:10:45 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Zqc7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a909ead-7a6c-4a9b-9006-49a687a24732_1640x924.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_!Zqc7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a909ead-7a6c-4a9b-9006-49a687a24732_1640x924.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Zqc7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a909ead-7a6c-4a9b-9006-49a687a24732_1640x924.png 424w, https://substackcdn.com/image/fetch/$s_!Zqc7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a909ead-7a6c-4a9b-9006-49a687a24732_1640x924.png 848w, https://substackcdn.com/image/fetch/$s_!Zqc7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a909ead-7a6c-4a9b-9006-49a687a24732_1640x924.png 1272w, https://substackcdn.com/image/fetch/$s_!Zqc7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a909ead-7a6c-4a9b-9006-49a687a24732_1640x924.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Zqc7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a909ead-7a6c-4a9b-9006-49a687a24732_1640x924.png" width="1456" height="820" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1a909ead-7a6c-4a9b-9006-49a687a24732_1640x924.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:820,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:936190,&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_!Zqc7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a909ead-7a6c-4a9b-9006-49a687a24732_1640x924.png 424w, https://substackcdn.com/image/fetch/$s_!Zqc7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a909ead-7a6c-4a9b-9006-49a687a24732_1640x924.png 848w, https://substackcdn.com/image/fetch/$s_!Zqc7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a909ead-7a6c-4a9b-9006-49a687a24732_1640x924.png 1272w, https://substackcdn.com/image/fetch/$s_!Zqc7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a909ead-7a6c-4a9b-9006-49a687a24732_1640x924.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>Hi Web Perf Piranhas</h2><p>(<em>yes this will be the theme here, it will also make sense later</em>)</p><p>In this chapter I will share something profound that fundamentally changed the way I look at web performance. <strong>There is a Next.js app that&#8217;s objectively the most performant of them all.</strong> (<em>And I wrote it! </em>&#128526; <em>But you can too!</em>)</p><p>What does that mean? It means we actually have an objective goal! Unlike with most things real-life, we know for certain what&#8217;s the ideal we are supposed to aim for as web performance engineers. And that&#8217;s great news, it will make our jobs way less ambiguous! </p><p>I know it doesn&#8217;t make much sense so let&#8217;s put an end to the intro. Here is the <strong><a href="https://the-fastest-nextjs-website-of-the-galaxy.pages.dev/">Fastest Next.js Website of The Galaxy</a></strong>! And <a href="https://github.com/jozsefm/the-fastest-nextjs-website-of-the-galaxy">here is the source code</a> too! Take a good look and if you are confused about what you see (<em>or don&#8217;t see</em>) come back here and continue down below.</p><p></p><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8yzY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83d2e6e0-6b43-4f60-ad57-3ce928f2d360_512x512.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8yzY!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83d2e6e0-6b43-4f60-ad57-3ce928f2d360_512x512.png 424w, https://substackcdn.com/image/fetch/$s_!8yzY!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83d2e6e0-6b43-4f60-ad57-3ce928f2d360_512x512.png 848w, https://substackcdn.com/image/fetch/$s_!8yzY!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83d2e6e0-6b43-4f60-ad57-3ce928f2d360_512x512.png 1272w, https://substackcdn.com/image/fetch/$s_!8yzY!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83d2e6e0-6b43-4f60-ad57-3ce928f2d360_512x512.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8yzY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83d2e6e0-6b43-4f60-ad57-3ce928f2d360_512x512.png" width="382" height="382" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/83d2e6e0-6b43-4f60-ad57-3ce928f2d360_512x512.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:512,&quot;width&quot;:512,&quot;resizeWidth&quot;:382,&quot;bytes&quot;:6455,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!8yzY!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83d2e6e0-6b43-4f60-ad57-3ce928f2d360_512x512.png 424w, https://substackcdn.com/image/fetch/$s_!8yzY!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83d2e6e0-6b43-4f60-ad57-3ce928f2d360_512x512.png 848w, https://substackcdn.com/image/fetch/$s_!8yzY!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83d2e6e0-6b43-4f60-ad57-3ce928f2d360_512x512.png 1272w, https://substackcdn.com/image/fetch/$s_!8yzY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83d2e6e0-6b43-4f60-ad57-3ce928f2d360_512x512.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Scroll icon created by Royyan Wijaya - Flaticon: https://www.flaticon.com/free-icons/scroll</figcaption></figure></div><p></p><p></p><p>That&#8217;s right, it&#8217;s an empty page with the least amount of HTML I could squeeze out of a Next.js build. If you feel cheated or let down I get it, but believe me, whatever you feel, if you had any emotional reaction at all, that feeling will actually help to make this lesson the more memorable and this worths remembering for sure!</p><p>Most of you already know that web performance is a tradeoff. But what the fastest web app of the galaxy can help us realize, is that we have to <strong>sacrifice everything</strong> our sites have in order to achieve<strong> ultimate performance</strong>! This is a transformative realization with deep implications. Let&#8217;s unpack it!</p><div class="pullquote"><p>When working on performance optimization, our real goal is to make our web apps resemble the fastest website of them all: the completely empty website, as much as possible! </p></div><p>That means we should eat away the meat of the websites we work on like a hungry pack of piranhas! This idea might not feel right, it might not seem useful, but it actually is when you learn to utilize it!</p><p><strong>Every technique we employ to improve web performance is making our website either permanently or temporarily (</strong><em><strong>that&#8217;s</strong></em><strong> </strong><em><strong>when we do clever stuff</strong></em><strong>) more alike the ideal website!</strong></p><p>Just think about what cutting the page up into multiple chunks and delaying their loading really does. Or what the downscaled placeholder images do to our initial bundles. What&#8217;s the practical result of caching resources? That&#8217;s right, all of these techniques make our websites in certain situations more like the fastest website of all.</p><p>The more you are willing to sacrifice to make your website resemble that ideal form the better performance you will get! The more you deviate from it, the more performance will suffer. It&#8217;s a cold, hard truth we have to accept as web performance engineers.</p><p>Our work is all about finding the optimal way to minimize the difference between the empty website and ours, and making the price to be paid acceptable. These guides will teach you how to find the right balance in your specific situation.</p><h4>&#129504; Performance Mindset</h4><blockquote><p><em>This is a lesson that&#8217;s extremely important to really ingrain a performance mindset in us. The conclusion: become the bloodthirsty web perf piranha you are supposed to be and eat up those sites with endless appetite. </em></p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!uRWE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7a25f20-ad32-4bd6-af9b-93a94ac5cf39_1640x924.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!uRWE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7a25f20-ad32-4bd6-af9b-93a94ac5cf39_1640x924.png 424w, https://substackcdn.com/image/fetch/$s_!uRWE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7a25f20-ad32-4bd6-af9b-93a94ac5cf39_1640x924.png 848w, https://substackcdn.com/image/fetch/$s_!uRWE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7a25f20-ad32-4bd6-af9b-93a94ac5cf39_1640x924.png 1272w, https://substackcdn.com/image/fetch/$s_!uRWE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7a25f20-ad32-4bd6-af9b-93a94ac5cf39_1640x924.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!uRWE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7a25f20-ad32-4bd6-af9b-93a94ac5cf39_1640x924.png" width="1456" height="820" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f7a25f20-ad32-4bd6-af9b-93a94ac5cf39_1640x924.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:820,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1926064,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!uRWE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7a25f20-ad32-4bd6-af9b-93a94ac5cf39_1640x924.png 424w, https://substackcdn.com/image/fetch/$s_!uRWE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7a25f20-ad32-4bd6-af9b-93a94ac5cf39_1640x924.png 848w, https://substackcdn.com/image/fetch/$s_!uRWE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7a25f20-ad32-4bd6-af9b-93a94ac5cf39_1640x924.png 1272w, https://substackcdn.com/image/fetch/$s_!uRWE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7a25f20-ad32-4bd6-af9b-93a94ac5cf39_1640x924.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Icon from Flaticon: https://www.flaticon.com/free-icons/piranha</figcaption></figure></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.fullctx.dev/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 Full Context Development! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>If you enjoyed this chapter check out the full table of contents for the series!</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;9efd3916-006b-45e6-8027-d54d13a061fc&quot;,&quot;caption&quot;:&quot;For a long time I have been a huge fan of web performance, React and Next.js. All 3 of them are super interesting and awesome tools for delivering full context value. Long story short, while there are tons of resources covering web performance, there&#8217;s none that&#8217;s covering the whole field yet laser focused on Next.js and its basis, React. That&#8217;s why I decided to connect all of these topics to deliver a unified guide, here on Substack. I believe it will be truly helpful and absolutely thrilling for all of you passionate frontend engineers!&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;md&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;The Ultimate React and Next.js Performance Guide&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:112000322,&quot;name&quot;:&quot;Jozsef Miskolczy&quot;,&quot;bio&quot;:&quot;Hey I'm J&#243;zsef but people usually call me Joe. I'm a senior frontend engineer, author and blogger. I want to help you find value in todays most turbulent software engineering field - frontend development - using the \&quot;Full Context\&quot; perspective.&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/269c3b28-5936-4f87-9db7-4594b78aa9a7_864x945.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2023-07-16T00:47:24.530Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff34b5e16-903f-46a2-9d2c-f73b33442ffd_1920x1080.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://www.fullctx.dev/p/ultimate-react-performance-table-of-contents&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:129179480,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;Full Context Development&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F750db901-11fb-4167-b1ad-8ff8bd9eb665_474x474.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div>]]></content:encoded></item><item><title><![CDATA[Remix In Production at Tesco - An Interview With Hugo Jobling - Part II/II]]></title><description><![CDATA[Remix has been out for a while proving its worth in the trenches. Now's a good time to gather some evidence whether it lives up to its promises or not.]]></description><link>https://www.fullctx.dev/p/remix-in-production-at-tesco-part-2</link><guid isPermaLink="false">https://www.fullctx.dev/p/remix-in-production-at-tesco-part-2</guid><dc:creator><![CDATA[Jozsef Miskolczy]]></dc:creator><pubDate>Sat, 28 Oct 2023 20:21:56 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Kkyf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b120b48-29bb-47c9-8682-6f5027c8820f_1640x924.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_!Kkyf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b120b48-29bb-47c9-8682-6f5027c8820f_1640x924.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Kkyf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b120b48-29bb-47c9-8682-6f5027c8820f_1640x924.png 424w, https://substackcdn.com/image/fetch/$s_!Kkyf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b120b48-29bb-47c9-8682-6f5027c8820f_1640x924.png 848w, https://substackcdn.com/image/fetch/$s_!Kkyf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b120b48-29bb-47c9-8682-6f5027c8820f_1640x924.png 1272w, https://substackcdn.com/image/fetch/$s_!Kkyf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b120b48-29bb-47c9-8682-6f5027c8820f_1640x924.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Kkyf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b120b48-29bb-47c9-8682-6f5027c8820f_1640x924.png" width="1456" height="820" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9b120b48-29bb-47c9-8682-6f5027c8820f_1640x924.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:820,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1777354,&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_!Kkyf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b120b48-29bb-47c9-8682-6f5027c8820f_1640x924.png 424w, https://substackcdn.com/image/fetch/$s_!Kkyf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b120b48-29bb-47c9-8682-6f5027c8820f_1640x924.png 848w, https://substackcdn.com/image/fetch/$s_!Kkyf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b120b48-29bb-47c9-8682-6f5027c8820f_1640x924.png 1272w, https://substackcdn.com/image/fetch/$s_!Kkyf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b120b48-29bb-47c9-8682-6f5027c8820f_1640x924.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><strong>Hey Full Context Developer</strong></h2><p><em>(I&#8217;m writing in a personal quality, opinions are mine and are not reflective of Tesco&#8217;s)<br></em><br>This is Part 2 of my interview with Hugo Jobling a Principal SWE and colleague of mine at Tesco. </p><p><em>You can find <a href="https://www.fullctx.dev/p/remix-in-production-at-tesco-part-1">Part 1 here</a> where we talked about his career, what it&#8217;s like to develop software for this company and his experiences using React for over a decade.<br><br></em>In this final part we discuss his opinion about Remix, that he signed up for as soon as it went public <em>- for a license fee back then -</em> and used ever since. We also share some insights about an app it powers in nearly 2k Tesco stores in the UK. Let&#8217;s jump into it!</p><h2><strong>&#127899;&#65039; Remix</strong></h2><h4><em><strong>- Learnings from buying the license at day one to using it in production</strong></em></h4><p><strong>Joe:</strong> I think it&#8217;s fair to say that early adoption of the right technology can open the door to rare and valuable career options. It definitely paid out for you. But you also bet on Remix very early. Can you tell me a little bit about how that happened?</p><p><strong>Hugo:</strong> I guess part of it is just like cultivating taste. It&#8217;s the same as with movies or music. There are people who have good taste and then they recommend things that are also good, right?</p><blockquote><p><em><strong>As you start to watch more good movies, you start to have an appreciation more of what is a good movie and what isn't. I think you can do the same thing with technologies.</strong></em></p></blockquote><p><strong>Joe:</strong> That&#8217;s a really interesting analogy I haven&#8217;t heard before but thinking about it, it makes a lot of sense!</p><p><strong>Hugo:</strong> Or take directors for example. There are certain directors who I know, if they make a film, it's probably going to be a decent film. The same thing happens in the JavaScript space. After a period of time, you start to hear the same names come out again and again. A few years ago Pete Hunt was a name you would hear about in the React space or Dan Abramov or Kent C. Dodds.</p><p><strong>Joe:</strong> Yeah, all the classic React names, I&#8217;m very familiar with them too. So would you agree if I sum this up as &#8220;<em>To cultivate a great tech taste</em> <em>all you have to do is</em> <em>follow the right peopl</em>e&#8221;?</p><p><strong>Hugo: </strong>That sounds about right. One of the things that resulted in me making an early bet on Remix, is it's Ryan for a start! Ryan Florence is a known quantity in the React space. And actually, he's another one of those characters who I first encountered in the Ember community, and then he moved across to the React space. I think this is another one of those interesting tech envy things, right?</p><blockquote><p><em><strong>The React frameworks now are doing stuff that Ember was doing 10 years ago.</strong></em> <em><strong>The idea of routing and data fetching as first-class concepts is not new. That was around back in the Backbone days. And we're just rediscovering that those things were a good idea before and they're a good idea now.</strong></em></p></blockquote><p>I saw Ryan and Michael be like, hey, we're going to make a framework that's based on some of the concepts of how we've been thinking about React Router. You can buy an early adopter license for $200, and you'll get a hoodie. And I was like, early adopter license, day one, give it to me. So I signed up, started playing with it. And while using it, I was like, you know what? This has some good ideas. Having built and worked with large scale React applications for years, you realize, as everybody realizes, that it's called Create React App, it's not called Maintain React App. And there's a reason for that, right?</p><p><strong>Joe:</strong> That one always cracks me up. It&#8217;s spot on!</p><p><strong>Hugo:</strong> Yeah, there comes a certain point where that won't take you any further. There was a big period of time where your next step was custom Webpack config. There was no good next natural evolution. And then there was a period of time after that where for a certain class of application, there was a really good answer for that problem. And it was Next.js.</p><blockquote><p><em><strong>But the problem with Next.js that I found was that it wanted you to be building content websites.</strong></em></p></blockquote><p>So you're building Hulu, it's really good for Hulu because the primitives they needed were hooked into the framework. Next.js was really good for doing a single data fetch to load up the page and then display a bunch of stuff on it. But where it always fell down was, now I've got some user generated data on the application and I need to get that back to the server.</p><p>Next.js did not really have that good a story for it so you end up having to build custom API routes to be able to post data back to the server. Then you get into this whole mess of, OK, now I've got to pick a form library, and I've got to build an API route for every single page I've built.</p><blockquote><p><em><strong>There's a mismatch between how I'm getting the data onto the page and where it's going once it's on the page. So what I really liked about the conceptual model and the philosophy behind Remix was that they saw that gap. They realized that a huge proportion of web applications are mostly tables and forms. So they said: let's build a really good story behind tables and forms.</strong></em></p></blockquote><p>And then they went one little step further as well. In the last few years, the web platform has come up with good primitives for how you do this stuff. So you have the Fetch API, you have a capital-R Request, capital-R Response. And so we can build a framework around those core primitives that in addition to having a good answer to how do I get my form fields back to my database, doesn&#8217;t make you learn another framework&#8217;s own way of doing things. You're just using the stuff you already know. You already know fetch, Remix simply gives you a way to hook it into your application.</p><p><strong>Joe:</strong> These are some really important observations and very good advice for people looking to adopt Remix. I&#8217;ve written about the framework extensively on my previous blog and my take was very similar.</p><blockquote><p><em><strong>Remix is best fit for web apps centered around users not only fetching but interacting with data that lives in a database. That&#8217;s the use-case where it can really shine.</strong></em></p></blockquote><p><strong>Hugo:</strong> So again, it's a trade-off. If you're building Google Docs, you have to deal with the fact that two people on the other side of the world need to be able to edit the document at the same time. In order to get the performance, reliability etc&#8230; you needed, you had to make your back end much more complicated. And you had to invest in having a bigger team of people. If you are building that type of product, you're going to have to bite that bullet. But if you're not building that application, if you're building for example CRM systems internally at companies you're doing just basic stuff, or you're building a point-of-sale system that lives on the same physical device as the APIs, you have a different set of constraints. And so picking a technology designed to solve somebody else's problem makes you bite off all the complexity without reaping the benefits because you don't need those benefits.</p><p>The reason that I look at tools like Remix for our problem space is that its baseline is assuming you don't have all these Facebook or Google scale problems. It has more of a progressive enhancement approach. What the baseline experience assumes is, just load all the data to the page at the top of the page and render the entire page.</p><p>And then if it turns out, hey, that's too slow, Remix has the escape hatch, the concept of<a href="https://remix.run/docs/en/main/utils/defer"> deferred data</a> where if you can say, these 3 bits of data need to be loaded for the page to render, but this one can wait. Then the page can get that as a Promise, put it in a Suspense component. And then it works hand in hand with the built-in concepts in React. It's just a thing that React already supports and gives you the way to show a loading spinner for a period of time after the page is loaded. You can build that, but the default is not that every part of the experience has all these complications.</p><blockquote><p><em><strong>With Remix you only get the complexity where you need the complexity.</strong></em></p></blockquote><p>When I worked with Apollo GraphQL type applications, I was looking at a page and I had to ask. How did the data get on this page? Where does that come from? I have to look at every component on the page to find out what components specify the data it needed. Whereas, when you go to a Remix codebase, I just find the URL then I find the root component that matches that URL. That's where the data came from. Very conceptually simple. Another can of worms is async behavior inside of a useEffect which absolutely sucks. It's a nightmare to work with. And this is why, again, I like the Remix data fetching because it pushes that stuff outside of React, into a loader which is just normal JavaScript async/await code. And so you don't have to worry about useEffect and all of that nonsense inside. You can have nice clean components.</p><blockquote><p><em><strong>I tend to think: I'm not that smart. I want things to be simple, and I want the tools to make me look smarter than I am. When I work on a Remix application, I'm really productive because when I'm following the happy path, the pit of success, it pushes you along like a tailwind.</strong></em></p></blockquote><p><strong>Joe:</strong> That&#8217;s the feeling we all want to get from the tools we use! Do you think that&#8217;s why others are adopting Remix as well?</p><p><strong>Hugo:</strong> I would be surprised if not! But in a sense it&#8217;s also a part of the evolution of React. We are expanding the types of applications that are easy to build through frameworks. Take a business that&#8217;s, say, building a company blog and they've already got React developers. So having a React framework that lets them work on this is really useful. For that, maybe Next.js is good enough. Then they need the CMS to be built. You could have WordPress in headless mode, or you could use Ghost in headless mode but we've already got these React developers. Wouldn't it be good if we had the same skill sets applied to all of those? That&#8217;s where Remix comes in. So I think that's part of what is pushing this. We already have these skills. Let's expand the set of problems I can solve with the skills I already have.</p><blockquote><p><em><strong>We're not taking a bigger slice of the pie, we're making the pie bigger.</strong></em></p></blockquote><p><strong>Joe</strong>: Thinking about Remix this way just gave me that warm Christmas type of sensation for a second. But now that we&#8217;ve talked about its upsides I&#8217;m also really interested in the situations where it&#8217;s not a great fit! The only serious problem I&#8217;ve run into was when I tried to take some state coming from the Remix API, put it into some real client-side state-management solution like Redux, work with it for a while and then wanting to sync it back to the Remix server. I&#8217;ve never pulled it off properly.</p><p><strong>Hugo</strong>: I mean, the question is like, why would you?</p><p><strong>Joe</strong>: I was simply doing it out of technical curiosity but there are many application in the<a href="https://www.fullctx.dev/i/118069964/the-web-complexity-scale"> </a><strong><a href="https://www.fullctx.dev/i/118069964/the-web-complexity-scale">Level 3 Web Complexity Category</a></strong> like the web version of Figma or Excel where you simply don&#8217;t want to have every little state change to get propagated to the server but still need a scalable state management solution in-browser.</p><p><strong>Hugo</strong>: Yeah, Remix typically seems to want the server to be the source of truth for data in your app. It's not looking to help you build an application that has a lot of client-side state. There's a small subset of problems where you do actually need a single page application because you need to be doing real-time processing, right?</p><h1><strong>&#128587;&#8205;&#9792;&#65039; RAP</strong></h1><h4><em><strong>- The Remix app that runs in almost 2k Tesco stores</strong></em></h4><p><strong>Joe</strong>: Hmm, that made me curious, doesn&#8217;t the RAP fit that category? I know it&#8217;s a Remix application running in the Tesco stores working with real-time data. Can you introduce it to us and share how you tackled this issue there?</p><p><strong>Hugo</strong>: So the RAP stands for Remote Attendant Person. It&#8217;s the application that runs on a dedicated machine in places where we have the self-service tills that lets a Tesco employee look at the state of the tills in one place. They can see things like, oh, this person needs me to go over and approve an age approval, or this till got an error and the printer needs to be fixed or whatever. And the employees can take action remotely like, if a person at the till is obviously 50 years old, I can just hit approve on the over 16 age approval without having to walk all the way over. So it's connected to the tills in real-time through individual web socket connections, and gets a feed of all the events happening on them, which then causes it to update its own state. The RAP and the tills have to sync together because if I approve an age approval on the RAP, it needs to disappear on the till. If I approve it on the till, it needs to disappear on the RAP.</p><p><strong>Joe</strong>: That&#8217;s a great overview and now it&#8217;s more clear to me what might cause some problems with the Remix architecture for this use-case. So if the RAP app has all these real-time connections to the till machines in the client, it needs to react to the incoming events in-browser as well. Sounds like a classic SPA thing with client side rendering but then how does it benefit from the SSR capabilities and actions/loaders that give Remix a lot of its powers?</p><p><strong>Hugo</strong>: The first version of the RAP I built was loading the list of tills in the background, render that client-side, and then have each of those independently create its own WebSocket connection to the back-end. That worked, but then you had the thing you were describing, which is like, why am I even using Remix at this point? All it's doing is giving me ESBuild and a page to render. The way I solved that problem was to move the real-time data to the server and have that push it to the client. It's much easier to trust the server to be the source of truth especially because they're only events, there is no state managed on the server. We manage the state locally. And that's done using a state machine library called XState because then we get the benefits of that it's actually deterministic. I can be sure that I've handled every event correctly or I've handled all the error cases correctly.</p><p>In the way the RAP is architected the whole app is a deterministic state picture that's based on events coming in and it just spits out a deterministic state. There's an EventSource that the server uses to send messages to the front end and then the UI just renders the corresponding new state.</p><p><strong>Joe</strong>: In a sense, that doesn&#8217;t sound too Remix-y to me.</p><p><strong>Hugo</strong>: I don't know how much they would promote it but with Remix you can have a real-time data feed on the API routes using<a href="https://developer.mozilla.org/en-US/docs/Web/API/EventSource"> Event Source</a>. And then you just fire<a href="https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events"> Server Sent Events</a> at that, and it dumps a stream of messages out to the client side. You can make that as sophisticated or not as you want. It's just a text-based protocol. So in the RAP, the way we're doing the live updates with that is a JSON protocol where we send new states line by line. So every time the server updates, we send a new state to the application. It supports named messages so you could say, update, and then an update payload, delete, and a delete payload. And with that you can have a more complex mapping to say these messages go to this handler and these messages go to that handler. Then the interaction model, if you want to do it that way goes like, a form submission mutates some data, and then the update gets pushed back to you through the EventSource rather than it being the response.</p><p><strong>Joe</strong>: This sounds quite nice as a concept. A clean mapping of events to state to UI going from the machines through the WebSockets to the Remix server to the application ending up in XState and rendered by React. How does it do in the real-world?</p><p><strong>Hugo</strong>: There's no active development going on it but the fact that it didn&#8217;t need a release in the last 6 months is a testament to its stability. It's pretty reliable. One of our Engineering Directors the other day was saying, oh, I had a look at the code base. Seems really nice and neat and reasonable. So I think that's good. I mean, you should have a look at it yourself and see what you think.</p><p><strong>Joe</strong>: I will for sure, I&#8217;m super excited to check the codebase of a live Remix application. I think this is a good place to (w)RAP things up. Thanks Hugo for sharing all your insights with us. It was an exciting conversation!<br><br><strong>&#9997;&#65039; Author&#8217;s Note</strong>: <em>Since the interview I&#8217;ve done so and I really liked the project. I also had a few interesting internal discussions with other developers involved with it and the generic sentiment is very positive about the RAP codebase. (In case if you wondered). But Tesco is a huge company and I came to know about other Remix projects running in our estate. Let me know if you want me to cover some of those too, or if you would like to see similar interviews in the future!</em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.fullctx.dev/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 Full Context Development! Subscribe for free to not miss similar posts in the future!</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[Remix In Production at Tesco - An Interview With Hugo Jobling - Part I/II]]></title><description><![CDATA[Remix has been out for a while proving its worth in the trenches. Now's a good time to gather some evidence whether it lives up to its promises or not.]]></description><link>https://www.fullctx.dev/p/remix-in-production-at-tesco-part-1</link><guid isPermaLink="false">https://www.fullctx.dev/p/remix-in-production-at-tesco-part-1</guid><dc:creator><![CDATA[Jozsef Miskolczy]]></dc:creator><pubDate>Wed, 25 Oct 2023 17:58:02 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/c269b2bb-929b-4d99-923c-a67aaac3d2e4_1640x924.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_!KzAb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f30ff23-d382-4cc2-a6a0-998ee22992bf_1640x924.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!KzAb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f30ff23-d382-4cc2-a6a0-998ee22992bf_1640x924.png 424w, https://substackcdn.com/image/fetch/$s_!KzAb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f30ff23-d382-4cc2-a6a0-998ee22992bf_1640x924.png 848w, https://substackcdn.com/image/fetch/$s_!KzAb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f30ff23-d382-4cc2-a6a0-998ee22992bf_1640x924.png 1272w, https://substackcdn.com/image/fetch/$s_!KzAb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f30ff23-d382-4cc2-a6a0-998ee22992bf_1640x924.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!KzAb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f30ff23-d382-4cc2-a6a0-998ee22992bf_1640x924.png" width="1456" height="820" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4f30ff23-d382-4cc2-a6a0-998ee22992bf_1640x924.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:820,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1784717,&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_!KzAb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f30ff23-d382-4cc2-a6a0-998ee22992bf_1640x924.png 424w, https://substackcdn.com/image/fetch/$s_!KzAb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f30ff23-d382-4cc2-a6a0-998ee22992bf_1640x924.png 848w, https://substackcdn.com/image/fetch/$s_!KzAb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f30ff23-d382-4cc2-a6a0-998ee22992bf_1640x924.png 1272w, https://substackcdn.com/image/fetch/$s_!KzAb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f30ff23-d382-4cc2-a6a0-998ee22992bf_1640x924.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><strong>Hey Full Context Developer</strong></h2><p><em>(I&#8217;m writing in a personal quality, opinions are mine and are not reflective of Tesco&#8217;s)<br></em><br>Today, we are doing something different. As the title says, I will write about Remix but the format is going to be new for this publication. The framework has been out for a couple of years so enough time has passed for the frontend community to learn about how and when to use it best. I thought now is the right time to re-evaluate its benefits based on real-life experience.</p><p>And to do that, a special opportunity presented itself. As you might know I recently joined Tesco and it turned out that the principal software engineer on our project, Hugo Jobling was a very early adopter of Remix. I recently managed to grab a few hours of his time to talk about it. Some of you might remember, the framework was first published as a pay-only product. Hugo bought it in the earliest days and used it ever since in multiple projects. One of them is running in close to two thousand Tesco stores across the UK.</p><p>Below you can read the edited version of the interview. I arranged it in sections focusing on specific topics. As the whole thing turned out to be quite long I will be releasing it in parts! Here&#8217;s the overview. The first part will cover the first 3 topics and the <a href="https://www.fullctx.dev/p/remix-in-production-at-tesco-part-2">second</a> will focus on Remix and the RAP.</p><ul><li><p><strong>&#128214; Career</strong></p><ul><li><p><strong>Hugo&#8217;s professional history, following the evolution of the web from the very beginning of the 2000&#8217;s as a kid to adopting React in 2013 to becoming one of the earliest users of Remix</strong></p></li><li><p><strong>How he made ethical choices about certain industries</strong></p></li><li><p><strong>Where can an engineer be the most effective</strong></p></li></ul></li><li><p>&#128722; <strong>Tesco</strong></p><ul><li><p><strong>Why Hugo joined this company. </strong><em>(I chime in too)</em></p></li><li><p><strong>An insider&#8217;s look of working at Tesco as a software engineer</strong></p></li><li><p><strong>Some of the unique benefits Tesco offers for professional development</strong></p></li></ul></li><li><p>&#9883;&#65039; <strong>React</strong></p><ul><li><p><strong>What he learned from using React for a decade</strong></p></li><li><p><strong>How he made successful early adoption decisions multiple times</strong></p></li><li><p><strong>What were the unique benefits of early adoption for his career</strong></p></li></ul></li><li><p>&#127899;&#65039; <strong>Remix</strong></p><ul><li><p><strong>How to cultivate a great taste for technology choices.</strong></p></li><li><p><strong>What types of applications are best suited to built with Remix</strong></p></li><li><p><strong>How Remix offers more than Next.js</strong></p></li></ul></li><li><p><strong>&#128587;&#8205;&#9792;&#65039; RAP</strong></p><ul><li><p><strong>What&#8217;s a RAP and why is there one in almost 2,000 Tesco stores</strong></p></li><li><p><strong>How to handle real-time data with the Remix architecture</strong></p></li><li><p><strong>How well does it do in production</strong></p></li></ul></li></ul><p>Recording this interview was super fun and insightful. I&#8217;m sure you will enjoy it too. Huge thanks to Hugo for the conversation. You can find out more about him at:<a href="https://thisishugo.com"> thisishugo.com</a> (<em>which is a tiny Remix site btw&#8230;</em>) For a teaser here are some quotes:</p><div><hr></div><p><em><strong>&#8220;</strong>Having been built and working with large scale React applications for years, you realize, as everybody realizes, that it's called Create React App, it's not called Maintain React App. And there's a reason for that.<strong>&#8220;</strong></em></p><p><em>&#8220;When I work on a Remix application, I'm really productive because when I'm following the happy path, the pit of success, it pushes you along like a tailwind.<strong>&#8220;<br>- </strong></em><strong>Hugo Jobling</strong></p><blockquote></blockquote><div><hr></div><h2><strong>&#128075; Intro</strong></h2><p><strong>Joe:</strong> Let me start with a quick rundown of my plans for this conversation. I would like to cover two main topics. First, to get to know you a little bit better as a software engineer and as a person. And then, to learn about your experience with Remix and what are some of your takeaways from using it on multiple live projects.</p><p><strong>&#9997;&#65039; Author&#8217;s Note</strong>: <em>If you are already familiar with what Full Context Development is and the history of this newsletter feel free to skip to the next paragraph.</em></p><p>Let me tell you a bit about what this Full Context Development stuff is and how I came up with it. It&#8217;s obviously strongly connected to this newsletter too, which grew out of my work on my own project. I developed an &#8220;<em>online book</em>&#8221; - <em>you can check it out at:<a href="https://www.fullcontextdevelopment.com"> fullcontextdevelopment.com</a></em> - where I tried to distill my experience about making good technical decisions based on targeted business outcomes and to extend it with deep research from the knowledge of the wider software development industry. It sucked quite a bit I guess, only attracted 12 customers. What actually got some real interest from people over the internet was the tech reviews I wrote as a marketing effort. I&#8217;ve reviewed Remix and Next.js using the system I established in the book. And they got published in React themed newsletters like<a href="https://thisweekinreact.com/"> This Week in React</a>,<a href="https://reactnewsletter.com/"> React Newsletter</a> and<a href="https://react.libhunt.com/newsletter"> Awesome React Weekly from LibHunt</a>. From then on people started to sign up to my own newsletter through the book&#8217;s website. That&#8217;s how all of this started. The main goal of what I'm doing here is to give people insight into the most recent front-end technologies by answering questions like: How much value will they provide for your projects? How will they impact business results? How could they influence your career? The core of this approach is simple, all we have to do is focus on five impact factors: CPU-DB. <em>Customer Experience, Productivity, Utilization, Direct Costs and Business Opportunities</em>. I&#8217;ve spent around two months distilling those 5 factors while I was looking for the smallest subset of &#8220;<em>things</em>&#8220; that can connect the full range of business outcomes with the complete set of technical attributes of software and programming. And people are signing up to the newsletter. Not in droves, not like crazy, but steadily and the pace is accelerating. That's something I&#8217;m super proud of and grateful for.</p><h2><strong>&#128214; Career</strong></h2><h4><em><strong>- From building websites at 10 to Principal Software Engineer at Tesco</strong></em></h4><p><strong>Joe: </strong>I&#8217;ve been planning to write about Remix recently, and as I heard about your experience with it, I thought it would be the perfect opportunity to get someone&#8217;s perspective who actually used it in production for years about the strengths and weaknesses of the framework . Later, when we had the chance to talk more in-person, during your visit to<a href="https://tesco-bst.com/tesco-technology/"> the Tesco office in Budapest</a>, I realized that you are a really interesting guy to talk to.</p><p><strong>Hugo:</strong> Well, give the appearance of one.</p><p><strong>Joe: </strong>No kidding, and I'm super excited to do this interview. I would love if you could introduce yourself for the readers, maybe by walking us through your career. I know you started out in tech journalism. How did that happen? And then how did you transition into software development?<br><br> <strong>Hugo: </strong>After finishing my A-levels I wasn't going to go to university. I had a six-month fixed-term contract job working for the Department of Work and Pensions, just to have some disposable income. I knew that wasn't going to be a career so I was looking for other opportunities. I used to read this website called<a href="https://www.trustedreviews.com/author/hugo-jobling"> Trusted Reviews</a>. (<em>Spoiler:</em> <em>this is a link to all of Hugo&#8217;s contributions there.</em>) During this time, they posted a job advert, and I was like, how high can it be? I could write. I like writing. I like tech. Also I was active on the forums. So they knew who I was. I sent in an application, did an interview, and they're like, try again in six months. So I did try again in six months, and then I got a job there.</p><p><strong>Joe:</strong> Oh nice, that&#8217;s not how the story usually goes! How did it continue?</p><p><strong>Hugo:</strong> I was there for just about four years. And then that company got bought by a bigger organization. The founder left. He was a really great mentor to me. And him leaving just killed the culture of the company and I wasn't really keen on working there anymore. So I became a freelance writer doing individual paid articles, which at the time was a shrinking field and very competitive.</p><p><strong>Joe:</strong> I guess this was the perfect time to consider a career change. But why software engineering?</p><p><strong>Hugo:</strong> By that time I'd been playing with development for ages. I did a programming course at school and we did web development as part of our IT GCSEs. But I've been building websites basically since websites are possible to build. I got like 25 megabytes of hosting space for my 10th or 11th birthday and I was building my own, little personal website. It was horrific. I'm glad Archive.org hasn't got it anymore, because it was truly terrible.</p><p><strong>Joe:</strong> Now you really made me want to have a look at it! But I know how some things are better left in the past so let&#8217;s get back to your story of moving into development.</p><p><strong>Hugo:</strong> I simply thought, OK, how hard can it be? Let's start doing some web dev work. I just started out doing like, oh, you want a single website for your little thing that you're going to do. So I did some of that and then pivoted into a full-time web dev job at a local business developing a point of sale application so clearly I've developed a pattern.</p><p><strong>&#9997;&#65039; Author&#8217;s Note</strong>: <em>Our teams are working on the UIs of the newest Tesco tills so it definitely looks like a pattern.</em></p><p><strong>Joe:</strong> How did your career continue from there?</p><p><strong>Hugo:</strong> So I did that for a few years then took a role at a local-ish e-commerce company. Then I decided that the money was better in London, so I better go work in London. My first job there was at a consultancy, just doing typical consultancy stuff, building prototype apps and the like.</p><blockquote><p><em><strong>I think that's a useful type of work to have done at some point</strong>, <strong>especially at small consultancies because it does force you into having to communicate with stakeholders, to learn to cut the chaff and move fast to deliver by the deadline.</strong></em></p></blockquote><p>It teaches you the mindset of building MVPs, while actually focusing on the minimal and the viable, and solving problems as opposed to playing with cool tech. Because if you spend one out of your two weeks playing with fancy toys, then you will have very dissatisfied customers.</p><p><strong>&#9997;&#65039; Author&#8217;s Note</strong>: <em>This makes absolute sense from the Full Context perspective. It&#8217;s no wonder I defined 2 out of the 3 real goals of our work as<a href="https://www.fullcontextdevelopment.com/book/chapter-1#b15e49300e2e492884169bd04e1e286b"> solving the problems of the users and the problems of the business</a>.</em></p><p><strong>Joe:</strong> It was a really valuable experience to have for me too, that&#8217;s for sure. I worked in a similar environment for roughly a year, a few months more, and it gave me a really good understanding of how my choices connect to the life of the businesses (<em>clients</em>) I work for. It&#8217;s one of the main influences why I started to write my book. But back to you journey.</p><p><strong>Hugo:</strong> So there's the e-commerce, then the consultancy place, then I worked at a venture capital firm for a short period of time building an in-house software tool. From there I went to a sports betting place called Ladbrokes Coral, which is quite a big UK gambling company.</p><p>Interestingly, again, working on a point of sale till system written in React and Redux. That was in 2018 or so. Then you come back in 2021, three years later, and it's like, oh great, I get to see the same problem again. (<em>That&#8217;s when Hugo joined Tesco as principal software engineer.</em>) Weirdly with the same tech, because it was started about the same time. I can see all the things we did differently, some of them are better in this place.</p><p>When my time at that betting company came to an end I knew that I wanted to do something a little more ethical. Then I saw this role available at Tesco.</p><blockquote><p><em><strong>And I was thinking about where am I actually effective as an engineer?</strong> <strong>Typically, I think that I do a better job working on products that I'm actually a user for.</strong></em></p></blockquote><p><strong>&#9997;&#65039; Author&#8217;s Note</strong>: <em>This is also encoded in the Full Context mentality. I&#8217;ve dedicated<a href="https://www.fullcontextdevelopment.com/book/chapter-4"> two</a><a href="https://www.fullcontextdevelopment.com/book/chapter-5"> chapters</a> of the book to help people understand the customer&#8217;s perspective of the software products we create because we can only do our best work when we have that kind of understanding under our belt.</em></p><p>And I actually was a customer of Tesco. I do use the Till software. And I have opinions about what is and is not good Till software, as opposed to working on some internal tooling for some bank, right? Or like building an insurance product or anything where you're out of touch with the domain. Also, the fact that I had previous experience working on point of sale, React, e-commerce systems, I was like, I can bring a lot of value to this specific role because I've worked on this problem twice before. I know what an approach to it looks like. And so I can actually apply that to this problem space. And then Tesco was daft enough to hire me. So here we are.</p><h2><strong>&#128722; Tesco</strong></h2><h4><em><strong>- Helping millions of people as a software engineer</strong></em></h4><p><strong>Joe:</strong> It&#8217;s really interesting how your story naturally progressed from a birthday gift of a couple megabytes of hosting space to working at the scale of Tesco in a very high impact position. And I can relate to your motivation for joining this company. I also considered the ethical aspect when I was planning my next move. For me it&#8217;s tremendously motivating to know that you help people get something that they really need and that we are working on something <em>*real*</em> instead of <em>*virtual*</em>.</p><p><strong>Hugo:</strong> Well, that's the selfish side of it, right? The reason I took the role at a gambling company was because the problems were really interesting. You're talking about real-time processing of millions of events. Take for example the Grand National in the UK, it&#8217;s a massive event where the same amount of activity happens in the system on that one day as on the rest of the year. You get these really interesting big problems of scale and throughput, that's a fun problem to solve.</p><p>But at the end of the day, you're like, yeah, but it is gambling. I go back and forth. Am I making the world a worse place? For some people? Yes. For most people? Broadly, I feel neutral, verging towards unethical. It's not as bad as working for a company that does arms manufacturing. Or tobacco companies. Well, there's no societal benefit to smoking. People enjoy it, but it's not good for you.</p><p>On the other hand, I had other opportunities where I could have gone to work for a healthcare startup that was doing healthcare in Africa or something like that. That would be more morally good than what I&#8217;m doing. But I feel like Tesco is towards the better end of the spectrum, all things considered.</p><blockquote><p><em><strong>And there's not a lot of companies where you can have the level of scale and impact and also feel good about it while having the chance to make major individual contributions.</strong></em></p></blockquote><p>If you're going to work at Google or Meta, you're going to be one of 5,000, 10,000 engineers, there's a very small number of people that have outsized impact. Engineers working on the React team at Meta have more impact than your typical Meta developer. But most people at Meta don't work on React. And I don't know what they've been doing for the last year because it hasn't been releasing updates to React. So maybe nobody works on React at Meta anymore. Who can say?</p><p><strong>Joe:</strong> Yeah, I don't know either, but I would be surprised if there was no work going on behind the scenes. What I know with 100% certainty is that many interesting things are going on at Tesco Technology. What do you like about them the most?</p><p><strong>Hugo:</strong> The good side of it is you can affect positively, literally, millions of people. And then also, if you're not careful, millions of people can have a bad day because of your mistakes. But you want to have stakes, right? It makes it meaningful. At Tesco, you feel like what you're doing is actually having a positive impact on society, broadly speaking.</p><p><strong>Joe:</strong> Yeah, I agree. What I found fascinating in addition to that is the scale of the organization itself and the opportunities that come along with it.</p><p><strong>Hugo:</strong> This is another thing that attracted me to Tesco. I'm at a point in my career now where I don't want another 18 months and then pivot, 18 months and then pivot cycle. I want to work on something that I get to see the consequences of my decisions in five years' time. And I think that Tesco is the kind of place where you can have that long a career.</p><p><strong>&#9997;&#65039; Author&#8217;s Note</strong>: <em>Most definitely, we have a couple of colleagues who are here for 10 or even 20+ years. Make of that what you will, but for me their depth of familiarity with the domain and the organization is super impressive. They can leverage these assets to easily create seemingly 100x impact.</em></p><p>I have done some smaller greenfield projects from scratch, in some cases, they were 100% my code and nobody else&#8217;s. I've been proud of those things, and I thought they were good software. But I've written it and then, I don't see the report from someone three years later that has to maintain that thing as to whether or not they were able to pick up what I did. I want that person's opinion as to my software, right?</p><p><strong>Joe:</strong> That&#8217;s the kind of input you can only get while sticking around for a long time in a stable environment, at a place like Tesco for example. You will plateau in certain aspects of your professional development if you are always jumping around every 18 months as you said.</p><p><strong>Hugo:</strong> Some of the stuff I'm proud of, like the decisions we've made recently, are things like not only saying it's <em>not</em> time to do a rewrite, but actually having a migration path from what we have today to a better version of it in two years' time, that&#8217;s the roadmap I was putting out for this project. It's just an interesting evolution in thinking, being more cognizant of the fact that not everything needs to be disposable.</p><p><strong>Joe: </strong>I'm in a similar phase myself. I choose Tesco among other reasons to have the chance to learn from the long-term consequences of my decisions.</p><p><strong>Hugo: </strong>You have a bit more flexibility. You don't have just six months of runway where everything is boom or bust. At Tesco people are rightfully upset when you lose the business money. It's not inconsequential. The situation with our cloud logging is a perfect example. At a time you realize, oh, we're spending X amount of money, and we've been doing that for six months, and we're going to be doing that for the next six months if we're not careful.</p><p><strong>Joe:</strong> Well this sounds interesting. Why is that?</p><p><strong>Hugo:</strong> It's externalities, where, as a developer, I just think console.log, right? Of course I'm going to write my logs. But it doesn't occur to me that this log line will get written 1,000 times a minute on 1,000 servers every single day. And that's costing us 10 gigabytes of data a day, which every month is costing us &#163;1,000. One log line is &#163;1,000 of cost a month. An engineer can easily write that line without realizing those consequences. (<em>The numbers are of course made up, just close enough to give you a sense of the actual scale.</em>)</p><p>That's money that could be better spent elsewhere. That could be some extra engineers joining the team. Or savings are passed on to our customers in a lot of cases. So this stuff does matter. But like, nobody's getting fired because you were two weeks late or put in some extra logging. And the project will most likely live on for the next five years, and who knows how much longer.</p><blockquote><p><em><strong>The business problem </strong>(the need to collect payment from customers)<strong> will be there, even if the specific implementation of what you're doing isn't there anymore. And that's the interesting part, it&#8217;s you get to work on the same problem for a long period of time.</strong></em></p></blockquote><h2><strong>&#9883;&#65039; React</strong></h2><h4><em><strong>- The experience of working with React for a decade</strong></em></h4><p><strong>Joe</strong>: That&#8217;s what provides the chance to learn from long term consequences and also to become an expert of a business domain. Moving on to the more front-endy topics I planned, one of the things you mentioned is that you have worked with React since at least 2018? When was the first time you used it? What were your first impressions?</p><p><strong>Hugo:</strong> I've been following it along since its inception. I was there in 2013, straight off the back of the F8 Facebook conference. I was like, let's use this thing. I was, apparently, one of the few people who thought that JSX seemed fine. Some years down the road the bulk of the community got over that initial hump too.</p><p>At that time people were excited about React. The pitch that it was "just the view layer" helped, I think. When you're working on existing projects and want one page of our application to be this fancy interactive page, but keep the rest of the app server rendered, React felt like a quite natural fit there. That was what everybody was building. That's how I picked it up.</p><p>Then it just turned out that the tooling only seems to get better and better. Fast forward to today and the level of tooling we have is just extremely good. The types of problems that you can solve, even with relatively little ability, is much wider. Newcomers can get a multiplicative advantage, a level up over what you could do 10 years ago.</p><p><strong>Joe:</strong> How does it feel to work with React after a decade of using it?</p><p><strong>Hugo:</strong> What's interesting about working in React over a longer period of time, is that one of React's greatest strengths is also one of its biggest weaknesses, which is historically how not opinionated it has been about how you build a React application. And what that has resulted in, at least in the apps that I've worked on, is that unless they were started by the same person and worked on by the same teams, typically every React app you work on is its own thing. I see very little commonality between different React apps. And I think that's also more true for React and the JavaScript ecosystem in general, than it has been for other ecosystems, because there's just more churn in the space.</p><p>React today is, in many ways, quite different to the React I learned a long time ago. Hooks are very different to the component lifecycle. And the ecosystem of what you do in React is very different today. But fundamentally, the mental model is the same. Your application as a function of state is kind of still there.</p><p>I think they latched onto a really good idea. There's that<a href="https://twitter.com/rauchg/status/801005961334943744"> Guillermo Rauch tweet</a> that says, React is such a good idea, we're going to be thinking about the implications for the next decade. I remember thinking, it's a little bit high, but broadly, he&#8217;s probably right. And lo and behold, here we are almost 10 years later from when he wrote that. And we are still seeing the implications of the React programming model all this time later.</p><p><strong>Joe:</strong> Adopting a library very early comes with a huge risk but has unique benefits as well. What were the positive effects of adopting React early on?</p><p><strong>Hugo:</strong> There was no guarantee that React was going to be like the big thing it is. But by getting in very early, I had the advantage of, when React becomes big and companies start looking for React expertise, that I've been doing it as long as anybody outside of Facebook can be doing React. Five years ago I had five years experience, which was quite rare. I have now 10 years experience, which is still quite rare.</p><blockquote><p><em><strong>And so the advantage that has afforded is exposure to more of the types of problems that teams working with React have faced, such that now, when we have our internal issues on the team, and someone's like, oh, I've got this problem with React, odds are I've probably seen it before.</strong></em></p></blockquote><p>Not because I'm some kind of React expert that knows everything about React. It's as you expose yourself to something for long enough, the same problems tend to resurface.</p><p><br><strong>&#9997;&#65039; Author&#8217;s Note</strong>: <em>This is where we will stop for this post. Let me know how you liked it in the comments and stay tuned because:</em></p><h2>Part II is out now, <a href="https://www.fullctx.dev/p/remix-in-production-at-tesco-part-2">take a look</a>!</h2><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.fullctx.dev/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 Full Context Development! Subscribe for free to not miss the next part and similar posts in the future!</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[Hype Buster: Legend State]]></title><description><![CDATA[Is the fastest React State Library the right state library for you?]]></description><link>https://www.fullctx.dev/p/legend-state-library-fastest-react-review</link><guid isPermaLink="false">https://www.fullctx.dev/p/legend-state-library-fastest-react-review</guid><dc:creator><![CDATA[Jozsef Miskolczy]]></dc:creator><pubDate>Mon, 31 Jul 2023 16:00:15 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!JAU2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe180705f-54a8-4e12-b92c-753bd61a4cbc_1600x900.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_!JAU2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe180705f-54a8-4e12-b92c-753bd61a4cbc_1600x900.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JAU2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe180705f-54a8-4e12-b92c-753bd61a4cbc_1600x900.png 424w, https://substackcdn.com/image/fetch/$s_!JAU2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe180705f-54a8-4e12-b92c-753bd61a4cbc_1600x900.png 848w, https://substackcdn.com/image/fetch/$s_!JAU2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe180705f-54a8-4e12-b92c-753bd61a4cbc_1600x900.png 1272w, https://substackcdn.com/image/fetch/$s_!JAU2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe180705f-54a8-4e12-b92c-753bd61a4cbc_1600x900.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!JAU2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe180705f-54a8-4e12-b92c-753bd61a4cbc_1600x900.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e180705f-54a8-4e12-b92c-753bd61a4cbc_1600x900.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2518074,&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_!JAU2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe180705f-54a8-4e12-b92c-753bd61a4cbc_1600x900.png 424w, https://substackcdn.com/image/fetch/$s_!JAU2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe180705f-54a8-4e12-b92c-753bd61a4cbc_1600x900.png 848w, https://substackcdn.com/image/fetch/$s_!JAU2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe180705f-54a8-4e12-b92c-753bd61a4cbc_1600x900.png 1272w, https://substackcdn.com/image/fetch/$s_!JAU2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe180705f-54a8-4e12-b92c-753bd61a4cbc_1600x900.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>Hey Full Context Developer,</h2><p>We need to talk about <a href="https://legendapp.com/open-source/state/">Legend State</a>! It&#8217;s a trending new state library for React and React Native apps that might fundamentally change how React&#8217;s component lifecycle works by drastically simplifying it using fine-grained reactivity. This might become the single most significant evolution of the React ecosystem this year. <em>(More about this towards the end.)</em> (<em>Also</em> <em>support for</em> <em>more frameworks is likely to come in the future.</em>) </p><div><hr></div><p><em><strong>Intro to the newsletter</strong>: Hey I&#8217;m Joe &#128075;, senior frontend developer and this is a short, more focused issue of the High Impact Frontend series. The goal of the whole publication is to cut through the noise of non-stop frontend tech buzz and bring you only the most impactful news that can create outsized, positive impact and change what you work with, the way you do development or even the course of your career.</em></p><p><em>I use the <strong>Full Context</strong> approach, my way to identify and explain the level of impact a tool or a piece of information can make and the <a href="https://www.fullctx.dev/p/high-impact-frontend-8-on-demand-ui-by-ai#%C2%A7the-scoring-system">hype-value scoring system</a>. My goal is to offer a complete picture of when, how and who can realize that impact so you can easily find the most valuable news <strong>for you</strong>. You can find more details about this in a <a href="https://fullctxdev.substack.com/p/what-this-full-context-stuff-is-about">dedicated post</a>.</em></p><p><em>My absolutely top secret, hidden agenda behind all this is to teach developers how to connect the technical part of our work with its business and real-life outcomes, so I can help you to make better choices and create better software for everyone. </em></p><p><em>If you think this work is worth supporting please consider upgrading to a paying subscription. Your financial support would make it possible to put in even more effort and produce higher quality content. Thank you if you consider joining the core Full Context Developers&#8217; team this way!</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.fullctx.dev/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://www.fullctx.dev/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><p>I&#8217;ve decided to write this post as soon as I learned about LS because it has some really cool and interesting properties that also has the potential to easily overhype the library. (<em>Starting with its name, which is kind of cool, not gonna lie. And the fact that it gives you <strong>signals</strong> for 4 KBs which is another trendy topic nowadays.</em>) To quote its own introduction from GitHub: </p><div class="pullquote"><p>Legend-State is a super fast and powerful state library that enables fine-grained reactivity and easy automatic persistence</p></div><p>This lib is so performant it claims to be the <strong>fastest React state library out there</strong>. Furthermore it&#8217;s optimized for arrays to the level that it even beats vanilla JS on the "swap" and "replace all rows" tests in the de-facto <a href="https://github.com/krausest/js-framework-benchmark">krausest/js-framework-benchmark.</a></p><p>And damn, that&#8217;s quite something! However I want to focus on the utility of this library from the Full Context perspective. Let&#8217;s jump straight into that.</p><h2>Is This Really <em>Legen</em> &#8230;Wait For It&#8230; <em>dary</em>?</h2><p>As most of you following already know, my goal is to offer a well balanced view of the benefits of the technology in review. To do that, I use the <strong>CPU-DB impact factors</strong>. <em>(Customer Experience, Productivity, Utilization, Direct Costs, Business Opportunities)</em>.</p><p>I want to provide you with that type of analysis for Legend State so you will be able to decide whether it will deliver <strong>legendary results for your use case or not</strong>.</p><p>As the web performance experts say: &#8220;Fast is cash&#8221; and Legend State is fast, so is it going to increase the revenue a lot? </p><p>That's the question every one of us is trying to figure out right now. If it will lead to the type of speed improvements that shave off 100s of milliseconds from your important performance metrics it will become a no-brainer for lots of projects. But will you really achieve that by introducing it? And even if yes, what&#8217;s the price you have to pay for it? </p><h2>The Name is Important: A State <em>Library</em></h2><p>I really like that the author is honest about the goal and scope of the project by calling it <strong>a state library and not a state management solution</strong>. This is actually one of my biggest worries about adopting it. What you currently get are super optimized primitives to handle reactive state. But it doesn&#8217;t come with a baked-in, enforced pattern to manage that state application wide. </p><p>It&#8217;s a tradeoff with pros and cons. You can roll your own flavor of state management, but for large scale, long-term projects where consistency and maintainability are crucial this might not cut it. If you check out the docs you will find a section called <a href="https://legendapp.com/open-source/state/patterns/">Patterns</a> that show you some possible styles of handling application state with it. <a href="https://www.youtube.com/watch?v=E4TH77SMOG8">Jack Harringon&#8217;s YouTube video covering it</a> also shows some extra patterns in practice. </p><blockquote><p><em>If you are looking to create a new open-source project this is also a great opportunity. I think there&#8217;s huge potential in a higher level library that actually enforces a single pattern of handling application state, built over Legend State. (Legend State Manager, or&#8230; Legendary State?)</em></p></blockquote><h2>The Issues</h2><p>With LS you can just go and directly get and set state all across the app, however you will miss the benefits of the centralized handling of state transitions when taking that route. This pattern can easily lead to a lot of issues:</p><ul><li><p>Duplicating the logic of updating the same piece of state across different parts of the app.</p></li><li><p>Duplicating the logic of accessing and deriving new state from the same pieces of base state <em>aka selectors</em>.</p></li><li><p>Introducing subtle bugs or divergence each time you reimplement the same state manipulation.</p></li><li><p>It lacks an easy way to find or modify code that works with the same part of the state on the same way.</p></li><li><p>It also lacks the ability to clearly show the shape of the whole application state as it can be ad-hoc defined at places of usage.</p></li><li><p>Similarly there&#8217;s no definitive place to look for the possible state transitions.</p></li></ul><p>All of these can lead to a huge mess down the line. However there&#8217;s nothing stopping you from implementing guardrails and establishing conventions to prevent these issues yourself. What I want to emphasize is that you need to do it consciously without much official guidance.</p><h2>The Radical Rethinking of the React Lifecycle</h2><p>I can&#8217;t deep link to it, but there&#8217;s a paragraph <a href="https://legendapp.com/open-source/legend-state/">in the lib&#8217;s intro post</a> called: <strong>Replacing global state AND all of the React hooks</strong>. If you are a React dev, you need to check it out. When adopting Legend State you can drastically rethink and reduce the complexity of the React component lifecycle. That is literally mind blowing! Read the linked post for the exact details. In a nutshell, this lib will eliminate re-renders, so you don&#8217;t have to care about anything related to subsequent rendering, all you have to take care of is when the (<em>observed</em>) state of the component changes. However you will have the library provided tools for that. If you give it a thought that&#8217;s a massive shift in the mental model of what happens at React runtime and a massive simplification! I still don&#8217;t fully comprehend its implications but I will look into it further. Would you like me to follow up on that?</p><h2>CPU-DB: The Full Context Perspective</h2><ul><li><p><strong>Customer Experience:</strong> Legend State is small, only 4kbs of JS payload so you can save some initial bundle size by using it instead of some larger state management package (<em>looking at you Redux</em>). Its state updates are crazy fast and it can even hack the React render lifecycle to speed up rendering performance even more. <strong>These are not by default impactful improvements</strong> so I would precisely measure and validate if the project can meaningfully benefit from the high rendering performance it can provide. Most applications working on the standard React way are actually fine perf wise. Or can be optimized with the built-in optimization tools just fine. I can totally get why any frontend dev can get super enthusiastic about huge performance improvements but please don&#8217;t jump ship without considering the ROI of any tech choice. <br><strong>&#10145;&#65039; </strong><em><strong>Potential Impact:</strong></em> <em><strong>System Category<br></strong></em></p></li><li><p><strong>Productivity</strong>: If adopting Legend State can really reduce the complexity of working with React hooks by eliminating the need to think about <em>useMemo</em>, <em>useCallback</em>, <em>useEffect</em> or <em>useState</em> (<em>as the linked article says</em>) while also making most of the component lifecycle irrelevant, we can gain a meaningful productivity improvement. If it can save us from the effort of handling all the weird edge cases and potential issues stemming from them, that difference can actually add up to something noticeable. On the other hand, if you don&#8217;t enforce good patterns for managing application state, the issues mentioned can easily negate any productivity gains. <br><strong>&#10145;&#65039; </strong><em><strong>Potential Impact:</strong></em> <em><strong>Group Category<br></strong></em></p></li><li><p><strong>Utilization</strong>: This is always affected by changes in productivity. When that's improved your utilization goes down, which results in extra capacity and the chance to get more done under the same time as earlier. <br><strong>&#10145;&#65039; </strong><em><strong>Potential Impact:</strong></em> <em><strong>Group Category<br></strong></em></p></li><li><p><strong>Direct Costs</strong>: No direct costs are involved besides the bang for your engineering hours as productivity dips at the beginning of adoption and hopefully improves as time goes on. This is where I have to point out that early adoption of any technology can actually become really costly through the productivity killing unforeseen issues that only arise as a tool gets more widely adopted and used. That&#8217;s why my recommendation for non-trivial projects is to only choose Legend State now if you can validate its usefulness and viability and there&#8217;s capacity and budget to stick with the decision even if you find some weird use cases that take time and community effort to support properly. (<em>For example: <a href="https://github.com/LegendApp/legend-state/discussions/143#discussioncomment-6581139">SSR is just being explored</a>.</em>)<br><strong>&#10145;&#65039; </strong><em><strong>Potential Impact:</strong></em> <em><strong>Organization Category<br></strong></em></p></li><li><p><strong>Business Opportunities</strong>: Performance improvements in general has the effect of bringing a broader audience to your websites and it&#8217;s the same with Legend State. With faster sites, more and more people fall into the category where performance issues won&#8217;t make them exit the journey before they convert so the reach of the product will increase. Which is a classic example of gaining new business opportunities.<br><strong>&#10145;&#65039; </strong><em><strong>Potential Impact:</strong></em> <em><strong>Organization Category</strong></em></p></li></ul><h2>Should You Use It?</h2><p>I recently read about the <strong>Innovation Point Principle</strong> from Addy Osmany (<em>ex core jQuery, now Head of Chrome Developer Experience @Google</em>) in a <a href="https://www.linkedin.com/posts/addyosmani_programming-developers-webdevelopers-activity-7082455766858665984-sR9V?utm_source=share&amp;utm_medium=member_desktop">LinkedIn post</a>. I highly recommend taking his advice when thinking about adopting new and shiny tech including LS. The principle is super aligned with the <a href="https://www.fullcontextdevelopment.com/book/chapter-1#b15e49300e2e492884169bd04e1e286b">Full Context perspective of our work</a> and it&#8217;s coming from a huge industry expert. Can&#8217;t love it more. But back to the lib&#8230;</p><p>I personally would only go all in with Legend State on low-risk projects. That typically means, side projects, internal tooling, PoCs, or any application that won&#8217;t be developed by more than ~ 3 people for a long time.</p><p>However I believe this is a tool that has great potential and interesting benefits so I definitely recommend experimenting with it if you can! </p><p>That&#8217;s all I can say about Legend State right now, but I&#8217;m looking forward to exploring it further in the future if you are interested. Let me know!</p><h3>&#127942; Final Score &#127942;</h3><h4>&#128202;<em><strong> </strong></em><strong>16 Points: Hype 4 x Value 4</strong></h4><h2>Personal Update</h2><p>While writing this post last week, I was on vacation with my family but something very interesting happened on Tuesday that I want to share with you all! I&#8217;ve interviewed Hugo Jobling for the newsletter about his experience using <a href="https://remix.run/">Remix</a> in production. Hugo is an early (<em>paying</em>) adopter of the framework and also my colleague at Tesco working as a Principal Frontend Engineer. I had a chat with him about his experience with the framework&nbsp;and how it helped him to deliver multiple projects (<em>one live in more than 2000 Tesco stores</em>). I will share the details and many more interesting ideas about frontend development from our conversation. It&#8217;s going to be super insightful! Really looking forward to delivering it to you all soon.</p><p>I also wanted to say huge thanks for all the new subscribers, the rate of signups is actually accelerating, there&#8217;s 151 of you already following. That&#8217;s super awesome and I&#8217;m doing my best to deliver you an ever improving, interesting and valuable newsletter. Let me know if I can do anything more to make that a reality for you!<br></p><p>See you in the next one Full Context Devs!</p><p>Best,<br>Joe <a href="https://twitter.com/fullctxdev">@fullctxdev</a></p><p><strong>&#10145;&#65039; Thank you for reading Full Context Development. If you liked this post feel free to share it and subscribe to the newsletter if you don&#8217;t want to miss future posts.</strong></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.fullctx.dev/p/legend-state-library-fastest-react-review?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.fullctx.dev/p/legend-state-library-fastest-react-review?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.fullctx.dev/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://www.fullctx.dev/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item><item><title><![CDATA[Announcing The Ultimate React & Next.js Performance Guide]]></title><description><![CDATA[Learn how to write ultra high performance React and Next.js applications here on Substack]]></description><link>https://www.fullctx.dev/p/announcing-the-ultimate-react-and</link><guid isPermaLink="false">https://www.fullctx.dev/p/announcing-the-ultimate-react-and</guid><dc:creator><![CDATA[Jozsef Miskolczy]]></dc:creator><pubDate>Sun, 16 Jul 2023 00:57:05 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!3pJ8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ce6f018-3429-4850-be1d-7b092cf7a79f_1920x1080.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_!3pJ8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ce6f018-3429-4850-be1d-7b092cf7a79f_1920x1080.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3pJ8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ce6f018-3429-4850-be1d-7b092cf7a79f_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!3pJ8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ce6f018-3429-4850-be1d-7b092cf7a79f_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!3pJ8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ce6f018-3429-4850-be1d-7b092cf7a79f_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!3pJ8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ce6f018-3429-4850-be1d-7b092cf7a79f_1920x1080.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3pJ8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ce6f018-3429-4850-be1d-7b092cf7a79f_1920x1080.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1ce6f018-3429-4850-be1d-7b092cf7a79f_1920x1080.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1141720,&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_!3pJ8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ce6f018-3429-4850-be1d-7b092cf7a79f_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!3pJ8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ce6f018-3429-4850-be1d-7b092cf7a79f_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!3pJ8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ce6f018-3429-4850-be1d-7b092cf7a79f_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!3pJ8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ce6f018-3429-4850-be1d-7b092cf7a79f_1920x1080.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><h3>Hey Full Context Developers &amp; Company</h3><p>I&#8217;m really sorry I&#8217;ve kept silent for a long while. There were multiple reasons (<em>like</em> <em>switching jobs, now I&#8217;m at Tesco, sadly some health issues</em>) but the biggest one was the giant effort I put into the preparation of (<em>&#8230; drum roll</em>)</p><div class="pullquote"><p>The Ultimate Guide to High Web Performance React and Next.js Applications</p></div><p>For a long time I have been a huge fan of web performance, React and Next.js. All 3 of them are super interesting and awesome tools for delivering full context value. Long story short, while there are tons of resources covering web performance, there&#8217;s none that&#8217;s covering the whole field yet laser focused on Next.js and its basis, React. That&#8217;s why I decided to connect all of these topics to deliver a unified guide, here on Substack, that will help anyone to gain comprehensive knowledge of the field and the self-confidence that&#8217;s coming with it! I believe it will be truly helpful and absolutely thrilling for all of you passionate frontend engineers! </p><p>I will be covering a ton of advanced performance optimization techniques and the basics necessary to understand them. I&#8217;m personally stoked by the unique blend of practical tips, real life case studies, technical details and code examples I&#8217;ve managed to put together. (<em>Hope that doesn&#8217;t sound weird, I mean, it&#8217;s not crazy to be excited for what I&#8217;ve done, right?</em>) All these, tied to their effects on user experience and business results. </p><p>That&#8217;s one of the cool things about web performance. It&#8217;s strongly connected to the profitability of products so it&#8217;s super easy to see the relationship between the optimization work and its effects over the Full Context. As the perf gurus say: &#8220;Fast is cash&#8221; and I will show why later.</p><p>With this post I want to share an overview of what&#8217;s in the making because, I believe, if you are interested in any of these topics this will get you super excited. <em>(Ordered quite randomly).</em> Just one more thing before that. <em><strong>I will resume writing about the news too!</strong></em></p><blockquote><ul><li><p><strong>Elementary and advanced React performance optimization techniques</strong></p></li><li><p><strong>Using web workers with hooks, Redux or simply by themselves to speed  up processing-heavy tasks.</strong></p></li><li><p><strong>Introduction to core Web Vitals, their practical importance and how React and Next.js can affect them.</strong></p></li><li><p><strong>Performance Scoring, Performance Budgets and Performance Comparison best practices.</strong></p></li><li><p><strong>Deep dive Into the usage of React Developer Tools for performance optimization</strong></p></li><li><p><strong>Case Studies, Code Examples and Pro Tips</strong></p></li><li><p><strong>The ultimate guide to Controlling the client-side browser cache (including cache invalidation strategies for single page web applications)</strong></p></li><li><p><strong>Surprising ways to use Storybook for performance aware design (and more optimization related work)</strong></p></li><li><p><strong>Introduction to performance measurement and analysis using Chrome Dev Tools, Google Lighthouse and WebPageTest</strong></p></li><li><p><strong>The RAIL model in the context of React and Next.js</strong></p></li><li><p><strong>Strategies for cache management using Service Workers: cache first, network first, cache with network fallback</strong></p></li><li><p><strong>Next.js specific web performance optimization tools and techniques</strong></p></li></ul></blockquote><p>You can already check out a much more complete and comprehensive list in the full <a href="https://www.fullctx.dev/p/ultimate-react-performance-table-of-contents">Table of Contents</a>, up on the website and read the first complete chapters including a free premium one: <a href="https://www.fullctx.dev/p/lazy-loading-in-react-and-nextjs">Lazy Loading in React and Next.js</a>.</p><h2>How to access it</h2><p>The format I&#8217;m going to use - and I think the process as well - is a little unconventional. I will incrementally release chapters here on Substack and once I manage to release a good amount of in-depth posts some of the performance guides will be paywalled behind the subscription. Ultimately this will become premium content for the publication.</p><p>Exactly when and how, I don&#8217;t know yet. But until I get there I&#8217;ve decided to enable paid subscription on the publication with the lowest price allowed by the platform, while keeping it completely optional. I&#8217;m doing this because I would like to give everyone a chance who wants to support my work on the guides to do so. If you decide to keep up a paid subscription that would be 1) super awesome and mind blowing 2) a great way to ensure I can work on producing a high quality, polished product that will help you all with everyday pains or just with learning fun and interesting stuff. I also plan to offer more premium community features so we can engage and shape the material together.</p><p>As the work continues, I will surely update and refine already published content. Don&#8217;t worry, if there are substantial changes or improvements I will notify all subscribers! Oh yeah, one more important thing, I won&#8217;t be completing chapters in any order set upfront but as it makes the most sense to me and our community.</p><p>So this is the plan! Many things are in the works already, I have the draft version for every chapter in the table of contents and some more. The journey itself will be an interesting one to follow. I hope it will teach you all a lot of interesting and useful performance hacks and proper optimization techniques too! See you around web performance ninjas and full context developers! Reading the guides will make you a better one of both!<br><br>Best, <br>Joe</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.fullctx.dev/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">To receive new posts and support my work, consider becoming a free or paid subscriber.</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[The Ultimate React and Next.js Performance Guide]]></title><description><![CDATA[The place for the frontend devs "in search of answers" about anything web performance related in React and Next.js land.]]></description><link>https://www.fullctx.dev/p/ultimate-react-performance-table-of-contents</link><guid isPermaLink="false">https://www.fullctx.dev/p/ultimate-react-performance-table-of-contents</guid><dc:creator><![CDATA[Jozsef Miskolczy]]></dc:creator><pubDate>Sun, 16 Jul 2023 00:47:24 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!qfIC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff34b5e16-903f-46a2-9d2c-f73b33442ffd_1920x1080.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_!qfIC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff34b5e16-903f-46a2-9d2c-f73b33442ffd_1920x1080.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qfIC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff34b5e16-903f-46a2-9d2c-f73b33442ffd_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!qfIC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff34b5e16-903f-46a2-9d2c-f73b33442ffd_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!qfIC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff34b5e16-903f-46a2-9d2c-f73b33442ffd_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!qfIC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff34b5e16-903f-46a2-9d2c-f73b33442ffd_1920x1080.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!qfIC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff34b5e16-903f-46a2-9d2c-f73b33442ffd_1920x1080.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f34b5e16-903f-46a2-9d2c-f73b33442ffd_1920x1080.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1141720,&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_!qfIC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff34b5e16-903f-46a2-9d2c-f73b33442ffd_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!qfIC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff34b5e16-903f-46a2-9d2c-f73b33442ffd_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!qfIC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff34b5e16-903f-46a2-9d2c-f73b33442ffd_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!qfIC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff34b5e16-903f-46a2-9d2c-f73b33442ffd_1920x1080.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><strong>&#9997;&#65039; Quick notes</strong>: </p><ul><li><p>As the guide is currently work-in-progress the table of contents will be likely changed multiple times to reflect structural or topical changes as I refine the work. </p></li><li><p>Please read the <a href="https://www.fullctx.dev/p/announcing-the-ultimate-react-and">Announcement Post</a> to learn about how I plan to deliver the guide. TLDR; It&#8217;s free here on Substack, but later I plan to compile it into a standalone book. </p></li><li><p>The ordering of the chapters is not final.</p></li></ul><h2>The Ultimate Guide to High Web Performance React and Next.js Applications</h2><ol><li><p><strong><a href="https://www.fullctx.dev/p/the-ultimate-react-and-nextjs-performance-guide">Introduction: The Ultimate Guide to High Web Performance React and Next.js Applications</a></strong></p><ul><li><p>What it Takes to Become a Badass Frontend Ninja Master</p></li><li><p>Performance is a State of Mind</p></li><li><p>The Call to Adventure<br></p></li></ul></li><li><p><strong><a href="https://www.fullctx.dev/p/the-importance-of-web-performance">The Importance of Web Performance in Modern Web Development</a></strong></p><ul><li><p>About The Impact of Web Performance on Multiple Dimensions</p></li><li><p>The Unique Challenges of Modern Web Applications</p></li><li><p>Special Considerations for React.js and Next.js Performance<br></p></li></ul></li><li><p><strong><a href="https://www.fullctx.dev/p/the-fastest-nextjs-react-website-of-the-galaxy">Learnings From The Fastest Next.js App of The Galaxy</a></strong></p><ul><li><p>Inspecting The Champion of All Times</p></li><li><p>The One True Goal of Performance Optimization</p></li><li><p>Key Takeaways</p><p></p></li></ul></li><li><p><strong>React Performance Optimization Tools and Techniques</strong></p><ul><li><p>Generic Optimizations: VDOM, State Updates, Component Lifecycle </p></li><li><p>Reduce Forced Synchronous Layouts</p></li><li><p>Throttle or Debounce Event Handlers - Infinite Scroll and Search Use Cases</p></li><li><p>Lazy Loading Components</p></li><li><p>Optimizing State Management</p></li><li><p>React.Profiler API</p><p></p></li></ul></li><li><p><strong>How to Use The React Developer Tools for Performance Optimization</strong></p><ul><li><p>Inspecting Components</p></li><li><p>Profiling Component Performance, Break on Update</p></li><li><p>Component Filtering</p></li><li><p>Highlighting Updates</p></li><li><p>Comparing Profiling Sessions (Render durations, Commit frequency, Component flame graph)</p><p></p></li></ul></li><li><p><strong>Introduction to Core Web Vitals With React and Next.js</strong></p><ul><li><p>First Contentful Paint (FCP)</p></li><li><p>Largest Contentful Paint (LCP)</p></li><li><p>Cumulative Layout Shift (CLS)</p></li><li><p>Time to Interactive (TTI)</p></li><li><p>You Can&#8217;t Optimize What You Can&#8217;t Measure: Performance Scoring</p><p></p></li></ul></li><li><p><strong>Implementing Critical Render Path Optimization With React and Next.js</strong></p><ul><li><p>What&#8217;s a Critical Rendering Path?</p></li><li><p>Finding the Critical Rendering Path of Your Page(s)</p></li><li><p>RRR: Remove, Reorder, Reduce</p></li><li><p>Responsive Design and the Critical Rendering Path - A Next.js API Approach</p><p></p></li></ul></li><li><p><strong>Top 6 Next.js Performance Optimization Techniques</strong></p><ul><li><p>How to Choose a Rendering Strategy (SSR, SSG, ISR, CSR, RSC)</p></li><li><p>Implementing Custom Cache Controls</p></li><li><p>Effective Use of Built-in Optimization Tools, next/image, next/script, next/link</p></li><li><p>Code Splitting And Dynamic Imports</p></li><li><p>Optimizing API Routes</p></li><li><p>Bundle Analysis And Eliminating Duplicates</p><p></p></li></ul></li><li><p><strong><a href="https://www.fullctx.dev/p/lazy-loading-in-react-and-nextjs">All That&#8217;s There to Know About Lazy Loading in React and Next.js Apps</a></strong></p><ul><li><p>Lazy Loading: What is it And How it Works</p></li><li><p>The DPS of Lazy Loading</p></li><li><p>Implementing Lazy Loading in React</p></li><li><p>Lazy Loading Is The Second Step in a Combo Move: It Starts With Code Splitting</p></li><li><p>What to Lazy Load and When?</p></li><li><p>Identifying The Target</p></li><li><p>Lazy Loading With Next.js</p></li><li><p>More Tools in Next&#8217;s Arsenal With Lazy Loading Powers</p></li><li><p>Final Warning: When Not to Lazy Load</p></li><li><p>Challenge: Share The Diff</p><p></p></li></ul></li><li><p><strong>Utilizing Service Workers to The Max</strong></p><ul><li><p>Intro to Service Workers</p></li><li><p>The Service Worker&#8217;s Lifecycle: Writing and Registering Your First Worker</p></li><li><p>The Cache API: How to Cache And Server Static Assets And More</p></li><li><p>Offline Behavior &amp; Background Sync</p></li><li><p>The Push API</p></li><li><p>Case Studies About The Business Benefits of Implementing PWAs</p></li><li><p>Updating and Debugging Service Workers</p></li><li><p>Customizing Service Workers in CRA and Next.js</p></li><li><p>Workbox</p><p></p></li></ul></li><li><p><strong>The Snappiest Static Assets On The Planet</strong></p><ul><li><p>Font Optimization Techniques</p></li><li><p>Ideal Image Delivery</p></li><li><p>HTML, CSS, JS And Their React + Next.js Specific Concerns</p></li><li><p>Resource Compression</p><p></p></li></ul></li><li><p><strong>The Ultimate Guide to The Client-Side Browser Cache</strong></p><ul><li><p>Exploring The 11 Parameters of The Cache-Control Header</p></li><li><p>How to Use Last-Modified</p></li><li><p>How to Use ETag</p></li><li><p>Cache Invalidation Strategies for Single Page Applications</p><p></p></li></ul></li><li><p><strong>How to Use Storybook for Web Performance Optimization</strong></p><ul><li><p>Storybook as a Performance Benchmarking Tool</p></li><li><p>Performance-Aware Component Design</p></li><li><p>Guide to Measuring Performance and Enforcing Performance Budgets.</p></li><li><p>Performance Monitoring: Integrating Storybook Into The CI Pipeline<br></p></li></ul></li><li><p><strong>The RAIL Model, the React and the Next.js</strong></p><ul><li><p>Learn The Basics of The RAIL Model And Its User-Centric Approach to Web Performance Optimization</p></li><li><p>Response - What to NOT do in The Render Method</p></li><li><p>Animation - How to Implement Them Efficiently With React &amp; Family</p></li><li><p>Idle - How to Free Up The Main Thread From The Burdens of React and Next.js</p></li><li><p>Load - Next.js Rendering Strategies, Lazy Loading, Caching And More<br></p></li></ul></li><li><p><strong>Uncommon Usages of Native Web APIs for Performance Optimizations + React Examples</strong></p><ul><li><p>Intersection Observer</p></li><li><p>Resize Observer</p></li><li><p>Navigation and Resource Timing API</p></li><li><p>requestAnimationFrame<br></p></li></ul></li><li><p><strong>Overview of Web Workers and Their Use for Faster Page Rendering</strong></p><ul><li><p>How to Work With Web Workers</p></li><li><p>Web Workers and React</p></li><li><p>Usage With Redux, Hooks and Images</p></li><li><p>Interesting Use Cases: Offloading Data Manipulation, Image Processing, Background Data Syncing, Background Indexing for Fast Search <br></p></li></ul></li><li><p><strong>What is a Performance Culture and How to Build One?</strong></p><ul><li><p>The Importance of Systemic Performance Awareness For The Business</p></li><li><p>How to Communicate Performance Concerns to Business Stakeholders</p></li><li><p>Translate Business Objectives into Performance Metrics</p></li><li><p>How to Monitor and Evaluate Progress</p></li><li><p>Reporting the Financial Consequences of Web Performance Optimizations<br></p></li></ul></li><li><p><strong>How to Use Google Lighthouse For Advanced Performance Measurements</strong></p><ul><li><p>Installing Google Lighthouse</p></li><li><p>Running a Lighthouse Audit</p></li><li><p>Analyzing Lighthouse Reports: Performance Metrics, Opportunities, Diagnostics</p></li><li><p>Continuous Performance Monitoring</p></li><li><p>Sharing and Comparing Lighthouse Reports<br></p></li></ul></li><li><p><strong>How to Use WebPageTest For Advanced Performance Measurements</strong></p><ul><li><p>A Recap of WebPageTest's Key Metrics Including SpeedIndex</p></li><li><p>Analyzing WebPageTest Results: Waterfall Charts, Filmstrip View, Custom Metrics</p></li><li><p>Continuous Performance Monitoring with WebPageTest</p></li><li><p>The Waterfall Charts' Compare Feature</p></li><li><p>Best Practices and Tips for Effective Profile Comparison</p></li></ul></li></ol>]]></content:encoded></item><item><title><![CDATA[Chapter 9: Lazy Loading in React and Next.js Apps]]></title><description><![CDATA[All you need to know to implement lazy loading for improved web performance in React and Next.js with examples and generic strategies.]]></description><link>https://www.fullctx.dev/p/lazy-loading-in-react-and-nextjs</link><guid isPermaLink="false">https://www.fullctx.dev/p/lazy-loading-in-react-and-nextjs</guid><dc:creator><![CDATA[Jozsef Miskolczy]]></dc:creator><pubDate>Sun, 16 Jul 2023 00:46:52 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!cjtw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F999bc118-b7f1-4a56-ad03-430179a1970c_1920x1080.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_!cjtw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F999bc118-b7f1-4a56-ad03-430179a1970c_1920x1080.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cjtw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F999bc118-b7f1-4a56-ad03-430179a1970c_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!cjtw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F999bc118-b7f1-4a56-ad03-430179a1970c_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!cjtw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F999bc118-b7f1-4a56-ad03-430179a1970c_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!cjtw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F999bc118-b7f1-4a56-ad03-430179a1970c_1920x1080.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!cjtw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F999bc118-b7f1-4a56-ad03-430179a1970c_1920x1080.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/999bc118-b7f1-4a56-ad03-430179a1970c_1920x1080.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1380926,&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_!cjtw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F999bc118-b7f1-4a56-ad03-430179a1970c_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!cjtw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F999bc118-b7f1-4a56-ad03-430179a1970c_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!cjtw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F999bc118-b7f1-4a56-ad03-430179a1970c_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!cjtw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F999bc118-b7f1-4a56-ad03-430179a1970c_1920x1080.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><strong>Table of Contents</strong></p><ol><li><p><a href="https://www.fullctx.dev/i/131574350/lazy-loading-what-is-it-and-how-it-works">Lazy Loading What is it and How it Works</a></p></li><li><p><strong><a href="https://www.fullctx.dev/i/131574350/implementing-lazy-loading-in-react">React:</a></strong><a href="https://www.fullctx.dev/i/131574350/implementing-lazy-loading-in-react"> Implementing Lazy Loading</a></p><ol><li><p><a href="https://www.fullctx.dev/i/131574350/pro-tips-lots-of-them">14 Pro Tips</a></p></li></ol></li><li><p><a href="https://www.fullctx.dev/i/131574350/lazy-loading-is-the-second-step-in-a-combo-move-it-starts-with-code-splitting">The Combo: Code Splitting And Lazy Loading</a></p></li><li><p><a href="https://www.fullctx.dev/i/131574350/what-to-lazy-load-and-when">What to Lazy Load and When</a></p><ol><li><p><a href="https://www.fullctx.dev/i/131574350/weakness-lots-of-images-or-other-media">Lots of Images or Other Media</a></p></li><li><p><a href="https://www.fullctx.dev/i/131574350/weakness-huge-bundle-sizes">Huge Bundle Size</a></p></li><li><p><a href="https://www.fullctx.dev/i/131574350/weakness-rd-party-scripts">3rd Party Scripts</a></p></li></ol></li><li><p><a href="https://www.fullctx.dev/i/131574350/identifying-the-target">Generic Strategies For Identifying The Best Targets</a></p></li><li><p><strong><a href="https://www.fullctx.dev/i/131574350/lazy-loading-with-nextjs">Next.js:</a></strong><a href="https://www.fullctx.dev/i/131574350/lazy-loading-with-nextjs"> Implementing Lazy Loading</a></p><ol><li><p><a href="https://www.fullctx.dev/i/131574350/nextjs-pro-tips">5 Pro Tips</a></p></li></ol></li><li><p><a href="https://www.fullctx.dev/i/131574350/more-tools-in-nexts-arsenal-with-lazy-loading-powers">More Next.js Tools for Optimizing Loading: next/image, next/script, next/font</a></p></li><li><p><a href="https://www.fullctx.dev/i/131574350/final-warning-when-not-to-lazy-load">When NOT to Lazy Load</a></p></li></ol><h2>Hey Frontend Ninjas,</h2><p>In this chapter you are going to acquire one of the secret, ultimate techniques of performance grandmasters used to <a href="https://modelthinkers.com/mental-model/divide-and-conquer">divide and conquer</a> (<em>pun definitely intended</em>) slow loading websites since the dawn of the web era.</p><p>But before we start the training, a word of warning: lazy loading isn't for the faint of heart! It's an incredibly powerful technique for improving network performance and enhancing the user experience but it can also mess up your React application&#8217;s loading behavior if not done right. That&#8217;s exactly why I will teach you what lazy loading is, what are its effects, its typical use cases, how to identify where it&#8217;s best applied, where it&#8217;s best avoided and of course how to implement it perfectly with plain React and the tools coming with Next.js. Let&#8217;s jump right into it!</p><h2><strong>Lazy Loading: </strong>What is it And How it Works</h2><p>Lazy loading is a technique that allows you to defer the loading of resources, such as images, scripts or React components until they're actually needed. This concept is based on the idea of "just-in-time" delivery of content: instead of loading all resources upfront, you only load what's necessary for the moment, and fetch additional resources as required for user interactions. The result is a faster loading time and more efficient use of network resources. An ideal outcome! &#128640; Combined with code splitting, this will become one of the most frequently used tools in your performance tuning toolbox! No wonder, it helps to temporarily increase how much your application resembles the ideal website. (<em>Details are coming in Chapter 3: Learnings From The Fastest Website of The Universe</em>)</p><h2>The DPS of Lazy Loading</h2><p>So that&#8217;s lazy loading in a nutshell, but why is it so useful? Let&#8217;s take a look at some real-life results:</p><ul><li><p>By implementing lazy loading <a href="https://github.com/jamiebuilds/react-loadable/pull/181">ClearTax improved their initial load time ~50%</a>.</p></li><li><p>Quran.com <a href="https://github.com/quran/quran.com-frontend/pull/701#issuecomment-287908551">shaved off 50kb from their entry chunk</a> by lazy loading non-critical components.</p></li><li><p>Max Rozen <a href="https://maxrozen.com/react-loadable-half-react-app-load-time#halving-my-react-apps-load-time">halved the TTI</a> on one of his previous projects by moving 200kb of code from the main bundle to a lazy loaded chunk. </p></li></ul><p>Those are some massive gains! As we discussed in the <a href="https://www.fullctx.dev/p/the-ultimate-react-and-nextjs-performance-guide">introduction chapter</a>, these could translate to serious financial gains on the right projects. The potential is tremendous so let&#8217;s get to the implementation details!</p><h2><strong>Implementing Lazy Loading in React</strong></h2><p>Ever since v.16.6, React has a built-in solution to execute this attack. A bit later I will also show you the legacy solutions and why some of them might still be relevant today. With this simple approach implementing lazy loading is not difficult at all.</p><blockquote><p><em><strong>You can lazy load components using </strong></em><code>React.lazy()</code><em><strong>.</strong></em></p></blockquote><p>This function takes another function as its argument, which should return a <code>dynamic import()</code> statement for the module you wish to lazy load. Here&#8217;s a minimal example:</p><pre><code>import React, { lazy, Suspense } from 'react';

const SneakAttack = lazy(() =&gt; import('./DelayedComponent')); 

function LightningFastApp() { 
  return (
    &lt;div&gt;
      &lt;Suspense fallback={&lt;div&gt;Camouflage...&lt;/div&gt;}&gt;
        &lt;SneakAttack /&gt;
      &lt;/Suspense&gt;
    &lt;/div&gt;
  );
}

export default LightningFastApp;</code></pre><p>Let&#8217;s break down what&#8217;s happening here.</p><ol><li><p>We are importing the basic moves from &#8216;react&#8216; to build up the combo.</p></li><li><p>We define the custom component (<code>DelayedComponent</code>) we want to load in the background, escaping the line of sight of the users. (<em>Well, not exactly in this example, but in real life situations</em>)</p></li><li><p>We create a simple but lightning fast top-level component to house the <code>SneakAttack</code> we are about to deliver.</p></li><li><p>We wrap the <code>SneakAttack</code> in camouflage while we are preparing the ambush. Meaning, we simply provide fallback content to be displayed while the loading part of lazy loading is in progress.</p></li><li><p>We tell React to deliver our <code>SneakAttack</code> by rendering it as a component. That will initiate the fetching of the <code>DelayedComponent</code> and replace the fallback with it once arrived over the network or from cache.</p></li></ol><p>You might have noticed that this example really doesn&#8217;t make much sense. All it does is delaying the rendering of <code>DelayedComponent</code> by one render cycle (+ loading time). So this way it likely just worsens performance. You can check out <a href="https://react.dev/reference/react/lazy#usage">a more meaningful implementation</a> in the official docs where the loading only happens after a user actually tries to access a feature. However, even this version is good enough to discuss some important tips!</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.fullctx.dev/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">Hey frontend ninja master, thanks for reading so far! I&#8217;m working super hard on creating similar guides. If you don&#8217;t want to miss out on them please subscribe to the newsletter and if you would join as a paid subscriber that would help to elevate these writings to a whole new level!</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><h4>&#128161; Pro Tips <em>(lots of them&#8230;)</em></h4><ul><li><p><strong>Always Use Suspense</strong>: Suspense works with <code>React.lazy</code> by default, offering you an easy way to provide some content to the users while the resource requested is in transition. Choosing the right placeholder is an art in and of itself, I will share some tips about it down below.</p></li><li><p><strong>Pitfall With The Target of Importing</strong>: <code>React.lazy -</code> out of the box - only works with the default export of a module. If you want to lazy load a component exported by name, there&#8217;s a workaround: re export it from another file as the default export. (<em><a href="https://legacy.reactjs.org/docs/code-splitting.html#named-exports">Read the old docs for an example</a></em>). Alternatively you can use this approach:</p><pre><code>const LazyNamedComponent = React.lazy(() =&gt;
  import('./Named.js').then(module =&gt; ({ default: module.Named }))
);</code></pre><p>Or with a bit more up to date syntax:</p><pre><code>const LazyNamedComponent = React.lazy(async () =&gt;
   await (import('./Named.js')).Named);</code></pre></li><li><p><strong>Pitfall With The Place of Importing</strong>: Make sure to import the lazy loaded component outside of any component&#8217;s code at the top level of the current module (<em>file</em>). If you move it inside one, a rerender can re-run the import and you will lose the current state of the already mounted lazy-loaded component whenever that happens.</p></li><li><p><strong>Pitfall With Mixing Import Types</strong>: If you happen to load a component with the regular (<em>non-dynamic</em>) import syntax as well as dynamically, the latter will be disregarded and the code will be packed into the main bundle. Keep this in mind to avoid unpleasant surprises on the network tab! &#128584;</p></li><li><p><strong>Pitfall With Import Path</strong>: You can not use variables or string templates in the import path. It has to be a direct import with a simple string. You will read about a possible workaround just a bit further down in this list in <em>SSR before React 18</em>.</p></li><li><p><strong>Pitfall With Tree Shaking</strong>: As dynamic imports can&#8217;t be analyzed at build time, to help bundlers with tree-shaking unused code we need to follow the official workaround and reexport our named components as a default export from a standalone module. This way bundlers can weed them out when necessary. </p></li><li><p><strong>Pitfall With Deep Linking</strong>: <em>(Specifically links with an id at the end eg: www.fast.site</em><code>/#speed</code><em>.)</em> I can tell you from first hand experience, if you want to have deep links and lazy loading at the same time&#8230; you don&#8217;t get to eat your cake and have it too. At least the browsers are not going to scroll to your content marked with the id in the URL as it&#8217;s initially not in the DOM and they don&#8217;t care that it appears later. There&#8217;s a workaround though! If you want to emulate that behavior just check the URL with JavaScript once the component is loaded and trigger the scroll programmatically when it matches.</p></li><li><p><strong>Timing Concerns</strong>: Just as much as lazy loading can improve the user experience by enabling a faster initial load it can also destroy it if you don&#8217;t time the starting right. Ensure that loading is triggered as soon as necessary to minimize or completely eliminate the visible loading of the lazily loaded content. I mean, who likes those web shops with infinite loading product lists. slowly crawling for the next batch whenever you hit the bottom of the screen? I don&#8217;t for sure.</p></li><li><p><strong>Avoid Layout Shifts</strong>: CLS is a metric in Web Vitals, meaning besides impacting user experience it also impacts search engine ranking so it&#8217;s crucial to minimize it. When there&#8217;s something on the initial view of a page (<em>not just above the fold!</em>) that you are lazy loading, you face the challenge of having to properly size the placeholder content so that it matches the size of what will be displayed later. It&#8217;s necessary to avoid janky shifting of the layout (<em><a href="https://web.dev/lazy-loading-best-practices/#wrong-layout-shifting">more on this at web.dev</a></em>) leading to a higher CLS value.</p></li><li><p><strong>Use Skeletons Instead of Spinners</strong>:  The current best practice is to use low resolution / low detail mock content as placeholders. The next minor challenge with this approach for the performance maximalists is finding the right balance between detail and payload.</p></li><li><p><strong>Avoiding Fallbacks With The </strong><code>startTransition</code><strong> API</strong>: Sometimes it makes sense to prevent displaying fallback content while the lazy loading is in progress. A good example is a tab switcher with lazy loaded tabs. It&#8217;s a better user experience to see the old tab and have it interactive until the new one is ready than watching a flash of the fallback placeholder whenever the user clicks on another tab. Check the official method <a href="https://legacy.reactjs.org/docs/code-splitting.html#avoiding-fallbacks">documented in the old React docs</a> (<em>nope, I couldn&#8217;t find it in the new</em>) how to pull it off with the help of <code>startTransition</code>.</p></li><li><p><strong>SSR and React 18</strong>: <code>React.lazy</code> and SSR are not used to play nicely together before v18. But that&#8217;s now in the past. You can read more about the details in one of <a href="https://github.com/reactwg/react-18/discussions/37">React&#8217;s GitHub discussions on architecture</a>. In a nutshell <code>lazy</code> now enables you to segment the UI into separately renderable parts so you can stream some high priority content sooner. This naturally means first class support for lazy loaded components on the server.  </p></li><li><p><strong>SSR Before React 18</strong>: In the age of old (<em>or</em> <em>current projects pre-upgrade</em>) we used to use either Loadable Component&#8217;s SSR support (<em><a href="https://loadable-components.com/docs/server-side-rendering/">intro here</a></em>) or React Loadable&#8217;s (<em><a href="https://github.com/jamiebuilds/react-loadable#------------server-side-rendering">read more here</a></em>). It&#8217;s worth noting that React Loadable is not in active development anymore but some projects still use it just all right (<em><a href="https://stackoverflow.com/a/54413946">even with the officially incompatible Bable &amp; Webpack versions</a>)</em> . Loadable Components is the de-facto successor and <a href="https://loadable-components.com/docs/loadable-vs-react-lazy/">it has other merits</a> (<em>docs a bit outdated about SSR</em>) that might warrant adopting it even with React 18 including the option for truly dynamic importing as you can use variables or string templates to define the import path with it.</p></li><li><p><strong>Route Based Lazy Loading</strong>: With <code>React.lazy</code> you can lazy load anything not just routes. However you might actually want to lazy load routes in a plain React app. React Router supports that use case out of the box with the <code>lazy</code> prop and dynamic imports. Read the details <a href="https://reactrouter.com/en/main/route/lazy">here</a>.</p></li></ul><h2><strong>Lazy Loading Is The Second Step in a Combo Move: It Starts With Code Splitting</strong></h2><p>We jumped straight to the finishing move but it&#8217;s true, in order to execute the lazy loading attack you first need to prepare <em>something</em> that you will load lazily. </p><p>How can we do that? That&#8217;s where code splitting joins the battle! In the world of native ES module support in-browser you could simply write and host a module yourself&#8230; but come on, that&#8217;s so 1990s. Today, virtually everyone works with a bundler like Webpack, Vite or Turbopack. Those tools will take care of splitting your modules according to what you want to lazy load. Webpack for example uses <a href="https://webpack.js.org/guides/code-splitting/#dynamic-imports">the presence of a dynamic import as the indicator</a> to where to split the application to multiple files. In the end it will output pieces of JS code called &#8220;<em>chunks</em>&#8220; that your app will be able to download and use separately.</p><h4>&#128161; Pro Tips</h4><ul><li><p><strong>Keep an Eye on The Size</strong>: Next.js will automatically display the size of all the output chunks at build time which makes it easy to manually check how we are doing. For monitoring and enforcing performance budgets on assets sizes you can <a href="https://medium.com/@mtorre4580/performance-budget-for-next-js-e34eb4fda11e">read a comprehensive guide here</a>. (<em>Later on I will also cover this topic in detail.</em>)</p></li><li><p><strong>Without Next</strong>: Vite can do that same reporting for you by default. In Webpack land there are tons of useful plugins for this same purpose. Although a bit old, <a href="https://medium.com/naukri-engineering/monitor-analyze-asset-sizes-with-every-build-9c814f6ca8b4">this is still a very cool article</a> describing how to set them up for some serious performance wizardry.</p></li></ul><h2>What to Lazy Load and When?</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YugP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F881d4557-f8c3-4783-a6e1-44a051a0ec33_1060x503.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YugP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F881d4557-f8c3-4783-a6e1-44a051a0ec33_1060x503.png 424w, https://substackcdn.com/image/fetch/$s_!YugP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F881d4557-f8c3-4783-a6e1-44a051a0ec33_1060x503.png 848w, https://substackcdn.com/image/fetch/$s_!YugP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F881d4557-f8c3-4783-a6e1-44a051a0ec33_1060x503.png 1272w, https://substackcdn.com/image/fetch/$s_!YugP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F881d4557-f8c3-4783-a6e1-44a051a0ec33_1060x503.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!YugP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F881d4557-f8c3-4783-a6e1-44a051a0ec33_1060x503.png" width="1060" height="503" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/881d4557-f8c3-4783-a6e1-44a051a0ec33_1060x503.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:503,&quot;width&quot;:1060,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:388463,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!YugP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F881d4557-f8c3-4783-a6e1-44a051a0ec33_1060x503.png 424w, https://substackcdn.com/image/fetch/$s_!YugP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F881d4557-f8c3-4783-a6e1-44a051a0ec33_1060x503.png 848w, https://substackcdn.com/image/fetch/$s_!YugP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F881d4557-f8c3-4783-a6e1-44a051a0ec33_1060x503.png 1272w, https://substackcdn.com/image/fetch/$s_!YugP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F881d4557-f8c3-4783-a6e1-44a051a0ec33_1060x503.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Product photo by <a href="https://unsplash.com/@ikredenets?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Irene Kredenets</a> on <a href="https://unsplash.com/s/photos/product?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></figcaption></figure></div><p>Now that we&#8217;ve learned a few things about what lazy loading is and how to implement it in our React apps let&#8217;s focus on our enemies for a bit. You need to know about their weaknesses in order to choose a super effective attack against them! This section will include strategies and generic advice on when lazy loading can best help in improving performance.</p><h3><strong>Weakness #1: Lots of Images or Other Media</strong></h3><p>Imagine you're building an e-commerce website that showcases a wide range of products. Each product has multiple high-resolution images, making the site extremely image-heavy. Loading all these images upfront would lead to slow load times and a poor user experience.</p><p>By implementing lazy loading for images, you can ensure that only the images visible on the user's screen are loaded, while the rest are fetched on-demand as the user scrolls or clicks around. This saves bandwidth for the users and significantly improves the initial load time and overall performance of your website. And nothing restricts us to only images, we can deal with videos or even audio in the same way.</p><h4>&#128161; Pro Tips</h4><ul><li><p><strong>Progressive Image Loading</strong>: One of the best ways to deliver a good user experience while lazy loading images is to inline a very low resolution version of the image, render it blurred, initiate the fetching of the original and replace it with the full image once it&#8217;s loaded. Using a placeholder with the correct aspect ratios also helps with preventing a CLS increase. We will cover this technique in much more detail in <em>Chapter 11: The Snappiest Static Assets on The Planet</em>. In the meanwhile you can take a look at <a href="https://jmperezperez.com/blog/medium-image-progressive-loading-placeholder/">how Medium implemented this pattern</a> or check out some of the most popular tools for creating those placeholders: <a href="https://www.guypo.com/introducing-lqip-low-quality-image-placeholders">LQIP</a> and <a href="https://github.com/axe312ger/sqip">SQIP</a> (<em>used by yours truly on <a href="https://www.fullcontextdevelopment.com/blog">fullcontextdevelopment.com/blog</a></em>).</p></li><li><p><strong>Modern Formats</strong>: Another thing you can do to improve either the lazy or normal loading speed of images is using modern image formats like WebP or AVIF. These formats provide better compression and quality compared to traditional formats like JPEG or PNG.</p></li><li><p><strong>CDN</strong>: Consider using an image focused CDN that can help you optimize and serve those visual assets as fast as possible. <em>(Looking for a sponsor here</em> &#129402;<em>)</em></p></li></ul><h3><strong>Weakness #2: Huge Bundle Sizes</strong></h3><p>For large-scale applications with numerous components and features loading everything at once can be resource-intensive and slow. Many SPAs fall victim to the <em>growing main bundle size syndrome</em>, when slowly but surely the production build size spirals out of control.</p><p>A typical example is the good-old admin dashboard with lots of charts and diagrams, but any client-side-logic-heavy application can easily start to develop the symptoms. To resolve it you can lazy-load individual widgets or even full views of the app so they're only fetched when the user interacts with them.</p><h4>&#128161; Pro Tips</h4><ul><li><p><strong>CRP Optimization</strong>: One of the most frequently used techniques to help with this problem is called Critical (Render) Path Optimization. In a nutshell, it&#8217;s about packing <a href="https://www.semrush.com/blog/above-the-fold/">above-the-fold</a> content into a separate bundle/chunk than the rest of the page so the users first download only the &#8220;critical&#8220; or minimal part needed to interact with the site meaningfully. We will spend a whole chapter on this topic in: <em>Chapter 7 Implementing Critical Render Path Optimization With React and Next.js</em>. That&#8217;s how important this technique is!</p></li><li><p><strong>Other Assets</strong>: You can read a really nice <a href="https://developer.mozilla.org/en-US/docs/Web/Performance/Lazy_loading">generic introduction to lazy loading on MDN</a> that also discusses how to use this technique with <code>fonts</code>, <code>images</code> and even <code>iframes</code>. It mentions techniques for reducing the render blocking time of CSS and introduces one of my favorite tools, the <code>Intersection Observer API</code> too.</p></li><li><p><strong>Use The Intersection Observer API</strong>: It&#8217;s a very effective weapon widely used on the web for killing slow page load times! The basic idea is to only initiate fetching a component&#8217;s chunk once the observer tells us it would become visible on the screen. It&#8217;s even better if we time it just a bit earlier than that so it will already be  there once the users scroll to its position. I&#8217;ve used this technique a lot in my own projects and I plan to show some as examples later but for now I will link you to <a href="https://miyauchi.dev/posts/react-lazy-intersection/">a nice tutorial about its implementation</a> combined with <code>React.lazy</code>. </p></li></ul><h3><strong>Weakness #3: 3rd Party Scripts</strong></h3><p>Very common performance hogs that lazy loading can effectively beat are the 3rd party scripts. They are often loaded immediately as the HTML is just being rendered for the first time. They sometimes even get bundled into the prod build of the application! &#129327; But in reality, they are often not needed immediately for the site to function as intended. It opens up the opportunity to lazy load them. </p><p>Good examples are 3rd party chat or comment widgets, captcha services or the code of any external services. In some cases even analytics or cookie consent code can be deferred! Eliminating these from the initial render of the app can often significantly improve the performance characteristics of a site. A real life example shared by MediaVine is <a href="https://www.mediavine.com/lazy-loading-ads-mediavine-ads-load-200-faster/">how they improved their initial ad load time by 200%</a> with <strong>lazy loading ads</strong>! </p><h4>&#128161; Pro Tips</h4><ul><li><p><strong>Lazy Loading Scripts</strong>: The tools of the trade here are the HTML attributes called <code>async</code> and <code>defer</code> of the <code>script</code> tag and the <code>rel</code> attribute of the <code>link</code> tag with the <code>preconnect</code> and <code>dns-prefetch</code> values. Here&#8217;s an <a href="https://web.dev/efficiently-load-third-party-javascript/">awesome article on web.dev</a> showing exactly how to use them for some serious speed improvements. Key takeaway from there: use <code>async</code> for highest priority scripts and <code>defer</code> for less critical dependencies. But there are some exceptions, check the article.</p></li><li><p><strong>Lazy Loading Anything</strong>: You can lazy load just about anything that an ES module can hold. It naturally includes <em>npm packages</em> too. You can load them at any place or time simply by <code>(await import(&#8216;name&#8216;)).default</code>-ing them. The Next.js docs <a href="https://nextjs.org/docs/app/building-your-application/optimizing/lazy-loading#loading-external-libraries">have a nice example</a> of how to put it to good use. In the next section I will also share some strategies about how to utilize this for the best possible speed improvements.</p></li></ul><p>Going forward, whenever a wild <em>slow website</em> appears with any of these weaknesses, you will know how to deal a super effective blow to them! In my experience this is really valuable knowledge so you already acquired some good skills! Let&#8217;s continue!</p><h2>Identifying The Target &#128373;&#65039;</h2><p>Now that you can easily recognize the general patterns where lazy loading can help, we can also look at the generic approach to find good targets for this technique. Here&#8217;s what you should be looking for:</p><ul><li><p><strong>Components that</strong> <strong>aren't immediately needed on the initial view. </strong>Good examples would be<strong> modals, heavy dropdown menus</strong> or any element of the UI that appears on interaction.</p></li><li><p><strong>Components that</strong> <strong>have a significant impact on loading time</strong>. As usual, doing a performance profile and analyzing the network/render waterfall is the best starting point. Some typical offenders you might find are <strong>large data tables, huge charts or not-always-used npm packages</strong> (<em>like date handling&#8230; moment.js anyone?</em>). </p></li><li><p><strong>Components that are</strong> <strong>always conditionally rendered.</strong></p></li><li><p><strong>Components that are</strong> <strong>only present in certain routes</strong> of the app yet are put into the main bundle somehow. <em>(mistakes happen)</em></p></li><li><p><strong>Infrequently used features</strong> are also great targets for lazy loading. You can improve the UX for the majority of the users if you lazy load the least used parts of the app. The best way to identify them is going empirical. Use analytics or monitoring/logging data to see the interaction patterns of your site and look for those less frequently used features. &#9762;&#65039; <em>Make wise judgements. The least frequently used parts can still have critical importance.</em></p></li><li><p><em><strong>Imports</strong></em><strong> that are only needed when/after the user starts an interaction</strong>. If there are imports in a module that fit the description, you can either defer their loading until the user&#8217;s first attempt to use them or manually prefetch them even sooner so they wouldn&#8217;t have to wait.</p></li></ul><p><em>&#128073;  <a href="https://builtin.com/ux-design/infinite-scroll">Infinite scroll</a> is also a kind of lazy loading pattern but I&#8217;m sure you will know when you need it without any special speed improvement goals.</em> </p><h4>&#129504; Performance Mindset</h4><blockquote><p><em>I found it really helpful in developing a performance mindset to pick up the habit of considering what to lazy load in the design phase of work. Be on the lookout for the above cases and you might avoid the need to &#8220;optimize performance&#8221; in the future, instead you could &#8220;simply&#8220; keep it high all along. <strong>That&#8217;s the best thing you can do for your users and company profits too!</strong></em><strong> </strong></p></blockquote><h2>Lazy Loading With Next.js</h2><p>You have already learned a ton about lazy loading in general and in combination with React. Now let&#8217;s go deeper and take a look at the unique tools that Next.js offers for implementing this technique!</p><p>Next takes the DX of lazy loading to a whole new level with its automatic code splitting and dynamic imports. By default, Next.js will split your codebase at the page level, ensuring that users only download the code required for the current URL. That&#8217;s a nice little favor from the framework authors, saving us all some time and effort.</p><p><em>&#128073; Now with React Server Components (RSC) it can automatically save you from including JS in the output of SSR when the code is only used for rendering but not needed for client-side interactivity.</em></p><p>To further optimize your Next.js application, you can use <code>dynamic</code> from <a href="https://github.com/vercel/next.js/blob/canary/packages/next/src/shared/lib/dynamic.tsx">next/dynamic</a> to lazy-load individual components. It gives us the same level of control over loading  behavior as <code>React.lazy</code> and a bit more!</p><p>Here's a cookie cutter, basic example of how to use it:</p><pre><code>import dynamic from 'next/dynamic';

const LazyLoadedByNextJS = dynamic(() =&gt; import('./MyComponent'), { 
  loading: () =&gt; &lt;div&gt;Loading placeholder&lt;/div&gt;,
  ssr: false,
});

function App() {
  return (
    &lt;div className="App"&gt;
      &lt;LazyLoadedComponent /&gt;
    &lt;/div&gt;
  );
}

export default App;</code></pre><p>It kind of follows the same pattern as the <em>&#8220;native&#8220;</em> React solution. There&#8217;s not much difference between these two now in the v18 era as <code>dynamic</code> uses <code>Suspense</code> and <code>React.lazy</code> internally. Its only significant, added feature is that you can prevent the lazy loaded component from rendering in SSG and SSR mode by passing the <code>ssr: false</code> config option to the <code>dynamic</code> call. Otherwise the component would be loaded and rendered in those situations too. (<em>Of course only if the UI logic is set up that way.</em>)</p><p><strong>When do you need that ssr: false?</strong> Most frequently, in case of rendering stuff that:</p><ul><li><p>Relies on browser-only APIs, like <code>WebGL</code> or the <code>DOM</code>.</p></li><li><p>Displaying real-time data like a chat widget or stock price chart where you might not want to show outdated information on the initial load.</p></li></ul><h4>&#128161; Next.js Pro Tips</h4><ul><li><p><strong>App and Pages</strong>: There&#8217;s no need to worry, <code>next/dynamic</code> works the same way in both folders.</p></li><li><p><strong>Loading Placeholder</strong>: As you saw in the example, you can provide the placeholder component as a config option to the call.</p></li><li><p><strong>Importing Default vs Named Exports</strong>: <code>next/dynamic</code> has the same issue with named exports as React.lazy (<em>no wonder considering it&#8217;s using that.</em>) As a work around you can do this:</p><pre><code>const NamedLazyLoadedComponent = dynamic(() =&gt;
  import('./NamedComponent').then((module) =&gt; module.Named)
)</code></pre></li><li><p><strong>Client and Server Components</strong>: Server components are code split to their own chunks by default and can be streaming-rendered. Lazy loading is only relevant when working with client components. If you try to lazy load a server component only it&#8217;s child client components will be lazy loaded (<em>if there&#8217;s any</em>).</p></li><li><p><strong>The Place of Calling Dynamic</strong>: Calling dynamic has to be in the top level scope of the module (file) in order to work. It means you can&#8217;t write it inside functions or React components.</p></li></ul><p>That&#8217;s how you do generic lazy loading with Next.js but it has some additional tools that can be used to implement this method in specialized cases.</p><h2>More Tools in Next&#8217;s Arsenal With Lazy Loading Powers</h2><p><strong>Next/Image</strong>: The developers of Next.js have upgraded the <code>img</code> tag with special capabilities and made it available through the <em><a href="https://nextjs.org/docs/pages/building-your-application/optimizing/images">next/image component</a></em>. Some of those has lots to do with lazy loading. They designed it in a way to only load images when they enter the viewport. You can optionally provide a blurred placeholder with the <a href="https://nextjs.org/docs/app/api-reference/components/image#blurdataurl">blurDataURL</a> prop or if you are directly importing an image with a supported format the blurred version will be auto generated for you at build time when you use the <a href="https://nextjs.org/docs/app/api-reference/components/image#placeholder">placeholder</a> prop.</p><p>Another neat, performance aware feature is the <a href="https://nextjs.org/docs/pages/building-your-application/optimizing/images#image-sizing">many built-in ways</a> the component takes care of CLS as it will always reserve the right size for the image, even before it&#8217;s loaded. In addition, you can &#8220;<em>mark</em>&#8220; an image as <a href="https://nextjs.org/docs/pages/building-your-application/optimizing/images#priority">priority</a>. This is best used for the LCP (<em>largest contentful paint</em>) image on each page so that it will be prioritized for the earliest possible load. Make sure to utilize this component to the max. It&#8217;s a very powerful and useful optimization tool that can do much more than what&#8217;s related to lazy loading!</p><p><strong>Next/Font</strong>: Well, this one is not directly related to lazy loading fonts, just to loading them, but I might as well mention it here. <em><a href="https://nextjs.org/docs/pages/building-your-application/optimizing/fonts">next/font</a></em> allows you to control when and where the different font files are loaded depending on where you use it. It also depends on whether you are rocking the <code>pages</code> or the <code>app</code> folder. </p><p>In the case of <code>pages</code>, fonts requested with <code>next/font</code> will be preloaded on that single route and fonts requested in the custom app will be preloaded globally.</p><p>Working within the <code>app</code> directory you have more options. Requesting a font inside a page works the same way, however you can also request them in a layout that will preload the font for every route wrapped by it and non-surprisingly if you request one in the root layout it will be preloaded globally.</p><p>The nice thing about <code>next/font</code> is that it does a lot more to ensure your app won&#8217;t suffer from any related performance issues. Most notably it can load fonts while ensuring zero layout shifts by using the <code>size-adjust</code> CSS property. A must use if you are dealing with fonts in a Next.js application.</p><p><strong>Next/Script</strong>: You can use <em><a href="https://nextjs.org/docs/app/building-your-application/optimizing/scripts">next/script</a></em> to control the timing of load and the scope of 3rd party scripts. Again, it can do more to optimize app performance than what&#8217;s related to lazy loading so make sure to check out the docs if you are interested. (<em>I will cover those areas in other chapters later.</em>) </p><p>What&#8217;s relevant here are the different loading <a href="https://nextjs.org/docs/app/building-your-application/optimizing/scripts#strategy">strategies</a> it offers, which makes it a very clean and easy to use tool for precisely controlling script loading. The most relevant strategy is called <code>lazyOnload</code>. It delays the loading of the script to the first time the browser&#8217;s <a href="https://developer.mozilla.org/en-US/docs/Web/API/Background_Tasks_API">main thread becomes idle</a>. </p><p>Another interesting strategy is called <code>worker</code> which moves the loading of the script off-main-thread to a web worker using <em><a href="https://partytown.builder.io/">Partytown</a></em>. It&#8217;s not compatible with the <code>app</code> folder as of July 2023. But when you are in a position enabling its use, this opens up interesting optimization possibilities. Mostly if the script is doing quite independent stuff from the rest of the application like analytics, A/B testing, or metrics collection.</p><h4>&#129504; Performance Mindset</h4><blockquote><p><em>These are the options offered by the framework for influence loading behavior. Remember, when you are reaching out for: <strong>React components</strong>, <strong>libraries</strong>, <strong>images</strong>, <strong>fonts</strong> or <strong>scripts</strong> you can and likely should use some of these tools on a Next.js based project.</em></p></blockquote><h2>Final Warning: When Not to Lazy Load</h2><p>Before you go out and naively try to:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6WVI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ffaa9d5-22a0-4df0-9d9e-4967569f0883_620x465.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6WVI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ffaa9d5-22a0-4df0-9d9e-4967569f0883_620x465.jpeg 424w, https://substackcdn.com/image/fetch/$s_!6WVI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ffaa9d5-22a0-4df0-9d9e-4967569f0883_620x465.jpeg 848w, https://substackcdn.com/image/fetch/$s_!6WVI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ffaa9d5-22a0-4df0-9d9e-4967569f0883_620x465.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!6WVI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ffaa9d5-22a0-4df0-9d9e-4967569f0883_620x465.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6WVI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ffaa9d5-22a0-4df0-9d9e-4967569f0883_620x465.jpeg" width="358" height="268.5" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0ffaa9d5-22a0-4df0-9d9e-4967569f0883_620x465.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:465,&quot;width&quot;:620,&quot;resizeWidth&quot;:358,&quot;bytes&quot;:67145,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!6WVI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ffaa9d5-22a0-4df0-9d9e-4967569f0883_620x465.jpeg 424w, https://substackcdn.com/image/fetch/$s_!6WVI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ffaa9d5-22a0-4df0-9d9e-4967569f0883_620x465.jpeg 848w, https://substackcdn.com/image/fetch/$s_!6WVI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ffaa9d5-22a0-4df0-9d9e-4967569f0883_620x465.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!6WVI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ffaa9d5-22a0-4df0-9d9e-4967569f0883_620x465.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>You need to realize, as with all design decisions there are tradeoffs to be made here. I will explain what you need to keep in mind when deciding for or against lazy loading something. </p><p><em>&#128073;  If you want to see an easy to follow, step by step example of the core issues with naively lazy loading everything check out this <a href="https://www.builder.io/blog/the-challenges-of-lazy-loading-in-javascript">excellent article from the authors of Qwik</a>. Highly recommended. As well as the framework itself. It&#8217;s so innovative I&#8217;m sure it will drive lots of changes in other frameworks too.</em></p><ol><li><p><strong>Lazy loading only works properly with client side rendering</strong>. If you SSR a lazy loaded component you might come out worse in the end than without lazy loading or server side rendering. The JS for the lazy loaded component will be fetched eagerly on the client, as it&#8217;s needed for the hydration of the initial HTML. That means we created another unnecessary network request, that&#8217;s pure overhead in the process of reaching interactivity. If you had it loaded normally, its code would have been part of the main bundle and be available at this point. However if the lazy loaded component is purely CSR, this whole situation won&#8217;t happen. Issue solved. </p></li><li><p><strong>Lazy loading is only useful for components not present in the current render tree in SSR mode</strong>. It usually comes down to two cases. One is lazy loading the next route and the other one is conditional rendering of a lazy loaded component. The reason is the same as before. If the code split chunk of the lazy loaded component is eagerly fetched for hydrating the initial SSR&#8217;ed HTML we end up shooting ourselves in the foot. However if the component is not present in it, we can still reap the proper benefits of lazy loading and in these two cases that&#8217;s surely what will happen.</p></li><li><p><strong>You should never lazy load content needed for SEO</strong>. There&#8217;s just no telling whether the crawler will surely wait for the loading to finish or not. If you SSR the lazy loaded component to circumvent this, then we are back to problem #1.</p></li><li><p><strong>Many lazy loaded components on the same view lead to hard to answer bundling questions</strong>. If multiple lazy loaded components are requested for the same URL, it might make sense to put them into the same chunk depending on when they will be requested. I&#8217;m sure you already feel the combinatorial explosion building up in your head. What would be best paired with what when the app navigates from A to B or from C to A. What about things that are fetched on user interaction. What about prefetching? Not every bundler is capable of handling this question properly so now we developers are responsible to think about this concern too.</p></li><li><p><strong>Each code split chunk has some overhead</strong>. You need to be mindful that every chunk contains some additional JS code. The extra size can add up with each new chunk and their loading incurs network overhead too. All these can lead to situations where too many, small, lazy loaded chunks negate every performance benefit they provide otherwise. Evaluating the costs &amp; benefits of a certain chunking setup is tricky, but luckily we don&#8217;t have to pioneer the solution. Here&#8217;s a <a href="https://medium.com/hackernoon/effective-code-splitting-in-react-a-practical-guide-2195359d5d49">guide on Hackernoon</a> how to measure and fine tune chunk sizes and their performance impact.</p></li></ol><p>That&#8217;s all the advice I have for you, student of the way of ancient performance grandmasters. Now you know how to lazy load, when to lazy and what to lazy load. Use it well and see you in the next one!</p><h2>Challenge: Share The Diff</h2><p>I would like to ask you to take what you learned here and put it to practice. Use the <a href="https://googlechrome.github.io/lighthouse-ci/difftool/">Lighthouse Diff Tool</a> to record how you made a difference by applying lazy loading. If you share your results and a little background story here in the comments I will highlight the best 3 of those in the article! </p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.fullctx.dev/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">Full Context Development is a reader-supported publication. To receive new posts and support my work, please consider becoming a free or paid subscriber.</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[Chapter 1. The Importance of Web Performance in Modern Web Development]]></title><description><![CDATA[The most solid reasons why you and your product owner should care about performance]]></description><link>https://www.fullctx.dev/p/the-importance-of-web-performance</link><guid isPermaLink="false">https://www.fullctx.dev/p/the-importance-of-web-performance</guid><dc:creator><![CDATA[Jozsef Miskolczy]]></dc:creator><pubDate>Sun, 16 Jul 2023 00:46:21 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!OSr5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bfe0708-9ae0-49d8-8f4d-7b3e222a0993_1920x1080.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_!OSr5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bfe0708-9ae0-49d8-8f4d-7b3e222a0993_1920x1080.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!OSr5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bfe0708-9ae0-49d8-8f4d-7b3e222a0993_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!OSr5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bfe0708-9ae0-49d8-8f4d-7b3e222a0993_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!OSr5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bfe0708-9ae0-49d8-8f4d-7b3e222a0993_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!OSr5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bfe0708-9ae0-49d8-8f4d-7b3e222a0993_1920x1080.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!OSr5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bfe0708-9ae0-49d8-8f4d-7b3e222a0993_1920x1080.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4bfe0708-9ae0-49d8-8f4d-7b3e222a0993_1920x1080.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1327217,&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_!OSr5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bfe0708-9ae0-49d8-8f4d-7b3e222a0993_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!OSr5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bfe0708-9ae0-49d8-8f4d-7b3e222a0993_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!OSr5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bfe0708-9ae0-49d8-8f4d-7b3e222a0993_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!OSr5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bfe0708-9ae0-49d8-8f4d-7b3e222a0993_1920x1080.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><h3>Hey Web Devs,</h3><p>Welcome to the first chapter of the ultimate web performance guide! I&#8217;m super excited to start this journey with you! This is the basic tutorial that the first time gamer needs to learn how to play the performance game. If you are a pro feel free to press the skip button, but I put in here some really interesting case studies and stats from big companies and big projects to make a solid and not-boring case for the importance of performance. With all that out of the way, let&#8217;s dive right into the world of performance optimization.</p><h2><strong>1.1. The Basic Definition of Web Performance</strong></h2><p>Web performance is a measure of a web application's speed, efficiency, and overall ability to load, render, and respond to user interactions. In future chapters we are going to cover each of those areas in depth but for now this simple definition is a good starting point.</p><blockquote><p><strong>&#128203; Case Study: </strong>What constitutes "fast"? We will define that later, now it&#8217;s enough to say that in a <a href="https://www.ir.akamai.com/news-releases/news-release-details/akamai-online-retail-performance-report-milliseconds-are">2017 study made by Akamai</a> researchers found that even a 100-millisecond delay in loading time can decrease conversion rates by 7% so even small performance changes can have huge financial consequences.</p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Mh36!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ff41529-f89c-4306-9c19-1af1e8a6c8a4_534x467.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Mh36!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ff41529-f89c-4306-9c19-1af1e8a6c8a4_534x467.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Mh36!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ff41529-f89c-4306-9c19-1af1e8a6c8a4_534x467.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Mh36!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ff41529-f89c-4306-9c19-1af1e8a6c8a4_534x467.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Mh36!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ff41529-f89c-4306-9c19-1af1e8a6c8a4_534x467.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Mh36!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ff41529-f89c-4306-9c19-1af1e8a6c8a4_534x467.jpeg" width="534" height="467" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7ff41529-f89c-4306-9c19-1af1e8a6c8a4_534x467.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:467,&quot;width&quot;:534,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:52462,&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_!Mh36!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ff41529-f89c-4306-9c19-1af1e8a6c8a4_534x467.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Mh36!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ff41529-f89c-4306-9c19-1af1e8a6c8a4_534x467.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Mh36!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ff41529-f89c-4306-9c19-1af1e8a6c8a4_534x467.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Mh36!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ff41529-f89c-4306-9c19-1af1e8a6c8a4_534x467.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><strong>&#128218; Future Reference: </strong>We will learn how to quantify performance in the chapter: <em>&#8220;Optimizing Core Web Vitals With React and Next.js&#8220;</em> and how to measure and analyze it in multiple chapters about the usage of 4 tools: &#8220;<em>How to Use The React Developer Tools for Performance Optimization</em>&#8220; &amp; <em>&#8220;Google Lighthouse For Advanced Performance Measurements&#8220;</em> &amp; <em>&#8220;WebPageTest For Advanced Performance Measurements&#8220;</em> &amp; <em>&#8220;How to Use The Chrome Dev Tools Performance Panel&#8220;</em>.</p></blockquote><h2><strong>1.2.</strong> <strong>User Experience and Web Performance</strong></h2><p>First and foremost, web performance is all about creating a positive user experience and a key part of that experience is speed. When your site loads quickly, users can find what they're looking for without staring at &#8220;the loading screen&#8221; / &#8220;spinner hell&#8220;. And as we all know, happy users are more likely to stick around, recommend your site to others, and even make purchases. </p><blockquote><p><strong>&#128203; Case Study: </strong>In 2016 the Financial Times ran an <a href="https://medium.com/ft-product-technology/a-faster-ft-com-3cedd3dfd7c8">experiment</a> where they artificially delayed their page load times and found that a 1-second delay in page rendering could potentially cost them up to 4.9 million users per year.</p><p><strong>&#128218; Future Reference: </strong>We will learn how to identify the user experience impact of our React/Next.js app&#8217;s speed in the chapters: <em>&#8220;The RAIL Model, the React and the Next.js&#8220;</em> and &#8220;<em>What is a Performance Culture and How to Build One?</em>&#8220;</p></blockquote><h2><strong>1.3. Web Performance and SEO</strong></h2><p>Web performance isn't just about retaining users on your site; it's also about attracting them in the first place. This is where Search Engine Optimization (SEO) comes in. Google, the most widely used search engine, includes site speed (and as of today, Core Web Vitals) as one of the many factors influencing search result rankings.</p><p>Improving your site's performance can increase your visibility on search engine results pages (SERPs), drive more organic traffic to your site, and enhance user engagement and conversion. Conversely, a slow-loading site can cause your SERP rankings to drop, reducing your site's visibility and impacting your site's ability to attract new users.</p><blockquote><p><strong>&#128203; Case Study:</strong> Pinterest managed <a href="https://medium.com/@Pinterest_Engineering/driving-user-growth-with-performance-improvements-cfc50dafadd7">to improve their site speed</a> and witnessed a 15% increase in search engine traffic and a 15% increase in sign-ups.</p><p><strong>&#128218; Future Reference: </strong>SEO is vaguely related to a couple of topics covered in &#8220;<em>The RAIL Model, the React and the Next.js</em>&#8220;, &#8220;<em>Optimizing Core Web Vitals With React and Next.js</em>&#8220; and </p></blockquote><h2><strong>1.4. Web Performance and Business Success</strong></h2><p>The impact of web performance extends beyond user experience and SEO. It directly affects business metrics like conversion rates, customer retention, and overall revenue. This is the key to the special attention this field enjoys. As the Akamai study showed, a one-second delay in page load time can lead to a 7% loss in conversions. That means an e-commerce site making $100,000 per day could potentially lose $2.5 million in sales every year from that small delay.</p><blockquote><p><strong>&#128203; Case Studies: </strong>Rakouten 24 a Japanese online-store giant (as <a href="https://web.dev/rakuten/">reported on web.dev</a>) have achieved amazing results by improving web performance: an increased revenue per visitor by 53.37% and conversion rate growth by 33.13%. A more recent <a href="https://www.portent.com/blog/analytics/research-site-speed-hurting-everyones-revenue.htm#:~:text=The%20first%205%20seconds%20of,(between%20seconds%200%2D5)">Portent study</a> showed that websites that load faster than 1 second have 3 times the conversion rate compared to sites that load in 5 seconds. </p><p><strong>&#128218; Future Reference:</strong> The chapter &#8220;<em>What is a Performance Culture and How to Build One?</em>&#8220; has extensive coverage of topics like how to communicate performance concerns to business stakeholders. There I show you how to define the connections between performance and business metrics, company KPIs and OKRs.</p></blockquote><h2><strong>1.5. Web Performance and Accessibility</strong></h2><p>Web performance also plays a role in making the web accessible to everyone. Not all users have access to high-speed internet or high-powered devices. For many, slow connections and low-end devices are the norm. By optimizing performance, you ensure that your website is usable and accessible to these users as well.</p><p>Performance optimizations can also lead to improved accessibility in other ways. Using proper, semantic, accessible HTML tags can reduce cluttered DOM structures or weighty JavaScript solutions, or optimizing your site's images also gives you an opportunity to provide alternative text for them, which is beneficial for users who rely on screen readers.</p><blockquote><p><strong>&#128203; Case Studies:</strong> While I&#8217;m not aware of studies about how performance optimization improves accessibility there are indeed <a href="https://www.youtube.com/watch?v=EGKNN4MVLq8">talks on YouTube</a> or <a href="https://adamsilver.io/blog/4-steps-to-design-fast-experiences/">blog posts</a> drawing the connection between these two areas.</p><p><strong>&#128218; Future Reference:</strong> The tools and techniques related to this aspect are broad and general, spread over the whole material. Ultimately all our efforts will help to improve the Accessibility of our sites.</p></blockquote><h2><strong>1.6. Web Performance and Sustainability</strong></h2><p>If you feel strongly about sustainability and environmental impact, web performance might just become a new favorite of yours! The energy consumed by servers, network infrastructure, data transfer and the devices we use all contribute to carbon emissions.</p><p>The more performant a website or application, the less processing power and energy the user's device needs to render and run the site or app. By making your websites more efficient, you're effectively reducing the energy usage on millions of devices, which can have a considerable cumulative impact. Reducing the data transmitted over those optic-fiber cables also has positive effects in this sense.</p><blockquote><p><strong>&#128203; References:</strong> If the internet were a country it would be the 6th largest polluter. No wonder there&#8217;s a green / sustainable web movement. You can learn more about it at places like <a href="https://www.thegreenwebfoundation.org/">The Green Web Foundation</a> or the <a href="https://www.websitecarbon.com/">Website Carbon</a> - where you can also calculate the CO2 emission of your website. Or you can grab a popular book on this topic: <a href="https://abookapart.com/products/sustainable-web-design/">Sustainable Web Design</a>. Perhaps take some <a href="https://fershad.com/writing/the-environmental-case-for-website-performance/">quick tips from Fershad Irani</a>, a web sustainability consultant.</p><p><strong>&#128218; Future Reference:</strong> As with accessibility, most parts of the guide contribute to achieving a more sustainable version of any website through the overall performance improvements.</p></blockquote><h2><strong>1.7 The Unique Challenges of Modern Web Applications</strong></h2><p>Modern web applications are super exciting to build! We get more support from the frameworks than ever before in web development history to create awesome apps fast, but they also come with their unique set of performance challenges. </p><p>As we increase the complexity of our projects, the size of JavaScript bundles often grows as well and it&#8217;s not always straightforward to even know what goes into them. These large bundles then take longer to download, parse, and execute, which can significantly impact performance, especially on mobile devices or slower network connections. There are many options to fix this problem but it&#8217;s not always obvious which approach would bring the best results.</p><p>On the flipside of frameworks we need to make more choices than ever before. Whether to use runtime or build time CSS tools? Or to use any at all? How to solve the issue of cache invalidation? How to import images? How to configure the bundler? Or which one to use? What&#8217;s the appropriate rendering strategy?</p><p>Having a deep understanding of every factor is an enormous challenge but they are all important decisions to be made that can impact web performance. I will give you answers or strategies to come up with your own answers for all these questions and more using a web performance mindset.</p><h2><strong>1.8. Special Considerations for React.js and Next.js Performance</strong></h2><p>React's component-based architecture makes it easy to build scalable and maintainable applications. However, inefficient rendering of components can lead to wasted computations and sluggish UI. Most of you surely know that every time the state of a React component changes, the component re-renders. If not managed properly, this can lead to unnecessary renders and under certain conditions, noticeably slow down your applications. </p><p>And our concerns are far from over! Hooks themselves are a performance tradeoff (<em>you know invoking extra functions every render</em>) and there&#8217;s no one-size-fits-all solution when it comes to their use. The ubiquitous question of what&#8217;s the right place to store state in a React app also has performance implications. Then there are questions about the state itself. Should it be mutable or immutable for example. Did you know that&#8217;s a performance tradeoff too? </p><p>Similarly, Next.js brings server-side rendering, static site generation and their different flavors to the React ecosystem, which are fantastic tools for performance and SEO, but also add complexity and potential pitfalls. What if SSR goes on for too long? What if SSG content gets out of date? What if your hosting provider doesn&#8217;t even support the latest features of Next?</p><p>Good infrastructure, efficient data fetching, caching strategies, streaming support and the appropriate usage of the different rendering strategies can play a crucial role in delivering a performant user experience powered by Next.js.</p><p>For all these reasons and more, it&#8217;s crucial to have deep familiarity with the tools and techniques available in the React ecosystem to max out the positive impact of speed on our projects. </p><blockquote><p><strong>If you feel like you&#8217;re up to the challenge let&#8217;s get started for real in the next chapter! </strong></p></blockquote>]]></content:encoded></item><item><title><![CDATA[Introduction: The Ultimate Guide to High Web Performance React and Next.js Applications]]></title><description><![CDATA[The "Art of War" for the Web Performance Ninjas in 2023 (and in more years to come)]]></description><link>https://www.fullctx.dev/p/the-ultimate-react-and-nextjs-performance-guide</link><guid isPermaLink="false">https://www.fullctx.dev/p/the-ultimate-react-and-nextjs-performance-guide</guid><dc:creator><![CDATA[Jozsef Miskolczy]]></dc:creator><pubDate>Sun, 16 Jul 2023 00:45:38 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!cQ_7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10c1edb9-ef8f-459d-8f0b-b61a8137d365_1920x1080.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="pullquote"><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cQ_7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10c1edb9-ef8f-459d-8f0b-b61a8137d365_1920x1080.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cQ_7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10c1edb9-ef8f-459d-8f0b-b61a8137d365_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!cQ_7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10c1edb9-ef8f-459d-8f0b-b61a8137d365_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!cQ_7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10c1edb9-ef8f-459d-8f0b-b61a8137d365_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!cQ_7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10c1edb9-ef8f-459d-8f0b-b61a8137d365_1920x1080.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!cQ_7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10c1edb9-ef8f-459d-8f0b-b61a8137d365_1920x1080.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/10c1edb9-ef8f-459d-8f0b-b61a8137d365_1920x1080.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1298217,&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_!cQ_7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10c1edb9-ef8f-459d-8f0b-b61a8137d365_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!cQ_7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10c1edb9-ef8f-459d-8f0b-b61a8137d365_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!cQ_7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10c1edb9-ef8f-459d-8f0b-b61a8137d365_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!cQ_7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10c1edb9-ef8f-459d-8f0b-b61a8137d365_1920x1080.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></div><div class="pullquote"><p><strong>Shipping epic web performance is not just a business necessity these days, it's also a prerequisite to become a badass frontend ninja master.</strong> -<strong> </strong>me</p></div><p>While that opening statement is not necessarily true, that&#8217;s how I always felt about web performance. For me, performance optimization is the most challenging and exciting part of frontend engineering work and in this series I want to help you master this skill with a special focus on React.js and Next.js apps.</p><p>I believe web developers can benefit immensely from this expertise on multiple levels. Performance is one of the top goals that drives the creation of the newest and most innovative frontend technologies. Some of the best developers of our time are dedicated to relentlessly pushing the boundaries of what&#8217;s possible in web and browser performance. It&#8217;s a world full of exciting challenges, surprising discoveries to be made and there&#8217;s always something new in the making. It&#8217;s just a lot of fun to be involved with.</p><p>But that&#8217;s not all! Web performance optimization is about so much more! I&#8217;m 100% sure you already have a pretty good understanding about the why. We all abandoned websites because they were loading or reacting frustratingly slowly and for businesses that translates to lost revenue, sometimes lots of lost revenue. It&#8217;s not a surprising fact that big companies are willing to go far to prevent those losses from happening.</p><p>However, for us developers, the story is a bit different. I believe <em><strong>most of us want to create web experiences that we can be proud of and that&#8217;s exactly what I want to help you to do</strong></em>! I will teach you all the intricacies of developing, shipping and maintaining fast (<em>and furious</em>) React or Next.js web apps, capable of serving millions of daily users with a top-notch user experience that you can proudly reference on your CV, LinkedIn or your social media channel of choice (<em>and get tons of likes or whatever</em>).</p><p>I will cut open the internals of the Browser platform, React.js and Next.js to teach you the ultimate techniques of web performance optimization. It&#8217;s going to be <strong>super insightful</strong>, <strong>practical</strong>, <strong>results oriented</strong>, <strong>full of examples</strong>, <strong>case studies</strong> and <strong>useful tips</strong>.</p><p>And there&#8217;s a final truth behind all this, that I will teach throughout the whole material.</p><div class="pullquote"><p><strong>Web performance is a state of mind</strong>. </p></div><p>To get performance right long term, It should permeate every aspect of our work so I will teach you the everyday habits and the mindset necessary to do so.</p><h2>What&#8217;s Included?</h2><p>We will analyze React and Next.js to the deepest level and learn all the foundational and advanced tools and techniques to fine-tune their performance characteristics. The material also covers all the necessary, framework independent topics like: the RAIL model, controlling the browser cache - header configuration and invalidation strategies, utilizing web- and service workers and other native browser APIs like the Navigation and Resource Timing APIs, Intersection and Resize Observers and different animation techniques.</p><p>You will learn about the most efficient use of the popular performance measurement tools: Chrome Dev Tools, Lighthouse, WebPageTest, React Development Tools, Storybook <em>(yes, that Storybook)</em> and more.</p><p>The guide covers how to build a performance culture in an organization, including development process best practices for measuring, tracking, monitoring, maintaining and continuously improving the performance of a project. It also covers human factors for example with an intro to communication techniques used to reach alignment on performance goals with business stakeholders.</p><p>And the list is far from over. I will equip you with the whole set of tools and techniques required to develop and maintain (<em>mostly but not exclusively</em>) React based websites that serve millions of daily users while offering a world class user experience. If that doesn't sound exciting for a frontend engineer I don't know what does!</p><blockquote><p><strong>Take a look at the whole list of topics in the <a href="https://www.fullctx.dev/p/ultimate-react-performance-table-of-contents">Table of Contents</a> if you haven&#8217;t done so and start your web performance journey straight away! It's gonna be lit devs!</strong></p></blockquote>]]></content:encoded></item><item><title><![CDATA[fullctx-highimpact-frontend-daily #2]]></title><description><![CDATA[React Rendering Performance and Next.js Security]]></description><link>https://www.fullctx.dev/p/fullctx-highimpact-frontend-daily-2</link><guid isPermaLink="false">https://www.fullctx.dev/p/fullctx-highimpact-frontend-daily-2</guid><pubDate>Mon, 01 May 2023 07:01:05 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Jejl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd580bfd2-0854-4e40-ba57-d4ad3879f8ea_1640x924.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_!Jejl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd580bfd2-0854-4e40-ba57-d4ad3879f8ea_1640x924.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Jejl!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd580bfd2-0854-4e40-ba57-d4ad3879f8ea_1640x924.png 424w, https://substackcdn.com/image/fetch/$s_!Jejl!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd580bfd2-0854-4e40-ba57-d4ad3879f8ea_1640x924.png 848w, https://substackcdn.com/image/fetch/$s_!Jejl!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd580bfd2-0854-4e40-ba57-d4ad3879f8ea_1640x924.png 1272w, https://substackcdn.com/image/fetch/$s_!Jejl!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd580bfd2-0854-4e40-ba57-d4ad3879f8ea_1640x924.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Jejl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd580bfd2-0854-4e40-ba57-d4ad3879f8ea_1640x924.png" width="1456" height="820" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d580bfd2-0854-4e40-ba57-d4ad3879f8ea_1640x924.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:820,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1981850,&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_!Jejl!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd580bfd2-0854-4e40-ba57-d4ad3879f8ea_1640x924.png 424w, https://substackcdn.com/image/fetch/$s_!Jejl!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd580bfd2-0854-4e40-ba57-d4ad3879f8ea_1640x924.png 848w, https://substackcdn.com/image/fetch/$s_!Jejl!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd580bfd2-0854-4e40-ba57-d4ad3879f8ea_1640x924.png 1272w, https://substackcdn.com/image/fetch/$s_!Jejl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd580bfd2-0854-4e40-ba57-d4ad3879f8ea_1640x924.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>Hey Full Context Developers,</h2><p><em>Welcome to the next High Impact Frontend daily post. We are exploring some recent news about React and Next.js today.</em></p><p><em><strong>About the system: </strong>If you need introduction to my scoring or impact analysis systems, check out any of the recent weekly releases (for example <a href="https://www.fullctx.dev/i/113169156/the-scoring-system">this</a>), and the <a href="https://www.fullctx.dev/i/103167904/now-that-the-inspirational-stuff-is-over-we-can-get-back-to-the-original-topic-what-that-mentality-and-toolkit-really-is-about">generic introduction post</a>.</em></p><p></p><h3><strong><a href="https://ui.dev/why-react-renders">Why React Re-Renders</a></strong></h3><h4>&#127942;<strong> News of the Day</strong><em><strong> </strong></em>&#127942;</h4><h5>&#128202;<em><strong> 16 Points: Hype 4 x Value 4</strong></em></h5><p>There are only two ways for improving the performance of a React application, by eliminating unnecessary renders and minimizing total payload size. That&#8217;s why understanding the rendering behavior of React is an important - and tricky - task.</p><p>The full name of the article is: <strong><a href="https://ui.dev/why-react-renders">The Interactive Guide to Rendering in React</a></strong> and it fully lives up to that. It&#8217;s one of the best illustrated and most thorough material about this topic I ever found. And I mean it, not trying to hype it up.</p><p>Here are some (<em>and far from all</em>) of the covered topics:</p><blockquote><ul><li><p><strong>What is rendering?</strong></p></li><li><p><strong>When exactly does React re-render a component?</strong></p></li><li><p><strong>Batching: how React calculates state</strong></p></li><li><p><strong>Why we can't just assume that a component only re-renders when its props change.</strong></p></li></ul></blockquote><p>It&#8217;s funny that after reading like 80% of the article with resolve to learn how to eliminate every little unnecessary re-render it also tells us this:</p><blockquote><p><em>React is very good at rendering. If you have a performance problem, the reality is it's rarely because of too many renders and if it is because of too many renders, you're most likely doing something wrong. </em></p></blockquote><p>Well, I guess it&#8217;s good to know at least for interviews then?</p><h4>Who should care?</h4><p>&#10145;&#65039; Every React developer, but especially those who are building Level 2 and above web-complexity projects where the user perceived performance directly affects business results.</p><h4>Which Impact Factors can this affect?</h4><p>&#10145;&#65039; This is all about <strong>Customer Experience</strong> as the result of performance optimization is experience optimization. If you are struggling with this topic it can improve <strong>Productivity</strong> a little bit as well.</p><h4>Best case impact:</h4><p><strong>Customer Experience</strong> - <em>System</em> <em>| </em><strong>Productivity</strong> - <em>Unit</em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.fullctx.dev/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 Full Context Development! If you are enjoying this article on the web 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><h3><strong><a href="https://www.developerway.com/posts/no-more-flickering-ui">Eliminate Flickering From React Apps</a></strong></h3><h5>&#128202;<em><strong> 16 Points: Hype 4 x Value 4</strong></em></h5><p>I hate it when <a href="https://web.dev/cls/">Cumulative Layout Shift</a> ruins my first experience of a website and so does you! I hate it even more when I&#8217;m the one creating such a site. </p><p>I had some tough times figuring out how to eliminate or reduce that flickering and this article succinctly called: <strong><a href="https://www.developerway.com/posts/no-more-flickering-ui">Say no to "flickering" UI: useLayoutEffect, painting and browsers story</a> </strong>gives us the knowledge and tools required to do just that!</p><p>The main topics include:</p><blockquote><ul><li><p><strong>How to change elements based on DOM measurements</strong></p></li><li><p><strong>What is the problem with useEffect</strong></p></li><li><p><strong>How useLayoutEffect fixes it</strong></p></li><li><p><strong>What is browser painting</strong></p></li><li><p><strong>How SSR plays a role</strong></p></li></ul></blockquote><h4>Who should care?</h4><p>&#10145;&#65039; Every React developer regardless of the web-complexity level of their projects but especially those who work on products where a smooth user experience directly affects business results.</p><h4>Which Impact Factors can this affect?</h4><p>&#10145;&#65039; It seem this article and the previous one are in a similar category. This one too is all about <strong>Customer Experience</strong> as it&#8217;s about directly improving the UX of websites and apps. If you are struggling with a similar task, it can improve <strong>Productivity</strong> a little bit as well.</p><h4>Best case impact:</h4><p><strong>Customer Experience</strong> - <em>System</em>  <em>|  </em><strong>Productivity</strong> - <em>Unit</em></p><p></p><h3><strong><a href="https://www.yagiz.co/securing-your-nextjs-13-application">Securing Your Next.js 13 Application</a></strong></h3><h5>&#128202;<em><strong> 12 Points: Hype 4 x Value 3</strong></em></h5><p>To be honest, now that I&#8217;ve been playing a lot with ChatGPT I can&#8217;t help but feel like this article is AI generated. (<em>What&#8217;s your impression?</em>) Nonetheless, it&#8217;s a nice introduction to <strong>securing a site using HTTP Headers</strong> and <strong>mitigating Cross Site Request Forgery</strong>. </p><p>You get Next.js specific code examples and a short introduction to each component like:</p><blockquote><ul><li><p><strong>Content-Security-Policy</strong></p></li><li><p><strong>Referrer-Policy</strong></p></li><li><p><strong>Strict-Transport-Security</strong></p></li><li><p><strong>X-CSRF-Token based mitigation</strong></p></li></ul></blockquote><h4>Who should care?</h4><p>&#10145;&#65039; Mostly developers using Next.js but it&#8217;s not too framework specific so if you are interested in these security topics you can take away something. The same can be said about projects of course depending on the criticality of security needs.</p><h4>Which Impact Factors can this affect?</h4><p>&#10145;&#65039; Security is a &#8220;<em>silent</em>&#8220; contributor to <strong>Customer Experience</strong>. It&#8217;s generally unnoticed, and if you are lucky you never get to experience the level of &#8220;<em>improvement</em>" it offers in this regard. However when things hit the fan because of a breach, that&#8217;s the time the drastic contribution of security measures can really be felt. If you are struggling with a similar task, it can even improve <strong>Productivity</strong> by a little bit.</p><h4>Best case impact:</h4><p><strong>Customer Experience</strong> - <em>System</em>  <em>|  </em><strong>Productivity</strong> - <em>Unit</em></p><p></p><h3>Wrapping Up</h3><p>If you enjoyed this <strong>High Impact Frontend daily post</strong> and/or found it valuable please consider sharing it with your friends and colleagues. It&#8217;s a huge help to keep this newsletter running!<em> (Not financially, but through the motivation it gives me. </em>&#128526;<em>)</em></p><p>See you in the next one!<br>Joe <a href="https://twitter.com/fullctxdev">@fullctxdev</a></p>]]></content:encoded></item><item><title><![CDATA[fullctx-highimpact-frontend-daily #1]]></title><description><![CDATA[Front of the Frontend news: &#9989; Tricks from rebuilding the Next.js website. &#9989; Practical web workers. &#9989; Manage JS function execution timing in the Event Loop]]></description><link>https://www.fullctx.dev/p/fullctx-highimpact-frontend-daily-1</link><guid isPermaLink="false">https://www.fullctx.dev/p/fullctx-highimpact-frontend-daily-1</guid><dc:creator><![CDATA[Jozsef Miskolczy]]></dc:creator><pubDate>Sat, 29 Apr 2023 20:28:55 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52e0c989-e3a7-408a-bdb3-a93f2d66e76a_1640x924.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_!wAuA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52e0c989-e3a7-408a-bdb3-a93f2d66e76a_1640x924.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wAuA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52e0c989-e3a7-408a-bdb3-a93f2d66e76a_1640x924.png 424w, https://substackcdn.com/image/fetch/$s_!wAuA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52e0c989-e3a7-408a-bdb3-a93f2d66e76a_1640x924.png 848w, https://substackcdn.com/image/fetch/$s_!wAuA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52e0c989-e3a7-408a-bdb3-a93f2d66e76a_1640x924.png 1272w, https://substackcdn.com/image/fetch/$s_!wAuA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52e0c989-e3a7-408a-bdb3-a93f2d66e76a_1640x924.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wAuA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52e0c989-e3a7-408a-bdb3-a93f2d66e76a_1640x924.png" width="1456" height="820" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/52e0c989-e3a7-408a-bdb3-a93f2d66e76a_1640x924.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:820,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1947613,&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_!wAuA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52e0c989-e3a7-408a-bdb3-a93f2d66e76a_1640x924.png 424w, https://substackcdn.com/image/fetch/$s_!wAuA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52e0c989-e3a7-408a-bdb3-a93f2d66e76a_1640x924.png 848w, https://substackcdn.com/image/fetch/$s_!wAuA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52e0c989-e3a7-408a-bdb3-a93f2d66e76a_1640x924.png 1272w, https://substackcdn.com/image/fetch/$s_!wAuA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52e0c989-e3a7-408a-bdb3-a93f2d66e76a_1640x924.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Is this level of clickbait too much?</figcaption></figure></div><h2>Hey Full Context Developers,</h2><p><em>Welcome to the first daily issue of the High Impact Frontend Newsletter. I will try a new approach to keep the momentum going. (Which was down recently.) The plain is to publish smaller pieces of content on a near-daily basis and send out a properly ranked compilation as the weekly newsletter.</em></p><p><em><strong>About the system: </strong>If you need introduction to my scoring or impact analysis systems, check out any of the recent weekly releases (for example <a href="https://www.fullctx.dev/i/113169156/the-scoring-system">this</a>), and the <a href="https://www.fullctx.dev/i/103167904/now-that-the-inspirational-stuff-is-over-we-can-get-back-to-the-original-topic-what-that-mentality-and-toolkit-really-is-about">generic introduction post</a>. I added the web complexity scale to the very end for reference.</em></p><p><em><strong>Special note:</strong> I will only publish these daily posts on the Substack website starting with the next one. This goes out as an email too, but only this time to let you all know what&#8217;s happening. Hope you will like this format and follow along on the site!</em></p><p></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.fullctx.dev&quot;,&quot;text&quot;:&quot;Full Context Development&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.fullctx.dev"><span>Full Context Development</span></a></p><p></p><h3><strong><a href="https://rauno.me/craft/nextjs">Crafting the Next.js Website</a></strong></h3><h4>&#127942;<strong> News of the Day</strong><em><strong> </strong></em>&#127942;</h4><h5>&#128202;<em><strong> 16 Points: Hype 4 x Value 4</strong></em></h5><p>I honestly felt bad for covering so little <a href="https://css-tricks.com/front-of-the-front-back-of-the-front/">front-of-the-frontend</a> stuff recently. You know the kind of news that&#8217;s not about frameworks, meta-frameworks, SPAs or MPAs but pure HTML, CSS and JS/TS. There are lots of interesting things going on in that part of our field with the potential of high impact and today I will finally talk about a lot of those.</p><p>The first and most impactful of such news comes from <a href="https://twitter.com/raunofreiberg">Rauno Freiberg</a>. A detailed article about his experience <strong><a href="https://rauno.me/craft/nextjs">building the new Next.js website</a></strong>. &#129321;</p><p>I don&#8217;t know about you but for me <strong>Vercel</strong> together with <strong>Next.js</strong> are one of the most interesting spaces in the current frontend landscape. They are relentlessly pushing the boundaries of frontend technology forward. They gather some of the most innovative and influential technologists of our field under the same company. They engage with the largest players of the Web like Google, Meta and Microsoft. So I keep a close eye on what they are up to and usually whatever comes out of their <a href="https://www.fullctx.dev/i/105355013/nextjs-v-business-as-usual">secret, underground lab</a> is world class in quality, definitely worthy of attention. (<em>I guess you could call me a fan</em>)</p><p>With all that in mind, when I saw this article I got really excited and it didn&#8217;t let me down. Rauno offers us a look into the fine details of crafting a technically excellent frontend experience, it just blew my mind. You can learn about:</p><blockquote><ul><li><p><strong>Dynamic &amp; responsive grid lines around elements</strong></p></li><li><p><strong>Blinking switchboard effect that&#8217;s consistent across browsers and avoids unnecessary re-paints</strong></p></li><li><p><strong>Consistent focus states</strong></p></li><li><p><strong>A nifty trick to create beautiful quotation marks</strong></p></li><li><p><strong>Explicit accessibility labeling</strong></p></li><li><p><strong>How to use </strong><code>data</code><strong> attributes for styling</strong></p></li><li><p><strong>Gradient tracing</strong></p></li><li><p><strong>Smooth border fade-out</strong></p></li></ul></blockquote><p>It&#8217;s the kind of front-of-the-frontend stuff I was talking about and between you and me, this is the level of expertise that makes me secretly jealous. Hopefully in another 10 years I will have mastered some part of the profession to this level.</p><h4>What can we take away from the article? </h4><p>&#10145;&#65039; For Vercel the impact of such a well crafted website is of course tremendous. <strong>Customer Experience</strong> is impacted through the <strong>user experience improvements</strong>, which is a huge driving factor of increased engagement. In this case that can translate to increased framework adoption, which <strong>increases revenue</strong> for Vercel in the end. <strong>Cross browser compatibility</strong> and <strong>accessibility</strong> are some of the key factors of creating new <strong>Business Opportunities</strong> as frontend engineers. <em>This is very important to keep in mind and push for to deliver business value! </em>They increase the addressable market by allowing a wider audience to engage with the website and become part of the user base.</p><p>&#10145;&#65039; For us this is a source of technical insights that can help to get similar tasks done <strong>more efficiently</strong>, increasing our <strong>Productivity</strong> and that always has the potential to <strong>help us with career advancement</strong>. </p><h4>Who should care? </h4><p>&#10145;&#65039; The most likely projects where these benefits can fully manifest are in the Level 1 and Level 2 web complexity categories. More specifically the user facing, conversion oriented websites, landing pages or engagement based platforms like web-shops, news sites or any other kind of content focused businesses. Some techniques like the consistent focus states and accessibility labeling are applicable more generally.</p><h4>Best case impact:</h4><p><strong>Customer Experience</strong> - <em>System</em>  <em>| </em> <strong>Productivity</strong> - <em>Group</em>  <em>| </em> <strong>Business Opportunity </strong>- <em>Organization</em></p><p></p><h3><strong><a href="https://www.smashingmagazine.com/2023/04/potential-web-workers-multithreading-web/">Web Workers For Practical Multithreading</a></strong></h3><h5>&#128202;<em><strong> 12 Points: Hype 3 x Value 4</strong></em></h5><p>Next front-of-the-frontend news focuses on JavaScript with a surprisingly <a href="https://www.smashingmagazine.com/2023/04/potential-web-workers-multithreading-web/">practical take on Web Workers</a>. I&#8217;ve used them a couple of times in production, in particular with <a href="https://dassur.ma/things/react-redux-comlink/">Comlink to offload expensive Redux state management stuff</a>, and looked into <a href="https://partytown.builder.io/">Partytown to speed up 3rd party code loading</a>, but the kind of generic applications this article covers never appeared on my radar. The main topics include:</p><blockquote><ul><li><p><strong>Offloading CPU intensive work</strong></p></li><li><p><strong>Handling network requests</strong></p></li><li><p><strong>Parallel computation instead of sequential main-thread processing</strong></p></li></ul></blockquote><p>You get code examples for each of these cases, a thorough exploration of the limitations and considerations of using web workers and strategies for mitigating those issues.</p><p>I will be looking for situations where these techniques can bring benefits to the projects I&#8217;m working on. It&#8217;s awesome to learn while writing the newsletter.</p><p><strong>Question</strong>: Have you ever used web workers to achieve similar goals? If yes, I would love to hear your story in the comments down below. (<em>I&#8217;m doing my best to create some engagement! Please talk to me </em>&#128557;.<em> Damn, I suck at this&#8230;</em>)</p><h4>What can we take away from the article? </h4><p>&#10145;&#65039; By offloading appropriate work to web workers, we can make our applications more responsive. The <a href="https://web.dev/rail/">RAIL mode</a>l immediately comes to mind, these techniques can help to meet those budgets resulting in better <strong>Customer Experience</strong>. Depending on the situation it can mean life and death for a project. Where I used the off thread redux worker approach, if we couldn&#8217;t pull that off, the app would have been dysfunctional freezing for roughly 1 second in every 2 seconds. Even in less dramatic situations the gains can be massive by improving site loading speed and other metrics.</p><h4>Who should care? </h4><p>&#10145;&#65039; The Level 2 &amp; 3 web complexity projects. Here again the performance sensitive, user facing, conversion oriented websites, landing pages or engagement based platforms like web-shops, news sites or any other kind of content focused businesses are best suited to reap benefits.</p><h4>Best case impact:</h4><p><strong>Customer Experience</strong> - System</p><p></p><h3><strong><a href="https://www.macarthur.me/posts/navigating-the-event-loop">Maneuvering JavaScript&#8217;s Event Loop</a></strong></h3><h5>&#128202;<em><strong> 12 Points: Hype 3 x Value 4</strong></em></h5><p><a href="https://www.macarthur.me/posts/navigating-the-event-loop">Last front-of-the-frontend news</a> is about JavaScript again from <a href="https://www.macarthur.me/">Alex MacArthur</a>. You can learn the ins and outs of function execution order in the JS engines and the tools we have to manually place our code to certain points of it. It&#8217;s a topic that I rarely see covered. The main techniques it discusses are:</p><blockquote><ul><li><p><strong>The good old setTimeout</strong></p></li><li><p><strong>MessageChannel</strong></p></li><li><p><strong>queueMicrotask</strong> <em>- With practical examples I never saw before !!!</em></p></li><li><p><strong>requestAnimationFrame</strong></p></li><li><p><strong>requestIdleCallback</strong></p></li></ul></blockquote><p>Everything has code examples here as well and nice diagrams too. I took away some new insights from here. What I missed from the article is a mention of how Observer callbacks behave. I know for a fact that the <code>IntersectionObserver</code> and the <code>MutationObserver</code> classes put stuff on the microtask queue.</p><p><strong>Question</strong>: I&#8217;m really curious here as well, do you have experience with using the more esoteric methods in practical situations? Let us know!</p><h4>What can we take away from the article? </h4><p>&#10145;&#65039; This is a tricky topic. Real life situations where these tools come up are usually sources of confusion and are a pain to maintain. But that&#8217;s exactly why we all need to understand their details, in my experience these are unavoidable on the long run. As most of these technical articles this one comes down to increasing our <strong>Productivity</strong> and improving <strong>Customer Experience</strong> with all the benefits these provide.</p><h4>Who should care? </h4><p>&#10145;&#65039; The Level 2 &amp; 3 web complexity projects. Here again the performance sensitive, user facing, conversion oriented websites, landing pages or engagement based platforms like web-shops, news sites or any other kind of content focused businesses are best suited to reap benefits.</p><h4>Best case impact:</h4><p><strong>Productivity</strong> - Group  <em>| </em> <strong>Customer Experience</strong> - Group</p><p></p><h3>Wrapping Up</h3><p>If you enjoyed this <strong>High Impact Frontend  daily post</strong> and/or found it valuable please consider sharing it with your friends and colleagues. It&#8217;s a huge help to keep this newsletter running!<em> (Not financially, but through the motivation it gives me. </em>&#128526;<em>) </em></p><p>See you in the next one!<br>Joe <a href="https://twitter.com/fullctxdev">@fullctxdev</a></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.fullctx.dev/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 Full Context Development! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><h3>The Web Complexity Scale:</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9aTM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F097f3f3c-be72-4bf7-96c1-59ab47840682_4826x4826.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9aTM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F097f3f3c-be72-4bf7-96c1-59ab47840682_4826x4826.png 424w, https://substackcdn.com/image/fetch/$s_!9aTM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F097f3f3c-be72-4bf7-96c1-59ab47840682_4826x4826.png 848w, https://substackcdn.com/image/fetch/$s_!9aTM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F097f3f3c-be72-4bf7-96c1-59ab47840682_4826x4826.png 1272w, https://substackcdn.com/image/fetch/$s_!9aTM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F097f3f3c-be72-4bf7-96c1-59ab47840682_4826x4826.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9aTM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F097f3f3c-be72-4bf7-96c1-59ab47840682_4826x4826.png" width="1456" height="1456" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/097f3f3c-be72-4bf7-96c1-59ab47840682_4826x4826.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1220603,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!9aTM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F097f3f3c-be72-4bf7-96c1-59ab47840682_4826x4826.png 424w, https://substackcdn.com/image/fetch/$s_!9aTM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F097f3f3c-be72-4bf7-96c1-59ab47840682_4826x4826.png 848w, https://substackcdn.com/image/fetch/$s_!9aTM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F097f3f3c-be72-4bf7-96c1-59ab47840682_4826x4826.png 1272w, https://substackcdn.com/image/fetch/$s_!9aTM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F097f3f3c-be72-4bf7-96c1-59ab47840682_4826x4826.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">It&#8217;s best to open the image in a new tab for viewing</figcaption></figure></div>]]></content:encoded></item><item><title><![CDATA[High Impact Frontend #8 - On-Demand UI By AI or Backend, Code for Writing Code & A Lot More]]></title><description><![CDATA[Full Context Impact Analysis for Week 14 & 15 -]]></description><link>https://www.fullctx.dev/p/high-impact-frontend-8-on-demand-ui-by-ai</link><guid isPermaLink="false">https://www.fullctx.dev/p/high-impact-frontend-8-on-demand-ui-by-ai</guid><dc:creator><![CDATA[Jozsef Miskolczy]]></dc:creator><pubDate>Tue, 18 Apr 2023 18:23:54 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!B3G0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4fa1bef5-a66d-49bb-a708-0cdb9a5472f1_1600x900.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_!B3G0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4fa1bef5-a66d-49bb-a708-0cdb9a5472f1_1600x900.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!B3G0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4fa1bef5-a66d-49bb-a708-0cdb9a5472f1_1600x900.png 424w, https://substackcdn.com/image/fetch/$s_!B3G0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4fa1bef5-a66d-49bb-a708-0cdb9a5472f1_1600x900.png 848w, https://substackcdn.com/image/fetch/$s_!B3G0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4fa1bef5-a66d-49bb-a708-0cdb9a5472f1_1600x900.png 1272w, https://substackcdn.com/image/fetch/$s_!B3G0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4fa1bef5-a66d-49bb-a708-0cdb9a5472f1_1600x900.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!B3G0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4fa1bef5-a66d-49bb-a708-0cdb9a5472f1_1600x900.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4fa1bef5-a66d-49bb-a708-0cdb9a5472f1_1600x900.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1405943,&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_!B3G0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4fa1bef5-a66d-49bb-a708-0cdb9a5472f1_1600x900.png 424w, https://substackcdn.com/image/fetch/$s_!B3G0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4fa1bef5-a66d-49bb-a708-0cdb9a5472f1_1600x900.png 848w, https://substackcdn.com/image/fetch/$s_!B3G0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4fa1bef5-a66d-49bb-a708-0cdb9a5472f1_1600x900.png 1272w, https://substackcdn.com/image/fetch/$s_!B3G0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4fa1bef5-a66d-49bb-a708-0cdb9a5472f1_1600x900.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>Hey Full Context Developers,</h2><p><em>Welcome to another issue of High Impact Frontend. The goal of this publication is to cut through the noise of non-stop Frontend Tech buzz and bring you only the most impactful news that can create outsized, positive impact and change what you work with, the way you do development or even the meaning of your life. &#8212; Well, that last one is a bit of a stretch but I like to make these kinds of jokes &#8230;and I often get into uncomfortable situations because of it. </em>&#128517; &#129335; </p><p><em>I use the <strong>Full Context</strong> approach, my way to identify and explain the level of impact a tool or a piece of information can make. My goal is to offer a complete picture of when, how and who can realize that impact so you can easily find the most valuable news <strong>for you</strong>. You can find more details about this system in a <a href="https://fullctxdev.substack.com/p/what-this-full-context-stuff-is-about">dedicated post</a>. </em></p><p><em>My absolutely top secret, hidden agenda behind all this is to teach developers how to connect the technical part of our work with its business and real-life outcomes, so I can help you to make better choices and create better software for everyone.</em></p><h2>Summary</h2><p>I feel very bad about it but I missed another week again, however the upside is that I had a lot more news to choose from and I found some mind blowing pieces. Here&#8217;s the overview:</p><blockquote><ul><li><p>Call for <strong>stories</strong>!</p></li><li><p><strong>On-demand</strong> / Ephemeral / Just-in-time <strong>UIs</strong> driven by AI or a backend</p><ul><li><p>And a tool to generate AWS services using an LLM</p></li></ul></li><li><p>Two ways to <strong>rethink the modern web</strong></p><ul><li><p>And one covert way to diss its creators</p></li></ul></li><li><p>Insights from <strong>Dropbox</strong>, <strong>transforming their web architecture</strong> to last the next decade.</p><ul><li><p>And a large-scale demo implementation of the Clean Architecture using SvelteKit</p></li></ul></li><li><p><strong>New frontend frameworks</strong> from Big Tech companies.</p><ul><li><p>A survey of framework popularity on Netlify</p></li></ul></li><li><p><strong>Code for writing new code </strong>in either TypeScript or JavaScript.</p></li><li><p><strong>A Vercel and Builder.io news special</strong></p></li><li><p><strong>Clean code horrible performance</strong> the original video from the author Casey and and interview with The Primeagen. </p><ul><li><p>Also a long written chat between Casey and Uncle Bob, the father of Clean Code.</p></li></ul></li><li><p><strong>Quick news</strong></p><ul><li><p>The most common mistakes when using React</p></li><li><p>AWS infra setup to host Generative AI</p></li><li><p>Jampack - a static asset optimizer</p></li><li><p>Hidden telemetry in modern frontend frameworks</p></li><li><p>And more, <em>a lot more&#8230;</em></p></li></ul></li><li><p><strong>Newsletter Community Report</strong><em>.</em></p></li></ul></blockquote><h2>I&#8217;m looking for stories, you can share yours!</h2><p>I want to take the newsletter to a new level. In addition to reviewing recent developments of the frontend field I plan to share interesting, real-life stories in line with the High Impact &amp; Full Context approach. If you have a personal story where a web technology related change brought significant business or organizational impact to a project please share it with me. I&#8217;m happy to introduce you to the readers and link back to your social profiles and personal website. Read more about the details here.</p><p>If you know about a good post or video fitting into this theme please send them my way, I will attribute everyone individually who shares some material. And if you know-somebody-who-knows-a-story feel free to refer them to me, we can build our own MLM pyramid scheme if you guys are into that. </p><h2>The Scoring System</h2><p><em>This is the Hype &amp; Value scale I use to filter and categorize the news themselves. Evaluating their impact is a later step. The two values are multiplied to create the final score. Why? Because Hype increases the visibility of any news so it multiplies their impact whether that&#8217;s positive or negative. I will review some of the articles in batches as many of them are about the same or very similar topics.</em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!R3Ig!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd876a997-cb24-43be-bfae-dd4fafd802ca_1600x900.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!R3Ig!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd876a997-cb24-43be-bfae-dd4fafd802ca_1600x900.png 424w, https://substackcdn.com/image/fetch/$s_!R3Ig!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd876a997-cb24-43be-bfae-dd4fafd802ca_1600x900.png 848w, https://substackcdn.com/image/fetch/$s_!R3Ig!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd876a997-cb24-43be-bfae-dd4fafd802ca_1600x900.png 1272w, https://substackcdn.com/image/fetch/$s_!R3Ig!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd876a997-cb24-43be-bfae-dd4fafd802ca_1600x900.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!R3Ig!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd876a997-cb24-43be-bfae-dd4fafd802ca_1600x900.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d876a997-cb24-43be-bfae-dd4fafd802ca_1600x900.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:150248,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!R3Ig!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd876a997-cb24-43be-bfae-dd4fafd802ca_1600x900.png 424w, https://substackcdn.com/image/fetch/$s_!R3Ig!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd876a997-cb24-43be-bfae-dd4fafd802ca_1600x900.png 848w, https://substackcdn.com/image/fetch/$s_!R3Ig!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd876a997-cb24-43be-bfae-dd4fafd802ca_1600x900.png 1272w, https://substackcdn.com/image/fetch/$s_!R3Ig!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd876a997-cb24-43be-bfae-dd4fafd802ca_1600x900.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><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.fullctx.dev/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">I&#8217;m super happy that you read this issue of High Impact Frontend this far! If you want to receive new posts straight to your inbox and support my work, you know what to do! &#128521;&#128071;&#128071;</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2>High Scoring News (15+)</h2><h4>&#127942;<em><strong> News of the Week </strong></em>&#127942;</h4><h3><strong>On-Demand / Ephemeral UI (AI or Server driven)</strong></h3><h5>&#128202;<em><strong> 15 Points: Hype 5 x Value 3</strong></em></h5><p>I came across multiple articles about the topic of On-Demand UI. While pretty much an exploratory area right now, it has huge potential to bring drastic changes to both how we create and how we use software. Here are the sources, then I will explain what this is about, and why it won the <strong>News of the Week</strong> title.</p><ul><li><p><strong><a href="https://twitter.com/sgrove/status/1640417065650778113">ConjureUI</a> - </strong><em>Generating throw away UIs with ChatGPT to get your tasks done and be gone. Impressive demo but nothing more.</em></p></li><li><p><strong><a href="https://www.geoffreylitt.com/2023/03/25/llm-end-user-programming.html">Malleable Software in the Age of LLMs</a> </strong><em>- An in-depth, very insightful article that explores how new AI capabilities will change the life of users and developers alike. A bit optimistic in general but far from unrealistic.</em></p></li><li><p><strong><a href="https://microfrontends.substack.com/p/server-driven-ui-personalization">Server Driven UI, Personalization, Runtime Bundling</a></strong> - A <em>non-AI technique to support just-in-time customization of UIs across multiple platforms using an abstract UI model and client renderers.</em></p></li><li><p><strong><a href="https://www.e2b.dev/">e2b</a> (<a href="https://github.com/e2b-dev/e2b">EnglishToBits</a>)</strong> - <em>AI-powered &#8220;IDE&#8220; to</em> <em>transform tech specs into working backend and frontend software. Here&#8217;s <a href="https://twitter.com/mlejva/status/1641151421830529042">a demo</a> of creating Just-in-time UIs.</em></p></li></ul><p>So there are a couple of things going on here. Ephemeral / On-Demand UI manifests as users describing the kind of application they want with a text prompt, the AI generates it for them, they use it for the task at hand and move on. This is a very interesting idea. We only have demos and I don&#8217;t know how I would feel about always describing the app I want to use or to copy &amp; paste the prompt from an <strong>&#8220;app_store.txt&#8221;</strong>. Conversational workflows are not the best for many common use cases. However this kind of app generation has the potential to become the building block of more intuitive, higher level tools.</p><p>Real time customization / personalization on deeper levels than what we use today is another theme that could be powered by AI or is already implemented using a server driven approach. The idea is to optimize application UI-s to the personal needs and characteristics of the individual user dynamically as they are using the application. However the version of this idea discussed in the Server Driven UI article goes beyond what we are capable of today.</p><p>&#10145;&#65039;  If or once we get production grade solutions, these techniques can potentially improve developer <strong>Productivity</strong> and <strong>Customer Experience</strong> by a large margin. If they free up significant development capacity that&#8217;s called decreased <strong>Utilization</strong> in the Full Context system&#8217;s terms. Also if these techniques prove to be feasible they will open up gigantic <strong>Business Opportunities</strong> and can lead to significant decreases in <strong>Direct Costs</strong>. Their scope at this point is hard to predict, but that&#8217;s exactly because the potential here is mind blowing. This makes it the News of the Week.</p><p><em><strong>Related Tool:</strong></em></p><blockquote><p><strong><a href="https://www.eventual.ai/">Eventual.ai</a></strong>: In the domain of backend services this app brings the future we just explored to today. Their motto is: &#8220;<em>Business Requirements in &#8594; Cloud Service out</em>&#8220;. You have a chat with their AI and it designs and deploys an AWS service configuration to solve your business case. Would be pretty interesting to test drive.</p></blockquote><p></p><h3><strong>Two Ways to Rethink the Modern Web</strong></h3><h4><strong>&#128218;</strong><em><strong> Recommended Read </strong></em><strong>&#128218;</strong></h4><h5>&#128202;<em><strong> 20 Points: Hype 4 x Value 5</strong></em></h5><p>If you are going to open any links from this volume, I strongly recommend the 2 articles coming right now! I think of the previous section as the exciting, but only potential future. In nice contrast this part will show the definitely implementable future that gives it extra value on multiple levels. </p><p>First, because these are iterative improvements, they have a long history to look back at, evaluate and build upon. And they do just that with wisdom and certainty, showing a path forward that would benefit all of us as humans and developers.</p><p>Second, because there&#8217;s code you can already use if you want to try to implement this future and regardless of references from these articles I planned to include some of them in their own right in this issue. So without further ado:</p><ul><li><p><strong><a href="https://blog.erlend.sh/web-of-the-people">Web of the People</a> - </strong><em>Includes some heavy - and I believe justified - criticism of the modern tech giants and the effects of their tools over society but goes way beyond that and offers technical next steps to heal the damage done and create a future where these can&#8217;t be repeated. Really eye opening on many levels. (Also somewhat dissing the current AI boom) &#8594; The philosophical way</em></p></li><li><p><strong><a href="https://dev.to/oxharris/rethinking-the-modern-web-5cn1">Rethinking the Modern Web</a> </strong><em>- Sheds some light on the often non-perceived absurdity of the ways we did web development for the last 10ish years and shows the new tectonic shift that&#8217;s already happening just not in full swing yet. It talks about React, CSS-in-JS, compilers and everything you would expect but the conclusions it comes to is not what you would guess! &#8594; The technological way</em></p></li></ul><p>&#10145;&#65039; The ideas covered here are so broad in scope they have the potential to influence <strong>every</strong> <strong>Impact Factor</strong> up to the <strong>highest levels</strong> possible. This is the challenge with the systemic topics, until they become something more fine grained and concrete I can&#8217;t exactly judge their impact.</p><p><em><strong>Related Diss:</strong></em></p><blockquote><p><strong><a href="https://twitter.com/i/web/status/1646798390355697664">Common API design flaws - Jake Archibald</a></strong>: I absolutely love how Jake is covertly mocking the authors of both the HTML/JS standards and React simply by talking truth. </p></blockquote><p></p><h3><strong>Large-Scale, Long-Term Frontend Architecture Migration At Dropbox</strong></h3><h4><strong>&#128640;</strong><em><strong> Highest Technical Impact</strong></em><strong> &#128640;</strong></h4><h5>&#128202;<em><strong> 16 Points: Hype 4 x Value 4</strong></em></h5><p>Our awesome colleagues at Dropbox presented us with a beast of a case study. It&#8217;s about the journey of revamping their core web application architecture, complete with problem statements, pros/cons and before/after analyses. Simply put, it&#8217;s bloody good.</p><p><strong><a href="https://dropbox.tech/frontend/edison-webserver-a-faster-more-powerful-dropbox-on-the-web">Dropbox.tech - How Edison is helping us build a faster, more powerful Dropbox on the web</a></strong></p><p>I found it beyond insightful. The Dropbox devz walk us through the history of their web architecture evolution, highlighting how the different decisions made along the way played out through such a large scale system and organization. They gather the challenges that arose as the consequences of those decisions and the changing technological landscape and it&#8217;s complete with their way of finding and implementing a solution that lays the foundations for their <em><strong>next decade!!!</strong></em> of development.</p><p>In real life I never encountered this kind of long-term thinking put into technical strategy and working software, yet. (<em>Hope I will do it one day though</em>) It&#8217;s not a wonder with the short length frontend hype cycle and industry average tenure, for sure. I don&#8217;t want to moralize about these factors, the point I want to make is that the rarity of this approach makes it even more valuable. </p><p>&#10145;&#65039; The impact of this strategic initiative is extremely large for Dropbox but how can it benefit you? The possible lessons you can take away from here can help you in any kind of higher level decision making. Those tend to have influence over a lot of impact factors most notably <strong>Customer Experience</strong>, <strong>Productivity</strong>, <strong>Direct Costs</strong> but usually <strong>Business Opportunities</strong> as well. One thing is for sure, you can only become a better developer by reading it.</p><p><em><strong>Related Article:</strong></em></p><blockquote><p><strong><a href="https://nikoheikkila.fi/blog/clean-frontend-architecture-with-sveltekit/">Clean Frontend Architecture with SvelteKit</a></strong> - A precise introduction to and implementation of the hexagonal architecture in a frontend application with proper use-case driven design and a TDD approach using SvelteKit and TypeScript. Every bell and whistle is there to tickle your coder taste buds, hmmm a delicious piece. </p></blockquote><p></p><h2>Average Scoring News (6+)</h2><h4>New Frontend Frameworks</h4><h5><strong>&#128202;</strong><em><strong> </strong>9 Points: Hype 3 x Value 3</em></h5><p>Big tech companies have a new hobby nowadays besides keep laying us all off. They decided to have a piece of the frontend framework cake for themselves. But I get it. The internal pressure to take action must have been crazy high. I mean, I can&#8217;t even imagine how could all the Microsoft or ByteDance developers put up with the shame of working at a place that does not even have its own open source frontend framework. Now I guess they feel much more confident when talking with their old classmates working at Google and Meta&#8230; <em>(No offense meant, this is just a joke. How would I ever dare to insult the dream audience of my newsletter? &#8230;Oh, are you working at Amazon? Can I take a selfie with you?)</em></p><ul><li><p><strong><a href="https://github.com/microsoft/fast">Fast, a framework from Microsoft</a></strong> quoting their description: &#8220;<em>FAST is a collection of technologies built on Web Components and modern Web Standards, designed to help you efficiently tackle some of the most common challenges in website and application design and development.</em>&#8220;</p></li><li><p><strong><a href="https://modernjs.dev/en/">Modern.js more than a framework</a></strong> because apparently that&#8217;s not even attention worthy nowadays. Imagine the devz at ByteDance having a discussion like: - <em>Dude, I came up with a crazy idea to create a new frontend framework. - Hah, don&#8217;t kid me, if that&#8217;s all you can do don&#8217;t even get started mate. Look at Next.js, Nuxt.js, Angular, SvelteKit and all the cool projects. You ain&#8217;t have no chance, unless you ship - at the minimum - your own package manager, build tool and docs site generator. - Hold my beer. </em>And that&#8217;s how I think Modern.js got born over a weekend-long solo hackathon. Or probably not&#8230;</p></li><li><p><strong><a href="https://enhance.dev/docs/">Enhance, an HTML-first framework</a> </strong>mentioned in the Rethinking the Modern Web article as a good step forward.</p></li><li><p><strong><a href="https://www.netlify.com/blog/framework-popularity-on-netlify/">Framework popularity on Netlify</a> </strong>a slightly related but very interesting read.</p><p></p></li></ul><h4>&#8220;Clean&#8220; Code Horrible Performance</h4><h5><strong>&#128202;</strong><em><strong> </strong>12 Points: Hype 3 x Value 4</em></h5><p>A video by <a href="https://twitter.com/cmuratori">Casey Muratori</a> got popular a while ago where he questions the status quo about Clean Code using a C++ developer&#8217;s performance focused mindset. I saw him talking about some earlier version of the same idea before and always thought that his approach is pretty much <strong>Full Context.</strong> </p><p>He is taking measurable characteristics of code and software to evaluate the technical choice of implementation style in terms of its impact. Of course, performance is not the only factor that we should care about in general but the approach itself is sound!</p><ul><li><p><strong><a href="https://www.youtube.com/watch?v=tD5NrevFtbU">The original YouTube video by Casey</a></strong> </p></li><li><p><strong><a href="https://www.youtube.com/watch?v=DsAclZbP_Us">A much shorter interview with The Primeagen</a> </strong>who is one of my favorite programmer content creators. The interview is filled to the brim with programming wisdom and summarizes the main points of the full video pretty well.</p></li><li><p><strong><a href="https://www.fullcontextdevelopment.com/book/chapter-11">The Final Quest of Programming</a></strong>: Ideas on how to analyze and quantify the effects of coding related decisions over business outcomes. - <em>A chapter from my own book.</em></p></li><li><p><strong><a href="https://github.com/unclebob">unclebob</a>/<a href="https://github.com/unclebob/cmuratori-discussion">cmuratori-discussion</a> </strong>An hours-long GitHub &#8220;chat&#8221; between Casey and Uncle Bob - <em>the author of Clean Code</em>.</p><p></p></li></ul><h4>Code for Writing More Code</h4><h5><strong>&#128202;</strong><em><strong> </strong>9 Points: Hype 3 x Value 3</em></h5><p>If simply writing code doesn&#8217;t deliver the high any more, you might want to go meta and start to write code that writes code for you. No, I&#8217;m not talking about AI here, it&#8217;s old school hand written stuff, supported by two recent tools:</p><ul><li><p><strong><a href="https://tinylibs.js.org/packages/ts-writer/">TS-writer</a></strong> a template string template engine designated to generate TypeScript code at runtime</p></li><li><p><strong><a href="https://github.com/unjs/magicast">Magicast</a> </strong>for programmatically modifying JavaScript and TypeScript source codes with a simplified, elegant and familiar syntax powered by recast and babel.</p><p></p></li></ul><h4>The Vercel and Builder.io Special Report</h4><h5><strong>&#128202;</strong><em><strong> </strong>12 Points: Hype 4 x Value 3</em></h5><p>These two companies just keep on giving, and there&#8217;s no decline of content in sight from either. Here are the news of the last two weeks I loved the most.</p><ul><li><p><strong><a href="https://vercel.com/changelog/improve-infrastructure-security-with-vercel-secure-compute">Improved infrastructure security with Vercel Secure Compute</a></strong> Secure isolation and protected integration of serverless functions with other private networks</p></li><li><p><strong><a href="https://www.linkedin.com/posts/guillermo-rauch-b834b917b_what-makes-amazoncoms-mega-storefront-so-activity-7050549383611781120-_1l6/">Vercel platform support for streaming rendering from the Edge</a> </strong>and Next.js v13 offers out of the box tools to utilize it.</p></li><li><p><strong><a href="https://www.builder.io/blog/build-with-ai">Builder.io: Building AI-powered apps is way easier than you think</a></strong></p></li><li><p><strong><a href="https://github.com/builderio/ai-shell">Builder.io: AI Shell</a></strong> A CLI that converts natural language to shell commands.</p></li><li><p><strong><a href="https://github.com/BuilderIO/gpt-assistant">Builder.io: GPT-Assistant</a></strong> An experiment to give an autonomous GPT agent access to a browser and have it accomplish task</p></li><li><p><strong><a href="https://www.builder.io/blog/ai-figma">Builder.io: Generate Figma Designs With AI</a></strong></p><p></p></li></ul><h2>Other Links With Possibly High Impact</h2><ul><li><p><a href="https://github.com/jb41/lambdapi">LambdaPi: GPT-Driven Serverless Code Plugin</a> <em>- a serverless runtime environment tailored for code produced by LLMs. Automatic API generation from your code, support for multiple programming languages, and integrated file and database storage solutions</em>.</p></li><li><p><a href="https://aws.amazon.com/blogs/machine-learning/announcing-new-tools-for-building-with-generative-ai-on-aws/">New Official Amazon Tools for Building Generative AI Products on AWS</a></p></li><li><p><a href="https://github.com/divriots/jampack">Jampack</a> - <em>Optimizes static websites for best user experience and best Core Web Vitals scores. Yes, it works even with the output of Astro and Next.js</em></p></li><li><p><a href="https://telemetry.timseverien.com/">Hidden Telemetry in Modern Frontend Frameworks</a> - <em>a hall of shame and hall of revelation.</em></p></li><li><p><a href="https://www.tinybird.co/blog-posts/frontend-ci-monorepo-turborepo-pnpm">Building a faster CI pipeline with Turborepo and pnpm</a></p></li><li><p><a href="https://web.dev/6-css-snippets-every-front-end-developer-should-know-in-2023/">6 CSS snippets every front-end developer should know in 2023</a> -<em> these are really modern and useful techniques</em></p></li><li><p><a href="https://claritydev.net/blog/improving-react-testing-library-tests">Improving React Testing Library Tests</a></p></li><li><p><a href="https://claritydev.net/blog/the-most-common-mistakes-when-using-react">The Most Common Mistakes When Using React</a> <em>- I&#8217;m guilty of many too</em></p></li><li><p><a href="https://developer.chrome.com/blog/webgpu-release/">Chrome Ships WebGPU</a></p></li><li><p><a href="https://electric-examples-app.fly.dev/">Streaming lexical scope In this ElectricUI demo</a></p></li><li><p><a href="https://github.com/dadamssg/react-use-exceljs">React useExceljs</a></p></li><li><p><a href="https://github.com/trekhleb/javascript-algorithms">JavaScript Algorithms and Data Structures</a> </p><p></p></li></ul><h2><strong>Newsletter Community Report</strong></h2><p><em>Here I share what&#8217;s going on behind the scenes of Full Context Development. I hope it can help you feel like a part of our awesome community. I don&#8217;t have the formulas figured out, I experiment and refine things frequently so we are all in this newsletter stuff together. That makes me even more genuinely happy to share the joys and tears of my work with anyone interested.</em></p><p>The last issue became our most liked and shared post on LinkedIn so far which is by far the most significant source of traffic for us. It also drove a huge (<em>relative to previous</em>) number of new subscribers! Even <a href="https://www.linkedin.com/in/misko-hevery-3883b1/">Miskov Hevery</a> (Creator of Angular and Qwik) reposted it himself. I&#8217;m super happy to see that the momentum is building around our little community. Thank you all for participating and contributing to it.</p><p>Reporting on the subscriber count. We are still a teeny-weeny newsletter but if this post follows the trend of the previous ones we will likely hit the 100 subscribers in a couple of days!!! I&#8217;m super grateful and happy for all of you who already dedicated some of your precious attention to my writing and serving your interest will always come before chasing arbitrary numbers. Still, I feel incredibly excited to reach this milestone.</p><p><em>Typo report:</em> I always made at least one embarrassing typo in every issue so far. Last time it was in the hero image: Fronted Mastery. I felt cringe any time I looked at a social preview. But the best one so far was when I renamed the <em>Hono</em> framework in the headline. While nearly falling asleep in the morning for some reason I put it as <em>Hokai</em>. I don&#8217;t know more that 3 words in Japanese and it&#8217;s not one of them. I only realized the mistake after sending the email. I was looking up the meaning of the word panicking if I put some completely inappropriate out there. Luckily it means <em>collapse</em> or <em>meltdown</em>. Once I read the news the next day about the Silicon Valley Bank collapse I seriously thought about whether I became a prophet. </p><h3>Wrapping Up</h3><p>If you enjoyed this volume of the <strong>High Impact Frontend Newsletter</strong> and/or found it valuable please consider sharing it with your friends and colleagues. It&#8217;s a huge help!</p><blockquote><p><em>Do you know how YouTubers call out their audience in-video for not subscribing? If you read it in an email I have no grounds to do anything like that, <strong>BUT</strong>. I know how many of you shared this stuff, and the numbers break my heart. So please, it&#8217;s simple, it&#8217;s easy and it helps me a lot to run this channel&#8230; umm newsletter so please if you haven&#8217;t done that, click on &#8220;Share&#8221; and smash the notification bell, &#8230; I mean like button. You all who already did are simply the best! I need to find a way to invite you to a VIP Subscriber club somehow. Those who didn&#8217;t, don&#8217;t worry, the party is open, join us, you know what to do!</em></p></blockquote><p>See you in the next one!<br>Joe <a href="https://twitter.com/fullctxdev">@fullctxde</a></p><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[High Impact Frontend #7 - Frontend Mastery, Vercel AI, Vite, Qwik RC and Builder.io content]]></title><description><![CDATA[Full Context Impact Analysis for Week 12 & 13 - 2023]]></description><link>https://www.fullctx.dev/p/high-impact-frontend-7-frontend-mastery</link><guid isPermaLink="false">https://www.fullctx.dev/p/high-impact-frontend-7-frontend-mastery</guid><dc:creator><![CDATA[Jozsef Miskolczy]]></dc:creator><pubDate>Tue, 04 Apr 2023 23:43:18 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!pvAG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c130103-63ed-4e01-8492-22a9e109c8de_1600x900.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_!pvAG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c130103-63ed-4e01-8492-22a9e109c8de_1600x900.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!pvAG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c130103-63ed-4e01-8492-22a9e109c8de_1600x900.png 424w, https://substackcdn.com/image/fetch/$s_!pvAG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c130103-63ed-4e01-8492-22a9e109c8de_1600x900.png 848w, https://substackcdn.com/image/fetch/$s_!pvAG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c130103-63ed-4e01-8492-22a9e109c8de_1600x900.png 1272w, https://substackcdn.com/image/fetch/$s_!pvAG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c130103-63ed-4e01-8492-22a9e109c8de_1600x900.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!pvAG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c130103-63ed-4e01-8492-22a9e109c8de_1600x900.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7c130103-63ed-4e01-8492-22a9e109c8de_1600x900.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1117493,&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_!pvAG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c130103-63ed-4e01-8492-22a9e109c8de_1600x900.png 424w, https://substackcdn.com/image/fetch/$s_!pvAG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c130103-63ed-4e01-8492-22a9e109c8de_1600x900.png 848w, https://substackcdn.com/image/fetch/$s_!pvAG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c130103-63ed-4e01-8492-22a9e109c8de_1600x900.png 1272w, https://substackcdn.com/image/fetch/$s_!pvAG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c130103-63ed-4e01-8492-22a9e109c8de_1600x900.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><h3>Hey Full Context Developers,</h3><p>To make up for the missed volume of last week I will include the most interesting stuff of that period in this issue. There&#8217;s a lot to look at so here&#8217;s the overview:</p><blockquote><ul><li><p>Get to the next level even as a Senior FE dev with <strong>Frontend Mastery</strong>. (<em>Not to be confused with Frontend Masters the course website</em>)</p></li><li><p>Gain better insight into the arts of <strong>Local-First</strong> web application development</p></li><li><p>Boost your time-to-market with <strong>Vercel AI templates</strong></p></li><li><p>The <strong>Qwik framework</strong> hit the first release candidate version, claims to be production ready.</p></li><li><p>Hands down tutorials into implementing <strong>Monitoring and Observability</strong> in <strong>React</strong> web and <strong>React Native</strong> mobile apps.</p></li><li><p>In the <strong>Quick News</strong> section there&#8217;s just so much cool stuff it&#8217;s hard to list:</p><ul><li><p>Lost of useful and/or insightful React posts</p></li><li><p>The coolest recently published tools, for example Cicada, that enables writing CI/CD pipelines in TypeScript.</p></li><li><p>A lot of the recent, awesome Builder.io articles </p></li><li><p>And more, <em>a lot more&#8230;</em></p></li></ul></li><li><p>The <strong>Interesting Links</strong> has <em>links</em> to articles like: </p><ul><li><p>4,600 npm Packages All about John Wick</p></li><li><p>Static Types in Pure JavaScript With Zod and JSDocs</p></li><li><p> <em>And many more</em></p></li></ul></li><li><p><strong>Newsletter Community Report</strong></p></li></ul></blockquote><p><br>I know, yes, I changed the name again, sorry. (<em>This newsletter was previously known as Weekly Frontend Hype</em>) I&#8217;m still iterating as I refine my own vision for the newsletter. We will hit 1.0 eventually with no more breaking changes. </p><p>Why the switch this time? After a chat with <a href="https://www.linkedin.com/in/jherr/">Jack Herrington</a> on LinkedIn I realized I need to communicate what I want to deliver to you more clearly. It&#8217;s still the same thing, showcasing the highest impact news of the last week. (<em>Now it&#8217;s weeks, more on that at the end</em>).</p><p>But <em><strong>what&#8217;s the impact</strong></em> I talk about? In the <em>Full Context</em> view, it&#8217;s anything that makes a project or a product more successful. Here it means news about frontend tools or ideas that <em><strong>help you become a developer with high impact</strong></em>. <em>(Prioritized by that)</em></p><p><em>If you are new around here or just wonder what this &#8220;Full Context&#8220; stuff really means, you can read about it in a <a href="https://fullctxdev.substack.com/p/what-this-full-context-stuff-is-about">dedicated post</a>. It takes around 10 minutes to go through so I recommend doing that after finishing the newsletter.</em></p><h3>The Scoring System</h3><p>For reference here&#8217;s the Hype &amp; Value scale I use to score the impact of the news. The two values are multiplied to create the final value. Now onto the main part! </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!R3Ig!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd876a997-cb24-43be-bfae-dd4fafd802ca_1600x900.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!R3Ig!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd876a997-cb24-43be-bfae-dd4fafd802ca_1600x900.png 424w, https://substackcdn.com/image/fetch/$s_!R3Ig!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd876a997-cb24-43be-bfae-dd4fafd802ca_1600x900.png 848w, https://substackcdn.com/image/fetch/$s_!R3Ig!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd876a997-cb24-43be-bfae-dd4fafd802ca_1600x900.png 1272w, https://substackcdn.com/image/fetch/$s_!R3Ig!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd876a997-cb24-43be-bfae-dd4fafd802ca_1600x900.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!R3Ig!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd876a997-cb24-43be-bfae-dd4fafd802ca_1600x900.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d876a997-cb24-43be-bfae-dd4fafd802ca_1600x900.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:150248,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!R3Ig!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd876a997-cb24-43be-bfae-dd4fafd802ca_1600x900.png 424w, https://substackcdn.com/image/fetch/$s_!R3Ig!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd876a997-cb24-43be-bfae-dd4fafd802ca_1600x900.png 848w, https://substackcdn.com/image/fetch/$s_!R3Ig!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd876a997-cb24-43be-bfae-dd4fafd802ca_1600x900.png 1272w, https://substackcdn.com/image/fetch/$s_!R3Ig!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd876a997-cb24-43be-bfae-dd4fafd802ca_1600x900.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><h3>High Scoring News (15+)</h3><h4><strong>Frontend Mastery - Rethinking React Best Practices</strong></h4><h5>&#128202;<em><strong> 15 Points: Hype 3 x Value 5</strong></em></h5><p><a href="https://frontendmastery.com/posts/rethinking-react-best-practices/">This article</a> came out recently from Frontend Mastery about the current state of React. It&#8217;s super insightful about the current phase of frontend framework evolution in general and clearly explains many of the underlying concepts of the recent trends. </p><p>Besides that, it offers the perfect opportunity for me to bring some attention to this website in general. Why? Because I believe this is one of, if not the best website for senior frontend engineers to gain deep and systemic insights into our areas of focus that can still take us to new levels. (<em>At least it surely did that with me</em>) &#128104;&#8205;&#128187;&#129399;&#128200;</p><p>Every post is extremely well written, they just reek of professionalism and battle tested, deep understanding. Check them out, I highly recommend them all.</p><p>&#10145;&#65039; The article concludes with a very <em>Full Context-y</em> <a href="https://frontendmastery.com/posts/rethinking-react-best-practices/#conclusion">quote</a> from John Carmack <em>(<a href="https://www.fullcontextdevelopment.com/book/chapter-1#b15e49300e2e492884169bd04e1e286b">see my related definition</a>) </em>which further solidifies its position as the <strong>News of the Week</strong> &#127942;. Congrats Frontend Mastery! </p><p>The impact of the article is hard to judge. As a learning material the benefits depend on your level of React knowledge and the decisions you might face. In the right circumstances it could boost <strong>Productivity</strong> up to the <strong>Organization</strong> level. </p><p><em>To be completely honest I gave a Value of 5 considering the whole website not only this article, but hey, as the author I can do at least that much to highlight something super valuable but relatively less known.</em></p><p><em><strong>Related News:</strong></em></p><blockquote><p>Speaking of very <em>Full Context-y</em> stuff, I came across an article making a very solid <a href="https://elliscs.hashnode.dev/a-business-case-for-sveltekit#heading-its-dangerous-to-only-focus-on-dev-experience-and-technical-performance">Business Case for SvelteKit</a> which is a good example of using this perspective by connecting technical choices to measurable business results.</p></blockquote><h4><strong>The Cool Frontend Arts of Local First</strong></h4><h5>&#128202;<em><strong> 15 Points: Hype 3 x Value 5</strong></em></h5><p>The Evil Martians wrote <a href="https://evilmartians.com/chronicles/cool-front-end-arts-of-local-first-storage-sync-and-conflicts">an article</a> about the 3 big &#8220;local-first&#8221; tasks: storage, synchronization, and conflict resolution. Local first web development is becoming a much larger thing recently (<em>see their <a href="https://localfirstweb.dev/">movement defining website</a></em>) and this post gives a nice introduction to the topic. We can also learn the key concepts behind the 3 major topics and see some examples. It strikes a good balance between being easy to follow and offering deep technical insights.</p><p>The value of this topic comes from the fact that a local first approach is essential for many live collaboration applications AND every app that wants to offer offline support which is key for a superior, app-like experience nowadays.</p><p>If you want to understand the challenges involved in this problem space and get recommendations for some ready-made solutions, definitely give this one a read.</p><p>&#10145;&#65039; What you learn here can help you increase <strong>Productivity</strong> up to the <strong>Organization</strong> category and <strong>Customer Experience</strong> up to even the <strong>System</strong> level.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.fullctx.dev/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 Full Context Development! 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><h3>Average Scoring News (6+)</h3><h4><strong>Vercel AI Templates</strong></h4><h5><strong>&#128202;</strong><em><strong> 12 Points: Hype 4 x Value 3</strong></em></h5><p>As <a href="https://fullctxdev.substack.com/i/105355013/nextjs-v-business-as-usual">I have previously said</a> Vercel just can&#8217;t stop shipping awesome stuff. This time they prepared out of the box <a href="https://vercel.com/templates/ai">application templates</a> specifically tailored for AI projects. You can kick start stuff like:</p><ul><li><p>GPT Chatbot</p></li><li><p>Dall-E Art Generator</p></li><li><p>AI Code Translator</p></li><li><p>&#8230; and more</p></li></ul><p>If you are trying to be an early entrant to the AI boom with a similar app these can provide real value. </p><p>&#10145;&#65039; <strong>Productivity</strong> improvements up to the <strong>Organization</strong> category. They can provide you with better <strong>Business Opportunities</strong> by reducing time-to-market. In the best case scenario that&#8217;s impact in the <strong>Organization</strong> category.</p><p><em><strong>Related News</strong></em>: </p><blockquote><p>On dev.to an article about Jema.ai got popular. It&#8217;s titled: <a href="https://dev.to/suede/build-ai-template-engine-to-create-amazing-content-with-nextjs-and-chatgpt-3f89">Build AI Template Engine to create amazing content with Next.js and ChatGPT</a>. Pretty hype.<br><br>Vercel rolled out an <strong><a href="https://vercel.com/blog/vercel-remix-integration-with-edge-functions-support">advance integration of Remix</a></strong> with their Edge infrastructure enabling features like: <strong>Streaming SSR, API Routes, Advanced Caching </strong>and<strong> Data Mutations.<br><br></strong><a href="https://www.joshwcomeau.com/blog/the-end-of-frontend-development/">An optimistic and well rounded take</a> on the future of Web Developers in light of Chat GPT and LLM tech from Josh W Comeau.</p></blockquote><h4><strong><br>Monitoring and Open Telemetry for React (Native)</strong></h4><h5><strong>&#128202;</strong><em><strong> 10 Points: Hype 2 x Value 5</strong></em></h5><p>Monitoring and Observability are not the sexiest of frontend development challenges, but their impact on the business is so massive, they can make or break millions of revenue. </p><p>That&#8217;s why this topic got such a high Value score. It&#8217;s actually not a single article but a whole bunch of recent ones.</p><ol><li><p><a href="https://signoz.io/blog/opentelemetry-react">Implementing Open Telemetry in React with SigNoz</a></p></li><li><p><a href="https://developers.redhat.com/articles/2023/03/22/how-enable-opentelemetry-traces-react-applications">Enabling Open Telemetry in React Applications by Redhat</a></p></li><li><p><a href="https://docs.newrelic.com/docs/mobile-monitoring/new-relic-monitoring-react-native/monitor-your-react-native-application/?ck_subscriber_id=2064424641">Monitoring React Native Applications with New Relic</a></p></li></ol><p>They are pretty technical and platform specific and honestly, I don&#8217;t expect them to be the favorite news of this volume. No wonder as observability is usually a one-off FE task. </p><p>&#10145;&#65039; The articles can give you a head start in setting up these tools, improving <strong>Productivity</strong> up to the <strong>Group</strong> category. From a generic perspective properly implemented observability has massive influence over <strong>Customer Experience</strong> in the most critical situations that can absolutely hit the <strong>System</strong> impact category. It affects <strong>Direct Costs</strong> and even <strong>Business Opportunities</strong>. (<em>Think not losing customers, reputation and revenue because of a sensitive incident</em>)<br></p><h4><strong>The Qwik Framework Hitting First Release Candidate Version</strong></h4><h5><strong>&#128202;</strong><em><strong> 12 Points: Hype 4 x Value 3</strong></em></h5><p><a href="https://www.builder.io/blog/qwik-rc-milestone">This is the most exciting piece of news</a> for me these last weeks. Qwik is driving recent innovation in the FE space with its approach to zero-hydration SSR called <em>resumability</em> among many others. I can&#8217;t wait for it to reach higher market adoption and this step is an important milestone towards that goal.</p><p>But why? I like that they position themself in business terms that answers this question pretty nicely: </p><p><em>&#8220;Companies that deploy Qwik apps <a href="https://web.dev/tags/case-study/">increase their competitive advantage</a> in terms of conversions, customer happiness, and SEO ranking.&#8221;</em></p><p>Qwik offers peak web performance and a great developer experience and you know we frontend developers just like a good, new framework as normal people would a good, new Netflix series. (<em>Not to imply we are not normal people!</em>)</p><p>&#10145;&#65039; <strong>Productivity</strong> and <strong>Customer Experience</strong> are the main game here. This framework can increase Productivity up to the <strong>Organization</strong> category and Customer Experience to the <strong>System</strong> level. The lower Value is due to the fact it didn&#8217;t hit 1.0 yet so it&#8217;s still harder to push for adoption than ideal.</p><h3><br>Low Scoring News (5-)</h3><p><em>It just makes sense to expect news from the low category after seeing the high and average sections. But it actually doesn&#8217;t. Sure there are many low scoring news out there, but why should you care about them if their impact is so low? I won&#8217;t waste your time with irrelevant news. Is this a good approach? Or should I change it somehow? Let me know in the comments or in a reply email if you have an opinion!</em></p><h3><br>Quick News</h3><h4>Builder.io Is The Next Vercel</h4><h5><strong>&#128202;</strong><em><strong> </strong>9 Points: Hype 3 x Value 3</em></h5><p>At least in terms of pumping out top-notch content non-stop. I found a couple of very interesting and informative articles recently. In no particular order:</p><ul><li><p><strong><a href="https://www.builder.io/blog/ai">The Future of AI-driven Design and Development, Today</a></strong></p></li><li><p><strong><a href="https://www.builder.io/blog/web-apis-smooth-resource-intensive-apps">Web APIs for smooth resource intensive apps</a></strong></p></li><li><p><strong><a href="https://www.builder.io/blog/visual-guide-to-nodejs-event-loop">A Complete Visual Guide to Understanding the Node.js Event Loop</a></strong></p></li><li><p><strong><a href="https://www.builder.io/blog/NodeJS-visualizing-nextTick-and-promise-queues">Visualizing nextTick and Promise Queues in Node.js Event Loop</a><br></strong></p></li></ul><h4>Lots of Useful React Content</h4><h5><strong>&#128202;</strong><em><strong> </strong>9 Points: Hype 3 x Value 3</em></h5><p>It&#8217;s an interesting bunch, some opinion pieces and lots of practical and very visual articles about best practices in React. They can deliver real value.</p><ul><li><p><strong><a href="https://twitter.com/asidorenko_/status/1623751929863016450">React prop drilling refactor pattern, visualized on Twitter</a></strong></p></li><li><p><strong><a href="https://blog.bitsrc.io/mastering-the-compound-components-pattern-in-react-unleashing-flexibility-and-maintainability-d310d93508ca">Mastering the Compound Components Pattern</a></strong></p></li><li><p><strong><a href="https://julesblom.com/writing/map-of-react-api">The Visual Map of React API</a></strong></p></li><li><p><strong><a href="https://react.dev/blog/2023/03/22/react-labs-what-we-have-been-working-on-march-2023">What the React Team has been working on</a></strong></p></li><li><p><strong><a href="https://react.dev/learn/you-might-not-need-an-effect">Official tutorial: You might not need an effect</a></strong></p></li><li><p><strong><a href="https://www.zachleat.com/web/react-criticism/">Meaningful React Criticism</a></strong></p></li><li><p><strong><a href="https://bright.codehike.org/">Bright</a></strong> VS Code's syntax highlighting with an RSC, no impact on bundle-size</p></li></ul><h4><br>Cool Tools</h4><h5><strong>&#128202;</strong><em><strong> </strong>8 Points: Hype 2 x Value 4</em></h5><p>I came across a couple of exciting new tools the last two weeks. There&#8217;s a good chance some of them will be relevant to what you are doing.</p><ul><li><p><strong><a href="https://cicada.build/">Cicada Build</a> </strong>Write CI/CD pipelines in TypeScript</p></li><li><p><strong><a href="https://github.com/MarketingPipeline/Termino.js">Termino.js</a></strong> A JavaScript component for making web based terminal animations, games &amp; apps on any website</p></li><li><p><strong><a href="https://maestro.mobile.dev">Maestro</a></strong> The self described: &#8220;simplest and most effective mobile UI testing framework&#8221;. (<em>That works with web apps/sites too!</em>). It has two built-in features that would have saved me from a lot of pain if other E2E testing tool had them: <em>tolerance to flakiness</em> and <em>tolerance to delays</em>. It just makes me want to try it immediately.</p></li><li><p><strong><a href="https://refine.dev">Refine</a></strong> A React based rapid web app development toolkit, with support for nearly anything you might need but possibly for much more.</p></li></ul><h4><br>The Vite Scene</h4><h5><strong>&#128202;</strong><em><strong> </strong>12 Points: Hype 4 x Value 3</em></h5><p>Vite is just steamrolling with no signs of stopping. Take a look at the latest content:</p><ul><li><p><strong><a href="https://ionic.io/blog/ionic-7-is-here">Ionic V7</a>  </strong>just got released and now it boasts improved Vite support. In addition it uses Vite by default for new Ionic React and Ionic Vue applications.</p></li><li><p><strong><a href="https://cloudfour.com/thinks/in-praise-of-vite/">In Praise of Vite</a> </strong>a post that showcases the strengths of Vite in practice.</p></li><li><p><strong><a href="https://github.com/reactjs/react.dev/issues/5797">A Petition to the React Team</a></strong> on GitHub to add Vite to the docs on the same level as the SSR frameworks. (<em>I guess the React people really want you to use those shiny RSCs</em>)</p></li></ul><h4><br>Node.js and The Edge Are Converging</h4><h5><strong>&#128202;</strong><em><strong> </strong>9 Points: Hype 3 x Value 3</em></h5><p>It seems Edge vendors are in lock-step in releasing the same feature. I planned to add the article from Cloudflare as a separate item, but 1 day before sending out this issue Vercel released their own version of the same feature. Vercel just can&#8217;t stop.</p><ul><li><p><strong><a href="https://blog.cloudflare.com/workers-node-js-asynclocalstorage/">Node.js Compatibility for Cloudflare Workers</a></strong> </p></li><li><p><strong><a href="https://vercel.com/changelog/improved-node-js-compatibility-for-edge-middleware-and-edge-functions">Improved Node.js compatibility for Edge Middleware and Edge Functions</a> </strong>on the Vercel platform</p></li></ul><h3>Interesting links</h3><ul><li><p><a href="https://blog.jim-nielsen.com/2023/types-in-jsdoc-with-zod">Static Types in Pure JavaScript With Zod and JSDocs</a></p></li><li><p><a href="https://socket.dev/blog/npm-registry-spam-john-wick?ck_subscriber_id=2064424641">There Are 4,600 npm Packages All about John Wick</a></p></li><li><p><a href="https://www.linkedin.com/posts/mapocock_a-handy-guide-for-understanding-some-of-typescripts-activity-7044607760189046784-xzQQ">A Visual Guide to Some of TypeScript&#8217;s Utility Types</a></p></li><li><p><a href="https://www.silvestar.codes/articles/with-or-without-the-js-framework/">With or without the JS framework</a> -<em> </em>a very insightful read explaining the whole context of the modern frontend frameworks and common misconceptions around them. I highly recommend it</p></li><li><p><a href="https://vercel.com/blog/zero-cls-experiments-nextjs-edge-config">How to build zero-CLS A/B tests with Next.js and Vercel Edge Config</a> -<em> surprise surprise&#8230; another article from Vercel.</em></p></li><li><p><a href="https://stackthrive.com/javascript-async-await-with-foreach">Alternatives to Using Async/Await With a forEach Loop</a></p></li><li><p><a href="https://www.upgradejs.com/blog/nodejs/open-source/static-code-analysis.html">Take Stock of Your Application With Static Code Analysis Tools</a> - <em>kind of basic but depending on your prior knowledge it can be insightful</em></p></li><li><p><a href="https://youtu.be/Cp64YbYBNDA">Jack Herrington&#8217;s YouTube video about handing State in React</a></p></li></ul><h3><strong><br>&#128231; &#128200; &#128203; Newsletter Community Report</strong></h3><p><em>This is the part not about the news, but the newsletter. I share what&#8217;s going on behind the scenes, with the hope you will feel like we are all doing this together as a community of super awesome developers. That&#8217;s good for you, good for us so why not? And I&#8217;m also genuinely happy to share the joys and tears of my work with anyone interested.</em></p><p>These past weeks were very busy for me, and against my best efforts I couldn&#8217;t keep up with the weekly release cycle. I feel really bad about that as I&#8217;m truly serious about bringing you up to date content wrapped in the Full Context perspective. Please be graceful with me, I&#8217;m writing this newsletter in the very early morning hours in the little free time I have besides a full time job, family with two small kids (<em>3.5 and 1.5 years old, cute little girls</em>) and the occasional extra things I need to handle. Thank You! &#128591;&#127995;</p><p>The previous issue became the most viewed post so far both on LinkedIn and on Substack. I&#8217;m pretty happy about that and I&#8217;m trying hard to make that trend continue!</p><h3><br>Wrapping Up</h3><p><strong>I&#8217;m more than happy</strong> that you got to the end! It feels so strange and also amazing that someone actually makes it here! If you enjoyed the article and/or found it valuable please consider sharing it with your friends and colleagues.</p><blockquote><p><em>Do you know how YouTubers call out their audience in-video for not subscribing? If you read it in an email I have no grounds to do anything like that, <strong>BUT</strong>. I know how many of you shared this stuff, and the numbers break my heart. So please, it&#8217;s simple, it&#8217;s easy and it helps me a lot to run this channel&#8230; umm newsletter so please if you haven&#8217;t done that, click on &#8220;Share&#8221; and smash the notification bell, &#8230; I mean like button. I love you all who already did, you are simply the best! Those who didn&#8217;t, don&#8217;t worry, the party is open, join us, you know what to do!</em></p></blockquote><p>See you in the next one!<br>Joe <a href="https://twitter.com/fullctxdev">@fullctxdev</a></p>]]></content:encoded></item><item><title><![CDATA[Frontend Hype #6 - Svelte Special, Type Safe Emails, Migrating BBC From React To Next.js ]]></title><description><![CDATA[Full Context hype & value analysis for Week 11 - 2023]]></description><link>https://www.fullctx.dev/p/fronted-hype-6-email-svelte-cra-nextjs-rspack</link><guid isPermaLink="false">https://www.fullctx.dev/p/fronted-hype-6-email-svelte-cra-nextjs-rspack</guid><dc:creator><![CDATA[Jozsef Miskolczy]]></dc:creator><pubDate>Mon, 20 Mar 2023 22:31:05 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!e4qA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83eb75ac-4524-435c-bcbe-ecc83b3da2f8_1640x924.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!e4qA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83eb75ac-4524-435c-bcbe-ecc83b3da2f8_1640x924.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!e4qA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83eb75ac-4524-435c-bcbe-ecc83b3da2f8_1640x924.jpeg 424w, https://substackcdn.com/image/fetch/$s_!e4qA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83eb75ac-4524-435c-bcbe-ecc83b3da2f8_1640x924.jpeg 848w, https://substackcdn.com/image/fetch/$s_!e4qA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83eb75ac-4524-435c-bcbe-ecc83b3da2f8_1640x924.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!e4qA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83eb75ac-4524-435c-bcbe-ecc83b3da2f8_1640x924.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!e4qA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83eb75ac-4524-435c-bcbe-ecc83b3da2f8_1640x924.jpeg" width="1456" height="820" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/83eb75ac-4524-435c-bcbe-ecc83b3da2f8_1640x924.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:820,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:198664,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!e4qA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83eb75ac-4524-435c-bcbe-ecc83b3da2f8_1640x924.jpeg 424w, https://substackcdn.com/image/fetch/$s_!e4qA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83eb75ac-4524-435c-bcbe-ecc83b3da2f8_1640x924.jpeg 848w, https://substackcdn.com/image/fetch/$s_!e4qA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83eb75ac-4524-435c-bcbe-ecc83b3da2f8_1640x924.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!e4qA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83eb75ac-4524-435c-bcbe-ecc83b3da2f8_1640x924.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Hey Full Context Developer,</h3><p>This volume will be more snappy. It&#8217;s still the collection of the most impactful news I encountered last week ranked by the value they can provide to you as a developer. But it&#8217;s organized in a different manner this time. I&#8217;m trying to figure out the best format for highlighting the usefulness of the <em>stuff</em> in an easy to process way. Let me know if you like this version better.</p><p>But first here&#8217;s the overview:</p><blockquote><ul><li><p>There will be lots of <strong>Svelte</strong> goodies</p></li><li><p>Modern tooling to make working on <strong>email</strong> <em>not-that-big-of-a-pain</em>. </p></li><li><p>We will attend the funeral of <strong>CRA</strong> (<em>create-react-app</em>)</p></li><li><p>Get some industry insight into how <strong>Vercel</strong> (<em>the company behind Next.js</em>) ported over BBC&#8217;s frontend from plain React to Next.js, </p></li><li><p>I will share some coding tools with amazing capabilities like <strong>Console Ninja</strong></p></li><li><p><strong>Newsletter Community Report</strong></p></li><li><p><strong>Full Context System Upgrade</strong></p></li><li><p>And more&#8230;</p></li></ul></blockquote><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.fullctx.dev/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 The Weekly Frontend Hype from Full Context Development. If you want to get the next volume directly into your inbox, you know what to do :) </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><h4>About The System Upgrade</h4><p>I replaced the usage of Impact Points with Impact Categories to demonstrate the scale of the impact <em>the stuff</em> can make. There are simply 4 categories: Unit, Group, Organization and System. Read the details at the end.</p><div><hr></div><p><em>If you are new around here or just wonder what this &#8220;Full Context&#8220; stuff really means, you can read about it in a <a href="https://fullctxdev.substack.com/p/what-this-full-context-stuff-is-about">dedicated post</a>. It takes around 10 minutes to go through so I recommend doing that after finishing the newsletter.</em></p><div><hr></div><h3>Enough intro, just give me the news already</h3><p>I hear you, one last thing before that. For reference here&#8217;s the Hype &amp; Value scale I use to rank and group the news. The two values are multiplied to create the final score. Now let&#8217;s jump right into it.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!R3Ig!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd876a997-cb24-43be-bfae-dd4fafd802ca_1600x900.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!R3Ig!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd876a997-cb24-43be-bfae-dd4fafd802ca_1600x900.png 424w, https://substackcdn.com/image/fetch/$s_!R3Ig!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd876a997-cb24-43be-bfae-dd4fafd802ca_1600x900.png 848w, https://substackcdn.com/image/fetch/$s_!R3Ig!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd876a997-cb24-43be-bfae-dd4fafd802ca_1600x900.png 1272w, https://substackcdn.com/image/fetch/$s_!R3Ig!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd876a997-cb24-43be-bfae-dd4fafd802ca_1600x900.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!R3Ig!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd876a997-cb24-43be-bfae-dd4fafd802ca_1600x900.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d876a997-cb24-43be-bfae-dd4fafd802ca_1600x900.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:150248,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!R3Ig!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd876a997-cb24-43be-bfae-dd4fafd802ca_1600x900.png 424w, https://substackcdn.com/image/fetch/$s_!R3Ig!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd876a997-cb24-43be-bfae-dd4fafd802ca_1600x900.png 848w, https://substackcdn.com/image/fetch/$s_!R3Ig!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd876a997-cb24-43be-bfae-dd4fafd802ca_1600x900.png 1272w, https://substackcdn.com/image/fetch/$s_!R3Ig!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd876a997-cb24-43be-bfae-dd4fafd802ca_1600x900.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><h3>High Scoring News (15+)</h3><div><hr></div><h4><strong>Modern Email Tooling With React</strong></h4><h5>&#128270;<em><strong> 15 Points: Hype 3 x Value 5</strong></em></h5><p><a href="https://www.brail.dev/">Brail</a><strong> -</strong> This is a freakin&#8217; awesome tool if you have to author emails. For me, emails are one of the most painful web development tasks I ever had to do. That&#8217;s where Brail comes to the rescue.</p><p>It defines itself as a &#8220;<em>Full-Stack Email Development Toolkit</em>&#8220; built over tRPC and Next.js. It has devtools, linting, theming, templates, responsive design support and offers end-to-end type safety using TypeScript. The benefits and details are too many to list. Head over to <a href="https://www.brail.dev/">their site</a> if you are interested.</p><p>&#10145;&#65039; This is undoubtedly the <strong>Tool of the Week &#127942;</strong>. Brail can bring the most outsized impact by solving a massive pain in the &#8230; Its <strong>Productivity Impact</strong> can reach the Organizational category and the <strong>Customer Experience Impact</strong> can even be Systemic if email is core to the business. If you can replace existing 3rd party email authoring software with it, there&#8217;s a possibility to impact <strong>Direct Costs</strong> likely in the Group category and <strong>Utilization</strong> can be affected again in the Group category by freeing up developer capacity.</p><p><em><strong>Alternative</strong></em>: There&#8217;s a very similar tool simply called <a href="https://react.email/docs/introduction">React Email</a> offering mostly the same benefits, check it out too! It also has a guide for <a href="https://resend.com/blog/tailwind-with-react-email">styling your emails with Tailwind</a>.</p><h4>SvelteKit Is On a Feature Spree</h4><h5>&#128270; <em>16 Points: Hype 4 x Value 4</em></h5><p>The Svelte team has been pumping out new features since the version 1.0 release. In a <a href="https://svelte.dev/blog/streaming-snapshots-sveltekit">recap blog post</a> they shared the major additions. If you use this framework you can gain substantial benefits from them.</p><p>You can now <strong>Stream Non-essential Data</strong> for each route to unblocking a render-performance bottleneck. </p><p>You have access to <strong>Snapshots,</strong> that among many things can save the users from having to restart filling in forms after an accidental back navigation.</p><p>There are <strong>Vercel specific changes</strong> to enable making much better use of the platform capabilities including <strong>Incremental Static Regeneration</strong> (ISR).</p><p>In <a href="https://svelte.dev/blog/zero-config-type-safety">other news</a> they introduced <strong>Zero-configuration type-safety</strong> for the loader functions Next.js and Remix style.</p><p>&#10145;&#65039; These all have compounding <strong>Productivity</strong> and <strong>Customer Experience Impact</strong> by increasing both development efficiency, the perceived speed of the website and lowering user frustration. Both of them will cap out in the Group category. Customer Experience might even reach Organizational levels. The Vercel config enables adjusting <strong>Direct Costs</strong> more granularly around the Unit or even Group impact categories.</p><p><em><strong>Related</strong></em>: A Svelte UI Library just hit 1.0 called <a href="https://www.skeleton.dev/">Skeleton</a>. Check it out, it looks great and uses Tailwind.</p><h3>Mixed Score News (6+)</h3><div><hr></div><h4>Full-Stack Toolkit for Cloudflare Workers</h4><h5>&#128270; <em>12 Points: Hype 3 x Value 4</em></h5><p><a href="https://superflare.dev/">Superflare</a><em> - </em>&#8220;is an experimental full-stack toolkit for Cloudflare Workers. It features a relational ORM for D1 databases, utilities for R2 storage, and lots more.&#8221; - from their <a href="https://superflare.dev/">website</a>. It offers out-of-the-box support for Remix and soon Next.js.</p><p>The Cloudflare Workers platform is an awesome serverless and edge infrastructure solution like a leaner and cheaper AWS alternative with unique capabilities.</p><blockquote><p><em>If you are looking for a place to host an edge rendered web app or broadly speaking cloud infrastructure options, check this one out.</em></p></blockquote><p>&#10145;&#65039; The CF Workers platform itself has the potential to affect <strong>every Impact Factor</strong> up to the highest categories. Superflare specifically can stack more <strong>Productivity Impact</strong> over it in the <strong>Organization</strong> <strong>Category</strong> and indirectly improve <strong>Customer Experience</strong>.</p><h4>Console Ninja</h4><h5>&#128270; <em>9 Points: Hype 3 x Value 3</em></h5><p><a href="https://console-ninja.com">Console Ninja</a> is a nifty little VS Code extension that will pipe browser console output straight into you editor, in the line of the specific console.log calls. And it will display error logs in similar fashion at the line that&#8217;s failed. Check it out in action in Jack H&#8217;s <a href="https://www.youtube.com/shorts/Z0Odn0pCf9w">short</a>.</p><p>&#10145;&#65039; Isn&#8217;t it the type of <strong>Productivity </strong>improvement we all love? At least I surely do. It&#8217;s not big, likely <strong>Unit Category</strong> but still so cool.</p><h4>Ditching CRA for Vite</h4><h5>&#128270; <em>12 Points: Hype 3 x Value 4</em></h5><p>This <a href="https://luketheweb.dev/blog/what-is-vite-and-why-should-you-use-it-instead-of-create-react-app">blog post</a> by Luke Twomey is making the rounds, discussing what are advantages and disadvantages of replacing <code>create-react-app</code> with <code>Vite</code>, how to go about it and showing some real world examples.</p><p>&#10145;&#65039; Making that move can increase you development efficiency leading to <strong>Productivity</strong> improvements up to the <strong>Group</strong> category. That can always have  <strong>Customer Experience Impact</strong>, but it&#8217;s often negligible.</p><h4>The Funeral of CRA</h4><h5>&#128270; <em>8 Points: Hype 4 x Value 2</em></h5><p>The new official <a href="https://react.dev/">React docs</a> are out and there&#8217;s something missing that YouTuber programmer Theo <a href="https://www.youtube.com/watch?v=M4CLvtCS2YU">covered</a> and sad his farewells. Jack Herrington also made <a href="https://www.youtube.com/shorts/GNNBxTY1_C0">a short</a> about it.</p><p>It&#8217;s interesting how people make a huge issue out of something relatively inconsequential. I get the points they make, for the whole ecosystem it might make some difference but I think the whole discussion is fueled by hype more than anything.</p><p>&#10145;&#65039; How can it affect your everyday work? There&#8217;s nothing it can add that would make a practical difference but hey, the videos were fun to watch.</p><h4>Migrating the BBC Website From Plain React to Next.js</h4><h5>&#128270; <em>9 Points: Hype 3 x Value 3</em></h5><p>Vercel published a <a href="https://vercel.com/blog/migrating-a-large-open-source-react-application-to-next-js-and-vercel">step by step case study</a> of how they ported over BBC&#8217;s open source website to Next.js.</p><p>This is an article I found really valuable, as proper write ups of these industrial scale rewrites are hard to come by. Yet migration to Next.js is a frequent adoption path. In those cases, it can offer really valuable insights.</p><p>&#10145;&#65039; Adopting Next.js can increase the <strong>Productivity, Utilization, Customer Experience, Business Opportunities and Direct Costs Impact</strong> of the team/company. Gaining insight into it offers fractional shares of the whole package.</p><h3>Unevaluated News</h3><div><hr></div><h4>Zero Infrastructure Node.js Background Jobs</h4><h5>&#128270; <em>6 Points: Hype 2 x Value 3</em></h5><p><a href="https://www.defer.run/">Defer.run</a> offers something I can&#8217;t really put my fingers on. It&#8217;s like serverless functions but it&#8217;s not request/response handlers but background tasks. The tool looks solid. I&#8217;m really interested in how it can be best utilized</p><h4>Rspack the Next New Rust-based Bundler</h4><h5>&#128270; <em>9 Points: Hype 3 x Value 3</em></h5><p><a href="https://valor-software.com/press-release/rs-pack-rust-based-web-bundler">Rspack</a> is developed by ByteDance, the creators of TikTok. It&#8217;s the same stuff like Vercel&#8217;s Turbopack but it offers full Webpack compatibility, which can be a game changer among the new bundlers besides the insane compilation speed improvements.  </p><h4>Million.js the 70% Faster React Renderer</h4><h5>&#128270; <em>6 Points: Hype 2 x Value 3</em></h5><p><a href="https://millionjs.org/">Million</a> is a custom VDOM renderer that can drastically speed up the UI of React apps. However its marketing feels a bit like false advertising as the type of components that it can render are quite limited and possibly not even that useful.</p><h3>Interesting links</h3><ul><li><p><a href="https://www.builder.io/blog/history-of-reactivity">History of reactivity</a></p></li><li><p><a href="https://remotion.com/blog/untangling-state-in-react">Utangling state in React</a></p></li><li><p><a href="https://reacttraining.com/blog/where-did-hooks-come-from">Where did hooks come from?</a></p></li><li><p><a href="https://prateeksurana.me/blog/fine-tuning-refs-with-useimperativehandle/">Fine tuning refs with useImperativeHandler</a></p></li><li><p><a href="https://www.amitmerchant.com/create-and-download-text-files-using-javascript/">Create and download text files using JavaScript</a></p><p></p></li></ul><h3><strong>&#128231; &#128200; &#128203; Newsletter Community Report</strong></h3><p><em><strong>(This is the part not about the news, but the news-letter. I share what&#8217;s going on behind the scenes, with the hope you will feel like we are all doing this together as a community of super awesome developers. That&#8217;s good for you, good for us so why not? And I&#8217;m also genuinely happy to share the joys and tears of my work with anyone interested.)</strong></em></p><p>The most exciting thing that happened to the newsletter last week was that S&#233;bastien Lorber put us into his <a href="https://substack.thisweekinreact.com/">This Week In React</a> - Substack publication&#8217;s Recommendations section. That&#8217;s a real honor for me, thanks Seb! </p><p>Otherwise, last week&#8217;s issue brought the least number of new subscribers so far. I honestly thought the last one was quite good. It might be due to a number of factors, my first guess is the release day. It went out on a Saturday. I will release this one on a Monday missing the weekly mark. Sorry if I let you down with that. I still think of all this as an <em>open-beta version</em> of the Newsletter where lots of changes are normal.</p><h3>The New System</h3><p>I have been thinking hard and long about the Impact Point system that I use to show the size of impact the tools can make. I believe it&#8217;s too abstract to easily grasp the scale it represents so I came up with a simplified version. Let me introduce <strong>Impact Categories</strong>. </p><p>The ultimate goal is still the same, I want to show you how the ideas or <em>(mainly frontend)</em> tools &amp;&nbsp;technologies can influence business results (<em>read: profit</em>). The 5 key areas that connect tech to the bottom line are unchanged: Business opportunities, Customer experience, Productivity, Utilization and Direct costs aka <em><strong>CPU-DB</strong></em>. But from now on I will use the following categories to show the scale of influence across these 5 dimensions:</p><ul><li><p><strong>Unit</strong> - An elementary part: a person, a single metric, a user</p></li><li><p><strong>Group</strong> - A group of units: a team, a user type / persona,  a quarterly target</p></li><li><p><strong>Organization</strong> - Groups working together for common goals: a department, a user group, a market segment, strategic goals</p></li><li><p><strong>System</strong> - The whole of the related dimension:  the whole market, the whole company, the whole budget, every user in the customer lifecycle, every developer</p></li></ul><p>This is just to give you a rough idea. I will update the introductory post with the details once I get the time.</p><h3>Wrapping Up</h3><p><strong>I&#8217;m more than happy</strong> that you got to the end! It feels so strange and also amazing that someone actually makes it here! If you enjoyed the article and/or found it valuable please consider sharing it with your friends and colleagues.</p><blockquote><p><em>Do you know how YouTubers call out their audience in-video for not subscribing? If you read it in an email I have no grounds to do anything like that, <strong>BUT</strong>. I know how many of you shared this stuff, and the numbers break my heart. So please, it&#8217;s simple, it&#8217;s easy and it helps me a lot to run this channel&#8230; umm newsletter so please if you haven&#8217;t done that, click on &#8220;Share&#8221; and smash the notification bell, &#8230; I mean like button.  I love you all who already did, you are simply the best! Those who didn&#8217;t, don&#8217;t worry, the party is open, join us, you know what to do! </em></p></blockquote><p>See you in the next one!<br>Joe <a href="https://twitter.com/fullctxdev">@fullctxdev</a></p><p></p>]]></content:encoded></item><item><title><![CDATA[Frontend Hype #5 - ChatGPT FE & BE, RSC Drama, From Signals to Hooks, Hono Edge Framework, A Life Engineered]]></title><description><![CDATA[Full Context hype / value analysis for Week 10 - 2023]]></description><link>https://www.fullctx.dev/p/frontend-hype-5-chatgpt-rsc-hokai</link><guid isPermaLink="false">https://www.fullctx.dev/p/frontend-hype-5-chatgpt-rsc-hokai</guid><dc:creator><![CDATA[Jozsef Miskolczy]]></dc:creator><pubDate>Sat, 11 Mar 2023 12:39:25 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!q-NJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3947d206-d21f-4768-919d-18f875f5ab78_1640x924.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!q-NJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3947d206-d21f-4768-919d-18f875f5ab78_1640x924.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!q-NJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3947d206-d21f-4768-919d-18f875f5ab78_1640x924.jpeg 424w, https://substackcdn.com/image/fetch/$s_!q-NJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3947d206-d21f-4768-919d-18f875f5ab78_1640x924.jpeg 848w, https://substackcdn.com/image/fetch/$s_!q-NJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3947d206-d21f-4768-919d-18f875f5ab78_1640x924.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!q-NJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3947d206-d21f-4768-919d-18f875f5ab78_1640x924.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!q-NJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3947d206-d21f-4768-919d-18f875f5ab78_1640x924.jpeg" width="1456" height="820" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3947d206-d21f-4768-919d-18f875f5ab78_1640x924.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:820,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:241859,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!q-NJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3947d206-d21f-4768-919d-18f875f5ab78_1640x924.jpeg 424w, https://substackcdn.com/image/fetch/$s_!q-NJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3947d206-d21f-4768-919d-18f875f5ab78_1640x924.jpeg 848w, https://substackcdn.com/image/fetch/$s_!q-NJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3947d206-d21f-4768-919d-18f875f5ab78_1640x924.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!q-NJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3947d206-d21f-4768-919d-18f875f5ab78_1640x924.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Hey Full Context Developer,</h3><p>I love all the cool stuff that I managed to dig up this week and I&#8217;m pretty sure you will like it too. &#129310; The most interesting topics bring up serious questions about the value provided by cutting edge tech and I will get to the bottom of some real drama that&#8217;s going on on Twitter. <em>As always, from the Full Context Perspective.</em></p><h4><strong>Couple of Side Notes</strong></h4><ul><li><p><em>I&#8217;m not sure at this point about its worth but the last issue raked in some <a href="https://www.linkedin.com/feed/update/urn:li:activity:7037585503776292864/">high profile likes</a>, like from <a href="https://www.linkedin.com/in/malteubl/">Malte Ubl</a> CTO of Vercel, the same YouTuber <a href="https://www.linkedin.com/in/jherr/">Jack Harrington</a> of previous issues, and developers from a couple of big tech companies signed up to the newsletter . <strong>THIS IS CRAZY</strong> for me! </em>&#128565;&#129321;&#128561;</p></li><li><p><em>Sorry for messing around with the email sender, newsletter name, etc&#8230; It&#8217;s early days and I&#8217;m trying to figure out the best way to present what I do here. If you have some preference let me know though.</em></p></li></ul><h2>Overview</h2><p><strong>&#10145;&#65039; ChatGPT </strong>got a foothold in writing frontend code, that&#8217;s old news by now. I will take a look at the value provided by the current tools built around it. We will explore an even more interesting development, an attempt to <strong>replace the whole role of the backend with an LLM </strong>like ChatGPT.</p><p><strong>&#10145;&#65039; </strong>Tech Twitter is as active as ever, churning out interesting discussions. A lot has been going on about <strong>RSCs (React Server Components)</strong> and SCs in general as other frameworks have already started <a href="https://www.youtube.com/watch?v=17zBODTpuoo">to adopt</a> the concept. Lots of people voiced a critical opinion. <strong><a href="https://twitter.com/dan_abramov/status/1631885118355718144">Dan Abramov struggles</a></strong> to clearly explain them. Turns out, there&#8217;s a surprising way they can improve the productivity of developers. What are the implications of all of this?</p><p>&#10145;&#65039; The article &#8220;<strong>Were React Hooks a Mistake?</strong>&#8220; is making strides and I found it a really valuable read. It sums up the recent discussions of framework authors about signals and then it quickly transitions to the mental models of component types in React. Specifically how class components and function components with hooks differ in fundamental yet often not-understood ways and why that makes Signals all the more attractive for developers.<em> <br>As a developer using React day to day I took away some very valuable learnings from here!</em></p><p>&#10145;&#65039; A new edge-native router/framework appeared on the radar called <strong>Hono</strong> (<em>means flame&#128293; in Japanese</em>). It entered the same category as tRPC. The best part of it is <strong>Hono Stack</strong> helping you to build type-safe server-client communication embedded into your favorite frontend framework. <em>(FFF?) </em>But who needs it to begin with?</p><p>&#10145;&#65039; I will introduce the <strong>A Life Engineered</strong> YouTube channel. I don&#8217;t want to only talk about the drama and the hot stuff (<em>see what I did there Hono? </em>&#128518;) so I will show a really good example of something ranking high on the hype &amp; value scale because its value focus.  I learned an awful lot from it and so will you if you are not watching it already.</p><p>&#10145;&#65039; I&#8217;ve found a real hype destroyer&#128165;. <strong>The Great Gaslighting of the JS Age</strong> is an article that hit too close to home with me. I had very similar thoughts for a while. Give it a read if you want to get deeper insight into how all the fuzz, marketing, and hype around JS frameworks starting around 2010 hurt the wider web ecosystem and to uncover some of its hypocrisies.</p><p>&#10145;&#65039; And there&#8217;s a bunch of smaller, interesting  news at the end. </p><p>Let&#8217;s jump right into it.</p><div><hr></div><p><em>If you are new or just wonder what this &#8220;Full Context&#8220; stuff really means, you can read about it in a <a href="https://fullctxdev.substack.com/p/what-this-full-context-stuff-is-about">dedicated post</a>. It takes around 10 minutes to go through so I recommend doing that afterwards.</em></p><div><hr></div><p><em>&#128279; The headings below are links to the covered topic &#128279;</em></p><h3>#1 &#129302; ChatGPT for <a href="https://twitter.com/DYtweetshere/status/1617471632909676544?s=20">the</a> <a href="https://github.com/TheAppleTucker/backend-GPT">BE</a> &amp; <a href="https://ai2ui.co/">FE</a></h3><blockquote><p><strong>In short: </strong>No, ChatGPT is not going to replace any of our jobs, at least not in the foreseeable future. I will give you some tips on how to beat it!</p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2l3l!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba51fa7e-2154-4345-b45b-2ba8419d871a_512x487.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2l3l!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba51fa7e-2154-4345-b45b-2ba8419d871a_512x487.jpeg 424w, https://substackcdn.com/image/fetch/$s_!2l3l!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba51fa7e-2154-4345-b45b-2ba8419d871a_512x487.jpeg 848w, https://substackcdn.com/image/fetch/$s_!2l3l!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba51fa7e-2154-4345-b45b-2ba8419d871a_512x487.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!2l3l!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba51fa7e-2154-4345-b45b-2ba8419d871a_512x487.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2l3l!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba51fa7e-2154-4345-b45b-2ba8419d871a_512x487.jpeg" width="280" height="266.328125" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ba51fa7e-2154-4345-b45b-2ba8419d871a_512x487.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:487,&quot;width&quot;:512,&quot;resizeWidth&quot;:280,&quot;bytes&quot;:68500,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!2l3l!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba51fa7e-2154-4345-b45b-2ba8419d871a_512x487.jpeg 424w, https://substackcdn.com/image/fetch/$s_!2l3l!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba51fa7e-2154-4345-b45b-2ba8419d871a_512x487.jpeg 848w, https://substackcdn.com/image/fetch/$s_!2l3l!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba51fa7e-2154-4345-b45b-2ba8419d871a_512x487.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!2l3l!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba51fa7e-2154-4345-b45b-2ba8419d871a_512x487.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>There are a lot of intriguing tools and videos showing the capabilities of Open AI to <em>&#8220;replace&#8220;</em> frontend developers. I honestly laughed at most of them. There are some impressive ones though. But the current level of sophistication doesn&#8217;t go far beyond generating boilerplate code, &#8230; if you get the prompts right. Or to recreate the examples from StackOverflow and all the tutorials and introduction books on the net with slight tweaks.</p><p>You can get that much easier and faster if you:</p><ul><li><p><em><strong>Use a purpose made library</strong></em>. Who needs to generate those algorithms when there are much more optimized ones an import away?</p></li><li><p><em><strong>Download a proper boilerplate repo</strong></em> where stuff is not in a single file but you have proper folder structure, actual dependencies are set up for you and so on. No fuss with prompting for much less.</p></li><li><p><em><strong>Download a website template/theme</strong></em> from Themeforest or any other marketplace. You get premade, better quality and incomparably more extensive websites, sometimes even for free.</p></li><li><p><em><strong>Download a proper UI Kit or Component Library</strong></em>. You get a 1000x higher quality code, that&#8217;s actually <strong>maintained</strong>, gets security fixes, and you can ask other people about your issues as they face the same things as you! Unlike what ChatGPT custom generates for you.</p></li></ul><p>The examples of it explaining and commenting code all seem to lack the complexity of a real product. <strong>ChatGPT doesn&#8217;t have the domain knowledge or the understanding about how the subsystems and modules come together.</strong> And I think you can&#8217;t really feed your production codebase into it and even if you could, I have my doubts of it being able to handle it. In the end, its knowledge of tech lags behind years and frankly, only real-time knowledge would suffice to hand over generating production code to any AI.</p><blockquote><p>Don&#8217;t get me wrong I can totally see a future where AI tools are much more useful, but we are not living in that future yet. However following the progress is amazing in itself. </p></blockquote><p><strong>What about the Back End?</strong></p><p>That story I linked in the section header is really fascinating. People put together a system that kind of auto generates a CRUD API using the LLM as the BE and the DB. That&#8217;s nice but I still believe <strong>there&#8217;s an endless number of CRUD SaaS products offering the same features</strong> with a much larger set of additional functionalities for less effort. I can&#8217;t see an LLM do distributed systems, datalake/warehouse, NoSQL, instrumentation or any of the more intricate types of BE/DB work. What does the future hold? I&#8217;m eager to see, but a bit skeptical. <br><em>Sorry, if I don&#8217;t sound enthusiastic about this AI topic, now I&#8217;m really doing what I advertise: &#8220;fighting the hype&#8220;.</em></p><p><strong>More interesting stuff built over ChatGPT that you might actually use:</strong></p><ul><li><p><a href="https://github.com/mpociot/chatgpt-vscode">VisualStudio Code Integration</a></p></li><li><p><a href="https://useadrenaline.com/">Adrenaline a SaaS (CGPTaaS) to debug and fix your code</a></p></li><li><p><a href="https://www.codegpt.co/docs/category/features">Code GPT the most feature rich VSCode extension for CGPT</a></p></li><li><p><a href="https://js2ts.com/">JavaScript to TypeScript transformer</a></p></li></ul><p><strong>From the Full Context Perspective</strong></p><p>ChatGPT is the perfect example of <strong>Level 5 Hype</strong> not paired with equal Value. It already has some use for pre-generating repetitive, basic code or doing  refactoring, but I didn&#8217;t see any mature use case yet. <em>Let me know if I missed some! </em></p><p>In its current form ChatGPT already enabled the creation of new businesses that otherwise couldn&#8217;t exist. This is the staple of a <strong>1000 <a href="https://www.fullcontextdevelopment.com/blog/next-full-context-review#review">Impact</a> <a href="https://fullctxdev.substack.com/p/what-this-full-context-stuff-is-about#%C2%A7now-that-the-inspirational-stuff-is-over-we-can-get-back-to-the-original-topic-what-that-mentality-and-toolkit-really-is-about">Points</a> of <a href="https://www.fullcontextdevelopment.com/book/chapter-3#755ae305b28b4848b6b919b3d8238b8c">Business Opportunity</a></strong>.  If it matures it has the potential to multiply this effect and this score further.</p><p>However until it can be made more context aware <em>(like a specific codebase)</em> and be retrained in real time on new data I think it will only be around <strong>Level 3 Value</strong> or Level 4 in rare cases for software engineers.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!aobE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38c87606-f3de-456d-80c9-835f2c44e259_1600x900.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!aobE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38c87606-f3de-456d-80c9-835f2c44e259_1600x900.webp 424w, https://substackcdn.com/image/fetch/$s_!aobE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38c87606-f3de-456d-80c9-835f2c44e259_1600x900.webp 848w, https://substackcdn.com/image/fetch/$s_!aobE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38c87606-f3de-456d-80c9-835f2c44e259_1600x900.webp 1272w, https://substackcdn.com/image/fetch/$s_!aobE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38c87606-f3de-456d-80c9-835f2c44e259_1600x900.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!aobE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38c87606-f3de-456d-80c9-835f2c44e259_1600x900.webp" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/38c87606-f3de-456d-80c9-835f2c44e259_1600x900.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:34150,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!aobE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38c87606-f3de-456d-80c9-835f2c44e259_1600x900.webp 424w, https://substackcdn.com/image/fetch/$s_!aobE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38c87606-f3de-456d-80c9-835f2c44e259_1600x900.webp 848w, https://substackcdn.com/image/fetch/$s_!aobE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38c87606-f3de-456d-80c9-835f2c44e259_1600x900.webp 1272w, https://substackcdn.com/image/fetch/$s_!aobE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38c87606-f3de-456d-80c9-835f2c44e259_1600x900.webp 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The Hype Value scale for future reference</figcaption></figure></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.fullctx.dev/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 Full Context Development! 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><h3>#2 &#129393; <a href="https://twitter.com/dan_abramov/status/1631641431742857216">Twitter Drama around RSCs</a></h3><p>I wanted to be shorter this week, but writing less is my worst enemy. So I will try to put up a battle now. Here&#8217;s a <a href="https://thisweekinreact.com/newsletter/137/#react">bunch of links</a> where Twitter Tech people discuss React Server Components (<em>scroll down just a bit on that page</em>). </p><p>Some are doubtful of its usefulness. I call them the &#8220;It&#8217;s PHP&#8220; group. Some think RSC is the obvious next step in framework evolution. Let&#8217;s call them members of &#8220;the <a href="https://twitter.com/dan_abramov">Dan</a> cult&#8221;. Sorry both camps, the truth is in the middle, RSCs are useful but they are no silver bullet either. </p><p>The practical value of server components lies in a couple of factors best described in the <a href="https://beta.nextjs.org/docs/rendering/server-and-client-components#when-to-use-server-vs-client-components">Next.js docs</a>. Here&#8217;s the gist of it:</p><p>&#9989; You can fetch data directly inside the components with support for <code>async/await </code>syntax. The buzzword here is <strong>colocation</strong> of data and UI. Like what Remix or the new Next.js router does.<br>&#9989; Directly access server resources including API keys, security tokens etc. It makes writing UI that directly depends on those resources more streamlined,<br>&#9989; Keep large dependencies on the server, shrinking client bundle size =&gt; increased web performance. Which is always nice, but the kinds of components that can be defined as an RSC are limited.</p><p><strong>What are its benefits and who can take advantage of them?<br></strong>RSCs can have a visible impact on a projects&#8217; business outcomes only if the generated revenue is directly correlated with the web performance. Its effect on bundle size can make some difference and the rendered components don&#8217;t need rehydration to further improving web performance. </p><p><strong>Regardless of that, RSCs have the potential to make your life as a developer easier in a mind bending way. </strong></p><blockquote><p><em>Assuming you are working on a React application that has a Node.js backend<strong> </strong>to execute those RSCs.</em> </p></blockquote><p>So what&#8217;s that way? <strong>You might not need APIs anymore!</strong> You can <code>fetch</code> and <code>await</code> data directly in the RSC that needs it. That means writing DB queries or calling 3rd party APIs without holding back! Once they are resolved the component will render static html and send it to the client but!!! you can pass that data down through props to client only components. No need for manual serialization, no need to do anything. It will just magically be available to be used in the browser. Well, that can make a real difference in architecting BE APIs and systems. Watch <a href="https://www.youtube.com/watch?v=EhI6wb5nEEs">Theo&#8217;s full video</a> on this topic for examples.<br><br>For the right project RSC can be influential and the hype is definitely strong so it gets <strong>a solid 4 X 4 score.</strong></p><h3>#3 &#128225; <a href="https://jakelazaroff.com/words/were-react-hooks-a-mistake/">From Signals to Hooks</a></h3><p>The article still rides the waves of signals hype. But it takes a plot twist. Btw, I really love the somewhat clickbaity title of the post: <em>Were React Hooks a Mistake? </em></p><blockquote><p><em><strong>No they were not!</strong></em></p></blockquote><p>But the premise of the article is that developers are subconsciously attracted to Signals because their mental model is much closer to how React Class Components work than to how Function Components do in combination with hooks. Give it a read to explore the details.</p><p>Nothing it talks about will bring a directly measurable difference in business outcomes but it will help you to understand how React works on a deeper level. Especially useful if you  just started to use the framework.</p><p><strong>It scores a nice 3 x 3</strong>. Which is the ideal balance every tech news should have.</p><h3>#4 &#128293; <a href="https://hono.dev/">Hono Edge</a> + <a href="https://hono.dev/concepts/stacks">Hono Stack</a></h3><p>Are you familiar with <a href="https://trpc.io/">tRPC</a>? Then you already know what this is all about. If not, here&#8217;s a short summary:</p><blockquote><p>Hono is a small, simple, and ultrafast web framework for the Edge for full stack TypeScript developers. It runs in all common Edge runtimes + Node.js. Comes with the fastest router out there and its secret weapon is guaranteed type safety between server APIs and client code, using Zod and static typing to create exportable type definitions for each endpoint that the official hono client can reuse. </p></blockquote><p><strong>So what are the benefits?</strong></p><p>We need to talk about the Edge &#9876;&#65039; here. I really like Gergely Orosz&#8217;s <em>(my fellow Hungarian)</em> <a href="https://newsletter.pragmaticengineer.com/i/107021160/cloud-basics">recent summary</a> about what it is.<em> (There&#8217;s no direct link to that section so please just scroll down a bit from there.)</em></p><p>Now that we all are on the same page, I can just say that only those projects need Edge infrastructure which operates in a large enough geographical region to include multiple edge endpoints and have low latency needs like online games, or any website which wants to maximize perceived web performance to increase customer engagement. In this case Hono has the potential to improve that metric. By how much, depends on the starting situation. </p><p>If there&#8217;s a need for very high network throughput it might make a visible difference based on their <a href="https://hono.dev/concepts/benchmarks">own benchmarks</a>. But we all know how benchmarks work, we need to do our own.</p><p><strong>All these can improve Customer Experience in the range of 10s to 100s of Impact Points.</strong></p><p>You get improved DX and productivity thanks to the type safety guaranties. But keep in mind, to get that you need to have a monorepo for the BE and FE or export the types as an internal npm module. </p><p><strong>This would bring Productivity benefits in the 100 Impact Points range.</strong></p><p><strong>Who should consider adoption: </strong>Your run-of-the-mill website/app likely won&#8217;t benefit from Edge infra, and for the ones who do, betting on early tech is probably too risky of a move, as there are more mature alternatives with lower but not orders-of-magnitude lower performance. Any less critical project, operating on global or continental scale can consider Hono in my opinion.</p><p><strong>I give it a well balanced 3 x 3 score.</strong></p><h3>#5 &#128104;&#8205;&#128300; <a href="https://www.youtube.com/@ALifeEngineered">A Life Engineered</a></h3><p>It&#8217;s a YouTube channel I follow, run by Steve Huynh an L7 Principal Engineer (top 1%) at Amazon with 17 years spent at that company. His views, advice, the topics he covers <em>(for some reason I even feel like the way he speaks)</em> all show distilled wisdom, wide experience and delivers constant value. <em>(I&#8217;m not sponsored believe me)</em></p><p>I just wanted to share something with you that can bring immense benefits for any software engineer regardless of specialization.</p><p><strong>How much impact can it make?</strong> The Full Context System <a href="https://www.fullcontextdevelopment.com/book/chapter-10#49f963d1979d493daf05ffffdc09a04b">has a part about the motivation of engineers</a>. While that&#8217;s focused on the effects of technical decisions, it&#8217;s very much directly translatable to how the message of these videos can influence us in positive ways. What you learn here can help us to become at least a 100 Productivity IPs more efficient at our work, career growth and through helping us to help other engineers.</p><p>Check it out if you want to learn from all his experience and growth at Amazon.</p><p><strong>On the hype value scale it &#8220;sadly&#8221; gets a 3 x 5, it could really do with more visibility.</strong></p><h3>#6 &#128227; <a href="https://www.spicyweb.dev/the-great-gaslighting-of-the-js-age/">The Great Gaslighting of the JS Age</a></h3><p>I assume you read the short introduction to this article at the beginning. I don&#8217;t want to spoil anything. Thinking about it again, I even wonder why did I include it in the newsletter? Obviously it doesn&#8217;t offer much evaluate-able business value even though it has a positive message that would be a nice takeaway for all of us. I think the main reason is that it takes such an objective and big picture view of the last decade of the JS/web world it resonated with the approach I&#8217;m trying to use. Give it a read if you are interested.</p><p><strong>There&#8217;s no score for this one.</strong></p><h3>Short news</h3><p>Tech news that I found interesting or funny this week</p><ul><li><p>Jack Harrington invited Jason Lengstrof for a React <a href="https://www.youtube.com/shorts/0Bk-oqVaHs4">Will it re-render?</a> challenge.</p></li><li><p><a href="https://electricui.com/blog/declarative-setup-imperative-update">Declarative Setup, Imperative Update: The Key to High-Performance UI Components in React</a></p></li><li><p><a href="https://dev.to/novu/applying-for-a-new-job-with-react-and-nodejs-and-ai-17a9">Applying for a new job with React and NodeJS and AI</a></p></li><li><p><a href="https://www.macarthur.me/posts/destructuring-with-generators">More Elegant Destructuring with JavaScript Generators</a></p></li><li><p><a href="https://vercel.com/blog/framework-defined-infrastructure">Vercel: Framework Defined Infrastructure</a></p></li><li><p><a href="https://github.com/ChromeDevTools/rfcs/discussions/4">Header Overrides feature in Chrome DevTools</a>: You can specify response headers locally without access to the server.</p></li><li><p><a href="https://qwik.builder.io/qwikcity/advanced/speculative-module-fetching/">Speculative module fetching</a> in Qwik</p></li></ul><h3>Outro</h3><p><strong>I&#8217;m super happy</strong> that you read (<em>or scrolled </em>) till the end! I feel speechless that people actually do that! If you enjoyed the article and/or found it valuable please consider sharing it with your friends and colleagues.</p><p>I&#8217;m at a very early stage of building this Substack publication so even the smallest extra visibility can make a huge difference. My wholehearted thanks if you help with that!<br><br>See you in the next one!<br>Joe <a href="https://twitter.com/fullctxdev">@fullctxdev</a></p><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[Weekly Tech Hype #4 - Next.js v13.2, Electric, Mitosis, Zag, Bling and more...]]></title><description><![CDATA[Full context hype / value analysis for Week 9 - 2023]]></description><link>https://www.fullctx.dev/p/weekly-tech-hype-4</link><guid isPermaLink="false">https://www.fullctx.dev/p/weekly-tech-hype-4</guid><dc:creator><![CDATA[Jozsef Miskolczy]]></dc:creator><pubDate>Fri, 03 Mar 2023 23:24:23 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!bAm8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0083bd7e-8f7f-4952-8ca3-b02d0c6474c7_1600x900.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!bAm8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0083bd7e-8f7f-4952-8ca3-b02d0c6474c7_1600x900.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!bAm8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0083bd7e-8f7f-4952-8ca3-b02d0c6474c7_1600x900.jpeg 424w, https://substackcdn.com/image/fetch/$s_!bAm8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0083bd7e-8f7f-4952-8ca3-b02d0c6474c7_1600x900.jpeg 848w, https://substackcdn.com/image/fetch/$s_!bAm8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0083bd7e-8f7f-4952-8ca3-b02d0c6474c7_1600x900.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!bAm8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0083bd7e-8f7f-4952-8ca3-b02d0c6474c7_1600x900.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!bAm8!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0083bd7e-8f7f-4952-8ca3-b02d0c6474c7_1600x900.jpeg" width="1200" height="675" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0083bd7e-8f7f-4952-8ca3-b02d0c6474c7_1600x900.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:216747,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-large" alt="" srcset="https://substackcdn.com/image/fetch/$s_!bAm8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0083bd7e-8f7f-4952-8ca3-b02d0c6474c7_1600x900.jpeg 424w, https://substackcdn.com/image/fetch/$s_!bAm8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0083bd7e-8f7f-4952-8ca3-b02d0c6474c7_1600x900.jpeg 848w, https://substackcdn.com/image/fetch/$s_!bAm8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0083bd7e-8f7f-4952-8ca3-b02d0c6474c7_1600x900.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!bAm8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0083bd7e-8f7f-4952-8ca3-b02d0c6474c7_1600x900.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Hey Full Context Developer,</h3><p>This week has been more quiet on the hype front but I found some very interesting technical stuff to show you. And I mean absolutely fascinating things for those who are interested in the bleeding edge of frontend tools.</p><p>Before I forget, this is what happened after publishing the first issue of the Tech Hype Report last week! My mind is still blown! &#129327;&#129327;&#129327;</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!avFu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F987e00f6-a614-4d1c-ab56-b3cb8519b93e_575x283.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!avFu!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F987e00f6-a614-4d1c-ab56-b3cb8519b93e_575x283.png 424w, https://substackcdn.com/image/fetch/$s_!avFu!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F987e00f6-a614-4d1c-ab56-b3cb8519b93e_575x283.png 848w, https://substackcdn.com/image/fetch/$s_!avFu!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F987e00f6-a614-4d1c-ab56-b3cb8519b93e_575x283.png 1272w, https://substackcdn.com/image/fetch/$s_!avFu!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F987e00f6-a614-4d1c-ab56-b3cb8519b93e_575x283.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!avFu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F987e00f6-a614-4d1c-ab56-b3cb8519b93e_575x283.png" width="443" height="218.03304347826088" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/987e00f6-a614-4d1c-ab56-b3cb8519b93e_575x283.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:283,&quot;width&quot;:575,&quot;resizeWidth&quot;:443,&quot;bytes&quot;:27503,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!avFu!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F987e00f6-a614-4d1c-ab56-b3cb8519b93e_575x283.png 424w, https://substackcdn.com/image/fetch/$s_!avFu!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F987e00f6-a614-4d1c-ab56-b3cb8519b93e_575x283.png 848w, https://substackcdn.com/image/fetch/$s_!avFu!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F987e00f6-a614-4d1c-ab56-b3cb8519b93e_575x283.png 1272w, https://substackcdn.com/image/fetch/$s_!avFu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F987e00f6-a614-4d1c-ab56-b3cb8519b93e_575x283.png 1456w" sizes="100vw"></picture><div></div></div></a><figcaption class="image-caption">Sarah is core Angular team, and Jack is a programmer YouTuber.</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Rklw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09e0ba06-f076-4da0-9bd2-6874dbe19b6e_475x161.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Rklw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09e0ba06-f076-4da0-9bd2-6874dbe19b6e_475x161.png 424w, https://substackcdn.com/image/fetch/$s_!Rklw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09e0ba06-f076-4da0-9bd2-6874dbe19b6e_475x161.png 848w, https://substackcdn.com/image/fetch/$s_!Rklw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09e0ba06-f076-4da0-9bd2-6874dbe19b6e_475x161.png 1272w, https://substackcdn.com/image/fetch/$s_!Rklw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09e0ba06-f076-4da0-9bd2-6874dbe19b6e_475x161.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Rklw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09e0ba06-f076-4da0-9bd2-6874dbe19b6e_475x161.png" width="463" height="156.93263157894737" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/09e0ba06-f076-4da0-9bd2-6874dbe19b6e_475x161.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:161,&quot;width&quot;:475,&quot;resizeWidth&quot;:463,&quot;bytes&quot;:11930,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Rklw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09e0ba06-f076-4da0-9bd2-6874dbe19b6e_475x161.png 424w, https://substackcdn.com/image/fetch/$s_!Rklw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09e0ba06-f076-4da0-9bd2-6874dbe19b6e_475x161.png 848w, https://substackcdn.com/image/fetch/$s_!Rklw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09e0ba06-f076-4da0-9bd2-6874dbe19b6e_475x161.png 1272w, https://substackcdn.com/image/fetch/$s_!Rklw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F09e0ba06-f076-4da0-9bd2-6874dbe19b6e_475x161.png 1456w" sizes="100vw"></picture><div></div></div></a><figcaption class="image-caption">(edited for highlighting)</figcaption></figure></div><h2>Overview</h2><p>We will look into the future that <strong>Electric Clojure</strong> can bring about with its industry changing, paradigm shifting new ideas. It got me more excited than anything in the last year. And there are other news in the mix trying to bridge that network chasm.</p><p>The rest of the lineup is just as strong! The folks behind <strong>Next.js</strong> are relentlessly churning out improvements and there&#8217;s quite a few significant ones in the latest <strong>v13.2</strong> bunch.</p><p><strong>Mitosis, Zag and TanStack/Bling</strong> are tools I haven&#8217;t heard about before, that all bring cross framework frontend development to unprecedented heights.</p><p>I have a whole bunch of smaller tech news to share like running <strong>RSCs in ReactNative</strong> with Expo, running <strong>SolidJs components in React apps</strong> and a shoutout to <strong>Jack&#8217;s latest videos</strong>. Let&#8217;s jump right into it.</p><div><hr></div><p><em>If you are new or just wonder what this &#8220;Full Context&#8220; stuff  really is, you can read about it in a <a href="https://fullctxdev.substack.com/p/what-this-full-context-stuff-is-about">dedicated post</a>. It takes around 10 minutes to go through so I recommend doing that afterwards.</em></p><div><hr></div><p><em>&#128279; The headings below are links to the covered topic &#128279;</em></p><h3>#1 <a href="https://github.com/hyperfiddle/electric">Electric Clojure</a> &#9889; and The 2 Chasms</h3><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/dustingetz/status/1625178408962473985&quot;,&quot;full_text&quot;:&quot;Electric Clojure (formerly Photon) is now public! Electric is a reactive signals DSL for fullstack web UI, with compiler-managed network sync.\n\n- fully reactive language\n- multi-tier\n- network-transparent\n- strong composition\n- multiplayer native &quot;,&quot;username&quot;:&quot;dustingetz&quot;,&quot;name&quot;:&quot;Dustin Getz&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Mon Feb 13 17:01:41 +0000 2023&quot;,&quot;photos&quot;:[{&quot;img_url&quot;:&quot;https://pbs.substack.com/media/Fo3KO7KXwAEQX-Y.png&quot;,&quot;link_url&quot;:&quot;https://t.co/a6GbIIFnYp&quot;,&quot;alt_text&quot;:null}],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:90,&quot;like_count&quot;:558,&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'm not gonna lie, I can only understand about 69.420 % of all the fancy terms inhibiting that tweet and the repo readme. I guess that means you should probably be closer to 100% but don&#8217;t let the missing percentage set you off. Here&#8217;s my best attempt to translate it to regular English.</p><p>Electric is a programming language (<em>== reactive signals Clojure DSL</em>). And its <em><strong>compiler</strong></em> can spit out full stack web apps where you don&#8217;t have to manage the BE / FE communication at all, it&#8217;s auto generated for ya.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!B9-p!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46c0c131-d528-4905-9880-157856837e8b_640x470.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!B9-p!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46c0c131-d528-4905-9880-157856837e8b_640x470.jpeg 424w, https://substackcdn.com/image/fetch/$s_!B9-p!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46c0c131-d528-4905-9880-157856837e8b_640x470.jpeg 848w, https://substackcdn.com/image/fetch/$s_!B9-p!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46c0c131-d528-4905-9880-157856837e8b_640x470.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!B9-p!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46c0c131-d528-4905-9880-157856837e8b_640x470.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!B9-p!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46c0c131-d528-4905-9880-157856837e8b_640x470.jpeg" width="640" height="470" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/46c0c131-d528-4905-9880-157856837e8b_640x470.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:470,&quot;width&quot;:640,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:62357,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!B9-p!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46c0c131-d528-4905-9880-157856837e8b_640x470.jpeg 424w, https://substackcdn.com/image/fetch/$s_!B9-p!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46c0c131-d528-4905-9880-157856837e8b_640x470.jpeg 848w, https://substackcdn.com/image/fetch/$s_!B9-p!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46c0c131-d528-4905-9880-157856837e8b_640x470.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!B9-p!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46c0c131-d528-4905-9880-157856837e8b_640x470.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>It has some other fancy and nice QoL innovations, but this one is by far the most significant. If this can become mainstream it will change how we think about web applications forever and close that <a href="https://kentcdodds.com/blog/remix-the-yang-to-react-s-yin#whats-the-network-chasm">network chasm</a> that the Remix team also aims to tackle.</p><h4><strong>From the Full Context perspective</strong></h4><p>But there&#8217;s a gigantic if. <strong>IF</strong> it will become mainstream. Clojure is already an obstacle for that and the pain Electric solves has to be large enough to close another chasm <a href="https://www.business-to-you.com/crossing-the-chasm-technology-adoption-life-cycle/">the chasm of tech adoption</a>. I&#8217;m super hopeful that it will happen, I even got the urge to pick up the tutorial book on <em>ClojureScript </em>that I never finished&#8230; for the 3rd time. However I didn&#8217;t experience how much of a help Electric offers by removing the network part. If it&#8217;s similar to how GC removed the need for memory management that would be huge. </p><p>But what&#8217;s the price you need to pay for that? Until it reaches early majority adoption it&#8217;s a lot! Small job market == higher risks for both talent and employer, 100% vendor lock in, very little security and community support, no standards compliance and the list goes on. For now, I can only recommend using it for pet projects, disposable prototypes or some hyper niche products. <em>(For what I can&#8217;t come up with an example)</em></p><p>But let&#8217;s imagine Electric delivers on the promises. It will remove a whole category of tasks and issues from web development, freeing up massive amounts of engineering capacity, which in turn will bring significant business benefits. Probably in the multiple 1000s of Productivity Impact Points. This is why other bleeding edge frameworks are trying to tackle the same problem, like <a href="https://nullstack.app/">Nullstack</a>. (<em>Which honestly has the best art and mascot out of all the popular FE frameworks right now.)</em></p><p>I&#8217;m looking forward to see how this project grows but as of today, for the regular company and developer:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!erMc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43063342-120e-4333-8ce6-470ddbe54186_800x158.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!erMc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43063342-120e-4333-8ce6-470ddbe54186_800x158.jpeg 424w, https://substackcdn.com/image/fetch/$s_!erMc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43063342-120e-4333-8ce6-470ddbe54186_800x158.jpeg 848w, https://substackcdn.com/image/fetch/$s_!erMc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43063342-120e-4333-8ce6-470ddbe54186_800x158.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!erMc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43063342-120e-4333-8ce6-470ddbe54186_800x158.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!erMc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43063342-120e-4333-8ce6-470ddbe54186_800x158.jpeg" width="390" height="77.025" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/43063342-120e-4333-8ce6-470ddbe54186_800x158.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:158,&quot;width&quot;:800,&quot;resizeWidth&quot;:390,&quot;bytes&quot;:43932,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!erMc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43063342-120e-4333-8ce6-470ddbe54186_800x158.jpeg 424w, https://substackcdn.com/image/fetch/$s_!erMc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43063342-120e-4333-8ce6-470ddbe54186_800x158.jpeg 848w, https://substackcdn.com/image/fetch/$s_!erMc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43063342-120e-4333-8ce6-470ddbe54186_800x158.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!erMc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43063342-120e-4333-8ce6-470ddbe54186_800x158.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p><strong>Electric Clojure offers a 3 x 2 = 6 HV score on the Full Context Hype Value scale. But it has the potential to reach a 5 x 5 score in the future!<br></strong><em>(Yes, I tweaked the formula since the last issue based on feedback)</em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7bP6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfe16f9f-638d-4cc2-b1a8-cb9627e83000_1600x900.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7bP6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfe16f9f-638d-4cc2-b1a8-cb9627e83000_1600x900.png 424w, https://substackcdn.com/image/fetch/$s_!7bP6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfe16f9f-638d-4cc2-b1a8-cb9627e83000_1600x900.png 848w, https://substackcdn.com/image/fetch/$s_!7bP6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfe16f9f-638d-4cc2-b1a8-cb9627e83000_1600x900.png 1272w, https://substackcdn.com/image/fetch/$s_!7bP6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfe16f9f-638d-4cc2-b1a8-cb9627e83000_1600x900.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7bP6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfe16f9f-638d-4cc2-b1a8-cb9627e83000_1600x900.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bfe16f9f-638d-4cc2-b1a8-cb9627e83000_1600x900.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:151193,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!7bP6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfe16f9f-638d-4cc2-b1a8-cb9627e83000_1600x900.png 424w, https://substackcdn.com/image/fetch/$s_!7bP6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfe16f9f-638d-4cc2-b1a8-cb9627e83000_1600x900.png 848w, https://substackcdn.com/image/fetch/$s_!7bP6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfe16f9f-638d-4cc2-b1a8-cb9627e83000_1600x900.png 1272w, https://substackcdn.com/image/fetch/$s_!7bP6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfe16f9f-638d-4cc2-b1a8-cb9627e83000_1600x900.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The scale of hype x value</figcaption></figure></div><p></p><h3>#2 <a href="https://nextjs.org/blog/next-13-2">Next.js v13.2</a> &#128163;Business as Usual</h3><p>This release just proved my conspiracy theory. I don't know what kind of drug they use at Vercel but they definitely pump something into their developers and turn them into <em><strong>super soldier-coders</strong></em> as they ship with inhumane speed.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!KKK-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5fdfbec-fea6-4357-a3c4-9c206de1236a_1200x1500.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!KKK-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5fdfbec-fea6-4357-a3c4-9c206de1236a_1200x1500.jpeg 424w, https://substackcdn.com/image/fetch/$s_!KKK-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5fdfbec-fea6-4357-a3c4-9c206de1236a_1200x1500.jpeg 848w, https://substackcdn.com/image/fetch/$s_!KKK-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5fdfbec-fea6-4357-a3c4-9c206de1236a_1200x1500.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!KKK-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5fdfbec-fea6-4357-a3c4-9c206de1236a_1200x1500.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!KKK-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5fdfbec-fea6-4357-a3c4-9c206de1236a_1200x1500.jpeg" width="1200" height="1500" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e5fdfbec-fea6-4357-a3c4-9c206de1236a_1200x1500.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1500,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:277327,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!KKK-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5fdfbec-fea6-4357-a3c4-9c206de1236a_1200x1500.jpeg 424w, https://substackcdn.com/image/fetch/$s_!KKK-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5fdfbec-fea6-4357-a3c4-9c206de1236a_1200x1500.jpeg 848w, https://substackcdn.com/image/fetch/$s_!KKK-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5fdfbec-fea6-4357-a3c4-9c206de1236a_1200x1500.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!KKK-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5fdfbec-fea6-4357-a3c4-9c206de1236a_1200x1500.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This minor version casually shipped:</p><ul><li><p>An entirely new caching architecture on Vercel</p></li><li><p>The accompanying <a href="https://nextjs.org/blog/next-13-2#nextjs-cache">Next.js Cache</a>, an evolution of <a href="https://beta.nextjs.org/docs/data-fetching/revalidating">ISR</a></p></li><li><p>Compatibility with Webpack loaders in Turbopack</p></li><li><p>Custom route handlers for the app directory</p></li><li><p>Statically typed links</p></li><li><p>And more, check the announcement link in the section heading&#8230;</p></li></ul><p>I would love to walk you through all of them as I&#8217;m really excited for a lot of these features, but it&#8217;s not the main point of the newsletter. I will link some great resources about the technical details after the score. Take a look if you are interested!</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.fullctx.dev/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 the Weekly Hype Report. 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><h4><strong>From the Full Context perspective</strong></h4><p>The improvements to the caching mechanisms in Next.js and Vercel will impact businesses significantly.</p><ul><li><p><strong>Improve customer experience</strong> by increasing the render performance of even dynamic, personalized or behind authentication pages. It was previously impossible to achieve similar levels of performance without custom solutions requiring much effort and capacity from development.</p></li><li><p>Further <strong>reduce infrastructure costs</strong>. The reason is that the fine grained caching enables us to move such SSR pages to ISR that was previously unsuited for this change. This can significantly reduce the number of server side operations and even 1st or 3rd party API calls resulting in less resource consumption and lower costs.</p></li><li><p>Speed up redeployment of sites with 1000&#8217;s of static pages since the page generation can use the existing cache <strong>improving delivery speed</strong>.</p></li><li><p><strong>Increasing the productivity</strong> of software engineers by speeding up local development. It&#8217;s less impactful than the previous points but still relevant.</p></li></ul><p>The <strong>Webpack &#8592;&#8594; Turbopack</strong> compatibility can enable moving additional projects to the new bundler. Turbopack&#8217;s main benefit is its speed, resulting in <strong>higher delivery performance</strong> for projects that bring along all the derived perks like a faster feedback loop and increased customer engagement with the product.</p><p><a href="https://beta.nextjs.org/docs/configuring/typescript#statically-typed-links">Statically typed links</a> can <strong>reduce the human error factor</strong> in creating dead links. In the worst case those links can totally destroy the user experience or even cause financial losses. (<em>Think, one dev messing up the signup link</em>)</p><h4>But there&#8217;s a catch again.</h4><p>All these features are in either Alfa or Beta status. So with that in mind I can&#8217;t recommend using them in mature, established products. It can probably be fine in newer, smaller products, I think about hipster geek startups or <em>indi hacker</em> projects.</p><p>I will sum up the rest of the stable and new stuff in v13.2 as a pack of <strong>productivity improvements</strong> that make common tasks more efficient and pleasant to get done.</p><p>Only scoring the stable functionality, the situation is a bit less impressive.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Y0Cl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68353a71-697a-4a85-9572-cbc524a21890_800x161.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Y0Cl!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68353a71-697a-4a85-9572-cbc524a21890_800x161.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Y0Cl!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68353a71-697a-4a85-9572-cbc524a21890_800x161.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Y0Cl!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68353a71-697a-4a85-9572-cbc524a21890_800x161.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Y0Cl!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68353a71-697a-4a85-9572-cbc524a21890_800x161.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Y0Cl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68353a71-697a-4a85-9572-cbc524a21890_800x161.jpeg" width="394" height="79.2925" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/68353a71-697a-4a85-9572-cbc524a21890_800x161.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:161,&quot;width&quot;:800,&quot;resizeWidth&quot;:394,&quot;bytes&quot;:47684,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Y0Cl!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68353a71-697a-4a85-9572-cbc524a21890_800x161.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Y0Cl!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68353a71-697a-4a85-9572-cbc524a21890_800x161.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Y0Cl!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68353a71-697a-4a85-9572-cbc524a21890_800x161.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Y0Cl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68353a71-697a-4a85-9572-cbc524a21890_800x161.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p><strong>Next.js v13.2 gets a 4 x 3 = 12 HV score on the Full Context Hype Value scale. With the non-stable features it would reach a 4 x 5 score which is massive!</strong></p><blockquote><p><em>I really love Vercel and Next.js from the Full Context perspective, most of their releases and strategic goals align well with solving real world pains using cutting edge technology. Keep it coming guys!</em></p></blockquote><h4>Resources:</h4><ul><li><p>Introduction to the caching architecture from Malte Ubl <a href="https://www.linkedin.com/feed/update/urn:li:activity:7034615686228320256/">here on LinkedIn</a></p></li><li><p>A neat tweet thread describing the significance of the Next.js cache</p></li></ul><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/sebmarkbage/status/1628845420121128965&quot;,&quot;full_text&quot;:&quot;Next.js Cache on Vercel changes the equation\n\nMany backends we have to talk to are slow. Even slower if they're far from the Edge POP. Many are frankly just unreliable. Static has been the key for making many consumer sites reliable and fast.\n\n&quot;,&quot;username&quot;:&quot;sebmarkbage&quot;,&quot;name&quot;:&quot;Sebastian Markb&#229;ge&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Thu Feb 23 19:53:05 +0000 2023&quot;,&quot;photos&quot;:[],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:36,&quot;like_count&quot;:275,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{&quot;url&quot;:&quot;https://vercel.com/blog/vercel-cache-api-nextjs-cache&quot;,&quot;image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f3368282-51be-421c-a131-fc59ae267367_843x441.png&quot;,&quot;title&quot;:&quot;Vercel Cache API: A progressive cache, integrated with Next.js &#8211; Vercel&quot;,&quot;description&quot;:&quot;Cache only part of your page as static data, while fully dynamically rendering the rest of your application, including accessing real-time and personalized data.&quot;,&quot;domain&quot;:&quot;vercel.com&quot;},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><ul><li><p>Another tweet thread about all the new features but I especially like this one about the Custom Route Handlers.</p></li></ul><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/FernandoPs26/status/1629009968606113795&quot;,&quot;full_text&quot;:&quot;2/7 - Custom Route Handlers &quot;,&quot;username&quot;:&quot;FernandoPs26&quot;,&quot;name&quot;:&quot;Fernando Palacios&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Fri Feb 24 06:46:56 +0000 2023&quot;,&quot;photos&quot;:[{&quot;img_url&quot;:&quot;https://pbs.substack.com/media/FptjotvWYAQfTHp.jpg&quot;,&quot;link_url&quot;:&quot;https://t.co/cqYprla8O9&quot;,&quot;alt_text&quot;:null}],&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><h3>#3 <a href="https://github.com/BuilderIO/mitosis">Mitosis</a>, <a href="https://zagjs.com/">Zag</a>, <a href="https://github.com/TanStack/bling">Bling</a> &#128506;&#65039; - Clues about the new frontiers of frontend development</h3><p>These technologies made an appearance on the sidelines in recent weeks. There&#8217;s one thing in common between these tools, they are all built to abstract away the differences between frontend frameworks. </p><p>The promise of <strong>Mitosis</strong> is that if you write your components using its syntax it can transform them into components of any of the supported frameworks. And that&#8217;s a really long list.</p><p><strong>Zag</strong> tackles a different aspect of cross framework FE development, <em>component-logic</em>. Meaning state definition and manipulation. A simple example is controlling the state of a checkbox or really any value displayed in a component.</p><p>But this reminds me of something &#129300; &#8230; standards?</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0la3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a37ab1c-22e2-4cc8-8013-6e0b396bb689_664x376.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0la3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a37ab1c-22e2-4cc8-8013-6e0b396bb689_664x376.jpeg 424w, https://substackcdn.com/image/fetch/$s_!0la3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a37ab1c-22e2-4cc8-8013-6e0b396bb689_664x376.jpeg 848w, https://substackcdn.com/image/fetch/$s_!0la3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a37ab1c-22e2-4cc8-8013-6e0b396bb689_664x376.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!0la3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a37ab1c-22e2-4cc8-8013-6e0b396bb689_664x376.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0la3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a37ab1c-22e2-4cc8-8013-6e0b396bb689_664x376.jpeg" width="664" height="376" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2a37ab1c-22e2-4cc8-8013-6e0b396bb689_664x376.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:376,&quot;width&quot;:664,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:120092,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!0la3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a37ab1c-22e2-4cc8-8013-6e0b396bb689_664x376.jpeg 424w, https://substackcdn.com/image/fetch/$s_!0la3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a37ab1c-22e2-4cc8-8013-6e0b396bb689_664x376.jpeg 848w, https://substackcdn.com/image/fetch/$s_!0la3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a37ab1c-22e2-4cc8-8013-6e0b396bb689_664x376.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!0la3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a37ab1c-22e2-4cc8-8013-6e0b396bb689_664x376.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Mitosis and Zag authors be like</figcaption></figure></div><p><em>(Even though Mitosis authors <a href="https://github.com/BuilderIO/mitosis#what-about-xkcd">disagree</a> there are situations when it can simply become one more tool on top of those already in-use)</em></p><p><strong>TanStack/Bling</strong> defines itself as:</p><blockquote><p><em>Framework agnostic transpilation utilities for client/server RPCs, env isolation, islands, module splitting, and more</em></p></blockquote><p>Which honestly is a bit hard to wrap my head around. The best lead I found is in the authors&#8217; description of the upcoming TanStack Start library:</p><blockquote><p><em>Type-safe, SSR-friendly meta-framework for building modern React &amp; Preact applications, powered by TanStack Router, Astro &amp; Bling.</em></p></blockquote><p>Sounds like the Webpack of the future. The reason I&#8217;m really interested in this project is the recent emergence of the new <a href="https://www.builder.io/blog/module-extraction-the-silent-web-revolution">silent revolution of web development</a> which centers around module extraction by build tools. </p><p>It&#8217;s interesting to notice that this article is also coming from Builder.io. All of these new ideas are coming together. Multiple vendors we already touched in this volume are involved. Remix, Astro, TanStack, NullStack, Electric Clojure, and a lot of tools that are coming from Builder.io like the Qwik framework and Mitosis. All the goals these frameworks and tools progress towards are converging and defining the next frontier of frontend development for the coming 2 - 3 years. </p><ol><li><p><strong>Bridging the network gap</strong>, by unifying/colocating server and client code enabled by <a href="https://twitter.com/mhevery/status/1630413505903087617">module/function/clojure extraction</a> behind the scenes or by a purpose built programming language. And Qwik has <a href="https://www.builder.io/blog/wtf-is-code-extraction">also joined the fight</a>.</p></li><li><p><strong>Removing hydration and reducing JS payload</strong> as much as possible with resumability (Qwik), super fine grained caching (Next), islands architecture (Astro), Server Components (React) or any other means.</p></li><li><p><strong>Abstracting away the FE framework level</strong> from component development like what Astro, Mitosis or Zag are attempting.</p></li><li><p><strong>Speeding up or <a href="https://deno.com/blog/you-dont-need-a-build-step#non-building-with-deno-and-fresh">entirely eliminating</a> </strong><em><strong>(Deno + Fesh)</strong></em><strong> the build processes</strong>. It&#8217;s something I only covered in previous volumes.</p></li></ol><p>These are all very interesting trends </p><h4><strong>From the Full Context Perspective</strong></h4><p>Abstractions over FE frameworks can make life significantly better for:</p><ol><li><p>Multi-framework design system maintainers</p></li><li><p>Micro frontend teams using diverse stacks but a single design system</p></li><li><p>Web SDK developers who ship components for multiple frameworks</p></li><li><p><em>Builder.io employees </em>&#128521;</p></li></ol><p>In these use cases <strong>Mitosis </strong>and <strong>Zag </strong>will influence Productivity, Customer Experience, Utilization and even Business Opportunities heavily. These have so many implications it&#8217;s best if you check them out yourself on the <a href="https://www.fullcontextdevelopment.com/code-to-money-roadmap#business-impact">Business Impact chart</a>. For the rest of us, these are just interesting but irrelevant technologies. And I will go with the most common case for the results here.</p><p><em>I will leave out Bling and the related tools from this scoring.</em></p><p><strong>Mitosis and Zag get a 3 x 2 = 6 HV score on the Full Context Hype Value scale. But for the right teams it can be a 3 x 5 score!</strong></p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ovZJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50f5ce96-acfd-4c62-838d-e62e98b9a852_800x158.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ovZJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50f5ce96-acfd-4c62-838d-e62e98b9a852_800x158.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ovZJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50f5ce96-acfd-4c62-838d-e62e98b9a852_800x158.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ovZJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50f5ce96-acfd-4c62-838d-e62e98b9a852_800x158.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ovZJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50f5ce96-acfd-4c62-838d-e62e98b9a852_800x158.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ovZJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50f5ce96-acfd-4c62-838d-e62e98b9a852_800x158.jpeg" width="396" height="78.21" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/50f5ce96-acfd-4c62-838d-e62e98b9a852_800x158.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:158,&quot;width&quot;:800,&quot;resizeWidth&quot;:396,&quot;bytes&quot;:43932,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ovZJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50f5ce96-acfd-4c62-838d-e62e98b9a852_800x158.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ovZJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50f5ce96-acfd-4c62-838d-e62e98b9a852_800x158.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ovZJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50f5ce96-acfd-4c62-838d-e62e98b9a852_800x158.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ovZJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50f5ce96-acfd-4c62-838d-e62e98b9a852_800x158.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h3>Short news</h3><p>These are all technical news that can or has the potential to make a positive impact for certain projects.</p><ul><li><p>Evan Bacon showcases how <a href="https://twitter.com/Baconbrix/status/1629909713910480898?ck_subscriber_id=2064424641">React Server Components can be used in React Native</a> through Expo.</p></li><li><p>Marko <a href="https://twitter.com/MarkoDevTeam/status/1629248515930030083?t=0tSxRfxrBcEMW8zvGWS9xw&amp;s=19">shipped TypeScript support</a></p></li><li><p>Ryan Carniato gets <a href="https://twitter.com/RyanCarniato/status/1616119679977947137?t=8PI5Ocr8Tnr0YxbSbRhqCw&amp;s=19">Solid.js components work inside React</a> in his livestream</p></li><li><p>Jack Harrington is still riding the wave of the Signals hype with quite a &#8220;solid&#8221; video about <a href="https://www.youtube.com/watch?v=ZLMjJL70glE&amp;t=8s">how to use them in Qwick, React and Solid</a>. <strong>3 x 3 Jack</strong>!</p></li></ul><h3>Outro</h3><p><strong>I&#8217;m super happy</strong> that you read (<em>or scrolled </em>) till the end! I feel speechless that people actually do that! If you enjoyed the article and/or found it valuable please consider sharing it with your friends and colleagues.</p><p>I&#8217;m at a very early stage of building this Substack publication so even the smallest extra visibility can make a huge difference. My wholehearted thanks if you help with that!<br><br>See you in the next one! - <em>Which will definitely be much smaller in scope but at least this good or even better in quality. I spend like 20 hours working on this in the late evenings and early mornings this week.</em><br><br>Joe <a href="https://twitter.com/fullctxdev">@fullctxdev</a></p>]]></content:encoded></item><item><title><![CDATA[What this "Full Context" stuff is all about?]]></title><description><![CDATA[A simple explanation of the core concept and mission of my work]]></description><link>https://www.fullctx.dev/p/what-this-full-context-stuff-is-about</link><guid isPermaLink="false">https://www.fullctx.dev/p/what-this-full-context-stuff-is-about</guid><dc:creator><![CDATA[Jozsef Miskolczy]]></dc:creator><pubDate>Tue, 28 Feb 2023 23:17:51 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Dq9c!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ffcf45a-aa51-49eb-9d18-24f1516114c1_1600x900.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Dq9c!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ffcf45a-aa51-49eb-9d18-24f1516114c1_1600x900.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Dq9c!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ffcf45a-aa51-49eb-9d18-24f1516114c1_1600x900.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Dq9c!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ffcf45a-aa51-49eb-9d18-24f1516114c1_1600x900.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Dq9c!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ffcf45a-aa51-49eb-9d18-24f1516114c1_1600x900.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Dq9c!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ffcf45a-aa51-49eb-9d18-24f1516114c1_1600x900.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Dq9c!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ffcf45a-aa51-49eb-9d18-24f1516114c1_1600x900.jpeg" width="1200" height="675" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9ffcf45a-aa51-49eb-9d18-24f1516114c1_1600x900.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:167791,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-large" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Dq9c!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ffcf45a-aa51-49eb-9d18-24f1516114c1_1600x900.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Dq9c!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ffcf45a-aa51-49eb-9d18-24f1516114c1_1600x900.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Dq9c!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ffcf45a-aa51-49eb-9d18-24f1516114c1_1600x900.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Dq9c!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ffcf45a-aa51-49eb-9d18-24f1516114c1_1600x900.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Hey Full Context Developer,</h3><p>Maybe you are new around here, or perhaps you already read some of my previous posts yet still wonder what exactly "Full Context Development&#8221; means. Regardless of how long you have been following along, this post will serve as a simple introduction to what this is all about, my vision and mission for this newsletter and how all this can improve your life. Let&#8217;s start with the core question.</p><h4>What is Full Context Development?</h4><p>It&#8217;s two things:</p><ul><li><p><strong>A mindset</strong> - a specific way of looking at role of a software engineer</p></li><li><p><strong>A toolset</strong> - a system that helps you to analyze the impact of technical decisions using that mindset</p></li></ul><p>I came up with them while working on my <a href="https://fullcontextdevelopment.com/">online book</a> of the same name. These are what I use to analyze the tech tools, form my opinions and hopefully provide more objective, valuable insights that go beyond the hype. You can read more about them a few paragraphs later. (<em>After the sign up CTA</em>)</p><h4>What about this newsletter?</h4><p>I love programming, I love to lose myself in discovering interesting, new tools and approaches to development that push the boundaries of what technology can achieve today. But&#8230;</p><p>I also see that there are huge financial incentives in the industry to hype up the tech we create. Open source technologies are no exception nor tech content creators who stream, teach, write about or promote these. <em>(Quite hypocritically it holds true for me just as well)</em></p><p>As a former lead frontend developer I had to learn how to look at all my decisions with the perspective of serving the customers and solving real, human problems. I tried to document and refine that perspective in my book and after its financial failure (<em>and recovering from it to some extent</em>) I decided to share what I learned in a much more interesting and engaging format. (<em>Yes, that book is boring as hell</em>)</p><p>With this newsletter I want to go against the mainstream tech hype and sound another voice, show another perspective, one that takes a more objective approach, focusing on <em>if and how</em> all the new stuff can be used to solve or even to eliminate real human problems. </p><p>I want to provide you with a weekly collection of short overviews about the trending tools or other material I report on with this focus. All that so you can:</p><ul><li><p>&#128293; Have fun while I burn those who baselessly hype things up</p></li><li><p>&#129517; Learn how to make better, impact focused technical decisions </p></li></ul><p>My hope and <strong>mission</strong> is to enable every programmer to enjoy the hype, <em>which is quite enjoyable for sure</em>, without succumbing to fake promises, overblown significance or dead end decisions by teaching you the Full Context way of evaluating tech stuff. So basically I want to be the <em>tie &amp; mast</em>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!JjIL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f43282a-c976-4414-befa-bde892f98ffa_630x420.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JjIL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f43282a-c976-4414-befa-bde892f98ffa_630x420.jpeg 424w, https://substackcdn.com/image/fetch/$s_!JjIL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f43282a-c976-4414-befa-bde892f98ffa_630x420.jpeg 848w, https://substackcdn.com/image/fetch/$s_!JjIL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f43282a-c976-4414-befa-bde892f98ffa_630x420.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!JjIL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f43282a-c976-4414-befa-bde892f98ffa_630x420.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!JjIL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f43282a-c976-4414-befa-bde892f98ffa_630x420.jpeg" width="630" height="420" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9f43282a-c976-4414-befa-bde892f98ffa_630x420.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:420,&quot;width&quot;:630,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:101682,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!JjIL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f43282a-c976-4414-befa-bde892f98ffa_630x420.jpeg 424w, https://substackcdn.com/image/fetch/$s_!JjIL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f43282a-c976-4414-befa-bde892f98ffa_630x420.jpeg 848w, https://substackcdn.com/image/fetch/$s_!JjIL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f43282a-c976-4414-befa-bde892f98ffa_630x420.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!JjIL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9f43282a-c976-4414-befa-bde892f98ffa_630x420.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h4>But I also have a much larger vision</h4><p>Which sounds quite impossible or just waaay too ambitious. But that&#8217;s how a vision should be. It makes me feel uncomfortably vulnerable to share this as who knows how much of it will I manage to realize, if any, but.</p><blockquote><p><strong>I want to teach every programmer how to make the best tech decisions possible. </strong></p></blockquote><p>So many software engineers are asking for advice all the time: <em>What&#8217;s the best tool to use? What&#8217;s the best approach to take?</em> I want to create an easy to follow and practical guideline for everyone to answer those questions in their given context. I wish that the Full Context system would be the perfect tool for that, but it certainly isn&#8217;t, <em>hopefully </em>just not yet.</p><p>I have been working in this field for nearly 9 years but my experience is still lacking to really pull this off. I don&#8217;t know a lot about making the best tech decisions. But I will continue on the road to get there. I will learn in the public and I hope to learn from you as well. Please share your ideas and insights with me. Am I wrong? <em>Tweet me</em>. Am I missing something? <em>Drop a comment down below. </em>Do you know of a better way? <em>Message me on LinkedIn</em>! </p><p>Together, I'm convinced, it's possible to build the future where every programmer has a tool that makes <em><strong>making the best tech decisions</strong></em> easy.</p><p>This newsletter is a small step towards that goal. Sadly this step is all I can take right now as a full time employee, husband and father of two adorable little girls. <em>(Even now as I&#8217;m writing this the clock is at 2:59 AM)</em> </p><p><strong>But I&#8217;m sure if this is the right thing to aim for a road will open up. And I can&#8217;t wait to see what that will be!</strong></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.fullctx.dev/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 these ideas that are so precious to me! If you want to follow how this journey will continue or support me on it, please subscribe to my newsletter.</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><h4>Now that the inspirational stuff is over we can get back to the original topic. What that mentality and toolkit really is about.</h4><p>I hope everything that follows won&#8217;t be a prerequisite to enjoying the newsletter but knowing about the main concepts will definitely help to get the most out of it. So let&#8217;s cut the chase and go straight to the heart of it:</p><blockquote><p><em>The meaning of Full Context Development is to take responsibility for every effect of the tech choices we make.</em></p></blockquote><p>This stems from my view about the <a href="https://www.fullcontextdevelopment.com/book/chapter-1#b15e49300e2e492884169bd04e1e286b">real job of a developer</a>. Here&#8217;s a part of my summary from the book:</p><div class="pullquote"><p>Software, in its essence, is a solution to human problems. First is the problem of the user, the reason why they need a product. The second is the problem of the business, a means to achieve their mission. The third is the problem of the developer, their love for the profession and need for a living. Accordingly, we have 3 jobs, to solve the user's problems and sustain the business all the while taking care of our own needs.</p></div><p>And we can do that best when we know and think about all the effects of our decisions, even those that go beyond code or software. That&#8217;s what I call the Full Context <strong>mindset</strong>. </p><blockquote><p><em>The Full Context <strong>system</strong> is a way that helps you to do exactly that in a well defined manner, while hiding entire layers of business complexity from you.</em></p></blockquote><p>These will help you to put your everyday decisions into the full context of your job. The result should be better alignment with the real goals of the products we create and the companies we work for. Or your own company. Or your clients&#8217; companies. In turn it will increase your impact and boost your chances of career progression.</p><p>The most compact description of that system is in <a href="https://www.fullcontextdevelopment.com/blog/next-full-context-review#review">this part</a> of my Next.js review. Take a look if you have the drive to dig into more details.</p><p>In short, and without much explanation the Full Context system maps how the 5 Impact Factors (<a href="https://www.fullcontextdevelopment.com/book/chapter-2#658c459131154aa682fa637120e0db8f">CPU-DB</a>) are connected to the 4 Pillars of Business Value (<a href="https://www.fullcontextdevelopment.com/book/chapter-2#781793afc6554a7cbce22ef6e4564e9e">RIP-CAR</a>) and gives you a method to roughly quantify a tech decision&#8217;s impact on them using Impact Points. (<em>See in the first link</em>). </p><p>However for the newsletter I replaced the usage of Impact Points with <strong>Impact Categories</strong>. I believe the point system is too abstract to easily grasp the scale it represents so I came up with a simplified version.</p><p>The ultimate goal is still the same, I want to show you how the ideas or <em>(mainly frontend)</em> tools &amp;&nbsp;technologies can influence business results (<em>read: profit</em>). The 5 key areas that connect tech to the bottom line are unchanged: <em><strong>CPU-DB</strong></em>. But now I&#8217;m using the following categories to show the scale of influence across these 5 dimensions:</p><ul><li><p><strong>Unit</strong> - An elementary part: a person, a single metric, a user</p></li><li><p><strong>Group</strong> - A group of units: a team, a user type / persona, a quarterly target</p></li><li><p><strong>Organization</strong> - Groups working together for common goals: a department, a user group, a market segment, strategic goals</p></li><li><p><strong>System</strong> - The whole of the related dimension: the whole market, the whole company, the whole budget, every user in the customer lifecycle, every developer</p></li></ul><p>This is just to give you a rough idea. I want to add further details in a dedicated post.</p><p>I also have an interactive tool to visualize these connections at the <a href="https://www.fullcontextdevelopment.com/code-to-money-roadmap#business-impact">very end of the Code to Money roadmap</a>.</p><blockquote><p><em><strong>To put it simply, Full Context Developer === Gigachad Software Engineer</strong></em></p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!LuSk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc3d6421-9cab-43da-8527-069e9c16e3b7_500x562.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!LuSk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc3d6421-9cab-43da-8527-069e9c16e3b7_500x562.jpeg 424w, https://substackcdn.com/image/fetch/$s_!LuSk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc3d6421-9cab-43da-8527-069e9c16e3b7_500x562.jpeg 848w, https://substackcdn.com/image/fetch/$s_!LuSk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc3d6421-9cab-43da-8527-069e9c16e3b7_500x562.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!LuSk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc3d6421-9cab-43da-8527-069e9c16e3b7_500x562.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!LuSk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc3d6421-9cab-43da-8527-069e9c16e3b7_500x562.jpeg" width="500" height="562" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cc3d6421-9cab-43da-8527-069e9c16e3b7_500x562.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:562,&quot;width&quot;:500,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:98315,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!LuSk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc3d6421-9cab-43da-8527-069e9c16e3b7_500x562.jpeg 424w, https://substackcdn.com/image/fetch/$s_!LuSk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc3d6421-9cab-43da-8527-069e9c16e3b7_500x562.jpeg 848w, https://substackcdn.com/image/fetch/$s_!LuSk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc3d6421-9cab-43da-8527-069e9c16e3b7_500x562.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!LuSk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc3d6421-9cab-43da-8527-069e9c16e3b7_500x562.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h4>In conclusion</h4><p>I hope I answered more questions than those I created with this post. If you still have some and care to ask, feel free to reach out here in the comments, or <a href="https://twitter.com/fullctxdev">Twitter</a>, or <a href="https://www.linkedin.com/in/jozsef-miskolczy/">LinkedIn</a>. That would make my day! You can even&#8230;</p><div class="community-chat" data-attrs="{&quot;url&quot;:&quot;https://open.substack.com/pub/fullctxdev/chat?utm_source=chat_embed&quot;,&quot;subdomain&quot;:&quot;fullctxdev&quot;,&quot;pub&quot;:{&quot;id&quot;:1199161,&quot;name&quot;:&quot;Full Context Development&quot;,&quot;author_name&quot;:&quot;J&#243;zsef Miskoczy&quot;,&quot;author_photo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F38a3ef28-6b88-475b-9663-db963b606603_474x474.jpeg&quot;}}" data-component-name="CommunityChatRenderPlaceholder"></div><p><strong>I&#8217;m super happy</strong> that you read (<em>or scrolled </em>) till the end! I feel speechless that people actually do that! If you enjoyed this post and/or found it valuable please consider sharing it with your friends and colleagues.</p><p>I&#8217;m at a very early stage of building this Substack publication so even the smallest extra visibility can make a huge difference. My wholehearted thanks if you help with that!<br><br>See you in the next one!<br>Joe <a href="https://twitter.com/fullctxdev">@fullctxdev</a></p><p></p><p></p><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[Weekly Tech Hype #3 - Next vs Astro perf, Signals for web frameworks, Node.js runtimes in browser, Shopify's Hydrogen uses Remix]]></title><description><![CDATA[The hype vs impact review of this week's hot news]]></description><link>https://www.fullctx.dev/p/weekly-tech-hype-3-next-vs-astro</link><guid isPermaLink="false">https://www.fullctx.dev/p/weekly-tech-hype-3-next-vs-astro</guid><dc:creator><![CDATA[Jozsef Miskolczy]]></dc:creator><pubDate>Fri, 24 Feb 2023 23:56:49 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!S9wP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5a8c4f5-f038-4238-b82c-ff09b290bd5a_1600x900.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!S9wP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5a8c4f5-f038-4238-b82c-ff09b290bd5a_1600x900.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!S9wP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5a8c4f5-f038-4238-b82c-ff09b290bd5a_1600x900.jpeg 424w, https://substackcdn.com/image/fetch/$s_!S9wP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5a8c4f5-f038-4238-b82c-ff09b290bd5a_1600x900.jpeg 848w, https://substackcdn.com/image/fetch/$s_!S9wP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5a8c4f5-f038-4238-b82c-ff09b290bd5a_1600x900.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!S9wP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5a8c4f5-f038-4238-b82c-ff09b290bd5a_1600x900.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!S9wP!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5a8c4f5-f038-4238-b82c-ff09b290bd5a_1600x900.jpeg" width="1200" height="675" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b5a8c4f5-f038-4238-b82c-ff09b290bd5a_1600x900.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:257976,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-large" alt="" srcset="https://substackcdn.com/image/fetch/$s_!S9wP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5a8c4f5-f038-4238-b82c-ff09b290bd5a_1600x900.jpeg 424w, https://substackcdn.com/image/fetch/$s_!S9wP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5a8c4f5-f038-4238-b82c-ff09b290bd5a_1600x900.jpeg 848w, https://substackcdn.com/image/fetch/$s_!S9wP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5a8c4f5-f038-4238-b82c-ff09b290bd5a_1600x900.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!S9wP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5a8c4f5-f038-4238-b82c-ff09b290bd5a_1600x900.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Hey Full Context Developer,</h3><p>I&#8217;m back for a quick overview of the recent FE tech news using our own perspective to fight the hype. Let&#8217;s find out what happened this week that can make a difference for the projects we work on, for our users and us software engineers.</p><p><em>The headings are links to the covered topic</em></p><h3><a href="https://www.youtube.com/watch?v=wzRSYQ3b-Mk">#1 Next.js 13 vs Next.js 12 vs Astro 2 performance test</a></h3><p>A video by <em>Jack Herrington </em>(heading is a link)<em> </em>comparing the speed of the same web apps implemented in all 3 frameworks/versions. It got lots of love from the community and I also enjoyed it so please Jack no hard feelings but:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!qe0l!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63216289-1035-48f2-850b-8702fa2fbb22_500x575.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qe0l!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63216289-1035-48f2-850b-8702fa2fbb22_500x575.jpeg 424w, https://substackcdn.com/image/fetch/$s_!qe0l!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63216289-1035-48f2-850b-8702fa2fbb22_500x575.jpeg 848w, https://substackcdn.com/image/fetch/$s_!qe0l!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63216289-1035-48f2-850b-8702fa2fbb22_500x575.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!qe0l!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63216289-1035-48f2-850b-8702fa2fbb22_500x575.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!qe0l!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63216289-1035-48f2-850b-8702fa2fbb22_500x575.jpeg" width="500" height="575" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/63216289-1035-48f2-850b-8702fa2fbb22_500x575.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:575,&quot;width&quot;:500,&quot;resizeWidth&quot;:500,&quot;bytes&quot;:88026,&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_!qe0l!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63216289-1035-48f2-850b-8702fa2fbb22_500x575.jpeg 424w, https://substackcdn.com/image/fetch/$s_!qe0l!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63216289-1035-48f2-850b-8702fa2fbb22_500x575.jpeg 848w, https://substackcdn.com/image/fetch/$s_!qe0l!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63216289-1035-48f2-850b-8702fa2fbb22_500x575.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!qe0l!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63216289-1035-48f2-850b-8702fa2fbb22_500x575.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><p>It has it all:</p><ul><li><p>Hot topic of the day FE tools &#9989;</p></li><li><p>Everyone&#8217;s favorite obsession: Performance &#9989;</p></li><li><p>Battle of technologies with a possible clear winner triggering tribal instincts &#9989; <em>(I know the conclusions were balanced)</em></p></li><li><p>It only missed the celebrity component. &#10060;<br>Like Dan Abramov implementing the Next v13 version sharing behind the scenes info about the future of RSCs. </p></li></ul><p>The 100k views wouldn&#8217;t have been out of reach. Keep it up Jack! - In all honesty it was a really well done comparison. But&#8230;</p><p><strong>From the Full Context Perspective</strong></p><p>The video compares the TTI and the supporting/correlating info about the size of transferred data. While TTI is a factor in <a href="https://www.fullcontextdevelopment.com/book/chapter-6#f282191e67a44bfc9eb66e9f596b6719">achieving a good Customer Experience</a> (<em>link from my book on how tech and CX are related to business outcomes</em>) but it&#8217;s far from the only or the most significant component of it. </p><p>I will be strict, the video as a whole has no added value to increase the impact of the products we are working on. </p><p>In smaller products it&#8217;s unlikely that the shown level of difference in TTI will create a bottleneck while developers on huge projects wouldn&#8217;t rely on the default output of these frameworks. These small app measurements are sadly irrelevant for that case,</p><blockquote><p><em>That&#8217;s why Jack&#8217;s advice at the end is absolutely correct, do your own measurements for your own situation. </em></p></blockquote><p>But then what&#8217;s the value we can take away from this comparison?</p><p><strong>The performance comparison gets a 4 / 10 HV score.</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fXN1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb234d237-12d1-4095-8a40-eb5c0c01b4bd_1600x900.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fXN1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb234d237-12d1-4095-8a40-eb5c0c01b4bd_1600x900.png 424w, https://substackcdn.com/image/fetch/$s_!fXN1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb234d237-12d1-4095-8a40-eb5c0c01b4bd_1600x900.png 848w, https://substackcdn.com/image/fetch/$s_!fXN1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb234d237-12d1-4095-8a40-eb5c0c01b4bd_1600x900.png 1272w, https://substackcdn.com/image/fetch/$s_!fXN1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb234d237-12d1-4095-8a40-eb5c0c01b4bd_1600x900.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!fXN1!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb234d237-12d1-4095-8a40-eb5c0c01b4bd_1600x900.png" width="1200" height="675" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b234d237-12d1-4095-8a40-eb5c0c01b4bd_1600x900.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:147311,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-large" alt="" srcset="https://substackcdn.com/image/fetch/$s_!fXN1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb234d237-12d1-4095-8a40-eb5c0c01b4bd_1600x900.png 424w, https://substackcdn.com/image/fetch/$s_!fXN1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb234d237-12d1-4095-8a40-eb5c0c01b4bd_1600x900.png 848w, https://substackcdn.com/image/fetch/$s_!fXN1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb234d237-12d1-4095-8a40-eb5c0c01b4bd_1600x900.png 1272w, https://substackcdn.com/image/fetch/$s_!fXN1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb234d237-12d1-4095-8a40-eb5c0c01b4bd_1600x900.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><h3><a href="https://www.builder.io/blog/usesignal-is-the-future-of-web-frameworks">#2 Signals</a>, <a href="https://twitter.com/sarah_edo/status/1628065696247857152">Signals</a>, <a href="https://twitter.com/acdlite/status/1626590880126889984">everywhere</a></h3><p><a href="https://twitter.com/mhevery">Misko Hevery</a> (<em>author of Angular.js and Qwik</em>) released a very interesting, deeply technical article about <code>signals</code> as reactivity primitives in modern FE frameworks. At the same time <a href="https://twitter.com/sarah_edo">Sarah Drasner</a> announced that Angular will introduce the use of <code>signals</code>. <a href="https://twitter.com/acdlite">Andrew Clark</a> teased the idea that React might add them as a compiler target, or a low level API for library authors.</p><p>Signals are not a new concept, <a href="https://vuejs.org/">Vue</a>, <a href="https://preactjs.com/">Preact</a>, <a href="https://www.solidjs.com/">Solid</a>, and <a href="https://qwik.builder.io/">Qwik</a> all use them, it even existed in <a href="https://knockoutjs.com/">Knockout</a>. But recent implementations improve on the DX side significantly. </p><p>This is the type of news that I really appreciate. It shows us how to achieve a goal more effectively through a technical tool, -<em> reactive state updates with high rendering performance </em>- while also creating just enough hype to raise attention. </p><p><strong>From the Full Context Perspective</strong></p><p>This can be a couple hundred <a href="https://www.fullcontextdevelopment.com/blog/next-full-context-review#review">Impact Point</a> worth of <a href="https://www.fullcontextdevelopment.com/book/chapter-3#492aef240b5a46f188c2d6a8bfb69b0d">Productivity</a> improvement depending on the circumstances that can manifest in a visible value increase. </p><p><strong>The signal technology gets a 8 / 10 HV score.</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jgq5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ec8e192-eadb-421c-b644-97f61fca2c8d_1600x900.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jgq5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ec8e192-eadb-421c-b644-97f61fca2c8d_1600x900.png 424w, https://substackcdn.com/image/fetch/$s_!jgq5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ec8e192-eadb-421c-b644-97f61fca2c8d_1600x900.png 848w, https://substackcdn.com/image/fetch/$s_!jgq5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ec8e192-eadb-421c-b644-97f61fca2c8d_1600x900.png 1272w, https://substackcdn.com/image/fetch/$s_!jgq5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ec8e192-eadb-421c-b644-97f61fca2c8d_1600x900.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jgq5!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ec8e192-eadb-421c-b644-97f61fca2c8d_1600x900.png" width="1200" height="675" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4ec8e192-eadb-421c-b644-97f61fca2c8d_1600x900.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:150154,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-large" alt="" srcset="https://substackcdn.com/image/fetch/$s_!jgq5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ec8e192-eadb-421c-b644-97f61fca2c8d_1600x900.png 424w, https://substackcdn.com/image/fetch/$s_!jgq5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ec8e192-eadb-421c-b644-97f61fca2c8d_1600x900.png 848w, https://substackcdn.com/image/fetch/$s_!jgq5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ec8e192-eadb-421c-b644-97f61fca2c8d_1600x900.png 1272w, https://substackcdn.com/image/fetch/$s_!jgq5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ec8e192-eadb-421c-b644-97f61fca2c8d_1600x900.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><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.fullctx.dev/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 Full Context Development! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><h3><a href="https://blog.stackblitz.com/posts/webcontainer-api-is-here/">#3 Node.js runtimes</a>, <a href="https://codesandbox.io/blog/announcing-sandpack-2">in the browser</a></h3><p>CodeSandbox and StackBlitz both announced the next version of their in-browser Node.js implementation, respectively Sandpack 2.0 and the WebContainers API. Here&#8217;s a summary of both:</p><h4>WebContainers</h4><blockquote><p><em>WebContainers are a micro-operating system based on WebAssembly designed to allow spinning up Node.js servers locally inside a browser tab</em></p></blockquote><h4>SandPack</h4><blockquote><p><em>Sandpack 2.0 introduces Nodebox, a new technology that implements its very own abstraction of Node.js in-browser. Nodebox brings a new set of possibilities allowing Sandpack to run almost any JavaScript application you can imagine in any browser.</em></p></blockquote><p>These are cool things, but their use-cases are limited. They can mostly be used to create&#8230; <em><strong>cool things</strong></em>. Web IDEs, interactive coding tutorials, no-code/low-code environments or to compile and run Next.js, Vite and Astro projects completely client side.</p><p>These are legitimate technology advancements, totally newsworthy and congratulations to everyone who pulled it off, it&#8217;s tremendous work!</p><p><strong>From the Full Context Perspective</strong></p><p>This is the stuff that manifests the purest form of <a href="https://www.fullcontextdevelopment.com/book/chapter-3#755ae305b28b4848b6b919b3d8238b8c">Business Opportunity</a>. An innovation that creates new markets, that enables the creation of products previously impossible to build. The thing is, if the product you are working on belongs to a different category, the effect of these innovations on your life and on the business&#8217; is 0.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!36p4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47cbd09b-fc50-4015-ae0b-9854e4add6fb_666x374.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!36p4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47cbd09b-fc50-4015-ae0b-9854e4add6fb_666x374.jpeg 424w, https://substackcdn.com/image/fetch/$s_!36p4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47cbd09b-fc50-4015-ae0b-9854e4add6fb_666x374.jpeg 848w, https://substackcdn.com/image/fetch/$s_!36p4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47cbd09b-fc50-4015-ae0b-9854e4add6fb_666x374.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!36p4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47cbd09b-fc50-4015-ae0b-9854e4add6fb_666x374.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!36p4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47cbd09b-fc50-4015-ae0b-9854e4add6fb_666x374.jpeg" width="666" height="374" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/47cbd09b-fc50-4015-ae0b-9854e4add6fb_666x374.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:374,&quot;width&quot;:666,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:57391,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!36p4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47cbd09b-fc50-4015-ae0b-9854e4add6fb_666x374.jpeg 424w, https://substackcdn.com/image/fetch/$s_!36p4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47cbd09b-fc50-4015-ae0b-9854e4add6fb_666x374.jpeg 848w, https://substackcdn.com/image/fetch/$s_!36p4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47cbd09b-fc50-4015-ae0b-9854e4add6fb_666x374.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!36p4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47cbd09b-fc50-4015-ae0b-9854e4add6fb_666x374.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">For those who want to create these kinds of products</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!FwjZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5da160a-7f35-4ef7-9209-140b801976e1_500x814.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!FwjZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5da160a-7f35-4ef7-9209-140b801976e1_500x814.jpeg 424w, https://substackcdn.com/image/fetch/$s_!FwjZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5da160a-7f35-4ef7-9209-140b801976e1_500x814.jpeg 848w, https://substackcdn.com/image/fetch/$s_!FwjZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5da160a-7f35-4ef7-9209-140b801976e1_500x814.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!FwjZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5da160a-7f35-4ef7-9209-140b801976e1_500x814.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!FwjZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5da160a-7f35-4ef7-9209-140b801976e1_500x814.jpeg" width="500" height="814" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e5da160a-7f35-4ef7-9209-140b801976e1_500x814.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:814,&quot;width&quot;:500,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:93262,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!FwjZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5da160a-7f35-4ef7-9209-140b801976e1_500x814.jpeg 424w, https://substackcdn.com/image/fetch/$s_!FwjZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5da160a-7f35-4ef7-9209-140b801976e1_500x814.jpeg 848w, https://substackcdn.com/image/fetch/$s_!FwjZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5da160a-7f35-4ef7-9209-140b801976e1_500x814.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!FwjZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5da160a-7f35-4ef7-9209-140b801976e1_500x814.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">For the rest of us</figcaption></figure></div><p><strong>The Node.js in-browser tech gets a 7 / 10 HV score.</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!GD_1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e7e9333-a6c4-40b4-abd9-c1e2eef98172_1600x900.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GD_1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e7e9333-a6c4-40b4-abd9-c1e2eef98172_1600x900.png 424w, https://substackcdn.com/image/fetch/$s_!GD_1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e7e9333-a6c4-40b4-abd9-c1e2eef98172_1600x900.png 848w, https://substackcdn.com/image/fetch/$s_!GD_1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e7e9333-a6c4-40b4-abd9-c1e2eef98172_1600x900.png 1272w, https://substackcdn.com/image/fetch/$s_!GD_1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e7e9333-a6c4-40b4-abd9-c1e2eef98172_1600x900.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!GD_1!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e7e9333-a6c4-40b4-abd9-c1e2eef98172_1600x900.png" width="1200" height="675" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2e7e9333-a6c4-40b4-abd9-c1e2eef98172_1600x900.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:150317,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-large" alt="" srcset="https://substackcdn.com/image/fetch/$s_!GD_1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e7e9333-a6c4-40b4-abd9-c1e2eef98172_1600x900.png 424w, https://substackcdn.com/image/fetch/$s_!GD_1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e7e9333-a6c4-40b4-abd9-c1e2eef98172_1600x900.png 848w, https://substackcdn.com/image/fetch/$s_!GD_1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e7e9333-a6c4-40b4-abd9-c1e2eef98172_1600x900.png 1272w, https://substackcdn.com/image/fetch/$s_!GD_1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e7e9333-a6c4-40b4-abd9-c1e2eef98172_1600x900.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><h3><a href="https://hydrogen.shopify.dev/updates">#4 Shopify&#8217;s Hydrogen</a>, <a href="https://twitter.com/remix_run/status/1623744656701026306">uses Remix</a></h3><p>This news is delivered without much buzz and I also won&#8217;t say too much about it.</p><p>Shopify devs rewrote Hydrogen using Remix. They enjoy all the benefits of Remix now. Well they bought the Remix company so they&#8217;ve got to do something with &#8216;em, right? The real question is the pros vs cons of using Remix over pure React and its ecosystem. I tried to form a well <a href="https://www.fullcontextdevelopment.com/blog/remix-full-context-review#product">balanced</a>, <a href="https://www.fullcontextdevelopment.com/blog/remix-full-context-review#software">opinion</a> on that last year. It&#8217;s not all songs and birds but there are a ton of major benefits. I&#8217;m interested in following how it will pay out for Shopify.</p><p><strong>From the Full Context Perspective</strong></p><p>I would have loved to see some measurements of how the Remix implementation did in terms of Real User Metrics or other benchmarks vs the v1 Hydrogen. That would have given us a sense of the impact of the rewrite on business value. Without that I will be optimistic with this one an give</p><p><strong>Hydrogen v2. a 7 / 10 HV score.</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Ic4J!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b93d423-8ee2-40b1-906b-fcfc4bd29ac8_1600x900.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Ic4J!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b93d423-8ee2-40b1-906b-fcfc4bd29ac8_1600x900.png 424w, https://substackcdn.com/image/fetch/$s_!Ic4J!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b93d423-8ee2-40b1-906b-fcfc4bd29ac8_1600x900.png 848w, https://substackcdn.com/image/fetch/$s_!Ic4J!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b93d423-8ee2-40b1-906b-fcfc4bd29ac8_1600x900.png 1272w, https://substackcdn.com/image/fetch/$s_!Ic4J!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b93d423-8ee2-40b1-906b-fcfc4bd29ac8_1600x900.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Ic4J!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b93d423-8ee2-40b1-906b-fcfc4bd29ac8_1600x900.png" width="1200" height="675" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7b93d423-8ee2-40b1-906b-fcfc4bd29ac8_1600x900.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:150000,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-large" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Ic4J!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b93d423-8ee2-40b1-906b-fcfc4bd29ac8_1600x900.png 424w, https://substackcdn.com/image/fetch/$s_!Ic4J!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b93d423-8ee2-40b1-906b-fcfc4bd29ac8_1600x900.png 848w, https://substackcdn.com/image/fetch/$s_!Ic4J!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b93d423-8ee2-40b1-906b-fcfc4bd29ac8_1600x900.png 1272w, https://substackcdn.com/image/fetch/$s_!Ic4J!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b93d423-8ee2-40b1-906b-fcfc4bd29ac8_1600x900.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><div><hr></div><p><strong>I&#8217;m super happy</strong> that you read (<em>or scrolled </em>) till the end! I feel speechless that people actually do that! If you enjoyed the article and/or found it valuable please consider sharing it with your friends and colleagues.</p><p>I&#8217;m at a very early stage of building this Substack publication so even the smallest extra visibility can make a huge difference. My wholehearted thanks if you help with that!<br><br>See you in the next one!<br>Joe <a href="https://twitter.com/fullctxdev">@fullctxdev</a></p>]]></content:encoded></item><item><title><![CDATA[Weekly Tech Report #2 - Bundler-free Frontend Development]]></title><description><![CDATA[Analyzing current news that can make a difference from a Full Context perspective]]></description><link>https://www.fullctx.dev/p/javascript-development-without-bundler</link><guid isPermaLink="false">https://www.fullctx.dev/p/javascript-development-without-bundler</guid><dc:creator><![CDATA[Jozsef Miskolczy]]></dc:creator><pubDate>Sat, 18 Feb 2023 13:50:43 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/8d7f3df6-8bbd-4420-b8b1-2b57d127ce09_1600x900.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3>The (<em>re</em>)emergence of developing JavaScript projects without build tools and the forgotten value of bundlers</h3><p>Couple of different authors wrote recently about their workflows and tools to deliver modern frontend projects using the latest browser standards to avoid the added complexity of build tools.</p><ul><li><p>Julia Evans - <a href="https://jvns.ca/blog/2023/02/16/writing-javascript-without-a-build-system/">Writing Javascript without a build system</a> </p></li><li><p>Kofi Gumbs - <a href="https://kofi.sexy/blog/modern-spas">Modern SPAs without bundlers, CDNs, or NodeJS</a></p></li><li><p>Brandon Foley of Vue.mjs, - <a href="https://vue-mjs.web-templates.io/blog/javascript">Simple, Modern JavaScript</a></p></li></ul><p>I highly recommend checking them if you are interested in the technical details. What I will focus on here is how and when this approach can bring value, when to avoid it and what it teaches about the often overlooked benefits of bundlers.</p><p>Now before you get overly excited let me answer the question you might have: Awesome, can I go <em><strong>bundlerless</strong></em> right away? <em><strong>No, most likely not!</strong></em><br>Julia makes a solid case for what&#8217;s the right situation for this approach:</p><blockquote><p><em>easily make changes to old tiny websites</em></p></blockquote><p>The old part is not strictly necessary in the equation. She and the other articles name the same main motivation for adopting this approach: bundlers are too much hassle to set up and sometimes it&#8217;s hard to get old projects to build correctly. </p><p>I completely agree with the problem and the example situation. In general I think this can be a beneficial choice for </p><ul><li><p><em>small scale projects that don&#8217;t require heavy JavaScript based functionality, </em></p></li><li><p><em>that will be maintained by one or two person</em></p></li><li><p><em>won&#8217;t require a lot of updates</em></p></li><li><p><em>and won&#8217;t utilize other non-browser-standard tools</em> (<em>pre and post processors, build optimizers</em>)</p></li><li><p><em>doesn&#8217;t meant to build reusable components</em></p></li><li><p><em>you already know or don&#8217;t want to learn modern tools</em></p></li></ul><p>It makes sense. The lack of extra tooling is justified because it wouldn&#8217;t be used really anyways. However what if the project starts to grow? When you want to automate more complex tasks like pre and post processing or build optimizations you would walk down the road of the FE tooling evolution of the last 14 years on your own. Adding a task runner? Build tools? Filesystem watcher? It won&#8217;t be easy, pleasant, or even justified. Your choices for building design system and reusable components are also much more limited.</p><p>So if your project is to grow even a bit larger than the above, this approach will only make your life unnecessarily harder.</p><p><em><strong>Is it possible to go bundlerless now? Yes, surely it is, it&#8217;s even more performant and convenient that before thanks to new browser features.<br>But it doesn&#8217;t scale.</strong></em></p><h4>What about bundlers?</h4><p>The overlooked benefit of bundlers -<em> even with all the pain to set them up </em>- is exactly that, scalability!</p><blockquote><p><em>Bundlers unify the way teams handle the tooling and tasks around building, optimizing and delivering FE projects. </em></p></blockquote><p>They enable organizations to predictably replicate the configuration of the tooling across time and projects. All of these are huge-huge benefits which we take for granted nowadays, maybe even forgot to appreciate. </p><p><em>Now&#8217;s the time to use the Full Context System to get a relative sense of the impact this approach makes. If you are not familiar with it, you can read a short summary in one of my older blog posts <a href="https://www.fullcontextdevelopment.com/blog/next-full-context-review#review">here</a>.</em></p><p>In summary:</p><blockquote><p><strong>Who should go bundlerless</strong>? Small one person projects, tiny landing/static pages unlikely to change, maybe even minor projects of web-dev studios.</p></blockquote><p>The impact in the optimal case is still small as the scale of the work is small and I neglect the fact that by using JavaScript instead of TypeScript you already miss out on a couple of DX improvements:</p><ol><li><p><em>Business Opportunity - Increased time to value</em></p></li><li><p><em>Productivity - Time saved at the project start</em></p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!SkS3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7433aee8-9156-4913-8ae4-7fb26f1f57bf_2091x349.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!SkS3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7433aee8-9156-4913-8ae4-7fb26f1f57bf_2091x349.png 424w, https://substackcdn.com/image/fetch/$s_!SkS3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7433aee8-9156-4913-8ae4-7fb26f1f57bf_2091x349.png 848w, https://substackcdn.com/image/fetch/$s_!SkS3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7433aee8-9156-4913-8ae4-7fb26f1f57bf_2091x349.png 1272w, https://substackcdn.com/image/fetch/$s_!SkS3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7433aee8-9156-4913-8ae4-7fb26f1f57bf_2091x349.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!SkS3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7433aee8-9156-4913-8ae4-7fb26f1f57bf_2091x349.png" width="1456" height="243" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7433aee8-9156-4913-8ae4-7fb26f1f57bf_2091x349.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:243,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:51723,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!SkS3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7433aee8-9156-4913-8ae4-7fb26f1f57bf_2091x349.png 424w, https://substackcdn.com/image/fetch/$s_!SkS3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7433aee8-9156-4913-8ae4-7fb26f1f57bf_2091x349.png 848w, https://substackcdn.com/image/fetch/$s_!SkS3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7433aee8-9156-4913-8ae4-7fb26f1f57bf_2091x349.png 1272w, https://substackcdn.com/image/fetch/$s_!SkS3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7433aee8-9156-4913-8ae4-7fb26f1f57bf_2091x349.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><blockquote><p><strong>Who should avoid the bundlerless approach</strong>? Anybody else really.</p></blockquote><p>The impact of adopting it in an unfitting, large environment can be devastating:</p><ol><li><p><em>Business Opportunity - Wasted time means a smaller chance for building successful products and business relationships</em></p></li><li><p><em>Productivity - Reinventing the wheel, a huge and complex wheel can ruin the productivity of the developers</em></p></li><li><p><em>Utilization - Time spent elsewhere instead of delivering value, and sitting on available but not adopted solutions means bad utilization of both mental and financial resources.</em></p></li><li><p><em>Customer Experience - You will miss out on the cutting edge performance optimizations that even Vite <a href="https://vitejs.dev/guide/why.html#why-bundle-for-production">recommends to use</a> by not bundling your code. Meaning your users will also get a subpar experience.</em></p></li><li><p><em>Costs - Low productivity, utilization and missed business opportunities will affect the financial results way more significantly and negatively, than the little you save on the surface level, build-vs-buy cost reduction.</em></p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jfMt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F966227ba-f74f-4c23-88a4-90961c17b7c9_2044x349.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jfMt!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F966227ba-f74f-4c23-88a4-90961c17b7c9_2044x349.png 424w, https://substackcdn.com/image/fetch/$s_!jfMt!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F966227ba-f74f-4c23-88a4-90961c17b7c9_2044x349.png 848w, https://substackcdn.com/image/fetch/$s_!jfMt!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F966227ba-f74f-4c23-88a4-90961c17b7c9_2044x349.png 1272w, https://substackcdn.com/image/fetch/$s_!jfMt!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F966227ba-f74f-4c23-88a4-90961c17b7c9_2044x349.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jfMt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F966227ba-f74f-4c23-88a4-90961c17b7c9_2044x349.png" width="1456" height="249" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/966227ba-f74f-4c23-88a4-90961c17b7c9_2044x349.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:249,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:81222,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!jfMt!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F966227ba-f74f-4c23-88a4-90961c17b7c9_2044x349.png 424w, https://substackcdn.com/image/fetch/$s_!jfMt!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F966227ba-f74f-4c23-88a4-90961c17b7c9_2044x349.png 848w, https://substackcdn.com/image/fetch/$s_!jfMt!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F966227ba-f74f-4c23-88a4-90961c17b7c9_2044x349.png 1272w, https://substackcdn.com/image/fetch/$s_!jfMt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F966227ba-f74f-4c23-88a4-90961c17b7c9_2044x349.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h4>What about TypeScript?</h4><p>I don&#8217;t think it&#8217;s possible to pull off the same stunt with TypeScript sadly. You need a compile step to turn TS into actually usable JS either way. Or&#8230; wait a minute! <a href="https://deno.land/">Deno</a>! I would love to do a full context analysis of Deno in a follow up post as it offers an interesting set of pros and cons with possibly huge business implications. Let me know if you are interested!</p><div><hr></div><p><strong>I&#8217;m super happy</strong> that you read (<em>or scrolled</em>) till the end! If you enjoyed the article and/or found it valuable please consider sharing it with your friends and colleagues. </p><p>I&#8217;m at a very early stage of building this Substack publication so even the smallest extra visibility can make a huge difference. My wholehearted thanks if you help with that!<br><br>See you in the next one!<br>Joe <a href="https://twitter.com/fullctxdev">@fullctxdev</a></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.fullctx.dev/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 Full Context Development! 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></channel></rss>