<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Reflections on Dinko Pehar</title>
    
    
    
    <link>/reflections/</link>
    <description>Recent content in Reflections on Dinko Pehar</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    
	<atom:link href="/reflections/index.xml" rel="self" type="application/rss+xml" />
    
    
    <item>
      <title>Packing the infinite truck</title>
      <link>/reflections/packing-the-infinite-truck/</link>
      <pubDate>Sat, 04 Jul 2026 12:00:00 +0200</pubDate>
      <guid>/reflections/packing-the-infinite-truck/</guid>
      <description>
        
          
          
          
        
        
        &lt;p&gt;Imagine that everything needed for a move must travel in one truck.&lt;/p&gt;
&lt;h2 id=&#34;capacity-and-correction&#34;&gt;
  Capacity and correction
  &lt;a href=&#34;#capacity-and-correction&#34; class=&#34;h-anchor&#34; aria-hidden=&#34;true&#34;&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;It is an ordinary truck, and it can return if something is forgotten.&lt;/p&gt;

  &lt;img src=&#34;/img/packing-the-infinite-truck/normal-returnable-truck.png&#34;  alt=&#34;A normal moving truck with boxes left outside for another trip&#34;  class=&#34;center&#34;  /&gt;


&lt;p&gt;Because the truck can return, packing does not need to be perfect. That is
useful. A forgotten box can still arrive. A mistake can be corrected. But the
ability to return does not make the second trip free.&lt;/p&gt;
&lt;p&gt;The second trip is not a disaster or a punishment. It simply has a regular
cost: more fuel, more time, another stretch of driving, and more work for
everyone loading and unloading it.&lt;/p&gt;
&lt;p&gt;Now imagine that the goal is to avoid another trip entirely. The obvious
answer is to hire a larger truck. It costs more than the ordinary one, but
everything is more likely to fit. That is also a regular cost. We are buying
capacity because we believe it will cost less than returning.&lt;/p&gt;

  &lt;img src=&#34;/img/packing-the-infinite-truck/oversized-single-trip-truck.png&#34;  alt=&#34;An oversized moving truck with loosely packed cargo and unused space&#34;  class=&#34;center&#34;  /&gt;


&lt;p&gt;The larger truck solves the immediate problem. It also makes poor packing
harder to notice. Half-filled boxes, unused furniture, and things nobody
remembers loading can travel together without forcing a decision. Empty space
feels free after the truck has been paid for, even though a smaller load must
still be driven, unloaded, and sorted from a larger vehicle.&lt;/p&gt;
&lt;p&gt;But what if you had only a single small truck, one that would leave once and
never return?&lt;/p&gt;

  &lt;img src=&#34;/img/packing-the-infinite-truck/small-one-way-truck.png&#34;  alt=&#34;A small moving truck packed carefully to use the available space&#34;  class=&#34;center&#34;  /&gt;


&lt;p&gt;Packing changes immediately. If boxes are placed wherever they fit at first,
the furniture may not fit later. Smaller boxes can go inside larger ones.
Loose objects can fill drawers, cabinets, and gaps between furniture.
Packaging that carries no value can be removed, and something less important
may stay behind so that the complete load can fit. The order matters because a
poor decision near the front can waste space all the way to the back.&lt;/p&gt;
&lt;p&gt;The smaller truck forces the people loading it to pack smarter. The constraint
forces you to think about the problem.&lt;/p&gt;
&lt;h2 id=&#34;constraint-driven-design&#34;&gt;
  Constraint-driven design
  &lt;a href=&#34;#constraint-driven-design&#34; class=&#34;h-anchor&#34; aria-hidden=&#34;true&#34;&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;If we take an older console, such as the original PlayStation, we find the same
visible edges as the small truck. Its memory, processing capacity, and storage
medium were fixed. If a scene did not fit in memory, the team could not
increase the machine&amp;rsquo;s capacity in production. If the console could not draw
everything a designer imagined, there was no better PlayStation model with
more memory or processing power available.&lt;/p&gt;
&lt;p&gt;The release itself was close to a one-way trip. Once a game was pressed onto a
disc, boxed, and placed on a store shelf, it was effectively final. Corrected
revisions were possible, but producing and distributing them was slow and
expensive.&lt;/p&gt;
&lt;p&gt;The release build carried a different kind of weight because &lt;strong&gt;this disc is
the game&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Those boundaries did not create one universal style. Different teams packed
their trucks in different ways.&lt;/p&gt;

&lt;div style=&#34;padding: 1em; display: flex; align-items: center;&#34;&gt;
    &lt;div&gt;
        &lt;svg class=&#34;tip-squid&#34; width=&#34;96px&#34; height=&#34;96px&#34; viewBox=&#34;0 0 128 128&#34; data-name=&#34;Squid&#34; id=&#34;Squid&#34;
            xmlns=&#34;http://www.w3.org/2000/svg&#34;&gt;
            &lt;circle cx=&#34;49.516&#34; cy=&#34;76.516&#34; r=&#34;1.336&#34; /&gt;
            &lt;path
                d=&#34;M99.08,79.94H89.45a5,5,0,0,0-5,5v3.12a1,1,0,0,1-1,1H78.54a1,1,0,0,1-1-1l-.009-6.187a5.449,5.449,0,0,0,0-10.715V63.969a8.566,8.566,0,0,0,5.652-3.239,5.322,5.322,0,0,0,.746-4.954l-6.683-19a6.02,6.02,0,0,0,3.93-2.995,6.5,6.5,0,0,0-.155-6.59L65.2,1.705A2.564,2.564,0,0,0,63.212.476c-.083-.009-.174-.016-.27-.016h-.007c-.008,0-.015,0-.024,0a1.549,1.549,0,0,0-.257.02c-.071.009-.143.032-.215.048a2.17,2.17,0,0,0-.305.088,2.717,2.717,0,0,0-.291.117l-.02.01L61.774.77c-.024.013-.042.034-.066.048s-.028.021-.042.031A2.561,2.561,0,0,0,60.8,1.7L44.98,27.192A6.512,6.512,0,0,0,44.8,33.73a6.028,6.028,0,0,0,3.84,3.013l-6.7,19.032a5.321,5.321,0,0,0,.746,4.954A8.62,8.62,0,0,0,48.52,64v7.16a5.449,5.449,0,0,0,0,10.716V83.51a1,1,0,0,1-1,1H42.51a1,1,0,0,1-1-1V75.99a5,5,0,0,0-5-5H27a1,1,0,0,0-1,1,5.544,5.544,0,0,0,5.54,5.53h2.43a1,1,0,0,1,1,1v7.53a5,5,0,0,0,5,5h8.55v34.97a1,1,0,0,0,1,1,5.544,5.544,0,0,0,5.53-5.54V82.44a.474.474,0,0,1,.49-.47.469.469,0,0,1,.47.47v43.58a1,1,0,0,0,1,1,5.552,5.552,0,0,0,5.54-5.54V82.44a.474.474,0,0,1,.49-.47.469.469,0,0,1,.47.47v39.04a5.552,5.552,0,0,0,5.54,5.54,1,1,0,0,0,1-1V82.44a.475.475,0,0,1,.95,0v39.04a5.552,5.552,0,0,0,5.54,5.54,1,1,0,0,0,1-1V95.6H86a5,5,0,0,0,5-5v-.54c0-.02-.01-.03-.01-.05V87.47a1,1,0,0,1,1-1h2.56a5.531,5.531,0,0,0,5.53-5.53A1,1,0,0,0,99.08,79.94ZM51.367,46.063a2.852,2.852,0,1,1-2.852,2.852A2.855,2.855,0,0,1,51.367,46.063Zm-5.3,30.453a3.453,3.453,0,1,1,3.453,3.453A3.457,3.457,0,0,1,46.063,76.516Zm5.083-16.182a3.823,3.823,0,1,1,3.823-3.823A3.827,3.827,0,0,1,51.146,60.333Zm5.385-6.583a2.094,2.094,0,1,1,2.094-2.094A2.1,2.1,0,0,1,56.531,53.75ZM79.985,76.516a3.453,3.453,0,1,1-3.453-3.453A3.457,3.457,0,0,1,79.985,76.516ZM72.229,64.583a2.4,2.4,0,1,1-2.4,2.4A2.4,2.4,0,0,1,72.229,64.583Zm-2.281,8.479A1.948,1.948,0,1,1,71.9,71.115,1.95,1.95,0,0,1,69.948,73.063Z&#34; /&gt;
            &lt;circle cx=&#34;76.53&#34; cy=&#34;76.516&#34; r=&#34;1.336&#34; /&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
    &lt;div style=&#34; padding-left: 1em; padding-right: 1em&#34;&gt;
        &lt;p style=&#34;font-family: &#39;Amatic SC&#39;, cursive; font-size: 22px; font-weight: bold;&#34;&gt;When capacity is finite, creativity starts to kick in.&lt;/p&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Crash Bandicoot is perhaps the most clear example. Its developers wanted to create
levels far larger than the PlayStation could hold in memory at once. Rather than
reducing their ambition down to fit the hardware, they built custom compression,
resource-packing, and virtual-memory systems.&lt;/p&gt;

  &lt;figure class=&#34;center&#34; &gt;
    &lt;img src=&#34;/img/packing-the-infinite-truck/crash-bandicoot.jpg&#34;  alt=&#34;Crash Bandicoot standing among crates in a detailed PlayStation level&#34;   /&gt;
    
      &lt;figcaption class=&#34;center&#34; &gt;&lt;a href=&#34;https://all-things-andy-gavin.com/2011/02/04/making-crash-bandicoot-part-3/&#34;&gt;Source: Andy Gavin&amp;rsquo;s development retrospective&lt;/a&gt;. Crash Bandicoot © Activision Publishing, Inc.&lt;/figcaption&gt;
    
  &lt;/figure&gt;


&lt;p&gt;The hardware enforced strict limits, but those limits did not reduce the team&amp;rsquo;s
ambition. Instead, they pushed the developers to think in creative way about how levels were
built, packed, and loaded. The technology and level design evolved
together, like boxes arranged carefully so that the entire shipment could fit inside a space
that seemed too small at first.&lt;/p&gt;
&lt;p&gt;Resident Evil made a different kind of tradeoff. Fully real-time 3D environments could
not deliver the visual detail its creators wanted, so the game relied
pre-rendered backgrounds and fixed camera angles. The PlayStation had less
work to perform while each room appeared richer and more atmospheric&lt;/p&gt;

  &lt;figure class=&#34;center&#34; &gt;
    &lt;img src=&#34;/img/packing-the-infinite-truck/resident-evil.jpg&#34;  alt=&#34;Resident Evil character viewed from a distant fixed camera in the detailed Spencer Mansion&#34;   /&gt;
    
      &lt;figcaption class=&#34;center&#34; &gt;&lt;a href=&#34;https://www.gog.com/en/game/resident_evil&#34;&gt;Source: official GOG release page&lt;/a&gt;. Resident Evil © CAPCOM.&lt;/figcaption&gt;
    
  &lt;/figure&gt;


&lt;p&gt;The fixed camera was more than a technical compromise. It framed each scene
like shot in a film. It could hide what was waiting around a corner, reveal
danger before the character reached it, or force the player to move toward
something outside the frame. A rendering limitation became part of the language
of survival horror.&lt;/p&gt;
&lt;p&gt;Silent Hill is the example I return to most. The PlayStation could not render
the town far into the distance, so fog concealed its limited draw distance.
Buildings, streets, and enemies beyond the visible area did not need to be
rendered. The technical limitation reduced the console&amp;rsquo;s workload while making
the town more unsettling.&lt;/p&gt;

  &lt;figure class=&#34;center&#34; &gt;
    &lt;img src=&#34;/img/packing-the-infinite-truck/silent-hill.jpg&#34;  alt=&#34;Harry Mason walking along a street obscured by fog in Silent Hill&#34;   /&gt;
    
      &lt;figcaption class=&#34;center&#34; &gt;Screenshot contributed by &lt;a href=&#34;https://www.mobygames.com/game/3564/silent-hill/screenshots/playstation/30593/&#34;&gt;MAT via MobyGames&lt;/a&gt;. Silent Hill © Konami Digital Entertainment.&lt;/figcaption&gt;
    
  &lt;/figure&gt;


&lt;p&gt;The fog turned missing information into tension. Players could hear danger
before seeing it, and empty streets felt uncertain because the background
remained hidden. What began as a way to avoid rendering distant objects became
part of the game&amp;rsquo;s identity. A more powerful machine might have shown more of
the town and produced a less memorable game.&lt;/p&gt;
&lt;p&gt;Final Fantasy VII shows why the lesson cannot simply be &amp;ldquo;always choose the
smallest truck.&amp;rdquo; Its cinematic ambition required space, and the game shipped
across multiple discs. The team expanded the physical capacity because the
result justified the cost.&lt;/p&gt;

  &lt;figure class=&#34;center&#34; &gt;
    &lt;img src=&#34;/img/packing-the-infinite-truck/final-fantasy-vii.jpg&#34;  alt=&#34;Cloud, Barret, Biggs, and Wedge in a pre-rendered Final Fantasy VII environment&#34;   /&gt;
    
      &lt;figcaption class=&#34;center&#34; &gt;&lt;a href=&#34;https://blog.playstation.com/2021/09/17/final-fantasy-vii-yoshinori-kitase-on-the-highs-and-lows-of-creating-the-timeless-playstation-classic/&#34;&gt;Source: Yoshinori Kitase&amp;rsquo;s PlayStation retrospective&lt;/a&gt;. Final Fantasy VII © SQUARE ENIX.&lt;/figcaption&gt;
    
  &lt;/figure&gt;


&lt;p&gt;That was not a failure to optimize. It was a deliberate decision about what
deserved to travel. Good engineering can mean packing the small truck
brilliantly, but it can also mean paying for a larger one when the value inside
it is clear.&lt;/p&gt;
&lt;p&gt;This is the elegance constraints can produce. At first, the load does not fit.
If every part still needs to travel, the limit forces you to think differently:
compress what can be compressed, optimize what wastes space, and reshape or
rearrange parts until they fit together. The ambition remains; what disappears
is the unnecessary space around it.&lt;/p&gt;
&lt;h2 id=&#34;the-cost-of-easy&#34;&gt;
  The cost of easy
  &lt;a href=&#34;#the-cost-of-easy&#34; class=&#34;h-anchor&#34; aria-hidden=&#34;true&#34;&gt;#&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Modern engineering gives us trucks that appears to be infinite.&lt;/p&gt;
&lt;p&gt;Need one small function? Install a library. Need to call one endpoint? Add the
vendor&amp;rsquo;s entire SDK. Need more capacity? Increase the instance size. Each
action is easy, and that ease can feel like the problem has been solved.&lt;/p&gt;
&lt;p&gt;But importing a large library for one small function is like hiring an
oversized truck to move a single box. The box arrives, so the decision looks
successful. What remains less visible is everything that arrived with it:
transitive dependencies, updates, vulnerabilities, breaking changes, and code
that somebody must understand when it behaves unexpectedly.&lt;/p&gt;

&lt;div style=&#34;padding: 1em; display: flex; align-items: center;&#34;&gt;
    &lt;div&gt;
        &lt;svg class=&#34;tip-squid&#34; width=&#34;96px&#34; height=&#34;96px&#34; viewBox=&#34;0 0 128 128&#34; data-name=&#34;Squid&#34; id=&#34;Squid&#34;
            xmlns=&#34;http://www.w3.org/2000/svg&#34;&gt;
            &lt;circle cx=&#34;49.516&#34; cy=&#34;76.516&#34; r=&#34;1.336&#34; /&gt;
            &lt;path
                d=&#34;M99.08,79.94H89.45a5,5,0,0,0-5,5v3.12a1,1,0,0,1-1,1H78.54a1,1,0,0,1-1-1l-.009-6.187a5.449,5.449,0,0,0,0-10.715V63.969a8.566,8.566,0,0,0,5.652-3.239,5.322,5.322,0,0,0,.746-4.954l-6.683-19a6.02,6.02,0,0,0,3.93-2.995,6.5,6.5,0,0,0-.155-6.59L65.2,1.705A2.564,2.564,0,0,0,63.212.476c-.083-.009-.174-.016-.27-.016h-.007c-.008,0-.015,0-.024,0a1.549,1.549,0,0,0-.257.02c-.071.009-.143.032-.215.048a2.17,2.17,0,0,0-.305.088,2.717,2.717,0,0,0-.291.117l-.02.01L61.774.77c-.024.013-.042.034-.066.048s-.028.021-.042.031A2.561,2.561,0,0,0,60.8,1.7L44.98,27.192A6.512,6.512,0,0,0,44.8,33.73a6.028,6.028,0,0,0,3.84,3.013l-6.7,19.032a5.321,5.321,0,0,0,.746,4.954A8.62,8.62,0,0,0,48.52,64v7.16a5.449,5.449,0,0,0,0,10.716V83.51a1,1,0,0,1-1,1H42.51a1,1,0,0,1-1-1V75.99a5,5,0,0,0-5-5H27a1,1,0,0,0-1,1,5.544,5.544,0,0,0,5.54,5.53h2.43a1,1,0,0,1,1,1v7.53a5,5,0,0,0,5,5h8.55v34.97a1,1,0,0,0,1,1,5.544,5.544,0,0,0,5.53-5.54V82.44a.474.474,0,0,1,.49-.47.469.469,0,0,1,.47.47v43.58a1,1,0,0,0,1,1,5.552,5.552,0,0,0,5.54-5.54V82.44a.474.474,0,0,1,.49-.47.469.469,0,0,1,.47.47v39.04a5.552,5.552,0,0,0,5.54,5.54,1,1,0,0,0,1-1V82.44a.475.475,0,0,1,.95,0v39.04a5.552,5.552,0,0,0,5.54,5.54,1,1,0,0,0,1-1V95.6H86a5,5,0,0,0,5-5v-.54c0-.02-.01-.03-.01-.05V87.47a1,1,0,0,1,1-1h2.56a5.531,5.531,0,0,0,5.53-5.53A1,1,0,0,0,99.08,79.94ZM51.367,46.063a2.852,2.852,0,1,1-2.852,2.852A2.855,2.855,0,0,1,51.367,46.063Zm-5.3,30.453a3.453,3.453,0,1,1,3.453,3.453A3.457,3.457,0,0,1,46.063,76.516Zm5.083-16.182a3.823,3.823,0,1,1,3.823-3.823A3.827,3.827,0,0,1,51.146,60.333Zm5.385-6.583a2.094,2.094,0,1,1,2.094-2.094A2.1,2.1,0,0,1,56.531,53.75ZM79.985,76.516a3.453,3.453,0,1,1-3.453-3.453A3.457,3.457,0,0,1,79.985,76.516ZM72.229,64.583a2.4,2.4,0,1,1-2.4,2.4A2.4,2.4,0,0,1,72.229,64.583Zm-2.281,8.479A1.948,1.948,0,1,1,71.9,71.115,1.95,1.95,0,0,1,69.948,73.063Z&#34; /&gt;
            &lt;circle cx=&#34;76.53&#34; cy=&#34;76.516&#34; r=&#34;1.336&#34; /&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
    &lt;div style=&#34; padding-left: 1em; padding-right: 1em&#34;&gt;
        &lt;p style=&#34;font-family: &#39;Amatic SC&#39;, cursive; font-size: 22px; font-weight: bold;&#34;&gt;Abundant capacity can hide poor decisions, but it cannot remove their weight.&lt;/p&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;The question is whether that tradeoff was considered at all.&lt;/p&gt;
&lt;p&gt;When capacity looks unlimited, addition becomes the default answer. Another
service can be introduced before the existing one is understood. Data can be
stored forever because deciding what to discard is harder than buying more
storage. A feature can be added because there is room in the release, even
though it will occupy testing, documentation, support, and maintenance for
years.&lt;/p&gt;
&lt;p&gt;Abundance does not remove the constraint. It moves it somewhere less visible.
The system eventually runs out of something: attention, clarity, ownership, or
the ability to change one part without being surprised by another.&lt;/p&gt;
&lt;p&gt;Connected software also makes mistakes easier to patch. That is real progress.
A defect no longer needs to remain on every copy of a physical disc. But an
easy return trip should not become an excuse for careless packing before the
truck leaves. Deploying a correction may take hours while diagnosing the
problem, coordinating the fix, and recovering trust costs much more.&lt;/p&gt;
&lt;p&gt;The stronger lesson from old hardware is not that we should make modern
development painful. It is that a hard edge forces the problem to be
understood before more capacity can be used to cover it.&lt;/p&gt;
&lt;p&gt;Before adding a dependency, do we need the whole library for this one use? Can
the problem be solved clearly with a small amount of code that the team owns?
Does the library remove more complexity than its updates and behavior will
introduce?&lt;/p&gt;
&lt;p&gt;Before adding a feature, does it deserve permanent maintenance? Before storing
more data, do we know why it needs to exist? Before expanding infrastructure,
does the problem require more capacity, or is expansion simply easier than
understanding where the current capacity went?&lt;/p&gt;
&lt;p&gt;These questions are the modern version of standing in front of a small truck.
They force us to open boxes, remove packaging, combine what can be combined,
and decide what does not need to travel.&lt;/p&gt;
&lt;p&gt;Elegance is not having the fewest dependencies, the least code, or the smallest
server. It is proportionality. The solution should not be much larger than the
problem unless the additional weight earns its place.&lt;/p&gt;
&lt;p&gt;An elegant system can look effortless after it is built. That is because the
difficult work happened before release: understanding the load, arranging its
parts, removing what carried no value, and choosing deliberately what would
remain.&lt;/p&gt;
&lt;p&gt;The original PlayStation gave developers a hard boundary. Modern engineering
rarely does. A larger instance, more memory, or additional storage is usually
within reach. That flexibility is useful, but it can make the truck appear
infinite. Eventually, we may no longer understand what is inside it, why each
part is there, or whether we ever needed a truck that large.&lt;/p&gt;
&lt;p&gt;The next time you build something, choose a boundary before one is forced on
you. If you are testing several SaaS ideas, start with the smallest practical
instance and run two or three early applications on it while you validate their
markets. Learn to deploy, observe, and manage them together. Scale when real
usage requires it, not simply because more capacity is available. Give the same
scrutiny to every dependency, service, and supporting application you bring
aboard.&lt;/p&gt;
&lt;p&gt;Imagine yourself as a PlayStation developer trying to fit the whole game onto a
single CD. Keep the ambition, but question the size of every box. Compress,
optimize, and rearrange before ordering a larger truck. That practice will
sharpen your judgment and make you a better engineer.&lt;/p&gt;

  &lt;figure class=&#34;center&#34; &gt;
    &lt;img src=&#34;/img/packing-the-infinite-truck/playstation-scph-1000.jpg&#34;  alt=&#34;An original Sony PlayStation SCPH-1000 with its controller and memory card&#34;   /&gt;
    
      &lt;figcaption class=&#34;center&#34; &gt;Photo by &lt;a href=&#34;https://commons.wikimedia.org/wiki/File:PlayStation-SCPH-1000-with-Controller.jpg&#34;&gt;Evan-Amos via Wikimedia Commons&lt;/a&gt;. Public domain.&lt;/figcaption&gt;
    
  &lt;/figure&gt;



        
        </description>
    </item>
    
    <item>
      <title>The 100% acceptance rate</title>
      <link>/reflections/the-100-percent-acceptance-rate/</link>
      <pubDate>Thu, 11 Jun 2026 01:00:00 +0200</pubDate>
      <guid>/reflections/the-100-percent-acceptance-rate/</guid>
      <description>
        
          
          
          
        
        
        &lt;p&gt;In conversations with engineering teams, I keep seeing the same pattern with developers
entering the market: the AI spend grows month over month, from $30 to $100,
then $500, and the code keeps flowing. The number that stays with me isn&amp;rsquo;t
the bill, though. It&amp;rsquo;s the acceptance rate, sitting at nearly &lt;strong&gt;100%&lt;/strong&gt;.
&lt;strong&gt;Everything the model suggests gets shipped&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Acceptance rate doesn&amp;rsquo;t measure thinking. It only shows accepted versus
rejected. But it hints at it. An experienced engineer, or simply one with
critical thinking, might keep half of what the model offers and rewrite the
rest, or accept the periphery and keep the core logic for themselves. The
rejections &lt;em&gt;are&lt;/em&gt; the engineering.&lt;/p&gt;

&lt;div style=&#34;padding: 1em; display: flex; align-items: center;&#34;&gt;
    &lt;div&gt;
        &lt;svg class=&#34;tip-squid&#34; width=&#34;96px&#34; height=&#34;96px&#34; viewBox=&#34;0 0 128 128&#34; data-name=&#34;Squid&#34; id=&#34;Squid&#34;
            xmlns=&#34;http://www.w3.org/2000/svg&#34;&gt;
            &lt;circle cx=&#34;49.516&#34; cy=&#34;76.516&#34; r=&#34;1.336&#34; /&gt;
            &lt;path
                d=&#34;M99.08,79.94H89.45a5,5,0,0,0-5,5v3.12a1,1,0,0,1-1,1H78.54a1,1,0,0,1-1-1l-.009-6.187a5.449,5.449,0,0,0,0-10.715V63.969a8.566,8.566,0,0,0,5.652-3.239,5.322,5.322,0,0,0,.746-4.954l-6.683-19a6.02,6.02,0,0,0,3.93-2.995,6.5,6.5,0,0,0-.155-6.59L65.2,1.705A2.564,2.564,0,0,0,63.212.476c-.083-.009-.174-.016-.27-.016h-.007c-.008,0-.015,0-.024,0a1.549,1.549,0,0,0-.257.02c-.071.009-.143.032-.215.048a2.17,2.17,0,0,0-.305.088,2.717,2.717,0,0,0-.291.117l-.02.01L61.774.77c-.024.013-.042.034-.066.048s-.028.021-.042.031A2.561,2.561,0,0,0,60.8,1.7L44.98,27.192A6.512,6.512,0,0,0,44.8,33.73a6.028,6.028,0,0,0,3.84,3.013l-6.7,19.032a5.321,5.321,0,0,0,.746,4.954A8.62,8.62,0,0,0,48.52,64v7.16a5.449,5.449,0,0,0,0,10.716V83.51a1,1,0,0,1-1,1H42.51a1,1,0,0,1-1-1V75.99a5,5,0,0,0-5-5H27a1,1,0,0,0-1,1,5.544,5.544,0,0,0,5.54,5.53h2.43a1,1,0,0,1,1,1v7.53a5,5,0,0,0,5,5h8.55v34.97a1,1,0,0,0,1,1,5.544,5.544,0,0,0,5.53-5.54V82.44a.474.474,0,0,1,.49-.47.469.469,0,0,1,.47.47v43.58a1,1,0,0,0,1,1,5.552,5.552,0,0,0,5.54-5.54V82.44a.474.474,0,0,1,.49-.47.469.469,0,0,1,.47.47v39.04a5.552,5.552,0,0,0,5.54,5.54,1,1,0,0,0,1-1V82.44a.475.475,0,0,1,.95,0v39.04a5.552,5.552,0,0,0,5.54,5.54,1,1,0,0,0,1-1V95.6H86a5,5,0,0,0,5-5v-.54c0-.02-.01-.03-.01-.05V87.47a1,1,0,0,1,1-1h2.56a5.531,5.531,0,0,0,5.53-5.53A1,1,0,0,0,99.08,79.94ZM51.367,46.063a2.852,2.852,0,1,1-2.852,2.852A2.855,2.855,0,0,1,51.367,46.063Zm-5.3,30.453a3.453,3.453,0,1,1,3.453,3.453A3.457,3.457,0,0,1,46.063,76.516Zm5.083-16.182a3.823,3.823,0,1,1,3.823-3.823A3.827,3.827,0,0,1,51.146,60.333Zm5.385-6.583a2.094,2.094,0,1,1,2.094-2.094A2.1,2.1,0,0,1,56.531,53.75ZM79.985,76.516a3.453,3.453,0,1,1-3.453-3.453A3.457,3.457,0,0,1,79.985,76.516ZM72.229,64.583a2.4,2.4,0,1,1-2.4,2.4A2.4,2.4,0,0,1,72.229,64.583Zm-2.281,8.479A1.948,1.948,0,1,1,71.9,71.115,1.95,1.95,0,0,1,69.948,73.063Z&#34; /&gt;
            &lt;circle cx=&#34;76.53&#34; cy=&#34;76.516&#34; r=&#34;1.336&#34; /&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
    &lt;div style=&#34; padding-left: 1em; padding-right: 1em&#34;&gt;
        &lt;p style=&#34;font-family: &#39;Amatic SC&#39;, cursive; font-size: 22px; font-weight: bold;&#34;&gt;A more useful metric would be acceptance rate paired with thinking time: how long a suggestion sits under review before it gets accepted.&lt;/p&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;It&amp;rsquo;s not &amp;ldquo;using AI more and more&amp;rdquo;, it&amp;rsquo;s the monthly cost of replacing &lt;strong&gt;judgment with tokens&lt;/strong&gt;. Judgment
compounds because every rejected suggestion teaches you something. Tokens don&amp;rsquo;t.
So the question worth asking after a year of $$$ spendings: what do you own?
If the answer is a codebase nobody has a mental model of, you&amp;rsquo;ve been paying
to accumulate liability.&lt;/p&gt;
&lt;p&gt;If a software real value lives in someone&amp;rsquo;s head, and code no human
has a theory of, is legacy code
from day one. Unread AI output is born legacy.&lt;/p&gt;
&lt;p&gt;Frameworks soften this more than we admit.&lt;/p&gt;

&lt;div style=&#34;padding: 1em; display: flex; align-items: center;&#34;&gt;
    &lt;div&gt;
        &lt;svg class=&#34;tip-squid&#34; width=&#34;96px&#34; height=&#34;96px&#34; viewBox=&#34;0 0 128 128&#34; data-name=&#34;Squid&#34; id=&#34;Squid&#34;
            xmlns=&#34;http://www.w3.org/2000/svg&#34;&gt;
            &lt;circle cx=&#34;49.516&#34; cy=&#34;76.516&#34; r=&#34;1.336&#34; /&gt;
            &lt;path
                d=&#34;M99.08,79.94H89.45a5,5,0,0,0-5,5v3.12a1,1,0,0,1-1,1H78.54a1,1,0,0,1-1-1l-.009-6.187a5.449,5.449,0,0,0,0-10.715V63.969a8.566,8.566,0,0,0,5.652-3.239,5.322,5.322,0,0,0,.746-4.954l-6.683-19a6.02,6.02,0,0,0,3.93-2.995,6.5,6.5,0,0,0-.155-6.59L65.2,1.705A2.564,2.564,0,0,0,63.212.476c-.083-.009-.174-.016-.27-.016h-.007c-.008,0-.015,0-.024,0a1.549,1.549,0,0,0-.257.02c-.071.009-.143.032-.215.048a2.17,2.17,0,0,0-.305.088,2.717,2.717,0,0,0-.291.117l-.02.01L61.774.77c-.024.013-.042.034-.066.048s-.028.021-.042.031A2.561,2.561,0,0,0,60.8,1.7L44.98,27.192A6.512,6.512,0,0,0,44.8,33.73a6.028,6.028,0,0,0,3.84,3.013l-6.7,19.032a5.321,5.321,0,0,0,.746,4.954A8.62,8.62,0,0,0,48.52,64v7.16a5.449,5.449,0,0,0,0,10.716V83.51a1,1,0,0,1-1,1H42.51a1,1,0,0,1-1-1V75.99a5,5,0,0,0-5-5H27a1,1,0,0,0-1,1,5.544,5.544,0,0,0,5.54,5.53h2.43a1,1,0,0,1,1,1v7.53a5,5,0,0,0,5,5h8.55v34.97a1,1,0,0,0,1,1,5.544,5.544,0,0,0,5.53-5.54V82.44a.474.474,0,0,1,.49-.47.469.469,0,0,1,.47.47v43.58a1,1,0,0,0,1,1,5.552,5.552,0,0,0,5.54-5.54V82.44a.474.474,0,0,1,.49-.47.469.469,0,0,1,.47.47v39.04a5.552,5.552,0,0,0,5.54,5.54,1,1,0,0,0,1-1V82.44a.475.475,0,0,1,.95,0v39.04a5.552,5.552,0,0,0,5.54,5.54,1,1,0,0,0,1-1V95.6H86a5,5,0,0,0,5-5v-.54c0-.02-.01-.03-.01-.05V87.47a1,1,0,0,1,1-1h2.56a5.531,5.531,0,0,0,5.53-5.53A1,1,0,0,0,99.08,79.94ZM51.367,46.063a2.852,2.852,0,1,1-2.852,2.852A2.855,2.855,0,0,1,51.367,46.063Zm-5.3,30.453a3.453,3.453,0,1,1,3.453,3.453A3.457,3.457,0,0,1,46.063,76.516Zm5.083-16.182a3.823,3.823,0,1,1,3.823-3.823A3.827,3.827,0,0,1,51.146,60.333Zm5.385-6.583a2.094,2.094,0,1,1,2.094-2.094A2.1,2.1,0,0,1,56.531,53.75ZM79.985,76.516a3.453,3.453,0,1,1-3.453-3.453A3.457,3.457,0,0,1,79.985,76.516ZM72.229,64.583a2.4,2.4,0,1,1-2.4,2.4A2.4,2.4,0,0,1,72.229,64.583Zm-2.281,8.479A1.948,1.948,0,1,1,71.9,71.115,1.95,1.95,0,0,1,69.948,73.063Z&#34; /&gt;
            &lt;circle cx=&#34;76.53&#34; cy=&#34;76.516&#34; r=&#34;1.336&#34; /&gt;
        &lt;/svg&gt;
    &lt;/div&gt;
    &lt;div style=&#34; padding-left: 1em; padding-right: 1em&#34;&gt;
        &lt;p style=&#34;font-family: &#39;Amatic SC&#39;, cursive; font-size: 22px; font-weight: bold;&#34;&gt;Conventions from frameworks like Django or Laravel keep a codebase maintainable almost by themselves because the architecture and structure are already there, so the AI doesn&amp;#39;t get to reinvent much. Generated code lands in well-worn grooves: a model, a migration, a view. Wrong code in a conventional shape is findable.&lt;/p&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;But conventions end where the business begins. Pricing rules, approval
workflows, the gnarly domain logic that makes the product the product. No
convention exists there. That&amp;rsquo;s exactly where born legacy is most critical,
and exactly where suggestions get accepted as readily as boilerplate.&lt;/p&gt;
&lt;p&gt;The more we deliver, the faster scope grows. Every shipped feature invites the
next one. And maintaining all of that software will require the same
judgment, at any price.&lt;/p&gt;
&lt;p&gt;This isn&amp;rsquo;t an argument against AI; I use it daily. It&amp;rsquo;s an argument for
balance: use the model for research and explanation
as much as for generation. Always question, never accept blindly. Be skeptical,
never accept what the model suggests without your own reasoning.&lt;/p&gt;

        
        </description>
    </item>
    
  </channel>
</rss>