<?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[Tricky Bits Substack]]></title><description><![CDATA[Tricky Bits takes on the hard problems in technology and takes hard stances on them...diving into the deep end to get to the bottom of things and unafraid of get technical and get complex.]]></description><link>https://www.trickybits.blog</link><image><url>https://substackcdn.com/image/fetch/$s_!uZc5!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75c16ad4-8018-4103-96b8-cbf03d34ca01_250x250.png</url><title>Tricky Bits Substack</title><link>https://www.trickybits.blog</link></image><generator>Substack</generator><lastBuildDate>Mon, 20 Apr 2026 11:46:17 GMT</lastBuildDate><atom:link href="https://www.trickybits.blog/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[MCTO]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[trickybits@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[trickybits@substack.com]]></itunes:email><itunes:name><![CDATA[Rob Wyatt]]></itunes:name></itunes:owner><itunes:author><![CDATA[Rob Wyatt]]></itunes:author><googleplay:owner><![CDATA[trickybits@substack.com]]></googleplay:owner><googleplay:email><![CDATA[trickybits@substack.com]]></googleplay:email><googleplay:author><![CDATA[Rob Wyatt]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Source Code Management Best Practices]]></title><description><![CDATA[Keep it fresh, keep it maintainable]]></description><link>https://www.trickybits.blog/p/source-code-management-best-practices</link><guid isPermaLink="false">https://www.trickybits.blog/p/source-code-management-best-practices</guid><dc:creator><![CDATA[Dave Lewanda]]></dc:creator><pubDate>Fri, 30 May 2025 01:40:54 GMT</pubDate><enclosure url="https://images.unsplash.com/photo-1461749280684-dccba630e2f6?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxtYWludGVuYW5jZXxlbnwwfHx8fDE3NDg1NjgxNzF8MA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080" 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://images.unsplash.com/photo-1461749280684-dccba630e2f6?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxtYWludGVuYW5jZXxlbnwwfHx8fDE3NDg1NjgxNzF8MA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://images.unsplash.com/photo-1461749280684-dccba630e2f6?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxtYWludGVuYW5jZXxlbnwwfHx8fDE3NDg1NjgxNzF8MA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1461749280684-dccba630e2f6?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxtYWludGVuYW5jZXxlbnwwfHx8fDE3NDg1NjgxNzF8MA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1461749280684-dccba630e2f6?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxtYWludGVuYW5jZXxlbnwwfHx8fDE3NDg1NjgxNzF8MA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1461749280684-dccba630e2f6?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxtYWludGVuYW5jZXxlbnwwfHx8fDE3NDg1NjgxNzF8MA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 1456w" sizes="100vw"><img src="https://images.unsplash.com/photo-1461749280684-dccba630e2f6?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxtYWludGVuYW5jZXxlbnwwfHx8fDE3NDg1NjgxNzF8MA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080" width="3543" height="2365" data-attrs="{&quot;src&quot;:&quot;https://images.unsplash.com/photo-1461749280684-dccba630e2f6?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxtYWludGVuYW5jZXxlbnwwfHx8fDE3NDg1NjgxNzF8MA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:2365,&quot;width&quot;:3543,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;monitor showing Java programming&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpg&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="monitor showing Java programming" title="monitor showing Java programming" srcset="https://images.unsplash.com/photo-1461749280684-dccba630e2f6?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxtYWludGVuYW5jZXxlbnwwfHx8fDE3NDg1NjgxNzF8MA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1461749280684-dccba630e2f6?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxtYWludGVuYW5jZXxlbnwwfHx8fDE3NDg1NjgxNzF8MA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1461749280684-dccba630e2f6?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxtYWludGVuYW5jZXxlbnwwfHx8fDE3NDg1NjgxNzF8MA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1461749280684-dccba630e2f6?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxtYWludGVuYW5jZXxlbnwwfHx8fDE3NDg1NjgxNzF8MA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 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">Photo by <a href="true">Ilya Pavlov</a> on <a href="https://unsplash.com">Unsplash</a></figcaption></figure></div><p>When I zoom out on my over twenty years of professional experience in developing software, and running teams developing software, the one word that I center on is <strong>maintainability</strong>. The code you write has a primary job to &#8220;tell the computer what to do&#8221;, and it will do exactly that and nothing more. While many tools have been successful at launching &#8220;no-code&#8221; solutions, from WYSIWYG tools of the 1990s to more modern &#8220;vibe coding&#8221; (and hello, WordPress!), for the foreseeable future, humans will need to be able to read, understand, and maintain long-standing code whether or not they are the ones who wrote it in the first place.</p><p>The evolution of programming languages paints the history of making code more maintainable by humans, not always in a linear path. Ever since the discovery of using a transistor and binary code (1s and 0s) to instruct a a machine to &#8220;compute&#8221; and accomplish its assigned task, the goal has been to abstract that language into a way that humans can read, process, reason about and augment. Through layers of abstraction, from machine code to assembly to higher levels of abstraction (FORTRAN, Pascal, C) and into modern languages (Java, Python, Golang, Rust) and less-familiar paradigms like functional programming (LISP, Haskell, Elm) the goal has been to instruct the computer what to do in a way that other humans can evaluate it. Even today, when using modern AI coding tools like <a href="https://www.cursor.com/">Cursor</a>, <a href="https://windsurf.com/editor">Windsurf</a>, or <a href="https://www.warp.dev/j">Warp</a>, most of the examples shown these days produce the code that is being generated is this higher-level code and not directly machine code.</p><p>When this code is generated, it needs to be managed and ultimately versioned. Because this code needs human review, it needs to be maintained in a way that humans can reason about the differences. With this ability to reason, humans can set checkpoints at known-good points in history, and roll back if any changes are found objectionable. This also provides an opportunity to establish collaboration, as interoperable systems need a means for establishing a contract for that interoperability. If functionality changes, the ability to identify that change via a version number is crucial.</p><p>Source code management (SCM) tools have existed almost as long as programming languages themselves. Earliest tools were command-line based, and when graphical user interface (GUI) systems were introduced, graphical front-ends were added as well. There have been many different attempts at both centralized and distributed tools, ranging from the original SCCS, to CVS and Subversion (SVN), to ClearCase and SourceSafe, but the most popular tool today is git. Invented by Linus Torvalds, the original author and lead maintainer of of the Linux kernel that drives the operating system by the same name, which is used extensively across modern computing devices.</p><p>For the remainder of this post, we&#8217;ll presume that readers are already familiar with the basics of git. We&#8217;re going to get deep here, so if you&#8217;re not up on your git-fu, I&#8217;d suggest using git&#8217;s own <code>gittutorial</code> or one of these others from <a href="https://www.w3schools.com/git/">W3</a> or <a href="https://www.atlassian.com/git/tutorials">Atlassian</a> before proceeding.</p>
      <p>
          <a href="https://www.trickybits.blog/p/source-code-management-best-practices">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Developing Cross-Platform Mobile Applications]]></title><description><![CDATA[So many options, so little time (to market)]]></description><link>https://www.trickybits.blog/p/developing-cross-platform-mobile</link><guid isPermaLink="false">https://www.trickybits.blog/p/developing-cross-platform-mobile</guid><dc:creator><![CDATA[Dave Lewanda]]></dc:creator><pubDate>Wed, 09 Apr 2025 11:31:35 GMT</pubDate><enclosure url="https://images.unsplash.com/photo-1727941035071-910fd07135bb?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxMnx8aXBob25lJTIwYW5kJTIwYW5kcm9pZHxlbnwwfHx8fDE3NDQxNTk2NjF8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080" 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://images.unsplash.com/photo-1727941035071-910fd07135bb?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxMnx8aXBob25lJTIwYW5kJTIwYW5kcm9pZHxlbnwwfHx8fDE3NDQxNTk2NjF8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://images.unsplash.com/photo-1727941035071-910fd07135bb?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxMnx8aXBob25lJTIwYW5kJTIwYW5kcm9pZHxlbnwwfHx8fDE3NDQxNTk2NjF8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1727941035071-910fd07135bb?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxMnx8aXBob25lJTIwYW5kJTIwYW5kcm9pZHxlbnwwfHx8fDE3NDQxNTk2NjF8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1727941035071-910fd07135bb?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxMnx8aXBob25lJTIwYW5kJTIwYW5kcm9pZHxlbnwwfHx8fDE3NDQxNTk2NjF8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1727941035071-910fd07135bb?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxMnx8aXBob25lJTIwYW5kJTIwYW5kcm9pZHxlbnwwfHx8fDE3NDQxNTk2NjF8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1456w" sizes="100vw"><img src="https://images.unsplash.com/photo-1727941035071-910fd07135bb?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxMnx8aXBob25lJTIwYW5kJTIwYW5kcm9pZHxlbnwwfHx8fDE3NDQxNTk2NjF8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080" width="5349" height="4000" data-attrs="{&quot;src&quot;:&quot;https://images.unsplash.com/photo-1727941035071-910fd07135bb?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxMnx8aXBob25lJTIwYW5kJTIwYW5kcm9pZHxlbnwwfHx8fDE3NDQxNTk2NjF8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:4000,&quot;width&quot;:5349,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Two iphones sitting next to each other on a table&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpg&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="Two iphones sitting next to each other on a table" title="Two iphones sitting next to each other on a table" srcset="https://images.unsplash.com/photo-1727941035071-910fd07135bb?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxMnx8aXBob25lJTIwYW5kJTIwYW5kcm9pZHxlbnwwfHx8fDE3NDQxNTk2NjF8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1727941035071-910fd07135bb?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxMnx8aXBob25lJTIwYW5kJTIwYW5kcm9pZHxlbnwwfHx8fDE3NDQxNTk2NjF8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1727941035071-910fd07135bb?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxMnx8aXBob25lJTIwYW5kJTIwYW5kcm9pZHxlbnwwfHx8fDE3NDQxNTk2NjF8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1727941035071-910fd07135bb?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxMnx8aXBob25lJTIwYW5kJTIwYW5kcm9pZHxlbnwwfHx8fDE3NDQxNTk2NjF8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 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>Mobile applications have become ubiquitous and essential over the past two decades, particularly for direct-to-consumer products. While Steve Jobs initially believed smartphones <a href="https://www.theguardian.com/technology/appsblog/2011/oct/24/steve-jobs-apps-iphone">didn't need third-party apps</a>, it's now clear that installable apps are indispensable as part of the marketing, engagement and retainment strategy for companies large and small. The mobile landscape has simplified to just two platforms&#8212;iOS and Android (farewell to Blackberry, Palm, and Windows Phone, in addition to some also-rans)&#8212;yet most apps still need to maintain a presence on both. For teams in their early stages, the primary challenge is the cost of developing for these two platforms as weighed against a cross-platfrom solution that attempts at broad reuse of the same code. Let&#8217;s explore the available options and their relative merits.</p><h2>Native Development: The Traditional Approach</h2><p>When developing natively for mobile platforms, developers must navigate two distinct ecosystems: iOS and Android.</p><p>For iOS development, Apple provides Swift&#8212;a modern, safe, and efficient programming language&#8212;along with SwiftUI, their latest declarative framework for building fluid, responsive user interfaces. Swift's focus on safety and clarity, combined with SwiftUI's intuitive approach to UI development, enables developers to create sophisticated applications that feel natural on Apple devices. Some libraries, especially those that have been around for a while, may include Objective-C, with idiosyncrasies for iOS, or more broadly across Apple platforms, which date back to the NextStep OS that Jobs brought back to Apple as the foundation for what was originally Mac OS X (now known as macOS) and proliferated across all the other flavors (eg. tvOS, watchOS, iPadOS, and visionOS). It&#8217;s taken a few years for SwiftUI to gain prominence, but the approach stabilized in the past two years, but it is still not fully backwards compatible, which requires developers to reach back into the older UIKit framework, which relies on an imperative approach, to cover some corner cases of Apple platform development.</p><p>Android&#8217;s foundation was built on Java, with its own unique challenges, such as performance of the JVM and how it handles garbage collection. For modern Android development, developers primarily use Kotlin, an expressive language with strong Java compatibility, and Jetpack Compose, Google's modern toolkit for building native UIs. Android there is still the occasional need to fall back to the legacy XML-based UI approach, such as supporting rich notifications on older versions</p><p>Jetpack Compose and SwiftUI both use a <a href="https://egghead.io/blog/wtf-is-declarative-programming">declarative</a> approach, helping developers build complex interfaces with cleaner code while maintaining the performance and flexibility of native applications. This declarative paradigm is valuable as it does bring the platforms closer together by letting the developer &#8220;declare&#8221; what they want the UI to look like and leave it up to the system to render it appropriately.</p><p>While both native approaches offer the current best-in-class experience for each of the platforms, neither are very well easily translatable to the other. For example, Android's greater flexibility within the operating systems is not easily duplicated in iOS, but this comes at the cost of great complexity. Similarly Android, especially with Google&#8217;s layer that sits on top of the open-source platform (AOSP), has some stronger opinions on how certain things should be built, while Apple&#8217;s approach is to provide some guidance while also forcing the developer to do more of the heavy lifting at times.</p><p>While native development offers the best performance and full access to platform features, providing unparalleled speed and responsiveness along with seamless integration of device capabilities, it comes with some potential trade-offs: the necessity of maintaining entirely separate codebases for iOS and Android, increased development resources to support multiple platform-specific teams, and the added complexity of managing parallel development cycles and testing processes across both platforms. Depending on the complexity of the app, this approach may require a broader developer background to leverage the full extent of each platform. On the flip side, it usually allows the teams to stay as close to the platform without an extra layer of indirection that needs to be understood and can potentially lag behind the native platform.</p><p>This leads to an interesting set of product questions. Most notably, how do you create a single product experience that leverages both platforms to their maximum extent, even when those extents are mutually incompatible with each other?</p><h2>Web-Based Solutions: The Browser Approach</h2><p>For teams with web expertise or simpler app requirements, web-based solutions offer viable alternatives:</p><p><strong>Progressive Web Apps (PWAs)</strong></p><p>These modern web applications leverage standard web technologies to deliver app-like experiences directly through the browser, offering broad platform compatibility and simplified deployment. PWAs provide seamless accessibility across devices without requiring installation from app stores, while automatic updates ensure users always have the latest version.</p><p>Although they excel in reach and maintainability, PWAs face certain limitations regarding deep platform integration and may not match the full capabilities of native applications when it comes to hardware access and system features. Additionally, in the face of changing regulations, Apple temporarily signaled that PWAs would not be allowed on iOS home screens. While this decision was reversed within a couple of months, there still remains the possibility that PWAs will lose abilities or otherwise be constrained over the long term.</p><p><strong>Hybrid Applications</strong></p><p>By leveraging WebView-based solutions such as <a href="https://cordova.apache.org/">Cordova</a> or <a href="https://capacitorjs.com/">Capacitor</a>, development teams can create applications that seamlessly blend web technologies with native platform capabilities. These hybrid frameworks enable developers to write applications using familiar web technologies like HTML, CSS, and JavaScript while still accessing device features through a comprehensive plugin ecosystem. This approach allows for efficient development cycles by maintaining a single codebase that can target multiple platforms, while still providing access to platform-specific functionality when needed. The WebView container acts as a bridge between web content and native features, offering a balanced compromise between development efficiency and platform integration. This approach is optimal if the same components are needed to not only be available on both iOS and Android, but in a traditional web setting across desktop and mobile browsers as well.</p><h2>Cross-Platform Frameworks: Universal Solutions</h2><p>For teams seeking a single codebase approach, but with a desire to leverage system functionality and a more native-like appearance, several frameworks offer compelling options:</p><h3>React Native</h3><p>Originally developed by Facebook (now Meta) in 2015 to address their own cross-platform development needs, <a href="https://reactnative.dev/">React Native</a> has evolved into a popular open-source framework. The vast ecosystem of libraries and tools, combined with the familiarity of React development patterns, makes it particularly attractive for web developers transitioning to mobile development. While leveraging JavaScript/TypeScript (JS/TS) and providing native UI components, its journey hasn't been without challenges. Notable companies like <a href="https://medium.com/airbnb-engineering/sunsetting-react-native-1868ba28e30a">Airbnb</a> and <a href="https://engineering.udacity.com/react-native-a-retrospective-from-the-mobile-engineering-team-at-udacity-89975d6a8102">Udacity</a> have documented their experiences of adopting and later moving away from React Native, citing performance issues and maintenance overhead. However, the framework continues to evolve under open-source governance, with tools like Expo significantly simplifying development by providing a managed environment, pre-built components, and deployment solutions.</p><h3>Flutter</h3><p><a href="https://flutter.dev/">Flutter</a> is Google's modern UI toolkit utilizing the Dart programming language to achieve exceptional performance and streamlined developer productivity. Its innovative custom rendering engine, known as Skia, ensures pixel-perfect visual consistency across different platforms (not just mobile, but including desktop applications on macOS, Windows, and Linux) by directly handling all rendering operations. This approach allows Flutter to maintain precise control over every pixel on the screen, resulting in highly consistent and beautiful user interfaces that look and behave identically whether running on iOS or Android. Flutter's hot reload feature enables rapid iteration during development, while its widget-based architecture promotes code reusability and maintainable application structure. Flutter has gained significant popularity in developing economies (such as India), offering a cost-effective solution for cross-platform app development. However, recent developments have raised concerns within the Flutter community. In early 2024, Google implemented layoffs affecting key teams, including those working on Flutter and Dart. These reductions have led to uncertainty about the framework&#8217;s future and Google&#8217;s commitment to its ongoing development. Also, while Dart appears to be very similar to JS/TS, it is a different language with a limited set of experienced developers. As <a href="https://newsletter.pragmaticengineer.com/p/cross-platform-mobile-development?utm_source=chatgpt.com">Gergely Orosz points out</a>, the popularity of Flutter appears to have overtaken React Native, but it&#8217;s popularity depends on different geographies. Also, it shows that teams using Flutter have been less likely to generate revenue. It is hard to suggest why this is the case.</p><h3>Other</h3><p><strong><a href="https://dotnet.microsoft.com/en-us/apps/maui">MAUI</a></strong></p><p>Microsoft App UI (MAUI) is a solution enabling .NET developers to use C# while maintaining near-native performance through platform-specific optimizations. For teams already steeped in C# and the .NET platform, this choice can make sense. Especially if it allows for reusing business logic originating elsewhere outside the mobile app, it follows a similar idea as utilizing something like JS/TS in Node for the backend for React Native. It is built on Xamarin, which predates MAUI as Microsoft&#8217;s cross-platform mobile solution.</p><p><strong><a href="https://www.qt.io/platform/mobile-app-development">Qt</a></strong></p><p>Qt is a comprehensive C++ framework that allows developers to create cross-platform mobile applications using a single codebase. It provides a rich set of libraries and tools for building native-looking UIs, along with extensive hardware access capabilities. While Qt offers strong performance and a mature ecosystem, it's less commonly used for mobile development compared to other frameworks, being more popular in Linux desktop and embedded systems development. In many ways, Qt moved in the opposite direction as Flutter and React Native; whereas the latter two started off focused on mobile, then web and desktop apps, Qt started primarily as a desktop solution that migrated into mobile.</p><h3>Even more?</h3><p>Additionally, other more obscure and less broadly used solutions also exist. It seems like every language that a developer might prefer eventually ends up with a framework for building mobile apps. For example, Rust developers might want to try <a href="https://v2.tauri.app/">Tauri</a>, while Python developers could lean on <a href="https://kivy.org/">Kivy</a>.</p><h2>So Why Bother with Native?</h2>
      <p>
          <a href="https://www.trickybits.blog/p/developing-cross-platform-mobile">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Foolish Heroism]]></title><description><![CDATA[Or....how I nearly messed up a project because I was trying to make it succeed at all costs.]]></description><link>https://www.trickybits.blog/p/foolish-heroism</link><guid isPermaLink="false">https://www.trickybits.blog/p/foolish-heroism</guid><dc:creator><![CDATA[PJ McNerney]]></dc:creator><pubDate>Thu, 03 Apr 2025 15:46:24 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/53e2d567-8014-4911-96dc-9dd7b9c1b4b8_487x332.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>History Lesson</strong></p>
      <p>
          <a href="https://www.trickybits.blog/p/foolish-heroism">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Agile Software Development - Avoiding the Waterfall Trap]]></title><description><![CDATA[Why does it matter?]]></description><link>https://www.trickybits.blog/p/agile-software-development-avoiding</link><guid isPermaLink="false">https://www.trickybits.blog/p/agile-software-development-avoiding</guid><dc:creator><![CDATA[Dave Lewanda]]></dc:creator><pubDate>Sat, 22 Mar 2025 15:01:44 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ZlJs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93d95d85-091f-4ac0-a903-873ea100cd81_1024x608.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_!ZlJs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93d95d85-091f-4ac0-a903-873ea100cd81_1024x608.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ZlJs!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93d95d85-091f-4ac0-a903-873ea100cd81_1024x608.png 424w, https://substackcdn.com/image/fetch/$s_!ZlJs!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93d95d85-091f-4ac0-a903-873ea100cd81_1024x608.png 848w, https://substackcdn.com/image/fetch/$s_!ZlJs!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93d95d85-091f-4ac0-a903-873ea100cd81_1024x608.png 1272w, https://substackcdn.com/image/fetch/$s_!ZlJs!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93d95d85-091f-4ac0-a903-873ea100cd81_1024x608.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ZlJs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93d95d85-091f-4ac0-a903-873ea100cd81_1024x608.png" width="1024" height="608" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/93d95d85-091f-4ac0-a903-873ea100cd81_1024x608.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:608,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ZlJs!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93d95d85-091f-4ac0-a903-873ea100cd81_1024x608.png 424w, https://substackcdn.com/image/fetch/$s_!ZlJs!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93d95d85-091f-4ac0-a903-873ea100cd81_1024x608.png 848w, https://substackcdn.com/image/fetch/$s_!ZlJs!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93d95d85-091f-4ac0-a903-873ea100cd81_1024x608.png 1272w, https://substackcdn.com/image/fetch/$s_!ZlJs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93d95d85-091f-4ac0-a903-873ea100cd81_1024x608.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h1>Why Agile Often Devolves into Waterfall</h1><p>For the last quarter century, Agile development has been hailed as a revolutionary methodology for making software development more flexible, collaborative, and responsive to change. Traditionally, teams relied on the Waterfall approach&#8212;mirroring other engineering disciplines where blueprints and permits precede construction. This desired predictability appeals to stakeholders. However, given the complexity of software systems, such predictability rarely materializes in practice. Unlike other engineering disciplines where upfront planning enables consistent production of physical items (from bridges to automobiles to electronics), software behaves more like an organic system, benefiting from continuous monitoring and adaptation&#8212;much more like gardening than might be expected in a field labeled as engineering.</p><p>The need to address Waterfall's shortcomings led to the Agile Manifesto. Published in 2001, the manifesto outlined core values and principles that emphasized adaptability, collaboration, and swift value delivery. Yet despite these ideals, many organizations find their Agile practices gradually transforming into rigid, bureaucratic processes reminiscent of the very Waterfall methodology they sought to escape. This raises a crucial question: why does Agile so often devolve into Waterfall? To answer this, we must first understand how Waterfall works and compares to Agile. From there, we can explore how to maintain an Agile footing and realize its full potential.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.trickybits.blog/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">Tricky Bits Substack is a reader-supported publication. 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><h2>What is the Waterfall Methodology?</h2><p>The Waterfall methodology is a traditional approach to software development that follows a linear, sequential process. It consists of distinct phases&#8212;requirements gathering, design, implementation, testing, deployment, and maintenance&#8212;with each phase requiring completion before the next can begin. This approach demands extensive upfront planning and detailed documentation, leaving minimal flexibility for changes once development starts. While Waterfall offers apparent clarity and predictability, it struggles to handle evolving requirements or unexpected challenges, making it poorly suited for dynamic environments.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://images.unsplash.com/photo-1482685945432-29a7abf2f466?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHx3YXRlcmZhbGx8ZW58MHx8fHwxNzQyNTg0ODA3fDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://images.unsplash.com/photo-1482685945432-29a7abf2f466?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHx3YXRlcmZhbGx8ZW58MHx8fHwxNzQyNTg0ODA3fDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1482685945432-29a7abf2f466?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHx3YXRlcmZhbGx8ZW58MHx8fHwxNzQyNTg0ODA3fDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1482685945432-29a7abf2f466?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHx3YXRlcmZhbGx8ZW58MHx8fHwxNzQyNTg0ODA3fDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1482685945432-29a7abf2f466?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHx3YXRlcmZhbGx8ZW58MHx8fHwxNzQyNTg0ODA3fDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1456w" sizes="100vw"><img src="https://images.unsplash.com/photo-1482685945432-29a7abf2f466?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHx3YXRlcmZhbGx8ZW58MHx8fHwxNzQyNTg0ODA3fDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080" width="4608" height="3008" data-attrs="{&quot;src&quot;:&quot;https://images.unsplash.com/photo-1482685945432-29a7abf2f466?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHx3YXRlcmZhbGx8ZW58MHx8fHwxNzQyNTg0ODA3fDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:3008,&quot;width&quot;:4608,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;waterfall at daytime&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpg&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="waterfall at daytime" title="waterfall at daytime" srcset="https://images.unsplash.com/photo-1482685945432-29a7abf2f466?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHx3YXRlcmZhbGx8ZW58MHx8fHwxNzQyNTg0ODA3fDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1482685945432-29a7abf2f466?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHx3YXRlcmZhbGx8ZW58MHx8fHwxNzQyNTg0ODA3fDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1482685945432-29a7abf2f466?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHx3YXRlcmZhbGx8ZW58MHx8fHwxNzQyNTg0ODA3fDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1482685945432-29a7abf2f466?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHx3YXRlcmZhbGx8ZW58MHx8fHwxNzQyNTg0ODA3fDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 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">Photo by <a href="true">Mike Lewis HeadSmart Media</a> on <a href="https://unsplash.com">Unsplash</a></figcaption></figure></div><p>The methodology's inflexibility comes from its "plan-driven" nature, measuring success through adherence to predefined timelines and deliverables. This structure typically results in extended development cycles and delayed feedback since working software isn't delivered until the project's end. These characteristics position Waterfall as the opposite of Agile, which emphasizes flexibility and iterative progress&#8212;traits that better align with creating software that meets customer needs.</p><p>Early in my career, I encountered the Waterfall approach in my first job at L-3 Communications. Not only was the Agile Manifesto barely only a year old and not widely disseminated, but the work we were doing was highly controlled as a Department of Defense contractor working on projects that involved secure cryptography and needed to be launched into space and run untouched for decades. This required careful requirements analysis and planning, but even then it was clear that Waterfall processes could do more harm than good as the software was being developed.</p><h3>How does Agile Differ?</h3><p>Agile emerged as a response to Waterfall projects that consistently missed deadlines and failed to satisfy customers. Waterfall's linear progression&#8212;from requirements gathering through system design to implementation and release&#8212;couldn't provide the flexibility needed as software became increasingly prevalent. This lead to a more obvious dichotomy between what the customer thought they wanted as opposed to what they truly wanted or needed in a finished product. As hardware became commoditized and software distribution grew more dynamic through the Internet, the ability to adapt plans for moving targets became crucial. The shift from mainframe computing to portable physical media (e.g., floppy disks and CDs) and later to cloud services and app stores enabled teams to deliver software incrementally through continuous updates. This is when the &#8220;softness&#8221; of software to truly shine as development teams found the ability to mold the solution to the customers&#8217; needs.</p><p>The Agile Manifesto emphasized rapid delivery of working functionality and frequent iteration to achieve more predictable and desirable outcomes. While this flexibility is appealing in theory, implementing it effectively requires both diligence and intention&#8212;it demands a comfort with ambiguity and uncertainty that many find challenging. Teams must be able to see enough of the future to understand their general trajectory without getting caught up in the specifics of the final outcome.</p><p>My first experience with an Agile approach didn&#8217;t happen until a decade after the Manifesto was released. Working for a small team on a direct-to-consumer product, it was a revelation to be able to chunk up the work into consumable parts and deliver intermediary functionality. Even with a greenfield project, we focused on regular test and internal delivery cycles to ensure the effort was worth the investment and the original overall goal of the project was met with regular feedback loops to ensure we stayed on course.</p><h2>The Spirit vs. The Letter of Agile</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://images.unsplash.com/photo-1541960071727-c531398e7494?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHxhZ2lsZSUyMHNvZnR3fGVufDB8fHx8MTc0MjU4NTEwMnww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://images.unsplash.com/photo-1541960071727-c531398e7494?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHxhZ2lsZSUyMHNvZnR3fGVufDB8fHx8MTc0MjU4NTEwMnww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1541960071727-c531398e7494?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHxhZ2lsZSUyMHNvZnR3fGVufDB8fHx8MTc0MjU4NTEwMnww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1541960071727-c531398e7494?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHxhZ2lsZSUyMHNvZnR3fGVufDB8fHx8MTc0MjU4NTEwMnww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1541960071727-c531398e7494?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHxhZ2lsZSUyMHNvZnR3fGVufDB8fHx8MTc0MjU4NTEwMnww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1456w" sizes="100vw"><img src="https://images.unsplash.com/photo-1541960071727-c531398e7494?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHxhZ2lsZSUyMHNvZnR3fGVufDB8fHx8MTc0MjU4NTEwMnww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080" width="2448" height="3264" data-attrs="{&quot;src&quot;:&quot;https://images.unsplash.com/photo-1541960071727-c531398e7494?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHxhZ2lsZSUyMHNvZnR3fGVufDB8fHx8MTc0MjU4NTEwMnww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:3264,&quot;width&quot;:2448,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;black rolling armchair under white table&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpg&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="black rolling armchair under white table" title="black rolling armchair under white table" srcset="https://images.unsplash.com/photo-1541960071727-c531398e7494?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHxhZ2lsZSUyMHNvZnR3fGVufDB8fHx8MTc0MjU4NTEwMnww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1541960071727-c531398e7494?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHxhZ2lsZSUyMHNvZnR3fGVufDB8fHx8MTc0MjU4NTEwMnww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1541960071727-c531398e7494?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHxhZ2lsZSUyMHNvZnR3fGVufDB8fHx8MTc0MjU4NTEwMnww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1541960071727-c531398e7494?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHxhZ2lsZSUyMHNvZnR3fGVufDB8fHx8MTc0MjU4NTEwMnww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 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">Photo by <a href="true">&#304;rfan Simsar</a> on <a href="https://unsplash.com">Unsplash</a></figcaption></figure></div><p>At the heart of this issue lies a fundamental misunderstanding of the Agile Manifesto. The manifesto emphasizes individuals and interactions over processes and tools, working software over comprehensive documentation, customer collaboration over contract negotiation, and responding to change over following a plan. These values are intentionally broad, giving teams flexibility to adapt them to their unique context. However, many organizations implement Agile practices superficially&#8212;following the "letter of the law"&#8212;without embracing the underlying philosophy. This leads to an overemphasis on rigid ceremonies, metrics, and processes that ironically mirror Waterfall development's inflexibility. This rigidity ultimately undermines Agile's intended goals. While the resulting linear process gives management and stakeholders a way to monitor progress, organizations often overlook the crucial tradeoff between flexibility and observability&#8212;and worse, some mistakenly believe they can maximize both. By trying to apply the facade of something that sounds &#8220;cool&#8221; like Agile while still holding onto the underlying tenets of Waterfall, teams end up with the worst parts and limitations of both, rather than the opposite as intended.</p><h3>The Rise of "Agile Theater"</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://images.unsplash.com/photo-1512462629038-1ff3395c5e5d?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw1Nnx8YWdpbGUlMjB0aGVhdGVyfGVufDB8fHx8MTc0MjU4NDk2MHww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://images.unsplash.com/photo-1512462629038-1ff3395c5e5d?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw1Nnx8YWdpbGUlMjB0aGVhdGVyfGVufDB8fHx8MTc0MjU4NDk2MHww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1512462629038-1ff3395c5e5d?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw1Nnx8YWdpbGUlMjB0aGVhdGVyfGVufDB8fHx8MTc0MjU4NDk2MHww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1512462629038-1ff3395c5e5d?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw1Nnx8YWdpbGUlMjB0aGVhdGVyfGVufDB8fHx8MTc0MjU4NDk2MHww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1512462629038-1ff3395c5e5d?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw1Nnx8YWdpbGUlMjB0aGVhdGVyfGVufDB8fHx8MTc0MjU4NDk2MHww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1456w" sizes="100vw"><img src="https://images.unsplash.com/photo-1512462629038-1ff3395c5e5d?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw1Nnx8YWdpbGUlMjB0aGVhdGVyfGVufDB8fHx8MTc0MjU4NDk2MHww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080" width="5472" height="3648" data-attrs="{&quot;src&quot;:&quot;https://images.unsplash.com/photo-1512462629038-1ff3395c5e5d?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw1Nnx8YWdpbGUlMjB0aGVhdGVyfGVufDB8fHx8MTc0MjU4NDk2MHww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:3648,&quot;width&quot;:5472,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;a group of people standing around a table with makeup&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpg&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="a group of people standing around a table with makeup" title="a group of people standing around a table with makeup" srcset="https://images.unsplash.com/photo-1512462629038-1ff3395c5e5d?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw1Nnx8YWdpbGUlMjB0aGVhdGVyfGVufDB8fHx8MTc0MjU4NDk2MHww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1512462629038-1ff3395c5e5d?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw1Nnx8YWdpbGUlMjB0aGVhdGVyfGVufDB8fHx8MTc0MjU4NDk2MHww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1512462629038-1ff3395c5e5d?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw1Nnx8YWdpbGUlMjB0aGVhdGVyfGVufDB8fHx8MTc0MjU4NDk2MHww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1512462629038-1ff3395c5e5d?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw1Nnx8YWdpbGUlMjB0aGVhdGVyfGVufDB8fHx8MTc0MjU4NDk2MHww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 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">Photo by <a href="true">Joel Filipe</a> on <a href="https://unsplash.com">Unsplash</a></figcaption></figure></div><p>The desire to appear agile while maintaining predictable long-term plans often leads to "Agile Theater"&#8212;where teams merely go through the motions of agile practices without embracing their principles. Consider these examples:</p><ul><li><p><strong>Strict Ceremonies:</strong> Daily stand-ups, sprint planning, and retrospectives devolve into mandatory rituals with little purpose. Instead of fostering collaboration and transparency, these ceremonies become checkbox exercises. Stand-ups turn into rote status reports rather than meaningful team interactions. Retrospectives, meant to generate constructive feedback, either descend into complaint sessions or focus on superficial "vanity metrics" that serve only to document their own existence.</p></li><li><p><strong>Story Pointing as a Performance Metric:</strong> The concept of &#8220;story points&#8221; <a href="https://ronjeffries.com/articles/019-01ff/story-points/Index.html?utm_source=chatgpt.com">originated as a concept of &#8220;ideal days&#8221;</a> from the concept of &#8220;Extreme Programming&#8221;, and didn&#8217;t even come from the more common Scrum form of Agile. As the intent was never to get to the granularity of less than a day, it lead to confusion and tension with management. This lead to teams misusing story points to measure productivity instead of estimating effort and complexity. As a result, teams would inevitably end up gaming the system and pressuring developers to inflate estimates. When story points get converted to time estimates, they lack the precision needed for anything beyond rough approximations.</p></li></ul><h3>The Waterfall Mindset in Disguise</h3><p>These practices often lead to the re-emergence of a waterfall mindset in an agile disguise. For example:</p><ul><li><p><strong>Fixed Scopes and Timelines:</strong> Organizations often insist on fixed scopes and deadlines, treating sprints as miniature waterfalls where changes are discouraged until the next planning cycle. Stakeholders attempt to divide predetermined roadmaps into two-week sprint increments&#8212;essentially just splitting up available time. This contradicts the core principle that teams should be able to adapt. While maintaining focus within a sprint helps avoid context switching, truly agile teams must be able to adjust at sprint boundaries, if not more frequently. This flexibility may disrupt longer-term roadmaps, but it's essential. Particularly in early-stage projects and companies, excessive advanced planning&#8212;a hallmark of Waterfall&#8212;limits the ability to respond to business needs.</p><p>These fixed timelines are especially prevalent in event-driven deliverables, such as working for a sports league such as Major League Baseball. When timelines can&#8217;t slip, as games will be played whether or not the <a href="https://www.mlb.com/apps/mlb-app">MLB App</a> is ready, it is important to focus on figuring out how to adjust scope. Additionally, those timelines are generally known well in advance, often over a year in the future, so while it is inherently Waterfall-esque to try to hit those future deadlines from far out, sticking to an Agile approach where adjustments are made often to ensure calibration with those timelines end up resulting in the best outcome for both the development team and the users.</p></li><li><p><strong>Command-and-Control Management:</strong> Instead of empowering teams to self-organize, some managers use agile artifacts like burndown charts or velocity metrics to enforce top-down control. Teams can easily game metrics such as story points completed, pull requests merged, or lines of code contributed to meet arbitrary goals&#8212;satisfying management without delivering real value.</p></li><li><p><strong>Water-Agile-Fall:</strong> While engineering teams experienced with Agile development may follow agile processes successfully, other product development functions like design and QA often fall into waterfall patterns. Design and requirements aren't delivered until fully complete, while testing begins only after all development is finished, creating burdensome testing cycles before production release.</p><p>I have seen this problem across companies both small (Diamond Kinetics) and large (Major League Baseball), where those other functions are treated as services that happen out of band with the software development process. This makes coordinated delivery difficult, as the communication across those boundaries are rarely in sync and therefore it becomes more linear like Waterfall than the iterative that Agile prescribes. If engineers aren&#8217;t able to review early designs and help shape and scope the effort, then they feel the need to implement the functionality to completion before handing it off to testing. This results in mini-waterfalls that break with the spirit of the manifesto and result in falling back to a Waterfall process under the hood.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!TjJJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f94df76-a857-4985-b945-dd8e5b43d577_1024x608.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!TjJJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f94df76-a857-4985-b945-dd8e5b43d577_1024x608.png 424w, https://substackcdn.com/image/fetch/$s_!TjJJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f94df76-a857-4985-b945-dd8e5b43d577_1024x608.png 848w, https://substackcdn.com/image/fetch/$s_!TjJJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f94df76-a857-4985-b945-dd8e5b43d577_1024x608.png 1272w, https://substackcdn.com/image/fetch/$s_!TjJJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f94df76-a857-4985-b945-dd8e5b43d577_1024x608.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!TjJJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f94df76-a857-4985-b945-dd8e5b43d577_1024x608.png" width="1024" height="608" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7f94df76-a857-4985-b945-dd8e5b43d577_1024x608.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:608,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!TjJJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f94df76-a857-4985-b945-dd8e5b43d577_1024x608.png 424w, https://substackcdn.com/image/fetch/$s_!TjJJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f94df76-a857-4985-b945-dd8e5b43d577_1024x608.png 848w, https://substackcdn.com/image/fetch/$s_!TjJJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f94df76-a857-4985-b945-dd8e5b43d577_1024x608.png 1272w, https://substackcdn.com/image/fetch/$s_!TjJJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f94df76-a857-4985-b945-dd8e5b43d577_1024x608.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">A hidden watefall</figcaption></figure></div></li></ul><h3>How to Avoid the Trap</h3><p>In order to successfully implement Agile processes, the team must be committed to the concepts and strive to &#8220;keep the faith&#8221; in the intent of the Manifesto, focusing on people over processes and early and often delivery. To prevent Agile from devolving into Waterfall, teams and organizations must actively resist the temptation to prioritize form over function. Here are some practical steps:</p><ol><li><p><strong>Revisit the Agile Manifesto Regularly:</strong> Make the manifesto a living document within your organization. Discuss its values and principles in team meetings to ensure everyone understands the "why" behind Agile practices. Use this understanding to tailor ceremonies and processes to your team's needs. If a stand-up feels unnecessary, skip it. If retrospectives aren't yielding actionable insights, try a different format. This approach enables following the spirit of the law without getting tied up in the letter of the law.</p></li><li><p><strong>Focus on Outcomes, Not Outputs:</strong> Shift the emphasis from metrics like velocity and story points to the value delivered to customers. Encourage teams to measure success based on impact, not activity. A regular release schedule can help maintain focus on outcomes. Trust your teams to make decisions and adapt processes as needed. Avoid micromanagement and foster a culture of autonomy that prioritizes results.</p><p>Especially when working at a smaller and earlier stage startup, such as <a href="https://diamondkinetics.com">Diamond Kinetics</a>, it was important to focus on what could be delivered with confidence. A &#8220;release train&#8221; where releases were possible on any given week provided the necessary guardrails to plan work against while accounting for the necessary steps of testing and submission for app review. Leveraging this approach effectively tripled the number of successful releases from one year to the next.</p><p>Additionally, this involves including all product development functions, from product to design to testing, in the outcome. Doing so provides better accuracy around true task estimation. When two or more people are involved across multiple disciplines, it is easier to understand why it is impossible to estimate durations at finer granularities of days if not weeks. While the programming effort for a small feature may take only a few hours, including the effort to define, design, implement, and test that functionality, and the necessary handoffs between disciplines results in any effort worth doing taking the better part of a working week in all but the most trivial examples.</p></li><li><p><strong>Avoid Sprinting the Marathon:</strong> Most Agile teams settle on two-week sprints, yet meaningful software projects span far longer. They're more like marathons than sprints&#8212;and no one sprints a marathon. Cramming each two-week sprint with maximum work leads to team burnout. Build in flexibility by allowing sprints that tackle technical debt or enable exploration and learning. Teams need these occasional deviations from fixed schedules to remain adaptive and responsive to business needs.</p></li><li><p><strong>Plan Roadmaps against Sprints:</strong> Rather than splitting a long-term roadmap into sprints, adopt a Now/Next/Future roadmap template with a sliding window:</p><ul><li><p><strong>Now</strong> - What is being worked on in the current sprint and possibly the next one</p></li><li><p><strong>Next</strong> - What's up for the next month or two</p></li><li><p><strong>Future</strong> - What's on the horizon for the rest of the quarter</p></li></ul><p>This approach, with constant review during sprint planning, provides a bottom-up view of what the team can produce. While accurate prediction may be challenging initially, refining this approach will serve the team well through its growth. By focusing on what the team <em><strong>can</strong></em> produce and how that evolves over time, you'll achieve the best possible outcome.</p></li><li><p><strong>Ensure Feedback Loops Exist:</strong> Multiple feedback loops are essential for maintaining agility and effective iteration. Internally, regular and productive retrospectives enable teams to provide candid feedback to leadership and stakeholders about their work environment and needs. Externally, user experience studies and A/B testing generate insights that help teams better serve their customers. Proper system observability and monitoring round out these feedback loops by ensuring teams can maintain and improve product health.</p></li></ol><h2>Is Agile Always the Answer?</h2><p>While Agile is widely accepted as the best practice for modern software development, we shouldn't automatically assume it's always the right choice. As with our earlier discussion about the "letter of the law," teams should carefully consider whether an Agile approach truly fits their project. Some circumstances&#8212;like developing low-level firmware or creating software with strict security requirements (such as military or space applications)&#8212;may actually benefit from a Waterfall approach. These scenarios often demand extensive upfront planning to ensure all requirements are met, and their deliverables are less likely to change over time.</p><p>Nevertheless, incorporating some degree of agility can still prove valuable. Given today's complex software systems, it's best to adapt your process to suit both your team and project. Rather than viewing it as a strict choice between Agile and Waterfall, consider it a spectrum that skilled teams and leaders can navigate to their advantage.</p><h2>Conclusion</h2><p>Agile is a mindset, not a checklist. Specifically, that mindset is about flexibility in the name of delivery. When organizations lose sight of this fundamental truth, they risk falling into the same traps of rigidity and inefficiency that plague Waterfall development. By staying true to the Agile Manifesto's principles and prioritizing outcomes over processes, teams can avoid the pitfalls of "Agile Theater" and unlock agile development's full potential. This approach not only leads to better software but also creates an environment where creativity, collaboration, and adaptability thrive. While teams can adopt Waterfall practices when truly necessary, this should be done cautiously and selectively. Ultimately, leadership must determine the most effective approach based on their experience and context.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://images.unsplash.com/photo-1503551723145-6c040742065b-v2?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw0fHxhZ2lsZXxlbnwwfHx8fDE3NDI1ODQ3NjJ8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://images.unsplash.com/photo-1503551723145-6c040742065b-v2?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw0fHxhZ2lsZXxlbnwwfHx8fDE3NDI1ODQ3NjJ8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1503551723145-6c040742065b-v2?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw0fHxhZ2lsZXxlbnwwfHx8fDE3NDI1ODQ3NjJ8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1503551723145-6c040742065b-v2?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw0fHxhZ2lsZXxlbnwwfHx8fDE3NDI1ODQ3NjJ8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1503551723145-6c040742065b-v2?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw0fHxhZ2lsZXxlbnwwfHx8fDE3NDI1ODQ3NjJ8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1456w" sizes="100vw"><img src="https://images.unsplash.com/photo-1503551723145-6c040742065b-v2?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw0fHxhZ2lsZXxlbnwwfHx8fDE3NDI1ODQ3NjJ8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080" width="3000" height="2000" data-attrs="{&quot;src&quot;:&quot;https://images.unsplash.com/photo-1503551723145-6c040742065b-v2?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw0fHxhZ2lsZXxlbnwwfHx8fDE3NDI1ODQ3NjJ8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:2000,&quot;width&quot;:3000,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;assorted notepads&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpg&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="assorted notepads" title="assorted notepads" srcset="https://images.unsplash.com/photo-1503551723145-6c040742065b-v2?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw0fHxhZ2lsZXxlbnwwfHx8fDE3NDI1ODQ3NjJ8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1503551723145-6c040742065b-v2?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw0fHxhZ2lsZXxlbnwwfHx8fDE3NDI1ODQ3NjJ8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1503551723145-6c040742065b-v2?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw0fHxhZ2lsZXxlbnwwfHx8fDE3NDI1ODQ3NjJ8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1503551723145-6c040742065b-v2?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw0fHxhZ2lsZXxlbnwwfHx8fDE3NDI1ODQ3NjJ8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 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">Photo by <a href="true">Patrick Perkins</a> on <a href="https://unsplash.com">Unsplash</a></figcaption></figure></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.trickybits.blog/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">Tricky Bits Substack is a reader-supported publication. 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[Goodbye Software Engineering…Hello Product Engineering]]></title><description><![CDATA[(Hint: It was ALWAYS Product Engineering.)]]></description><link>https://www.trickybits.blog/p/goodbye-software-engineeringhello</link><guid isPermaLink="false">https://www.trickybits.blog/p/goodbye-software-engineeringhello</guid><dc:creator><![CDATA[PJ McNerney]]></dc:creator><pubDate>Thu, 27 Feb 2025 17:00:38 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/d4be4af0-027d-4c1e-ab23-ec0a6e32c34a_1024x1024.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.trickybits.blog/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.trickybits.blog/subscribe?"><span>Subscribe now</span></a></p><h3>History</h3><p><em>&#8220;You are responsible for the assembly your code creates.&#8221; - Mike Acton</em></p><p>So about 20 years ago, I was at <a href="https://insomniac.games">Insomniac Games</a> and I was attending a software lecture by <a href="https://www.linkedin.com/in/mikeacton/">Mike Acton</a>, who said the above quote during the meeting. I was very early in my career and had just gotten done with my <a href="https://insomniac.games/game/resistance/">second</a> (and final) game with the company.</p><p>And, to be honest, the above quote intimidated me. I was <em>just</em> getting good enough to make sure that what I did at the C++ level worked (and trying to get it done on time). The thought have having to then go and check everything that my code produced at the assembly level felt like another world.</p><p>I don&#8217;t think I was alone in this sentiment, as the general discussion continued onto how we were doing work. Someone made a crack about Fortran in the meeting, to which everyone laughed, with the exception of Mike. Completely deadpan, Mike responded with <em>&#8220;What&#8217;s funny about Fortran&#8230;it creates incredible assembly.&#8221;</em></p><p>Needless to say, this left a mark.</p><h3>Practice with Assembly (or More to the Point&#8230;Not)</h3><p> Admittedly, I really did admire all the folks that were focused at the lowest level (my business partner Rob Wyatt included). And a big part of me really wanted to be that focused there, figuring out how to make it run faster, always.</p><p>I would love to tell you that from that moment on, I was diligent about checking my assembly after I wrote my C++ code.</p><p>I didn&#8217;t.</p><p>Mostly I still had my head up my own ass about the style of the C++ code, did it <em>look</em> good, did it <em>seem</em> maintainable (for whatever the whims of a given place dictated <em>that</em> to mean). And to be fair, it was the main critiques of code reviews at the time (and largely ever since).</p><p>To my credit, I will say that my code did get the job done, whatever it needed to be.</p><p><em>And this was despite the fact that I never looked at the assembly</em>!!!*</p><p>(*Except that one time where I needed to understand why the strict aliasing optimization was failing on some older code and had to explain it. Thanks to Mike Acton for that tip as well).</p><p>But, how?!? How is such a thing possible?</p><p>Well, because the code produced the result that I wanted it to. The behavior matched my needs, I could write tests against it (when I wrote tests), and it worked (mostly) without bugs.</p><p>So I just moved onto the next problem, confident that I have solved the problem.</p><h3>AI in Development&#8230;Is This a Joke?</h3><p>With that out of the way, let&#8217;s fast forward to today&#8217;s world. There seems to be a big debate around whether or not AI models are going to change everything for coding, mainly centering around two camps of &#8220;these are all just toy models and the code it produces isn&#8217;t worth a damn&#8221; to &#8220;oh shit, this is changing everything.&#8221;</p><p>To be honest, this time last year, I was definitely in the first camp&#8230;albeit without having <em>really</em> dived in to understand what was happening. I saw the videos online and largely brushed them off with the same sort of arrogance that I used to judge other people&#8217;s code.</p><p><em>&#8220;Well, stylistically it shouldn&#8217;t be like that&#8230;&#8221;</em></p><p><em>&#8220;Wait, it isn&#8217;t even separating them into different files? Hah, I could do a much better job of making this more modular.&#8221;</em></p><p><em>&#8220;Sure, it is fast to develop&#8230;but will it be maintainable by humans?&#8221;</em></p><p>Over the decades, my instincts have been trained to look at code, having the equivalent of a compiler and runtime running in my head to look at the code and see where it could go wrong. To be sure, this is what every good software has done (&#8230;or just smashes the compile command enough times and fixes stuff until the job is done).</p><p>As code reviews came in, I was given instruction on how to restructure it, make it better, make it this or that&#8230;and I did it&#8230;believing that this was the end-all-be-all. Hell, it was what I got rewarded for as so many places.</p><p>But I missed a big point about all software development.</p><h3>It&#8217;s the Customer, Stupid</h3><p>As much as I can claim to have &#8220;mastered&#8221; the art of code development (and there many that would claim that I had not achieved that by any stretch), there was something fundamental missing.</p><p>I would love to believe that the code that I&#8217;ve written is the ultimate combination of language mastery, insightful use of algorithmic tricks, and, frankly, art. To be honest, most programmers want to believe this. We are a master class of doomsaying in our analysis of code (especially other people&#8217;s) and supreme arrogance in the righteousness of our own code and products. We love to show off for the other programmers to show how badass we are.</p><p>But there is one fact that we typically miss: people don&#8217;t pay you for your code.</p><p>Ever.</p><p>Yep, I can hear you all screaming now, &#8220;but we develop this way so we can easily maintain it&#8221; and &#8220;there is no way a computer can be as insightful as I am&#8221; and &#8220;this guy just sucks.&#8221; And while I&#8217;ll cop to the last point readily, none of these (and more) actually matter.</p><p>What matters is whether or not the functionality that you produce actually matters to other people.</p><p>Does it solve a problem for them?<br>Does it create a great experience for them?<br>Does it save them time?<br>Does it create a great product?<br>Does it make them happy?</p><p><em>Will they pay for it?</em></p><p>It is the complement of Mike&#8217;s quote above:<br><em>&#8220;You are responsible for the functionality that your code produces.&#8221;</em></p><h3>It&#8217;s Always Been Product Engineering</h3><p>So earlier I admitted that a year ago I had been firmly in the camp of &#8220;AI&#8230;what a funny little toy.&#8221; Today I&#8217;ve drunk the Kool Aid and am now in the second camp (the one that says: &#8220;oh shit, this is changing everything&#8221;).</p><p>And the reason for this has a lot to do with why I don&#8217;t check my assembly.</p><p>I started dabbling with AI development, helped by a <a href="https://www.youtube.com/watch?v=bAAbrhb3QoM">useful video</a> that expanded my understanding for how I could actually use the tools. It was like having to unlearn everything I had learnt&#8230;I just could not get my head around everything what the code was doing&#8230;and I felt like I had to&#8230;because that was what good engineers do, right?</p><p>Then it clicked&#8230;maybe it didn&#8217;t matter what the code looked like. Maybe I could focus more on whether I was getting the functionality I wanted and less about the code.</p><p>(As Rob points out: <em>&#8220;After working as a contractor on tons of code bases I don&#8217;t control, I always say that code is just text in a file, compiler doesn&#8217;t care about your fancy formatting and spell checked comments.&#8221;</em></p><p>In other words&#8230;it does not affect the generated assembly or the functionality one bit.<em>)</em></p><p>With that in mind, I started tearing into the development system, attempting thing that I would not have previously&#8230;some thing that were not possible previously:</p><ul><li><p>Developing a UI from an image</p><ul><li><p>I&#8217;m no expert in CSS and HTML (nor will I be)&#8230;but I could just drop an image and let the robot create it for me</p></li><li><p>To be sure&#8230;it did not get it right the first time&#8230;but I could art direct the CSS and HTML (and later PHP) by just telling it to the robot</p></li></ul></li><li><p>Commanding the creation of a Backend Service</p><ul><li><p>I&#8217;m not an expert in writing Python&#8230;but by giving just enough info about the behaviors I wanted, the robot could create a very useful service for me.</p></li><li><p>Again, where it needed augmentations, improvements, or fixes&#8230;I just told it what to do</p></li></ul></li><li><p>Creating a silly game from clip art and sounds</p><ul><li><p>I asked the robot to create a simple side scroller&#8230;adding bits and pieces here and there</p></li><li><p>Generating music for the game using <a href="https://www.udio.com/">Udio</a></p></li><li><p>And dammit&#8230;it worked&#8230;</p></li></ul></li></ul><p>Fundamentally, I started caring more about <em><strong>what</strong></em> I was to achieve, rather than <em><strong>how</strong></em> it was being done.</p><p>And honestly, that is what our customers care about as well. Not about how it looks in code&#8230;but what it does&#8230;and how fast I can tweak it, make it better.</p><p>To be sure&#8230;it is fast. And now I don&#8217;t have to worry about whether I have learnt all the languages I need to make something work.</p><h3>Hard Stuff is Still Hard&#8230;but Maybe a Little Easier</h3><p>Now, before you believe that it is all fun and games&#8230;I&#8217;ll be honest and agree that &#8220;yeah, it is not all there yet.&#8221; There are times when the robot gets messed up, hooked into loops, can&#8217;t figure its own code out.</p><p>So sometimes it is worth sweating it out a bit, falling back on those decades of engineering experience&#8230;and sometimes I just say &#8220;fuck it&#8221; and start all over again&#8230;after all, it might have only taken 20 minutes&#8230;and I know what I want now&#8230;starting from scratch isn&#8217;t so bad.</p><p>(And let&#8217;s face, it programmers&#8230;how many times have you walked into a code base and said &#8220;I don&#8217;t understand what the hell these folks were saying&#8230;I have to rewrite all of this to make sense.&#8221; Is this really any different?)</p><p>To be sure, product-market fit has <em>always</em> been hard&#8230;it has been hard to bring something up to speed, get to a set of customers, get them to try it&#8230;see if it actually would do anything for anyone. And the amount of effort to get something up and running has been herculean.</p><p>Figuring out what customers want is a challenge&#8230;because a lot of times they don&#8217;t even know.</p><p>But imagine a world where you are focusing on the outcomes vs. the construction. Imagine that world is far easier and far faster to get something up and running that let&#8217;s you test your hypotheses for the &#8220;next great product.&#8221;</p><p>Imagine a world where we&#8217;ve shortened the distance between the product person and designer and the actual product. Because that is the world we are heading to increasingly fast. Where your idea can come to life faster than ever before.</p><p>And that&#8217;s a great thing. Because that means that someone doesn&#8217;t need to know all of software engineering (frontend, backend, databases, etc.) to do something amazing.</p><p>It is not perfect today and I would be remiss to make you believe that it all going to be easy. It isn&#8217;t. But much in the same way that compilers and software changed the needs of the underlying assembly and architecture, you can bet your ass that everything will change with this new type of development. We&#8217;ve already architected new types of processors&#8230;how much longer do you really think it will be before we&#8217;ve rearchitected new languages and frameworks to better meet the needs of developing through AI.</p><p>And that just keeps making everyone into a product engineer.</p><h3>To The Diehard Coders</h3><p>To be sure, I don&#8217;t want to go back to the old way of working&#8230;I admittedly <em>want</em> to be focused on the products I create and not how I have to slog to get there.</p><p>Now, for those of you that <em>still</em> want to be coding in the same way that you have, I respect you. <em>Honestly and truly</em> I respect you because I understand where you are coming from. Because I&#8217;ve been there, I grew up there.</p><p>I get the pride. I get the amazing work that you&#8217;ve done. And I get the desire to keep being amazing in that way.</p><p>But I have a bit of advice for you&#8230;which takes us back to the very beginning: I hope you are checking the assembly that your code produces.</p><p>Because if you aren&#8217;t&#8230;then you are accepting that &#8220;it just works&#8221; below whatever level you feel most comfortable working.</p><p>And doesn&#8217;t that describe everyone working with AI to create products today?</p><p>(Ironically&#8230;this was written without the help of AI&#8230;unless you count autocorrect&#8230;.)</p><h3>Addendum - Talking About Optimizations</h3><p>Rob rightly pointed out the following: <em>&#8220;does this mean we no longer care about traditional performance metrics as long as it's fast enough? small enough? What about optimizing for power? Are we going to start getting generally bad code because the robot made something that technically works?&#8221;</em></p><p>So, this is a great point about whether we are going to push important performance metrics by the wayside&#8230;and actually, I&#8217;ll argue that the exact opposite will occur.</p><p>Questions around <em>any</em> performance metrics are fundamentally about behavioral constraints. That is, when I am saying &#8220;I want this faster, I want it smaller, I want it to use less power&#8221;, I am not making any statements about <em>how</em> I do this&#8230;I am back to asking <em>what</em> I want to happen.</p><p>I will fully cop to my early assertion about holding onto code as a form of art&#8230;preciously crafting my class structure in some way like I was Leonardo da Vinci&#8230;but really not giving a damn about performance as long as it &#8220;felt&#8221; good (and admittedly was pretty extensible for what I was using it for).</p><p>Because I held onto the code as a form of art, I wasn&#8217;t doing any kind of measurement around how well it would perform, let alone whether it was small or how much power it used.</p><p>But what if you didn&#8217;t care about the &#8220;look&#8221; of the code, but instead what it did, like I&#8217;ve been saying all along. Then you just add in your constraints for speed, size, power&#8230;in each of these cases, they are all *measurable constraints&#8230;*the kind of things that an optimizers can go nuts with.</p><p>In a world where <a href="https://www.wired.com/2016/03/two-moves-alphago-lee-sedol-redefined-future/">AlphaGo invented new moves for Go</a> and <a href="https://docs.oracle.com/en/java/javase/12/vm/java-hotspot-virtual-machine-performance-enhancements.html">JIT HotSpot compilation</a> exists, it is not a far fetched world to imagine a combination of an LLM and a compiler to loop through and optimize the hell out of whatever functionality with we give it on a particular architecture.</p><p>To ground this in a real world example, let&#8217;s use my earlier example of the Rust ray tracer. Now, developing a ray tracer today in a world of <a href="https://www.nvidia.com/en-us/geforce/rtx/">RTX</a> and <a href="https://openmoonray.org/">MoonRay</a> is a bit silly but, it does have some nice characteristics:</p><ol><li><p>It is simple</p></li><li><p>It lends itself to testing out lots of different optimizations</p></li><li><p>It generates a fun result (i.e. an image)</p></li><li><p>It makes me feel like <a href="https://en.wikipedia.org/wiki/Tron">Kevin Flynn</a> (if you don&#8217;t get the reference, I pity you)</p></li></ol><p>After I got it working, I made it a bit interactive, but it was slow as molasses (I did exactly what I ask, which was to create your run of the mill ray tracer, as simple as can be). Curious if I could make it better, I asked it to make it faster.</p><p>The robot jumped at taking advantage of multi-threading to parallelize the ray casting, which was a big bump in performance (~2 fps to ~20 fps). Then I asked it if it could make any further improvements, where it added in acceleration structures (don&#8217;t quite remember the bump then).</p><p>(To be fair, when I tried to get it to optimize for ARM using NEON instructions, the output image started to fall apart&#8230;so it isn&#8217;t quite all there yet.)</p><p>Nevertheless, despite being an admittedly simple example, it does go back to the original point&#8230;because I cared more about the behavior than the mechanics, I was able to get the robot to keep pushing the performance.</p><p>Who knows, if my belief in LLM + compiler is right, then maybe the language of the future is actually&#8230;assembly.</p><p><strong>Next Up - PJ&#8217;s Money Where His Mouth Is: Shipping an Application That People Pay For (Can he do it?!?)</strong></p><p><em>Big shout out to Hans Ku and Maggie Wiedner for handing me some Kool Aid on AI development.</em></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.trickybits.blog/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 Tricky Bits Substack! 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>]]></content:encoded></item><item><title><![CDATA[Coming soon]]></title><description><![CDATA[This is Tricky Bits Substack.]]></description><link>https://www.trickybits.blog/p/coming-soon</link><guid isPermaLink="false">https://www.trickybits.blog/p/coming-soon</guid><dc:creator><![CDATA[Rob Wyatt]]></dc:creator><pubDate>Sun, 19 Jan 2025 02:12:06 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!uZc5!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75c16ad4-8018-4103-96b8-cbf03d34ca01_250x250.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>This is Tricky Bits Substack.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.trickybits.blog/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.trickybits.blog/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item><item><title><![CDATA[WWDC Predictions]]></title><description><![CDATA[Enjoying the show?]]></description><link>https://www.trickybits.blog/p/wwdc-predictions-5dc</link><guid isPermaLink="false">https://www.trickybits.blog/p/wwdc-predictions-5dc</guid><dc:creator><![CDATA[Rob Wyatt]]></dc:creator><pubDate>Sun, 02 Jun 2024 18:00:00 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/158004556/4a0c9e05c7249bba31417f8bf484146e.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p><a href="https://www.buzzsprout.com/twilio/text_messages/2293587/open_sms">Enjoying the show? Hating the show? Want to let us know either way? Text us!</a></p><p>WWDC is coming up and Rob and PJ have some opinions!<br><br>AI is in the air for everyone this season and WWDC is likely going to be no exception....but with so much AI processing happening in the cloud and Apple having been so focused on data privacy, security, AND user experience...how IS Apple going to thread this needle?<br><br>Will they push more stuff to the cloud to bring the widest support to folks?<br>WIll they deprecate more hardware to make the user experience the best they can do?<br>Should they even bother with AI at this time in any meaningful way ahead of having some strong use cases?<br><br>Join Rob and PJ as they make some prediction ahead of WWDC...and see how well they did during the event itself!<br><br><br></p>]]></content:encoded></item><item><title><![CDATA[Microsoft's Arming with ARM for the Future...But Is This a Break From History?]]></title><description><![CDATA[Enjoying the show?]]></description><link>https://www.trickybits.blog/p/microsofts-arming-with-arm-for-the-1ca</link><guid isPermaLink="false">https://www.trickybits.blog/p/microsofts-arming-with-arm-for-the-1ca</guid><dc:creator><![CDATA[Rob Wyatt]]></dc:creator><pubDate>Mon, 27 May 2024 16:00:00 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/158004557/046d52ecc2943a4dda1bf038a0eea855.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p><a href="https://www.buzzsprout.com/twilio/text_messages/2293587/open_sms">Enjoying the show? Hating the show? Want to let us know either way? Text us!</a></p><p>Microsoft recently introduced its CoPilot + PCs as a fully integrated lineup...based on ARM processors (Qualcomm's Snapdragon specifically), unified memory, and requirements around the onboard TPUs.<br><br>Hmm...sound very Apple-like, no?<br><br>With an apparent revitalized push back into the consumer space, what does this mean for the future of the hardware? Specifically, the Wintel era meant infinite flexibility, configurability, and backwards compatibility, stemming all the way back in time.<br><br>Will the voices of prosumer builders be silenced on Windows? Will developers rejoice as Windows powered machines with MacBook form factors come to bear? Could this actually be better for everyone to have more stable hardware platforms?<br><br>Come join us as we dive into these topics to prognosticate towards a potentially better future for computing...</p>]]></content:encoded></item><item><title><![CDATA[The Emperor Has No Clothes : Tech is Boring]]></title><description><![CDATA[Enjoying the show?]]></description><link>https://www.trickybits.blog/p/the-emperor-has-no-clothes-tech-is-76c</link><guid isPermaLink="false">https://www.trickybits.blog/p/the-emperor-has-no-clothes-tech-is-76c</guid><dc:creator><![CDATA[Rob Wyatt]]></dc:creator><pubDate>Sat, 18 May 2024 13:00:00 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/158004558/8b9499d8deb83e0998f0c6e81f3c5bfc.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p><a href="https://www.buzzsprout.com/twilio/text_messages/2293587/open_sms">Enjoying the show? Hating the show? Want to let us know either way? Text us!</a></p><p>Hype is all around around the tech stories that are out there....<br><br>Apple has a terrible ad for a thinner iPad!<br>Google is leaving San Fran and moving jobs overseas!<br>Announcements around AI that is going to revolutionize everything!!!<br>Tech companies are acting like big corporations!!!<br><br>Maybe it is just us...but does anyone get the impression that tech news is actually a bit boring right now?&nbsp;<br><br>Perhaps we are just exhausted from the constant barrage of "bigger", "smaller", "better", "faster", "newer", "revolutionary, "evolutionary", "different"...<br><br>But it does feel like a moment when tech is really trying to keep its whizz bang growth cycle going...and not start to admit that these companies, while still wildly profitably, are transforming into the value, blue chip stocks (oh, no, we're IBM!) who are trying to eek out more profit from ads on smart TVs rather than actually innovate.<br><br>Join us as we rant a little bit on the current state of affairs!</p>]]></content:encoded></item><item><title><![CDATA[CPUs, GPUs, TPUs, Neural Engines, and the Rest]]></title><description><![CDATA[Enjoying the show?]]></description><link>https://www.trickybits.blog/p/cpus-gpus-tpus-neural-engines-and-2f6</link><guid isPermaLink="false">https://www.trickybits.blog/p/cpus-gpus-tpus-neural-engines-and-2f6</guid><dc:creator><![CDATA[Rob Wyatt]]></dc:creator><pubDate>Fri, 26 Apr 2024 17:00:00 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/158004559/ace6f838080e39d2f83dc249c0b8a239.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p><a href="https://www.buzzsprout.com/twilio/text_messages/2293587/open_sms">Enjoying the show? Hating the show? Want to let us know either way? Text us!</a></p><p>CPUs have been around for forever as the heart of computers....then came GPUs to enable cool real time graphics...and later bitcoin mining...then some clever folks figured out how train AIs on them...which leads to a new explosion of processing units tuned specifically for AI development (see Google's TPUs, Apple's Neural Engines, Meta's MTIAs).<br><br>Why do we have them all? And what the heck do they all mean? And why should we care?&nbsp;<br><br>Come explore a bit of the magic and differences amongst these different types of processing units that is powering your phones, games, and the explosion in AI development!<br><br><br><br><br></p>]]></content:encoded></item><item><title><![CDATA[Hacking the Apple M-Series via Prefetching Exploits]]></title><description><![CDATA[Enjoying the show?]]></description><link>https://www.trickybits.blog/p/hacking-the-apple-m-series-via-prefetching-d36</link><guid isPermaLink="false">https://www.trickybits.blog/p/hacking-the-apple-m-series-via-prefetching-d36</guid><dc:creator><![CDATA[Rob Wyatt]]></dc:creator><pubDate>Tue, 16 Apr 2024 19:00:00 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/158004560/54731865c1006db24af30d69be6a76e8.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p><a href="https://www.buzzsprout.com/twilio/text_messages/2293587/open_sms">Enjoying the show? Hating the show? Want to let us know either way? Text us!</a></p><p>In the arms race of computational performance gains and big market splashes...security issues can pop their ugly head, something going all the way down to the hardware level...and when they happen, they can be brutal.<br><br>In this episode of Tricky Bits, Rob and PJ discuss a recent article and research on hacking into the M-series chips, using clever attacks to extract data that is, ideally, supposed to be kept secret.&nbsp;<br><br>What are the nitty gritty details of how this attack is successful?<br><br>How does company culture and processes affect approaches to hardware development?&nbsp;<br><br>And did we back ourselves into a corner by becoming less efficient programmers?<br><br>Link to article:&nbsp;<br>https://arstechnica.com/security/2024/03/hackers-can-extract-secret-encryption-keys-from-apples-mac-chips/<br><br>Link to research:<br>https://gofetch.fail/</p>]]></content:encoded></item><item><title><![CDATA[Interview with NeuroSync Labs]]></title><description><![CDATA[Enjoying the show?]]></description><link>https://www.trickybits.blog/p/interview-with-neurosync-labs-adf</link><guid isPermaLink="false">https://www.trickybits.blog/p/interview-with-neurosync-labs-adf</guid><dc:creator><![CDATA[Rob Wyatt]]></dc:creator><pubDate>Tue, 09 Apr 2024 17:00:00 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/158004561/d7c2fdb7aea70d6a9b8426e6cd2dab5b.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p><a href="https://www.buzzsprout.com/twilio/text_messages/2293587/open_sms">Enjoying the show? Hating the show? Want to let us know either way? Text us!</a></p><p>Ever wondered why a virtual rollercoaster can leave your stomach in knots, despite never leaving your living room? Strap in and brace yourself as we unpack the enigma of VR-induced nausea with the expert insights of Nemanja Milosavljevic from Neurosync Labs. Our latest episode of Tricky Bits zooms in on the battle between our eyes and our inner ear when diving into the digital deep end, bringing to light the vestibular system's pivotal role in the physical disorientation we face in virtual landscapes.<br><br>Hold onto your headsets &#8212; this session isn't just about identifying problems; we're all about the solutions. Learn about how the groundbreaking C-Infinity device can sync your senses, offering an immersive experience with a solid grip on reality. By integrating force measurements with natural motion, this ergonomic innovation could be the key to unlocking a future of comfortable, nausea-free virtual exploration for a number of VR experiences. <br><br>Join us as we envision an electrifying era of VR, where the technology we discuss today might just redefine our gaming experiences tomorrow.<br><br>NeuroSync Labs:&nbsp; <a href="http://www.neurosyncvr.com/">https://neurosyncvr.com/</a><br><br></p>]]></content:encoded></item><item><title><![CDATA[Why is Hardware Hard?]]></title><description><![CDATA[Enjoying the show?]]></description><link>https://www.trickybits.blog/p/why-is-hardware-hard-efd</link><guid isPermaLink="false">https://www.trickybits.blog/p/why-is-hardware-hard-efd</guid><dc:creator><![CDATA[Rob Wyatt]]></dc:creator><pubDate>Mon, 01 Apr 2024 03:00:00 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/158004562/daa4d5efda53f3b2c675fd4a084be67f.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p><a href="https://www.buzzsprout.com/twilio/text_messages/2293587/open_sms">Enjoying the show? Hating the show? Want to let us know either way? Text us!</a></p><p>Hardware is where the digital meets up with physical reality.<br><br>In the modern world, software can be developed and deployed worldwide in timescales measured in minutes....but despite advances in development, consumer hardware at scale still presents many difficult challenges.<br><br>Although there are many modern avenues to prototyping hardware solutions, making the leap beyond RPi, Arduino, ESP level projects into mass market devices encounters challenges including funding, development, manufacturing, shipping, supply chains, and revenue models.<br><br>In this episode, Rob and PJ explore the world of hardware development, understand its pitfalls, and look at where it might be going.</p>]]></content:encoded></item><item><title><![CDATA[Potpurri: Big and Small Media Prequel]]></title><description><![CDATA[Enjoying the show?]]></description><link>https://www.trickybits.blog/p/potpurri-big-and-small-media-prequel-5b9</link><guid isPermaLink="false">https://www.trickybits.blog/p/potpurri-big-and-small-media-prequel-5b9</guid><dc:creator><![CDATA[Rob Wyatt]]></dc:creator><pubDate>Wed, 13 Mar 2024 21:00:00 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/158004563/e128ca960f663d9c32de29f4feae7b19.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p><a href="https://www.buzzsprout.com/twilio/text_messages/2293587/open_sms">Enjoying the show? Hating the show? Want to let us know either way? Text us!</a></p><p>So much of Tricky Bits is an ongoing conversation between Rob and PJ about various tech topics. This particular episode revisits some old topics around game development, its history and costs, and what factors come into play that shape the market today.<br><br>As a heads up...this one is more conversational than some of the past episodes as we&nbsp; build up to a larger discussion for a future conversation around big and small media in various contexts (games, movies, television).<br><br>&nbsp;Finally...we announce our Discord server, where you can comment on individual episodes. You can find the link to the thread for this episode here: https://discord.com/channels/1146929485694902282/1217606185159491695<br><br>Come let us know what you think!</p>]]></content:encoded></item><item><title><![CDATA[Apple and Generative AI]]></title><description><![CDATA[Enjoying the show?]]></description><link>https://www.trickybits.blog/p/apple-and-generative-ai-99e</link><guid isPermaLink="false">https://www.trickybits.blog/p/apple-and-generative-ai-99e</guid><dc:creator><![CDATA[Rob Wyatt]]></dc:creator><pubDate>Thu, 07 Mar 2024 20:00:00 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/158004564/51d3243a9c01969badfbc3bbd1d40444.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p><a href="https://www.buzzsprout.com/twilio/text_messages/2293587/open_sms">Enjoying the show? Hating the show? Want to let us know either way? Text us!</a></p><p>Could Apple be quietly gearing up to redefine the AI landscape? With all eyes on Siri's evolution and Apple's famed secrecy, we delve into the tech giant's delicate dance between user privacy and the cutting edge of AI innovations. Join Rob and PJ&nbsp; as we unravel Apple's enigmatic strategy, considering the possible hardware constraints and their steadfast commitment to a reliable assistant amidst the whirlwind of AI advancements.<br><br>Apple's Siri has been a household name, but it's not without its critics. In this episode, we dissect the challenges it faces, balancing user privacy with the need for more personal and proactive functionalities. We speculate on the potential for Apple to introduce more generative AI capabilities and how this might revolutionize user experience while sticking to their privacy-first mantra. Moreover, we explore the juxtaposition of Apple's hardware prowess with their approach to personalized AI, pondering the efficiency and practicality of running inference models on mobile devices.<br><br>Wrapping up our deep dive, we tackle the broad implications of AI in our daily tech interactions. From ethical concerns over data usage to the burgeoning role of edge computing, we question whether AI will be the next big revolution or a passing trend.<br><br>(And yes...this description WAS in fact generated from the Episode transcript and AI...wild times, right folks?<br><br>You know what what is really going to get your noodle later on? Did the AI write this footer? )</p>]]></content:encoded></item><item><title><![CDATA[Who Gets Hired, Fired, and Why?]]></title><description><![CDATA[Enjoying the show?]]></description><link>https://www.trickybits.blog/p/who-gets-hired-fired-and-why-60d</link><guid isPermaLink="false">https://www.trickybits.blog/p/who-gets-hired-fired-and-why-60d</guid><dc:creator><![CDATA[Rob Wyatt]]></dc:creator><pubDate>Wed, 28 Feb 2024 12:00:00 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/158004565/7d27eb08539897fd8e5ee9d9f90f545a.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p><a href="https://www.buzzsprout.com/twilio/text_messages/2293587/open_sms">Enjoying the show? Hating the show? Want to let us know either way? Text us!</a></p><p>2024 and Tech Layoffs still continue...more than a headline; they're a wake-up call to evaluate the true resilience of our skills in an ever-changing industry. In this episode, we take on a tough subject to better understand the realities of job security, debunking the myth that exceptional programmers are safeguarded from the chopping block.&nbsp;<br><br>We also challenge the notion of generalist vs. specialist and instead focus on the all important question of "what is the value delivered" and "what skills do you need to deliver that value."<br><br>Finally...we remind everyone... your self worth is not something that is defined by any company...you have value far and above your job.</p>]]></content:encoded></item><item><title><![CDATA[Why Are Maps Hard? - Interview with Cory Whittaker]]></title><description><![CDATA[Enjoying the show?]]></description><link>https://www.trickybits.blog/p/why-are-maps-hard-interview-with-2b7</link><guid isPermaLink="false">https://www.trickybits.blog/p/why-are-maps-hard-interview-with-2b7</guid><dc:creator><![CDATA[Rob Wyatt]]></dc:creator><pubDate>Tue, 20 Feb 2024 13:00:00 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/158004566/80fc695f09a4fdd5220814c13b0d2007.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p><a href="https://www.buzzsprout.com/twilio/text_messages/2293587/open_sms">Enjoying the show? Hating the show? Want to let us know either way? Text us!</a></p><p>Maps...we use them almost every day of our lives.....but...what makes maps hard? From the paper maps we used to pull out on car trips to the digital and dynamic maps that we have our smart phones, the problems around making and maintaining maps have been with us for a while. Fortunately...we've got an expert to help us out here.<br><br>Cory Whittaker, a long time self professed "map nerd", takes Rob and PJ on a journey on maps and how they are used in the modern day.<br><br>Come and join us for our first interview episode!<br><br><br></p>]]></content:encoded></item><item><title><![CDATA[XBox Predictions and Announcements]]></title><description><![CDATA[Enjoying the show?]]></description><link>https://www.trickybits.blog/p/xbox-predictions-and-announcements-27a</link><guid isPermaLink="false">https://www.trickybits.blog/p/xbox-predictions-and-announcements-27a</guid><dc:creator><![CDATA[Rob Wyatt]]></dc:creator><pubDate>Sun, 18 Feb 2024 05:00:00 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/158004567/4417dbc2124060e47a1050e193cbc00b.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p><a href="https://www.buzzsprout.com/twilio/text_messages/2293587/open_sms">Enjoying the show? Hating the show? Want to let us know either way? Text us!</a></p><p>Rumblings of a major XBox announcement in a post Activision/Blizzard acquisition world slated for mid-Feb 2024 started a number of rumors around what might happen...would all XBox games go cross platform?&nbsp; What would this mean for the XBox hardware?!?<br><br>Then on Feb 15th....Phil Spencer, Sarah Bond, and Matt Booty fulfilled the special announcement...with a whopping 4 games (all unnamed) slated to go cross platform...followed by a lot of corp speak. And, ahead of that, there was an internal meeting where they seemed to be doubling down on the XBox hardware.<br><br>So it seemed like the wild speculations...were untrue....or were they?<br><br>In this episode, Rob and PJ pick apart the XBox strategy...analyze what is there and speculate what is still yet to come...</p>]]></content:encoded></item><item><title><![CDATA[Apple Vision Pro + Amazon and Alphabet Dividends]]></title><description><![CDATA[Enjoying the show?]]></description><link>https://www.trickybits.blog/p/apple-vision-pro-amazon-and-alphabet-0ba</link><guid isPermaLink="false">https://www.trickybits.blog/p/apple-vision-pro-amazon-and-alphabet-0ba</guid><dc:creator><![CDATA[Rob Wyatt]]></dc:creator><pubDate>Tue, 13 Feb 2024 16:00:00 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/158004568/fde832233359fe445af42736a3ccac05.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p><a href="https://www.buzzsprout.com/twilio/text_messages/2293587/open_sms">Enjoying the show? Hating the show? Want to let us know either way? Text us!</a></p><p>We chatted about the Apple Vision Pro previously and now the reviews are in....how are they stacking up for the Vision Pro and how did our predictions work out for themselves, so far? And what predictions to we have from here?<br><br>Also...Meta announced dividends at its last earnings call...and now Goldman Sachs analysts are (maybe) portending that this will lead Alphabet and Amazon to do the same. But do we actually think that this is as imminent as the headlines suggest?&nbsp;<br><br>As an aside....PJ published a blog post about this very topic on 2.7.2024...check it out here: https://trickybitsblog.github.io/2024/02/07/meta-earnings-report-dividend.html</p>]]></content:encoded></item><item><title><![CDATA[Performance Reviews, Company Culture, Bad Incentives]]></title><description><![CDATA[Enjoying the show?]]></description><link>https://www.trickybits.blog/p/performance-reviews-company-culture-1b2</link><guid isPermaLink="false">https://www.trickybits.blog/p/performance-reviews-company-culture-1b2</guid><dc:creator><![CDATA[Rob Wyatt]]></dc:creator><pubDate>Wed, 07 Feb 2024 03:00:00 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/158004569/4df0ab11544c8c1358bead1fb2749586.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<p><a href="https://www.buzzsprout.com/twilio/text_messages/2293587/open_sms">Enjoying the show? Hating the show? Want to let us know either way? Text us!</a></p><p>Performance Reviews! Everyone's most beloved topic and favorite activity...but how does that impact company culture...and what kind of incentives do they give rise to?&nbsp;<br><br>Rob and PJ dive deep into these questions and explore how much past behaviors that gave rise to success....actually become more important that the pursuit of success itself?</p>]]></content:encoded></item></channel></rss>