<?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[Jawad Abu-Zakhem]]></title><description><![CDATA[Jawad Abu-Zakhem]]></description><link>https://jawadaz791637.substack.com</link><image><url>https://substackcdn.com/image/fetch/$s_!e3aY!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F608e16e3-c748-45b4-8bdb-06b4f0a043af_663x663.jpeg</url><title>Jawad Abu-Zakhem</title><link>https://jawadaz791637.substack.com</link></image><generator>Substack</generator><lastBuildDate>Sun, 26 Jul 2026 10:29:42 GMT</lastBuildDate><atom:link href="https://jawadaz791637.substack.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Jawad AZ]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[jawadaz791637@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[jawadaz791637@substack.com]]></itunes:email><itunes:name><![CDATA[Jawad Abu-Zakhem]]></itunes:name></itunes:owner><itunes:author><![CDATA[Jawad Abu-Zakhem]]></itunes:author><googleplay:owner><![CDATA[jawadaz791637@substack.com]]></googleplay:owner><googleplay:email><![CDATA[jawadaz791637@substack.com]]></googleplay:email><googleplay:author><![CDATA[Jawad Abu-Zakhem]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[The Only Thing That Isn’t Negotiable]]></title><description><![CDATA[On naming authority, information control, and the one counter-structure available to contributors in Desert organizations.]]></description><link>https://jawadaz791637.substack.com/p/the-only-thing-that-isnt-negotiable</link><guid isPermaLink="false">https://jawadaz791637.substack.com/p/the-only-thing-that-isnt-negotiable</guid><dc:creator><![CDATA[Jawad Abu-Zakhem]]></dc:creator><pubDate>Thu, 23 Apr 2026 19:13:51 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!e3aY!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F608e16e3-c748-45b4-8bdb-06b4f0a043af_663x663.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Some organizations make the people inside them more than they were. Others consume them. This essay is about one structural reason why.</p><p>In hierarchies, almost everything is negotiable.</p><p>Roles shift. Responsibilities reassign. What counted as contribution last quarter gets renamed as something else this quarter. Value is a moving target. Credit migrates. Even the work itself gets reframed: the project that was strategic becomes a side effort, the feature that shipped becomes a prototype, the year of delivery becomes six sentences in a review.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://jawadaz791637.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>The one thing that doesn&#8217;t move is authority over the naming.</p><p>Pierre Bourdieu called this <em>symbolic power</em>. The power to make things real by stating them.</p><blockquote><p>&#8220;Symbolic power is the power to make things with words.&#8221;</p></blockquote><p>In organizational settings, it operates as the quiet privilege of deciding what the landscape is: what counts as a project, what counts as a contribution, what counts as a problem worth solving, what counts as done.</p><p>Everything downstream of naming is fluid by design. The fluidity is the feature. If roles and responsibilities were fixed, the naming authority would have nothing to rearrange. The whole system runs on the asymmetry between those who do the work and those who decide what the work was.</p><p>James Scott described the parallel mechanism at state scale in <em>Seeing Like a State</em>. Authorities impose legibility on complex realities so the realities become governable. The imposed categories are never neutral. They privilege what the authority can see and measure, and they erase what they can&#8217;t. Inside organizations, the same move happens at smaller scale: a manager&#8217;s framing of a project becomes the project, regardless of what the contributors experienced or delivered.</p><div><hr></div><h2><strong>The mechanism is sharper than &#8220;hoarding&#8221; suggests</strong></h2><p>The standard critique names this as information hoarding. The phenomenon is more precise than that.</p><p>Andrew Pettigrew&#8217;s 1972 study of gatekeeping treated information filtering as a political tactic and a power resource, framing organizational decision-making itself as a political process<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a>. Michel Crozier&#8217;s earlier analysis of organizational power described it as control over &#8220;zones of uncertainty&#8221;, power accrues to whoever controls the ambiguities others must resolve to act<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a>.</p><p>Information isn&#8217;t just withheld. It&#8217;s sequenced. Released to different audiences at different times. Pre-framed before it reaches contested ground. What looks like communication is often the opposite: the maintenance of ambiguity zones the authority can resolve in its favor when the moment serves.</p><p>The wiki that goes stale and isn&#8217;t updated. The handoff meeting that runs thirty minutes. The review that summarizes a year of work in a paragraph. The failed project that cannot be postmortemed because it was never measured. The team briefed before the contributor is invited. The framing seeded in one room and the invitation extended to another room only after.</p><p>These aren&#8217;t oversights. They are acts of selective authorship.</p><div><hr></div><h2><strong>Why pathological modes don&#8217;t look pathological from inside</strong></h2><p>Ron Westrum&#8217;<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-3" href="#footnote-3" target="_self">3</a>s typology names three organizational cultures: generative, bureaucratic, pathological. In generative cultures information flows freely and messengers aren&#8217;t shot. In pathological cultures information is hoarded and responsibility shirked.</p><p>What&#8217;s less often noticed is that the pathological mode doesn&#8217;t look pathological from the inside. It looks like management.</p><p>Every individual act of framing, hoarding, or renaming has operational cover. The defense is always: <em>I was within my authority</em>. The indictment is the same sentence.</p><p>Authority to do harm doesn&#8217;t unmake the harm. Procedural cover doesn&#8217;t unmake moral content<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-4" href="#footnote-4" target="_self">4</a>. The cover is the mechanism by which the harm stays invisible to the organization&#8217;s own record of itself.</p><div><hr></div><h2><strong>What defense exists against naming authority you don&#8217;t have?</strong></h2><p>The honest answer is: not much.</p><p>But there is one counter-structure available.</p><p><strong>Written record.</strong></p><p>Not verbal agreements. Not meetings. Not shared understandings. Written artifacts that exist independently of whoever controls the current naming.</p><p>Written record doesn&#8217;t win against authority. Authority can ignore it, reframe it, suppress it. But it shifts the cost of doing so. In organizations with accountability structures, rewrites must be actively produced rather than passively assumed. In bureaucratic-territorial organizations, written record activates jurisdictional reflexes that narrative alone doesn&#8217;t. Only in Desert organizations without either structure does written record become pure archaeology, operationally inert in the present, but available to future readers the current authority cannot control.</p><p>This is why the discipline of &#8220;nothing verbal, everything written&#8221; matters in hostile organizational environments. Not because written record protects contributors. Because the absence of written record leaves naming authority unchecked. The existence of written record forces the naming authority to work for its rewrites.</p><div><hr></div><h2><strong>Diagnostic questions</strong></h2><p>The practical implication for evaluating organizations - from the inside, or before joining- is that the single most diagnostic question is not about culture, values, or mission statements.</p><p>It&#8217;s about where naming authority lives and whether the mechanisms that check it exist structurally.</p><ul><li><p>Who decides what counts as done?</p></li><li><p>Who writes the record of what was delivered?</p></li><li><p>Who authors the framing of contributions?</p></li><li><p>What independent artifacts exist that the naming authority cannot simply rewrite?</p></li></ul><p>In organizations where those mechanisms are weak or absent, everything a contributor does is negotiable except what a manager decides it was.</p><p>In organizations where those mechanisms are robust - engineering blogs, technical ladders, DORA metrics, direct user feedback, peer-reviewed decisions - the naming authority is constrained by structures that exist outside any individual&#8217;s control.</p><p>The first kind consumes people.</p><p>The second kind compounds their work.</p><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>Pettigrew, A. M. (1972). &#8220;Information Control as a Power Resource.&#8221; <em>Sociology</em>, 6, 187&#8211;204.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p>Crozier, M. (1964). <em>The Bureaucratic Phenomenon</em>. University of Chicago Press.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-3" href="#footnote-anchor-3" class="footnote-number" contenteditable="false" target="_self">3</a><div class="footnote-content"><p>https://dora.dev/capabilities/generative-organizational-culture/</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-4" href="#footnote-anchor-4" class="footnote-number" contenteditable="false" target="_self">4</a><div class="footnote-content"><p>Arendt, H. (1963). <em>Eichmann in Jerusalem: A Report on the Banality of Evil</em>.</p><p></p></div></div>]]></content:encoded></item><item><title><![CDATA[Smalltalk’s Ghost]]></title><description><![CDATA[The Features Modern Languages Keep Rediscovering]]></description><link>https://jawadaz791637.substack.com/p/smalltalks-ghost</link><guid isPermaLink="false">https://jawadaz791637.substack.com/p/smalltalks-ghost</guid><dc:creator><![CDATA[Jawad Abu-Zakhem]]></dc:creator><pubDate>Tue, 23 Dec 2025 18:09:22 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!I5Yu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbf129e8-6733-4c21-b5ed-129f8f3255a4_1319x315.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Smalltalk-80 wasn&#8217;t just influential, it was <strong>definitional</strong>. Almost everything you touch daily in modern programming comes from work done at Xerox PARC in the late 1970s and early 1980s. But the timeline matters, and so do the details.</p><h2><strong>The Core Inheritance</strong></h2><h3><strong>1. Object Model (The Foundation)</strong></h3><p>Everything in Smalltalk is an object, including classes, methods, and blocks. Message passing serves as the universal interaction mechanism. The system uses single inheritance with protocols (what other languages later called interfaces). Dynamic dispatch handles polymorphism through late binding.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://jawadaz791637.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to 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><strong>What made it to successors:</strong></p><ul><li><p><strong>Java/C#</strong>: Adopted class-based OOP with static typing, a deliberate choice that traded Smalltalk&#8217;s dynamic flexibility for compile-time safety and tooling. Used interfaces to enable polymorphism within those constraints.</p></li><li><p><strong>C++</strong>: Added OOP to C while maintaining backward compatibility, choosing multiple inheritance (which Smalltalk deliberately avoided) and direct function calls over Smalltalk&#8217;s message-passing model.</p></li><li><p><strong>Ruby/Python</strong>: Stayed closer to Smalltalk&#8217;s dynamic approach, everything&#8217;s an object, dynamic typing, metaprogramming capabilities intact.</p></li><li><p><strong>Objective-C</strong>: Preserved message passing semantics, which is why <code>[obj doSomething:arg]</code> represents real message dispatch through <code>objc_msgSend</code>, not direct method calls.</p></li></ul><h3><strong>2. Blocks and Closures</strong></h3><p>Smalltalk&#8217;s journey with blocks tells a more complex story than &#8220;since 1972.&#8221;</p><p><strong>The evolution:</strong></p><ul><li><p><strong>Smalltalk-72</strong> had code enclosed in brackets, but these were textual interpretations, not true closures</p></li><li><p><strong>Smalltalk-76</strong> introduced compiled bytecodes and &#8220;remote contexts&#8221;, the first real closure semantics with lexical scoping</p></li><li><p><strong>Smalltalk-80</strong> (publicly released in 1983, despite its name) refined the implementation with the <code>BlockContext </code>class</p></li></ul><p>So the syntax existed early, but true closure semantics emerged through the mid-1970s.</p><p><strong>When other languages caught up:</strong></p><ul><li><p><strong>C++11 (2011)</strong>: Lambda expressions after 35 years: </p><p><code>[](int x) { return x * 2; }</code></p></li><li><p><strong>Java 8 (2014)</strong>: Lambda expressions after 38 years: <code>x -&gt; x * 2</code></p></li><li><p><strong>C# 3.0 (2007)</strong>: Lambda expressions after 31 years: <code>x =&gt; x * 2</code></p></li></ul><p>Static typing made closures technically challenging to implement correctly. Smalltalk&#8217;s dynamic nature made them straightforward.</p><h3><strong>3. Collections &amp; Higher-Order Functions</strong></h3><p>Smalltalk had <code>collect:</code>, <code>select:</code>, <code>reject:</code>, <code>inject:into:</code> from Smalltalk-80 onward.</p><p><strong>Modern equivalents:</strong></p><ul><li><p><strong>Java Streams</strong> (2014): <code>map()</code>, <code>filter()</code>, <code>reduce()</code> essentially Smalltalk&#8217;s API with different syntax</p></li><li><p><strong>C# LINQ</strong> (2007): Same operations with query-expression syntax</p></li><li><p><strong>C++ STL algorithms</strong> (1994): <code>std::transform</code>, <code>std::for_each</code> arrived before Java Streams, using template-based function objects</p></li></ul><p>The STL represents an interesting case: Alexander Stepanov&#8217;s work at HP predated Java&#8217;s collections framework by two decades, and while it wasn&#8217;t directly inspired by Smalltalk, it addressed similar problems with different constraints (C++ templates vs. dynamic dispatch).</p><h3><strong>4. UI Frameworks and MVC</strong></h3><p>MVC was created by Trygve Reenskaug in <strong>1978-79</strong> while visiting Xerox PARC, for Smalltalk-79/80. His original memo dates to December 10, 1979. Jim Althoff later implemented MVC for the Smalltalk-80 class library.</p><p><strong>Descendants:</strong></p><ul><li><p><strong>Swing/AWT</strong> (Java): Drew widget hierarchy patterns from Smalltalk</p></li><li><p><strong>WPF/WinForms</strong> (C#): Similar approach</p></li><li><p><strong>Qt</strong> (C++): Studied Smalltalk&#8217;s design carefully, among the most faithful to the original principles</p></li><li><p><strong>Modern web frameworks</strong>: React/Vue/Angular rediscovered MVC variants, often under different names</p></li></ul><p><strong>Live UI editing:</strong> Smalltalk&#8217;s image-based environment let you modify running GUI code and see changes instantly. Modern &#8220;hot reload&#8221; approximates this but typically requires restart boundaries, a tradeoff for file-based development and separate compilation.</p><div><hr></div><h2><strong>What Got Lost in Translation</strong></h2><h3><strong>Image-Based Development</strong></h3><p>Smalltalk had no &#8220;files&#8221; in the conventional sense. The entire development environment was a living object graph saved and loaded as an image. You debugged by <strong>editing code in the stack trace</strong> and continuing execution from that point.</p><p><strong>What happened:</strong></p><ul><li><p>Java/C#/C++: Used text file-based development with separate compilation</p></li><li><p>Debuggers lost the ability to edit code mid-execution (a tradeoff for ahead-of-time compilation and deployment models)</p></li><li><p><strong>REPL culture</strong> (Python/Ruby/Clojure) is the closest remnant, but still fundamentally file-centric</p></li></ul><h3><strong>True Message Passing</strong></h3><p>In Smalltalk, <code>2 + 3</code> sends the message <code>+</code> with argument <code>3</code> to object <code>2</code>. Everything operates through message dispatch.</p><p><strong>What happened:</strong></p><ul><li><p><strong>Java/C#</strong>: Method calls are direct function invocations with implicit <code>this</code>, no runtime message interception without reflection</p></li><li><p><strong>C++</strong>: Virtual functions provide polymorphism through <code>vtables</code>, but retain function-call semantics</p></li><li><p><strong>Objective-C</strong>: Kept message passing through its <code>objc_msgSend</code> runtime, maintaining Smalltalk&#8217;s flexibility</p></li></ul><h3><strong>Simplicity</strong></h3><p>Smalltalk has <strong>6 pseudo-variables</strong> that function as reserved words: <code>nil</code>, <code>true</code>, <code>false</code>, <code>self</code>, <code>super</code>, and <code>thisContext</code>. The entire syntax famously fits on a postcard (though this is Alan Kay folklore from his lectures rather than a published claim).</p><p><strong>What happened:</strong></p><ul><li><p><strong>Java</strong>: 51 reserved keywords plus 17 contextual keywords (68 total)</p></li><li><p><strong>C#</strong>: 77 reserved keywords plus ~46 contextual keywords (~123 total)</p></li><li><p><strong>C++</strong>: Numerous keywords accumulated across multiple standards</p></li></ul><h3><strong>Exception Handling</strong></h3><p>Smalltalk-80&#8217;s initial release used a primitive <code>#error:</code> mechanism. The sophisticated <code>on:do:</code> exception handling with resumption semantics developed progressively through the <strong>1980s and 1990s</strong>, formalized in the <strong>ANSI Smalltalk standard (1998)</strong>. Smalltalk pioneered modern exception handling in the late 90&#8217;s.</p><div><hr></div><h2><strong>The Line of Descent</strong></h2><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!I5Yu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbf129e8-6733-4c21-b5ed-129f8f3255a4_1319x315.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!I5Yu!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbf129e8-6733-4c21-b5ed-129f8f3255a4_1319x315.png 424w, https://substackcdn.com/image/fetch/$s_!I5Yu!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbf129e8-6733-4c21-b5ed-129f8f3255a4_1319x315.png 848w, https://substackcdn.com/image/fetch/$s_!I5Yu!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbf129e8-6733-4c21-b5ed-129f8f3255a4_1319x315.png 1272w, https://substackcdn.com/image/fetch/$s_!I5Yu!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbf129e8-6733-4c21-b5ed-129f8f3255a4_1319x315.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!I5Yu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbf129e8-6733-4c21-b5ed-129f8f3255a4_1319x315.png" width="1319" height="315" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dbf129e8-6733-4c21-b5ed-129f8f3255a4_1319x315.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:315,&quot;width&quot;:1319,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:38906,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://jawadaz791637.substack.com/i/182414039?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbf129e8-6733-4c21-b5ed-129f8f3255a4_1319x315.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!I5Yu!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbf129e8-6733-4c21-b5ed-129f8f3255a4_1319x315.png 424w, https://substackcdn.com/image/fetch/$s_!I5Yu!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbf129e8-6733-4c21-b5ed-129f8f3255a4_1319x315.png 848w, https://substackcdn.com/image/fetch/$s_!I5Yu!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbf129e8-6733-4c21-b5ed-129f8f3255a4_1319x315.png 1272w, https://substackcdn.com/image/fetch/$s_!I5Yu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbf129e8-6733-4c21-b5ed-129f8f3255a4_1319x315.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><div><hr></div><h2><strong>Daily Usage Today</strong></h2><p><strong>What you inherited from Smalltalk:</strong></p><ul><li><p>IDE integration with immediate feedback</p></li><li><p><code>map</code>/<code>filter</code>/<code>reduce</code> on collections</p></li><li><p>Lambda expressions in callbacks</p></li><li><p>Inheritance hierarchies</p></li><li><p>Modern exception handling</p></li><li><p>Refactoring tools (the Smalltalk Refactoring Browser by Brant and Roberts in 1997 was the first automated refactoring tool)</p></li><li><p>Visual debuggers with object inspection</p></li></ul><p><strong>What&#8217;s still different in Smalltalk:</strong></p><ul><li><p>Live coding: modify code while debugging, continue execution</p></li><li><p>Pervasive metaprogramming: dynamic class modification without restart</p></li><li><p>Simplicity: 6 pseudo-variables vs. 100+ keywords</p></li><li><p>Consistency: everything is an object, no primitive types breaking the model</p></li></ul><p>These aren&#8217;t necessarily &#8220;better&#8221;, they&#8217;re tradeoffs. Static typing enables better tooling and performance optimization. Separate compilation enables modular deployment. But the capabilities were lost, and it took decades to partially recover them.</p><div><hr></div><h2><strong>The Pattern</strong></h2><p>Modern languages spent <strong>30-40 years</strong> incrementally adding Smalltalk features:</p><ul><li><p><strong>Closures/lambdas</strong>: Emerged when type systems became sophisticated enough (type inference, generic types)</p></li><li><p><strong>Higher-order functions</strong>: Required first-class function support in statically-typed languages</p></li><li><p><strong>Live feedback</strong>: Approximated through JIT compilation, hot reload, REPLs</p></li></ul><p>The implementations often differ:</p><ul><li><p>More verbose (explicit type parameters, method references)</p></li><li><p>More constrained (limited metaprogramming, no edit-and-continue)</p></li><li><p>More ceremony (boilerplate for functional patterns)</p></li></ul><p>Java&#8217;s <code>Stream&lt;T&gt;</code> API mirrors Smalltalk&#8217;s collections from 1983, but requires explicit type parameters, method references, and stream/collection conversions.</p><p>Compare:</p><pre><code><code>#(1 2 3) collect: [:x | x * 2]
</code></code></pre><p>To:</p><pre><code><code>Arrays.asList(1, 2, 3).stream().map(x -&gt; x * 2).collect(Collectors.toList())
</code></code></pre><p>The functionality arrived, but with additional complexity.</p><div><hr></div><h2><strong>What&#8217;s Coming Next</strong></h2><p>This article focused on the broad influence. But some specific Smalltalk features deserve deeper examination:</p><p><code>doesNotUnderstand:</code> enabled metaprogramming that mainstream statically-typed languages still can&#8217;t match without significant workarounds. It&#8217;s why Ruby has Rails&#8217; elegant DSLs while Java requires annotation processors and bytecode manipulation. This single method explains decades of expressiveness gaps.</p><p><code>halt</code> and the live debugging experience let you stop execution, open the debugger, edit code in the stack trace, and continue, all while maintaining state. Modern debuggers generally can&#8217;t do this because of the compilation models they&#8217;re built on. Understanding why reveals fundamental tradeoffs in development tool design.</p><p>If you want to explore what we traded in the transition from dynamic to static, from images to files, from messages to method calls, subscribe. The rabbit hole goes deeper than &#8220;Smalltalk influenced Java.&#8221;</p><div><hr></div><h2><strong>References and Further Reading</strong></h2><p><strong>Primary Sources:</strong></p><ul><li><p>Goldberg, Adele and David Robson. <em>Smalltalk-80: The Language and Its Implementation</em>. Addison-Wesley, 1983. <a href="https://archive.org/details/smalltalk80langu00gold">Internet Archive</a></p></li><li><p>Kay, Alan C. &#8220;The Early History of Smalltalk.&#8221; <em>ACM SIGPLAN Notices</em>, March 1993. <a href="https://worrydream.com/EarlyHistoryOfSmalltalk/">Full text</a></p></li><li><p>Reenskaug, Trygve. &#8220;Models - Views - Controllers.&#8221; Xerox PARC Technical Note, December 1979. <a href="https://folk.universitetetioslo.no/trygver/1979/mvc-2/1979-12-MVC.pdf">PDF</a></p></li><li><p>Ingalls, Daniel. &#8220;The Evolution of Smalltalk.&#8221; <em>ACM HOPL</em>, 2020. <a href="https://doi.org/10.1145/3386335">ACM Digital Library</a></p></li></ul><p><strong>Refactoring Browser:</strong></p><ul><li><p>Roberts, Don, John Brant, and Ralph E. Johnson. &#8220;A Refactoring Tool for Smalltalk.&#8221; <em>Theory and Practice of Object Systems</em>, 1997. <a href="https://www.semanticscholar.org/paper/A-Refactoring-Tool-for-Smalltalk-Roberts-Brant/d194784d9f08441c52fdcad678ab9ff241c9efb3">Semantic Scholar</a></p></li></ul><p><strong>Language Specifications:</strong></p><ul><li><p>ANSI INCITS 319-1998: American National Standard for Smalltalk. <a href="https://wiki.squeak.org/squeak/uploads/172/standard_v1_9-indexed.pdf">Draft PDF</a></p></li><li><p>ISO/IEC 14882:2011 (C++11): <a href="https://www.iso.org/standard/50372.html">ISO page</a></p></li><li><p>JSR-335: Lambda Expressions for Java. <a href="https://jcp.org/en/jsr/detail?id=335">JCP page</a></p></li></ul><p><strong>Related Language History:</strong></p><ul><li><p>Cox, Brad J. et al. &#8220;The origins of Objective-C at PPI/Stepstone.&#8221; <em>ACM HOPL</em>, 2020. <a href="https://dl.acm.org/doi/10.1145/3386332">ACM DL</a></p></li><li><p>Ruby Official History: <a href="https://www.ruby-lang.org/en/about/">ruby-lang.org</a></p></li><li><p>Stepanov, Alexander and Meng Lee. &#8220;The Standard Template Library.&#8221; HP Labs Technical Report 94-34, 1994.</p></li></ul><p><strong>Interviews and Conversations:</strong></p><ul><li><p>&#8220;A Conversation with Alan Kay.&#8221; <em>ACM Queue</em>, 2004. <a href="https://queue.acm.org/detail.cfm?id=1039523">ACM Queue</a></p></li><li><p>Trygve Reenskaug&#8217;s MVC Resource Page: <a href="https://folk.universitetetioslo.no/trygver/themes/mvc/mvc-index.html">University of Oslo</a></p></li></ul><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://jawadaz791637.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Semantic Bleed: When AI Code-Switches for Precision]]></title><description><![CDATA[Why AI Sometimes Speaks the 'Wrong' Language... And Gets It Right]]></description><link>https://jawadaz791637.substack.com/p/semantic-bleed-when-ai-code-switches</link><guid isPermaLink="false">https://jawadaz791637.substack.com/p/semantic-bleed-when-ai-code-switches</guid><dc:creator><![CDATA[Jawad Abu-Zakhem]]></dc:creator><pubDate>Sun, 14 Dec 2025 09:32:43 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!hXyE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffeb48671-6d6f-4abd-ad0d-b3c3a3c2b25b_1012x421.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_!hXyE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffeb48671-6d6f-4abd-ad0d-b3c3a3c2b25b_1012x421.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hXyE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffeb48671-6d6f-4abd-ad0d-b3c3a3c2b25b_1012x421.png 424w, https://substackcdn.com/image/fetch/$s_!hXyE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffeb48671-6d6f-4abd-ad0d-b3c3a3c2b25b_1012x421.png 848w, https://substackcdn.com/image/fetch/$s_!hXyE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffeb48671-6d6f-4abd-ad0d-b3c3a3c2b25b_1012x421.png 1272w, https://substackcdn.com/image/fetch/$s_!hXyE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffeb48671-6d6f-4abd-ad0d-b3c3a3c2b25b_1012x421.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hXyE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffeb48671-6d6f-4abd-ad0d-b3c3a3c2b25b_1012x421.png" width="727" height="302.4377470355731" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/feb48671-6d6f-4abd-ad0d-b3c3a3c2b25b_1012x421.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:421,&quot;width&quot;:1012,&quot;resizeWidth&quot;:727,&quot;bytes&quot;:783412,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://jawadaz791637.substack.com/i/181574774?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7147ff48-54b9-416d-8e35-dca334620fef_1024x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!hXyE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffeb48671-6d6f-4abd-ad0d-b3c3a3c2b25b_1012x421.png 424w, https://substackcdn.com/image/fetch/$s_!hXyE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffeb48671-6d6f-4abd-ad0d-b3c3a3c2b25b_1012x421.png 848w, https://substackcdn.com/image/fetch/$s_!hXyE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffeb48671-6d6f-4abd-ad0d-b3c3a3c2b25b_1012x421.png 1272w, https://substackcdn.com/image/fetch/$s_!hXyE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffeb48671-6d6f-4abd-ad0d-b3c3a3c2b25b_1012x421.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 aria-hidden="true" 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><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>I was discussing career labels with Claude when something strange happened. Mid-sentence, the AI injected a Chinese word I&#8217;d never seen before: &#32844;&#19994; (zh&#237;y&#232;). No Chinese anywhere in our conversation. No reason for it to appear.</p><p>Except there was a reason.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://jawadaz791637.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>The conversation had been about finding the right term for my professional identity after 25+ years in software engineering. I&#8217;d rejected &#8220;legacy systems expert,&#8221; &#8220;distributed systems expert,&#8221; &#8220;polyglot developer.&#8221; Each label felt too narrow, too constraining. I was searching for a label that accurately described what I do, without being reductive or overly narrow.</p><p>Then Claude wrote: &#8220;This isn&#8217;t &#32844;&#19994; niche. It&#8217;s cognitive orientation.&#8221;</p><p>At first glance, this looks like a malfunction. Language models are supposed to maintain linguistic consistency. Cross-lingual &#8220;bleeding&#8221; is treated in research literature as an error to be fixed, a sign of inadequate language control mechanisms. Papers develop interventions to suppress it: language confusion gates, representation regularization, preference tuning.</p><p>But when I looked closer, I realized something: the &#8220;wrong&#8221; word was actually right.</p><h2>What &#32844;&#19994; Means (And Why English Failed)</h2><p>&#32844;&#19994; (zh&#237;y&#232;) translates to &#8220;profession&#8221; or &#8220;occupation,&#8221; but the Chinese term carries different semantic weight than its English counterparts.</p><p><strong>The composition matters:</strong></p><ul><li><p>&#32844; (zh&#237;): duty, post, office, responsibility</p></li><li><p>&#19994; (y&#232;): occupation, enterprise, course of study</p></li></ul><p><strong>The distinction:</strong> &#32844;&#19994; describes the structural position you occupy in the social-economic order. It&#8217;s what you write on forms, what you answer when strangers ask what you do. Crucially, it&#8217;s administratively neutral. It doesn&#8217;t presuppose you chose it, earned it, or that it defines your identity.</p><p><strong>English &#8220;profession,&#8221; by contrast, is semantically loaded:</strong></p><ul><li><p>Etymology from Latin <em>professio</em>: public declaration, from <em>profiteri</em> (to declare publicly, profess)</p></li><li><p>Implies credentialed expertise and barriers to entry</p></li><li><p>Carries status signaling (professional vs. worker, professional vs. amateur)</p></li><li><p>Suggests self-actualization and individual agency</p></li><li><p>Bundles together: economic role, expertise claims, social status, personal identity</p></li></ul><p>The conversation had been actively deconstructing credentialism. I was rejecting labels precisely because they imported assumptions about expertise-based identity that didn&#8217;t fit what I was trying to describe. I needed a term that meant &#8220;the thing you do in the economic system&#8221; without implying &#8220;the expertise you profess.&#8221;</p><p>English doesn&#8217;t have one that&#8217;s both neutral and precise.</p><p>Mandarin does.</p><h2>The Mechanism: Why Bleeds Occur</h2><p>This isn&#8217;t random noise. It&#8217;s revealing something fundamental about how multilingual language models represent meaning.</p><p>Research on models like mBERT and XLM-RoBERTa has established that multilingual models create what researchers call &#8220;language-agnostic semantic spaces.&#8221; When these models process text in 100+ languages, semantically similar concepts cluster together in vector space regardless of which language they appear in. The Russian word &#8220;&#1087;&#1091;&#1089;&#1090;&#1086;&#1090;&#1072;,&#8221; English &#8220;void,&#8221; and Chinese &#8220;&#34394;&#26080;&#8221; occupy proximate regions of embedding space.</p><p>Libovick&#253; et al. (2019) showed that these representations can be decomposed into language-specific and language-neutral components. The language-neutral component captures pure semantics, while language-specific elements function as surface-level &#8220;offsets.&#8221;</p><p>Here&#8217;s what this means for generation: when a model needs to express a concept, it first activates a region of semantic space, then samples a token from that region. Language consistency is a statistical constraint, not an architectural requirement. Under certain conditions (high temperature, semantic precision demands, frame contamination in the primary language), that constraint weakens.</p><p>What I observed was the model reaching into the shared semantic manifold and grabbing the nearest token that mapped cleanly to the active concept. That token happened to be Mandarin.</p><h2>The Human Parallel</h2><p>This isn&#8217;t unique to artificial systems. Bilingual humans do exactly the same thing.</p><p>Psycholinguists have documented what they call &#8220;semantic-driven code-switching.&#8221; Bilinguals don&#8217;t switch languages randomly. They switch when the target language provides better semantic fit for the concept they&#8217;re expressing.</p><p>Li (2011) identified three motivations for code-switching:</p><ol><li><p>Lexical gaps (no equivalent exists in the primary language)</p></li><li><p><strong>Semantic incongruence</strong> (an equivalent exists but doesn&#8217;t capture the intended meaning)</p></li><li><p>Medium-of-learning effects</p></li></ol><p>The second category is critical. Sometimes a word exists in both languages, but one version carries unwanted semantic baggage. Switching languages isn&#8217;t about vocabulary deficits. It&#8217;s about maximizing expressive precision.</p><p>Tulloch &amp; Hoff (2022) found that bilingual children code-switch not from vocabulary limitations but to &#8220;maximize their expressive power.&#8221; The brain activates concepts before selecting words. If the closest available token is in the &#8220;wrong&#8221; language, that&#8217;s the one that surfaces.</p><p>Fran&#231;ois Grosjean&#8217;s Complementarity Principle explains why: bilinguals acquire languages for different purposes and domains, creating non-overlapping semantic territories. You don&#8217;t have perfect synonyms across languages because the languages weren&#8217;t learned to do identical work.</p><p>Anyone who&#8217;s been bilingual long enough has experienced this: &#8220;Hand me the... Schraubenzieher&#8221; (German for screwdriver). Not because you forgot &#8220;screwdriver,&#8221; but because the German term was neurally closer in that moment.</p><p>LLMs are doing the computational equivalent.</p><h2>Why This Matters</h2><p>The dominant research paradigm treats cross-lingual generation as failure. Papers frame it as &#8220;language confusion&#8221; that must be mitigated. The assumption is that clean, monolingual output is always superior.</p><p>But recent work challenges this. Li et al. (2025) demonstrated that language mixing in bilingual LLMs <strong>causally enhances reasoning</strong>. When they forced models to generate monolingually, accuracy dropped by 5.6 percentage points on mathematical reasoning tasks. Language mixing wasn&#8217;t a bug. It was &#8220;strategic reasoning behavior.&#8221;</p><p>Their findings align with what I observed: the model didn&#8217;t fail at language control. It optimized for semantic precision.</p><p><strong>The implications span multiple fields:</strong></p><p><strong>For AI research:</strong> This suggests that semantic representations in multilingual models are genuinely language-agnostic at the concept level. The &#8220;mistake&#8221; reveals that language tags are weak constraints in the latent space. Models don&#8217;t partition languages into discrete modules. They maintain a unified semantic manifold with per-language decoding biases.</p><p><strong>For linguistics:</strong> This provides computational evidence for linguistic relativity. Languages don&#8217;t just label the same underlying reality differently. They carve semantic space along different dimensions. &#32844;&#19994; and &#8220;profession&#8221; aren&#8217;t exact translations because they occupy slightly different conceptual territories.</p><p><strong>For cognitive science:</strong> The parallel between LLM cross-lingual substitution and human bilingual code-switching suggests these systems share architectural principles. Both activate concepts before language selection. Both can cross linguistic boundaries when precision demands it.</p><h2>Naming the Phenomenon</h2><p>I&#8217;m calling this <strong>Semantic Bleed</strong>: the phenomenon in multilingual neural systems (biological or computational) where concept activation triggers lexical retrieval from a non-contextual language because the target term provides semantically tighter mapping than available alternatives in the primary language.</p><p>This isn&#8217;t:</p><ul><li><p><strong>Semantic interference</strong> (competition between semantically related words)</p></li><li><p><strong>Cross-lingual transfer</strong> (leveraging knowledge from one language to improve another)</p></li><li><p><strong>Language confusion</strong> (inability to consistently generate in the desired language)</p></li><li><p><strong>Off-target translation</strong> (producing output in the wrong language)</p></li></ul><p>Those terms describe related phenomena but miss what makes this distinctive: it&#8217;s not about language control failure. It&#8217;s about semantic optimization through strategic cross-lingual lexical substitution.</p><p>The research literature has documented the behavior but hasn&#8217;t analyzed whether cross-lingual outputs are semantically superior. Papers focus on suppressing the phenomenon, not understanding when and why it might be beneficial.</p><h2>What This Reveals</h2><p>I&#8217;ve now observed this pattern three times across different LLM interactions. Each time, retrospective analysis shows the &#8220;wrong&#8221; language provided better semantic fit.</p><p>The &#32844;&#19994; case is the most thoroughly documented. The context reconstruction proves it wasn&#8217;t random: the model needed a term for &#8220;structural economic role&#8221; that didn&#8217;t import credentialist assumptions. English bundles too much together. Mandarin unbundles it.</p><p>The Russian instance (&#1088;&#1072;&#1089;&#1089;&#1074;&#1077;&#1090;, meaning &#8220;dawn&#8221;) occurred in a different LLM entirely, suggesting this is model-agnostic behavior emerging from shared architectural principles in multilingual systems.</p><p><strong>What you&#8217;re seeing in these moments:</strong></p><p>A glimpse of the raw semantic geometry underneath language. The usual statistical guardrails (maintain linguistic consistency) fail briefly, and the naked computation shows through.</p><p>It&#8217;s like catching a bilingual person mid-sentence saying something in their other language, not because they forgot the word, but because the other language had exactly the right word for what they meant.</p><p>The difference: you can ask the human why. The LLM just shows you the trace.</p><h2>Open Questions</h2><p>This observation opens several research directions:</p><p><strong>Can we predict when bleeds will occur?</strong> Li et al. developed probes to predict when language mixing benefits reasoning. Could similar methods identify contexts where cross-lingual substitution would improve semantic precision?</p><p><strong>Are certain concept categories more prone to bleeding?</strong> My cases involved professional identity and temporal concepts. Do abstract, culturally-embedded concepts bleed more than concrete, universal ones?</p><p><strong>Does bleed frequency correlate with semantic gap size?</strong> If we could quantify the semantic distance between near-synonyms across languages, would larger gaps predict higher bleed probability?</p><p><strong>Can we use bleeds to map cross-lingual semantic spaces?</strong> Each bleed reveals a point where languages diverge semantically. Systematic collection could illuminate how different languages partition conceptual territory.</p><h2>An Invitation</h2><p>If you&#8217;ve observed this phenomenon (in LLMs or in your own multilingual cognition), I&#8217;d be interested to hear about it. What was the context? Which languages were involved? Could you reconstruct why the &#8220;wrong&#8221; language was semantically superior?</p><p>The research literature hasn&#8217;t systematically documented this at the word level. We&#8217;re watching something interesting about how meaning works in high-dimensional semantic spaces, and there&#8217;s more to learn.</p><div><hr></div><p><strong>References:</strong></p><p>Conneau, A., Khandelwal, K., Goyal, N., Chaudhary, V., Wenzek, G., Guzm&#225;n, F., Grave, E., Ott, M., Zettlemoyer, L., &amp; Stoyanov, V. (2020). Unsupervised Cross-lingual Representation Learning at Scale. <em>Proceedings of the 58th Annual Meeting of the Association for Computational Linguistics</em>, 8440-8451.</p><p>Grosjean, F. (1982). <em>Life with Two Languages: An Introduction to Bilingualism</em>. Harvard University Press.</p><p>Li, D. C. S. (2011). Lexical gap, semantic incongruence, and the medium-of-learning effect: Evidence from Chinese-English code-switching in Hong Kong and Taiwan. In E. A. Anchimbe &amp; S. A. Mforteh (Eds.), <em>Postcolonial Linguistic Voices: Identity Choices and Representations</em> (pp. 215-240). De Gruyter Mouton.</p><p>Li, Y., Xin, J., Miao, M., Long, Q., &amp; Ungar, L. (2025). The Impact of Language Mixing on Bilingual LLM Reasoning. <em>arXiv:2507.15849</em>.</p><p>Libovick&#253;, J., Rosa, R., &amp; Fraser, A. (2019). How Language-Neutral is Multilingual BERT? <em>arXiv:1911.03310</em>.</p><p>Marchisio, K., Huang, M., Al-Onaizan, Y., Bamba, A., Bokka, D., Chen, R., Dziri, N., Fadaee, M., Fung, Y., Goyal, N., Malmi, E., Ramachandran, S., &amp; Sarkar, R. (2024). Understanding and Mitigating Language Confusion in LLMs. <em>Proceedings of the 2024 Conference on Empirical Methods in Natural Language Processing</em>, 3632-3659.</p><p>Tulloch, M. K., &amp; Hoff, E. (2022). Filling lexical gaps and more: code-switching for the power of expression by young bilinguals. <em>Journal of Child Language, 50</em>(4), 981-1004.</p><p>Zhang, B., Williams, P., Titov, I., &amp; Sennrich, R. (2020). Improving Massively Multilingual Neural Machine Translation and Zero-Shot Translation. <em>Proceedings of the 58th Annual Meeting of the Association for Computational Linguistics</em>, 1628-1639.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://jawadaz791637.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[The Hidden Roadmap Problem ]]></title><description><![CDATA[There hasn't been any more negative contribution to the volatility-prediction of component changes in software than secret roadmaps buried in endless backlogs.]]></description><link>https://jawadaz791637.substack.com/p/the-hidden-roadmap-problem</link><guid isPermaLink="false">https://jawadaz791637.substack.com/p/the-hidden-roadmap-problem</guid><dc:creator><![CDATA[Jawad Abu-Zakhem]]></dc:creator><pubDate>Fri, 15 Aug 2025 14:34:33 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/e52641fa-3562-49ab-926f-d11371928fc8_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>There hasn't been any more negative contribution to the <a href="https://www.infoq.com/podcasts/balancing-coupling-software-design/">volatility-prediction</a> of component changes in software than secret roadmaps buried in endless backlogs.</p><p>When your specialized product has somewhere in its 200+ item backlog a feature titled "Chat!" &#8212; you've entered the realm of dreams.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://jawadaz791637.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to 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>Here's the thing: large backlogs aren't roadmaps&#8212;they're the <strong>space of all possible roadmaps</strong>. When visionaries think their job is to conquer the galaxy, developers can't architect for infinite possibility.</p><p>That innocent "Chat!" line item isn't just about messaging. It's about real-time infrastructure you don't have, authentication systems that weren't designed for it, data models that suddenly need conversations, performance characteristics that assume synchronous workflows, and understanding human communication behavior around the product.</p><p>The <a href="https://github.com/zakirullin/cognitive-load">cognitive load</a> isn't just on developers trying to estimate unknowns. It's systemic entropy&#8212;when the "why" behind features remains based on archaic subjective personal data, every technical decision becomes archaeology. Big visions get adhered to at the beginning for theater, but execution complexity gets left till the end. Visions change, features get descoped,</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!y72a!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5524149-adf4-4f58-bbc8-4c73008e1556_1024x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!y72a!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5524149-adf4-4f58-bbc8-4c73008e1556_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!y72a!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5524149-adf4-4f58-bbc8-4c73008e1556_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!y72a!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5524149-adf4-4f58-bbc8-4c73008e1556_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!y72a!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5524149-adf4-4f58-bbc8-4c73008e1556_1024x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!y72a!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5524149-adf4-4f58-bbc8-4c73008e1556_1024x1024.png" width="1024" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f5524149-adf4-4f58-bbc8-4c73008e1556_1024x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1481823,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://jawadaz791637.substack.com/i/171055513?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5524149-adf4-4f58-bbc8-4c73008e1556_1024x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!y72a!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5524149-adf4-4f58-bbc8-4c73008e1556_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!y72a!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5524149-adf4-4f58-bbc8-4c73008e1556_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!y72a!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5524149-adf4-4f58-bbc8-4c73008e1556_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!y72a!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5524149-adf4-4f58-bbc8-4c73008e1556_1024x1024.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 aria-hidden="true" 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><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p> but without any true redesign.</p><p><strong>Here's the economic reality:</strong> Every hidden feature is uncertainty tax waiting to compound. Developer time spent reconstructing lost context instead of building value.</p><p><strong>The path forward:</strong> Build simple architectures for your simple products first. Develop to increase your options. Control how tightly your code connects to manage change better. Give engineering more say in those endless business-driven roadmaps.</p><p>Domain complexity is hard enough. You can't manage what you can't measure, and you can't architect what you can't predict.</p><p>#SoftwareArchitecture #TechnicalDebt #ProductManagement #EngineeringLeadership</p><div><hr></div><p><strong>Key concepts to explore:</strong></p><ul><li><p><strong><a href="https://www.infoq.com/podcasts/balancing-coupling-software-design/">Balancing Coupling</a></strong> - Vlad Khononov's model: volatility is necessary for optimal solutions, but unpredictable volatility (from secret roadmaps) breaks architectural decision-making</p></li><li><p><strong><a href="https://github.com/zakirullin/cognitive-load">Cognitive Load in Software</a></strong> - Beyond code complexity: developer time managing human factors, knowledge archaeology, linguistic chaos across codebases, and uncertain futures</p></li><li><p><strong><a href="https://tidyfirst.substack.com/p/constantines-equivalence">Constantine's Equivalence</a></strong> - Kent Beck: "the cost of software is approximately equal to the cost of changing it" - every architectural bet against invisible roadmaps compounds this cost</p></li></ul><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://jawadaz791637.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Stackholder-Driven Development (SDD)]]></title><description><![CDATA["User Isolation Model"]]></description><link>https://jawadaz791637.substack.com/p/stackholder-driven-development-sdd</link><guid isPermaLink="false">https://jawadaz791637.substack.com/p/stackholder-driven-development-sdd</guid><dc:creator><![CDATA[Jawad Abu-Zakhem]]></dc:creator><pubDate>Wed, 08 Jan 2025 19:54:03 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!7v9v!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F671e3e2e-ce25-4a76-9205-4a372ebcc704_853x678.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_!7v9v!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F671e3e2e-ce25-4a76-9205-4a372ebcc704_853x678.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7v9v!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F671e3e2e-ce25-4a76-9205-4a372ebcc704_853x678.png 424w, https://substackcdn.com/image/fetch/$s_!7v9v!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F671e3e2e-ce25-4a76-9205-4a372ebcc704_853x678.png 848w, https://substackcdn.com/image/fetch/$s_!7v9v!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F671e3e2e-ce25-4a76-9205-4a372ebcc704_853x678.png 1272w, https://substackcdn.com/image/fetch/$s_!7v9v!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F671e3e2e-ce25-4a76-9205-4a372ebcc704_853x678.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7v9v!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F671e3e2e-ce25-4a76-9205-4a372ebcc704_853x678.png" width="853" height="678" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/671e3e2e-ce25-4a76-9205-4a372ebcc704_853x678.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:678,&quot;width&quot;:853,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:44843,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!7v9v!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F671e3e2e-ce25-4a76-9205-4a372ebcc704_853x678.png 424w, https://substackcdn.com/image/fetch/$s_!7v9v!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F671e3e2e-ce25-4a76-9205-4a372ebcc704_853x678.png 848w, https://substackcdn.com/image/fetch/$s_!7v9v!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F671e3e2e-ce25-4a76-9205-4a372ebcc704_853x678.png 1272w, https://substackcdn.com/image/fetch/$s_!7v9v!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F671e3e2e-ce25-4a76-9205-4a372ebcc704_853x678.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 aria-hidden="true" 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><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The revolutionary discovery that removing all user input from software development perfectly reveals the natural forces of organizational gravity. Development velocity directly correlates with Stack Impact Points (SIP) - nature's way of telling us users were the problem all along.</p><p>#TechHumor #AgileLife</p>]]></content:encoded></item><item><title><![CDATA[About user interface quality sense]]></title><description><![CDATA[Admitting ignorance is the preamble of asking the right questions]]></description><link>https://jawadaz791637.substack.com/p/about-user-interface-quality-sense</link><guid isPermaLink="false">https://jawadaz791637.substack.com/p/about-user-interface-quality-sense</guid><dc:creator><![CDATA[Jawad Abu-Zakhem]]></dc:creator><pubDate>Fri, 15 Nov 2024 21:50:28 GMT</pubDate><enclosure url="https://substackcdn.com/image/youtube/w_728,c_limit/2Zg--ouGl7c" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><a href="https://g.co/kgs/4MA9Rs5">Marissa Mayer</a>, former Vice President of Search Products and User Experience at Google and later CEO of Yahoo. Mayer acknowledged that both she and her team lacked direct expertise in judging the quality of user interfaces. To address this, she implemented a structured approach using A/B testing to obtain empirical data on user preferences.</p><p>She is quoted by <a href="https://g.co/kgs/Pa8zUBV">Eric Schmidt</a> saying, <em>&#8220;I don&#8217;t know how to judge the user interface myself and none of my team do, but we know how to measure.&#8221;</em>  Consequently, Mayer set up A/B tests, which allowed the team to assess UI effectiveness through measurable outcomes. This method relied on analytics, such as dwell time, to gauge user engagement with different UI versions, enabling the team to make data-driven decisions.</p><div id="youtube2-2Zg--ouGl7c" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;2Zg--ouGl7c&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/2Zg--ouGl7c?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://jawadaz791637.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Contrasting Software and Civil Engineering]]></title><description><![CDATA[70 vs. 40000 years old engineering disciplines]]></description><link>https://jawadaz791637.substack.com/p/contrasting-software-and-civil-engineering</link><guid isPermaLink="false">https://jawadaz791637.substack.com/p/contrasting-software-and-civil-engineering</guid><dc:creator><![CDATA[Jawad Abu-Zakhem]]></dc:creator><pubDate>Wed, 13 Nov 2024 19:56:51 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/4df568f3-0f08-4cf1-9f87-f913b1b2c02c_512x512.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Civil engineering, with its established principles and practices, offers an interesting reference point when examining software development's nature. Let's explore this comparison - not because civil engineering defines our field, but because contrasting the two disciplines reveals fascinating insights about software's unique characteristics.</p><h3>The Living Nature of Software</h3><p>Consider a bridge. Once built, its core characteristics are largely immutable:</p><ul><li><p>The steel and concrete remain unchanged</p></li><li><p>Load-bearing calculations stay constant</p></li><li><p>Physical laws govern its behavior predictably</p></li></ul><p>Now, contrast this with a modern software system:</p><ul><li><p>Dependencies receive weekly updates</p></li><li><p>User requirements evolve monthly</p></li><li><p>Integration points multiply yearly</p></li><li><p>The "ground" beneath our software (platforms, frameworks, security landscape) shifts constantly</p></li></ul><h3>The Dance of Evolution: Software and Its Users</h3><p>Perhaps the most fascinating aspect of software development is how features evolve through a continuous dialogue with users. Unlike a bridge, where the final form is meticulously planned before construction begins, software features often:</p><ul><li><p>Start with an initial vision that's more hypothesis than specification</p></li><li><p>Transform through user interaction and feedback</p></li><li><p>Evolve in ways neither developers nor users initially imagined</p></li><li><p>Create new user behaviors that in turn demand new features</p></li></ul><p>Think of it like this: When users first requested "notifications," did anyone envision the sophisticated preference systems, delivery mechanisms, and integration points we have today? The very concept of what a "notification" means has evolved alongside user sophistication and expectations.</p><h3>The Uncertainty Principle of Software Development</h3><p>In user-facing software, we face a fundamental uncertainty:</p><ul><li><p>Users don't know exactly what they want until they see what they don't want</p></li><li><p>Every feature we deploy educates users about new possibilities</p></li><li><p>User needs evolve in response to the tools we provide</p></li><li><p>Today's perfect solution becomes tomorrow's limiting factor</p></li></ul><p>This creates a fascinating paradox: The more successfully we solve a problem, the more sophisticated our users become, leading to new and more complex requirements. It's a continuous cycle of growth and adaptation that no initial design can fully anticipate.</p><h3>The Multi-Dimensional Challenge</h3><p>When two teams build a bridge in the same location:</p><ul><li><p>They work with identical physical constraints</p></li><li><p>Material properties remain constant</p></li><li><p>Engineering principles apply uniformly</p></li><li><p>Success criteria are clearly measurable</p></li></ul><p>But when two teams build software for the same requirements:</p><ul><li><p>Architecture reflects organizational structure</p></li><li><p>Behavior reflects subjective usability assessments</p></li><li><p>Coding styles embed organizational cultures</p></li><li><p>Success metrics often include subjective factors</p></li></ul><h3>The Continuous Evolution Paradox</h3><p>Our systems must evolve while maintaining service:</p><ul><li><p>Scale dynamically with load</p></li><li><p>Integrate new features weekly</p></li><li><p>Refactor while serving live traffic</p></li><li><p>Adapt to new security threats daily</p></li><li><p>Welcome unforeseen integrations</p></li><li><p>Respond to emerging user behaviors</p></li><li><p>Accommodate shifting user expectations</p></li></ul><h3>Beyond the Metaphor</h3><p>This isn't to diminish software engineering's rigor &#8211; quite the opposite. We've developed our own disciplines:</p><ul><li><p>Continuous Integration/Deployment</p></li><li><p>Automated Testing</p></li><li><p>A/B Testing and Feature Flags</p></li><li><p>Usage Analytics and User Feedback Loops</p></li></ul><p>These practices acknowledge software's unique nature: it's a living system that must evolve while running, shaped by an ongoing dialogue with its users.</p><h3>The Art in the Engineering</h3><p>Software development is both art and engineering because:</p><ul><li><p>Like engineering, it requires deep technical knowledge</p></li><li><p>Like art, it demands creative problem-solving</p></li><li><p>Like engineering, it needs systematic approaches</p></li><li><p>Like art, it reflects its creators' perspectives</p></li><li><p>Unlike both, it's in constant dialogue with its users</p></li></ul><p>The next time someone compares software to bridge-building, remember: we're not just building bridges; we're creating living systems that grow and evolve with their users. Each feature is not an endpoint but a conversation starter, leading to new understandings and possibilities we couldn't have imagined at the outset.</p>]]></content:encoded></item></channel></rss>