<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Giulio Marinelli</title>
    <description>The latest articles on DEV Community by Giulio Marinelli (@giuliomarinelli).</description>
    <link>https://dev.to/giuliomarinelli</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1317202%2F906acac1-994c-4082-93ce-eef06a66d172.png</url>
      <title>DEV Community: Giulio Marinelli</title>
      <link>https://dev.to/giuliomarinelli</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/giuliomarinelli"/>
    <language>en</language>
    <item>
      <title>When Thinking Harder Makes AI Worse: A Case for Multi-Model Reasoning</title>
      <dc:creator>Giulio Marinelli</dc:creator>
      <pubDate>Fri, 25 Sep 2026 12:49:46 +0000</pubDate>
      <link>https://dev.to/giuliomarinelli/when-thinking-harder-makes-ai-worse-a-case-for-multi-model-reasoning-47di</link>
      <guid>https://dev.to/giuliomarinelli/when-thinking-harder-makes-ai-worse-a-case-for-multi-model-reasoning-47di</guid>
      <description>&lt;p&gt;We often assume that bigger models, larger context windows, and more reasoning effort should produce better answers.&lt;/p&gt;

&lt;p&gt;And to be fair, in many cases, they do.&lt;/p&gt;

&lt;p&gt;If you are debugging code, planning a multi-step workflow, or coordinating an agentic task across files, tools, and constraints, stronger reasoning is usually a major advantage. More deliberation often means better consistency, better constraint handling, and fewer obvious mistakes.&lt;/p&gt;

&lt;p&gt;But I have been thinking about a different possibility:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What if more reasoning does not always improve the answer?&lt;/p&gt;

&lt;p&gt;What if, in some cases, it simply makes a model reason more deeply about the wrong representation of the problem?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is the intuition behind this article.&lt;/p&gt;

&lt;p&gt;This is &lt;strong&gt;not&lt;/strong&gt; a paper, and it is &lt;strong&gt;not&lt;/strong&gt; a benchmark study. It is a structured reflection built around a real anecdotal case, with the goal of proposing a plausible hypothesis:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;More reasoning can improve depth without improving breadth.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In some tasks, that means stronger reasoning may reinforce an incomplete framing instead of correcting it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And if that is true, then an interesting consequence follows:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A weaker, faster, or more impulsive model may still contribute value — not because it is generally better, but because it explores the problem differently.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The assumption we rarely question
&lt;/h2&gt;

&lt;p&gt;There is a widespread mental model in AI usage:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;bigger model = better;&lt;/li&gt;
&lt;li&gt;more reasoning = better;&lt;/li&gt;
&lt;li&gt;more careful verification = better;&lt;/li&gt;
&lt;li&gt;more compute spent per answer = better.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This mental model is often useful. It is also often incomplete.&lt;/p&gt;

&lt;p&gt;Reasoning quality is not just about how deeply a model can explore a line of thought. It is also about &lt;strong&gt;which line of thought it chooses to explore in the first place&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That distinction matters.&lt;/p&gt;

&lt;p&gt;A model can be excellent at:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;maintaining consistency;&lt;/li&gt;
&lt;li&gt;following long chains of inference;&lt;/li&gt;
&lt;li&gt;checking constraints;&lt;/li&gt;
&lt;li&gt;refining a solution.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And still fail to notice that the starting assumptions were incomplete.&lt;/p&gt;

&lt;p&gt;When that happens, additional reasoning does not necessarily fix the problem. It may simply produce a more coherent answer built on the wrong frame.&lt;/p&gt;

&lt;h2&gt;
  
  
  A real-world anecdote
&lt;/h2&gt;

&lt;p&gt;A few weeks ago, I was dealing with a bureaucratic and tax-related issue involving VAT, reverse charge, and purchases that had been made as a consumer even though they were connected to business activity.&lt;/p&gt;

&lt;p&gt;I used a strong reasoning model with very high effort and spent a long time exploring the issue. The model searched, reasoned carefully, and produced a coherent conclusion: the invoices should probably be corrected and re-issued as B2B documents so that the reverse-charge mechanism could be handled properly.&lt;/p&gt;

&lt;p&gt;The answer was not careless. On the contrary, it was cautious, structured, and highly reasoned.&lt;/p&gt;

&lt;p&gt;Later, I asked a much lighter model from a different provider essentially the same question.&lt;/p&gt;

&lt;p&gt;This smaller model was less careful and less polished. Some details in its response were less precise. But in a single prompt, it surfaced a key legal point that the stronger reasoning model had missed: if the VAT number was never communicated to the supplier, then the supplier may be required to treat the buyer as a consumer for that transaction.&lt;/p&gt;

&lt;p&gt;That single point changed the structure of the problem.&lt;/p&gt;

&lt;p&gt;I then brought that missing point back to the stronger reasoning model. After reevaluating the situation, it recognized that its previous conclusion had been too cautious and built around an incomplete framing.&lt;/p&gt;

&lt;p&gt;This anecdote does &lt;strong&gt;not&lt;/strong&gt; prove that smaller models are better.&lt;/p&gt;

&lt;p&gt;It does &lt;strong&gt;not&lt;/strong&gt; prove that strong reasoning reduces accuracy.&lt;/p&gt;

&lt;p&gt;But it does suggest something important:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;A long reasoning process can fail if the model starts from the wrong representation of the problem.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And that, in turn, suggests that a second model with a different style or a different failure mode can be epistemically useful.&lt;/p&gt;

&lt;h2&gt;
  
  
  Local coherence is not global correctness
&lt;/h2&gt;

&lt;p&gt;The strongest insight I took from that experience is this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A model can become increasingly coherent relative to its own assumptions without becoming more globally correct.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is the core of what I mean by &lt;strong&gt;overreasoning&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I do &lt;strong&gt;not&lt;/strong&gt; mean that “thinking more is bad.”&lt;/p&gt;

&lt;p&gt;I mean something more specific:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Overreasoning is the possibility that additional inference reinforces an initially incomplete or incorrect problem representation instead of revisiting it.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You can think of it like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Incomplete framing
        ↓
Good reasoning
        ↓
More reasoning
        ↓
Even better internal consistency
        ↓
Still wrong at the global level
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is not a contradiction. It is actually what we should expect from any powerful reasoning system.&lt;/p&gt;

&lt;p&gt;If the system has locked onto a representation of the problem, then extra compute may go into refining that representation rather than challenging it.&lt;/p&gt;

&lt;p&gt;In other words:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Reasoning can increase local coherence without guaranteeing global correctness.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Premise lock-in
&lt;/h2&gt;

&lt;p&gt;One way to describe the phenomenon is &lt;strong&gt;premise lock-in&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A model interprets the problem in a certain way early on. Then it spends its reasoning budget exploring consequences, caveats, and details within that interpretation.&lt;/p&gt;

&lt;p&gt;At that point, it is no longer asking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Am I solving the right problem?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It is asking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“How do I solve this problem well?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Those are not the same question.&lt;/p&gt;

&lt;p&gt;And the more capable the reasoning engine becomes, the easier it may be for it to build an impressive structure on top of a slightly flawed base.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvvyohi0955jfpi735bdp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvvyohi0955jfpi735bdp.png" alt="Abstract visualization of premise lock-in: an increasingly sophisticated reasoning path remains trapped within a constrained representation while a broader solution lies outside." width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That is why I think the issue is not simply “reasoning effort.” It is also about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;problem framing;&lt;/li&gt;
&lt;li&gt;search path dependence;&lt;/li&gt;
&lt;li&gt;model-specific bias;&lt;/li&gt;
&lt;li&gt;and the breadth of exploration before deep exploitation begins.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Exploration vs exploitation
&lt;/h2&gt;

&lt;p&gt;A useful lens here comes from a classic distinction: &lt;strong&gt;exploration&lt;/strong&gt; versus &lt;strong&gt;exploitation&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This is only a conceptual analogy, not a literal claim about internal LLM mechanics, but I think it is helpful.&lt;/p&gt;

&lt;p&gt;Some inference styles seem better at &lt;strong&gt;exploration&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;surfacing alternative interpretations;&lt;/li&gt;
&lt;li&gt;making looser associations;&lt;/li&gt;
&lt;li&gt;proposing hypotheses quickly;&lt;/li&gt;
&lt;li&gt;jumping to possibilities that are not yet fully justified.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Other inference styles seem better at &lt;strong&gt;exploitation&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;developing one line of reasoning in depth;&lt;/li&gt;
&lt;li&gt;checking internal consistency;&lt;/li&gt;
&lt;li&gt;verifying claims;&lt;/li&gt;
&lt;li&gt;refining conclusions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A strong reasoning model is usually excellent at exploitation.&lt;/p&gt;

&lt;p&gt;A faster, weaker, more impulsive model may still be useful for exploration.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fiocs8qdu16dt996bha91.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fiocs8qdu16dt996bha91.png" alt="Conceptual search space contrasting broad exploration across multiple possible regions with deep exploitation of a single reasoning path." width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That leads to a more nuanced hypothesis:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Deep reasoning can increase the depth of a search without necessarily increasing its breadth.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If the breadth is too narrow too early, then more depth is not always what you need.&lt;/p&gt;

&lt;p&gt;Sometimes you need a different path, not a deeper one.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a weaker model can still add information
&lt;/h2&gt;

&lt;p&gt;This is the part that I find most fascinating.&lt;/p&gt;

&lt;p&gt;A weaker model does not need to be more accurate overall in order to be useful.&lt;/p&gt;

&lt;p&gt;It only needs to contribute something that the stronger model did not consider.&lt;/p&gt;

&lt;p&gt;That contribution could be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a missing assumption;&lt;/li&gt;
&lt;li&gt;an alternative framing;&lt;/li&gt;
&lt;li&gt;a legal or technical exception;&lt;/li&gt;
&lt;li&gt;a surprising analogy;&lt;/li&gt;
&lt;li&gt;a question that destabilizes the initial representation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In other words, the weaker model may still have &lt;strong&gt;epistemic value&lt;/strong&gt; even if it hallucinates more often.&lt;/p&gt;

&lt;p&gt;That sounds counterintuitive, so let me be precise: I am &lt;strong&gt;not&lt;/strong&gt; saying hallucinations are desirable.&lt;/p&gt;

&lt;p&gt;I am saying that a model that is willing to generate looser candidate hypotheses can sometimes expand the search space in a way that a more cautious model does not.&lt;/p&gt;

&lt;p&gt;Used correctly, that output is not the final answer. It is raw material for verification.&lt;/p&gt;

&lt;p&gt;The weaker model does not become the judge of truth.&lt;/p&gt;

&lt;p&gt;It becomes a &lt;strong&gt;generator of alternative possibilities&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That difference matters.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why different providers may matter
&lt;/h2&gt;

&lt;p&gt;There is another important detail here: my anecdotal case did not involve the same model with two different settings.&lt;/p&gt;

&lt;p&gt;It involved models from &lt;strong&gt;different providers&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That matters because the diversity was not only about “high effort vs low effort.” It was likely also about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;different training data mixtures;&lt;/li&gt;
&lt;li&gt;different post-training strategies;&lt;/li&gt;
&lt;li&gt;different optimization objectives;&lt;/li&gt;
&lt;li&gt;different retrieval or search behavior;&lt;/li&gt;
&lt;li&gt;different preference tuning;&lt;/li&gt;
&lt;li&gt;different failure modes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Of course, I cannot inspect the internal training pipelines of proprietary systems, so this remains a hypothesis.&lt;/p&gt;

&lt;p&gt;But from a systems perspective, it is reasonable to expect that independently trained models may not fail in perfectly correlated ways.&lt;/p&gt;

&lt;p&gt;And that is exactly what makes them interesting as a pair.&lt;/p&gt;

&lt;p&gt;In ensemble methods, diversity matters.&lt;/p&gt;

&lt;p&gt;Ten systems making the same mistake do not help much.&lt;/p&gt;

&lt;p&gt;A weaker system that makes &lt;strong&gt;different mistakes&lt;/strong&gt; can be much more useful than a stronger system that repeats the same blind spots.&lt;/p&gt;

&lt;h2&gt;
  
  
  From model comparison to model cooperation
&lt;/h2&gt;

&lt;p&gt;At this point, I think the most interesting question is no longer:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Which model is better?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A better question is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Which combination of inference styles produces the most robust reasoning process for this task?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That reframes the problem entirely.&lt;/p&gt;

&lt;p&gt;Instead of ranking individual models in isolation, we start thinking in terms of &lt;strong&gt;process design&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For some tasks, especially ambiguous or cross-disciplinary ones, it may be beneficial to combine:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;a fast or lightweight model that generates alternative framings;&lt;/li&gt;
&lt;li&gt;a stronger reasoning model that verifies, refines, and synthesizes.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is not majority voting.&lt;/p&gt;

&lt;p&gt;It is not “ask two chatbots and pick the answer you like most.”&lt;/p&gt;

&lt;p&gt;It is something more structured.&lt;/p&gt;

&lt;h2&gt;
  
  
  A simple multi-model workflow
&lt;/h2&gt;

&lt;p&gt;Here is a very simple version of what such a workflow might look like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User question
    │
    ├──→ Fast / lightweight model
    │         ↓
    │   Candidate hypotheses
    │
    └──→ Strong reasoning model
              ↓
         Initial deep analysis

Candidate hypotheses + deep analysis
                ↓
        Disagreement analysis
                ↓
      Targeted verification phase
                ↓
           Final synthesis
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkmd85tjm79fgjm9olu5m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkmd85tjm79fgjm9olu5m.png" alt="Multi-model reasoning workflow combining a fast exploratory model and a strong reasoning model through disagreement analysis, targeted verification, and final synthesis." width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The key step is the one in the middle:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;disagreement analysis&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Instead of asking, “Which model wins?”, we ask:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Where do they diverge?&lt;/li&gt;
&lt;li&gt;Which assumptions appear in only one answer?&lt;/li&gt;
&lt;li&gt;Which claims would most change the conclusion if verified?&lt;/li&gt;
&lt;li&gt;What did one model notice that the other ignored?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is where disagreement becomes useful.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Disagreement is not necessarily noise. It can be a signal telling us where additional reasoning has the highest value.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That, to me, is the beginning of a genuinely interesting design pattern.&lt;/p&gt;

&lt;h2&gt;
  
  
  Generate cheap, verify expensive
&lt;/h2&gt;

&lt;p&gt;There may even be an economic angle here.&lt;/p&gt;

&lt;p&gt;If a cheaper model can generate candidate interpretations, and a more expensive model can verify only the most relevant ones, then we get a workflow like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cheap generation
      ↓
divergent hypotheses
      ↓
expensive verification
      ↓
final synthesis
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That may outperform, in some contexts, the simpler but more expensive strategy of:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;maximum reasoning on everything
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Not always, of course. It depends heavily on the task.&lt;/p&gt;

&lt;p&gt;In agentic coding workflows, for example, I still suspect that stronger reasoning usually dominates. When a model must coordinate multiple files, dependencies, state transitions, and tool outputs, the benefits of high-quality reasoning are enormous.&lt;/p&gt;

&lt;p&gt;But in other domains — bureaucracy, strategy, marketing, interpretation, exploratory analysis, decision support — the picture may be less straightforward.&lt;/p&gt;

&lt;p&gt;In those areas, breadth of exploration may matter as much as depth of reasoning.&lt;/p&gt;

&lt;h2&gt;
  
  
  A loose Hegelian analogy
&lt;/h2&gt;

&lt;p&gt;If I wanted to put this in slightly philosophical terms, I would describe it as a loose dialectical process:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;one model produces a &lt;strong&gt;thesis&lt;/strong&gt;;&lt;/li&gt;
&lt;li&gt;another introduces an &lt;strong&gt;antithesis&lt;/strong&gt; or at least a competing framing;&lt;/li&gt;
&lt;li&gt;a stronger reasoning stage produces a &lt;strong&gt;synthesis&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I do not mean that literally, and I do not want to over-philosophize a practical engineering point.&lt;/p&gt;

&lt;p&gt;But the analogy is useful because it highlights something important:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The value does not come from having one perfect reasoner.&lt;/p&gt;

&lt;p&gt;It comes from structuring a process in which alternative framings can collide before synthesis happens.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And perhaps that is what some AI workflows are currently missing.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I am not claiming
&lt;/h2&gt;

&lt;p&gt;Since this topic is easy to overstate, let me be explicit about what I am &lt;strong&gt;not&lt;/strong&gt; claiming.&lt;/p&gt;

&lt;p&gt;I am &lt;strong&gt;not&lt;/strong&gt; claiming that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;smaller models are generally better than larger ones;&lt;/li&gt;
&lt;li&gt;reasoning models are generally worse than non-reasoning ones;&lt;/li&gt;
&lt;li&gt;hallucinations are good;&lt;/li&gt;
&lt;li&gt;one anecdote proves a general rule;&lt;/li&gt;
&lt;li&gt;different providers automatically produce useful epistemic diversity;&lt;/li&gt;
&lt;li&gt;multi-model workflows always improve outcomes;&lt;/li&gt;
&lt;li&gt;or that stronger reasoning is not extremely valuable in many tasks.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I am also not claiming that my tax anecdote isolates causality cleanly.&lt;/p&gt;

&lt;p&gt;There are many alternative explanations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the second model may simply have had a better representation of that legal rule;&lt;/li&gt;
&lt;li&gt;the search stack may have surfaced a different source;&lt;/li&gt;
&lt;li&gt;the result may have depended partly on luck or sampling;&lt;/li&gt;
&lt;li&gt;the wording of the prompts may have changed the framing;&lt;/li&gt;
&lt;li&gt;the first model may have been overly cautious for reasons unrelated to reasoning depth itself.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All of those possibilities are real.&lt;/p&gt;

&lt;p&gt;That is why I see this article as an invitation to investigate, not as a final verdict.&lt;/p&gt;

&lt;h2&gt;
  
  
  A better research question
&lt;/h2&gt;

&lt;p&gt;So perhaps the right research question is not:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Which model is smartest?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It might be:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;When does additional reasoning improve performance, and when does it merely reinforce the current framing?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And a related engineering question follows:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Can we design multi-model systems that deliberately combine exploration and exploitation, instead of assuming that more of one model is always enough?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That, to me, feels like a much richer direction.&lt;/p&gt;

&lt;p&gt;It shifts the focus away from leaderboard thinking and toward something closer to cognitive architecture.&lt;/p&gt;

&lt;p&gt;Not just “make the reasoner stronger.”&lt;/p&gt;

&lt;p&gt;But:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;design the reasoning process better.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Final thought
&lt;/h2&gt;

&lt;p&gt;I still believe strong reasoning models are indispensable.&lt;/p&gt;

&lt;p&gt;But I no longer think “more reasoning” should be treated as a universally monotonic path to better outcomes.&lt;/p&gt;

&lt;p&gt;Sometimes, a lightweight model from a different family may contribute exactly the one missing possibility that the stronger model failed to generate.&lt;/p&gt;

&lt;p&gt;Not because it is better.&lt;/p&gt;

&lt;p&gt;Not because it is more reliable.&lt;/p&gt;

&lt;p&gt;But because it is different.&lt;/p&gt;

&lt;p&gt;And in some tasks, that difference may be the beginning of a more robust epistemic process.&lt;/p&gt;

&lt;p&gt;Maybe the next step in building reliable AI systems is not only making one model think harder.&lt;/p&gt;

&lt;p&gt;Maybe it is learning &lt;strong&gt;when different models should think differently — and how their disagreement can be turned into evidence&lt;/strong&gt;.&lt;/p&gt;




&lt;p&gt;If you have seen similar behavior in your own workflows — especially when combining reasoning models with smaller or faster systems — I would be very curious to hear about it.&lt;/p&gt;

&lt;p&gt;I suspect this topic deserves more attention than it currently gets.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>machinelearning</category>
      <category>softwareengineering</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Why I Chose Qwik: Resumability, Signals, and One Framework from Static Sites to Full-Stack Apps</title>
      <dc:creator>Giulio Marinelli</dc:creator>
      <pubDate>Fri, 04 Sep 2026 17:22:33 +0000</pubDate>
      <link>https://dev.to/giuliomarinelli/why-i-chose-qwik-resumability-signals-and-one-framework-from-static-sites-to-full-stack-apps-1lel</link>
      <guid>https://dev.to/giuliomarinelli/why-i-chose-qwik-resumability-signals-and-one-framework-from-static-sites-to-full-stack-apps-1lel</guid>
      <description>&lt;p&gt;Over the last several months, I have invested a significant amount of time in &lt;strong&gt;Qwik&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;And whenever I mention that, there is an obvious question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Why Qwik?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I already have significant experience with &lt;strong&gt;Angular&lt;/strong&gt;, so I did not need another frontend framework simply to build complex applications.&lt;/p&gt;

&lt;p&gt;And if my goal had merely been to expand into the JSX/TSX ecosystem, the obvious choice would probably have been &lt;strong&gt;React&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;React has the ecosystem, the adoption, the libraries, the jobs and an enormous amount of community knowledge behind it.&lt;/p&gt;

&lt;p&gt;So why spend months learning Qwik instead?&lt;/p&gt;

&lt;p&gt;The short answer is that I wasn’t looking for another syntax.&lt;/p&gt;

&lt;p&gt;I was looking for a different &lt;strong&gt;runtime model&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;And that distinction matters.&lt;/p&gt;




&lt;h2&gt;
  
  
  Qwik and React may look similar. Architecturally, they are not.
&lt;/h2&gt;

&lt;p&gt;At first sight, a Qwik component feels familiar to anyone who has worked with React:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;component$&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;useSignal&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@builder.io/qwik&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Counter&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;component&lt;/span&gt;&lt;span class="nf"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;count&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useSignal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      Count: &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There are functional components.&lt;/p&gt;

&lt;p&gt;There is JSX.&lt;/p&gt;

&lt;p&gt;Props are passed through components.&lt;/p&gt;

&lt;p&gt;State changes update the UI.&lt;/p&gt;

&lt;p&gt;From a distance, you could reasonably think:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Isn’t this basically another React-like framework?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Not really.&lt;/p&gt;

&lt;p&gt;The interesting part of Qwik starts exactly where the syntax stops being interesting.&lt;/p&gt;




&lt;h1&gt;
  
  
  1. Signals are not an optimization added later
&lt;/h1&gt;

&lt;p&gt;One of the reasons Qwik immediately felt natural to me was its reactive state model.&lt;/p&gt;

&lt;p&gt;Coming from modern Angular, I had already become very comfortable with &lt;strong&gt;signals&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A signal represents a reactive value:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;count&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useSignal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The important part isn’t the API.&lt;/p&gt;

&lt;p&gt;The important part is the dependency model behind it.&lt;/p&gt;

&lt;p&gt;Instead of thinking primarily in terms of:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;State changed → render component again → determine what changed&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I can think in terms of:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;State changed → notify exactly what depends on that state.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This distinction becomes increasingly valuable as applications grow.&lt;/p&gt;

&lt;p&gt;React’s model is fundamentally component-render oriented.&lt;/p&gt;

&lt;p&gt;When state changes, React schedules rendering work. React then determines what must actually be committed to the DOM.&lt;/p&gt;

&lt;p&gt;That architecture works extremely well and React has spent years becoming very good at it.&lt;/p&gt;

&lt;p&gt;But it creates an interesting consequence: developers often end up thinking about render boundaries.&lt;/p&gt;

&lt;p&gt;Should this value live higher or lower in the tree?&lt;/p&gt;

&lt;p&gt;Should this component be memoized?&lt;/p&gt;

&lt;p&gt;Is this callback stable?&lt;/p&gt;

&lt;p&gt;Will this context update cause unnecessary work?&lt;/p&gt;

&lt;p&gt;Modern React tooling and the React Compiler can reduce the amount of manual optimization required, but the underlying mental model is still different.&lt;/p&gt;

&lt;p&gt;With signals, reactivity itself is more granular.&lt;/p&gt;

&lt;p&gt;And Qwik was designed around this model from the beginning.&lt;/p&gt;




&lt;h1&gt;
  
  
  2. The real reason I chose Qwik: resumability
&lt;/h1&gt;

&lt;p&gt;Signals were attractive.&lt;/p&gt;

&lt;p&gt;But &lt;strong&gt;resumability&lt;/strong&gt; is what made Qwik genuinely interesting to me.&lt;/p&gt;

&lt;p&gt;To understand why, we need to look at what usually happens with SSR.&lt;/p&gt;

&lt;p&gt;Suppose the server renders this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;button&amp;gt;&lt;/span&gt;Buy product&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sending HTML from the server is easy.&lt;/p&gt;

&lt;p&gt;The difficult question is:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How does the browser know what happens when the user clicks that button?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In the traditional SSR model, server-rendered HTML is only part of the application.&lt;/p&gt;

&lt;p&gt;The client still needs enough JavaScript to reconstruct the application runtime.&lt;/p&gt;

&lt;p&gt;Conceptually, the browser has to recover things such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the component tree;&lt;/li&gt;
&lt;li&gt;application state;&lt;/li&gt;
&lt;li&gt;event listeners;&lt;/li&gt;
&lt;li&gt;framework runtime information.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This process is generally known as &lt;strong&gt;hydration&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The server generated the visible result, but the client has to replay enough of the application to make that result interactive.&lt;/p&gt;

&lt;p&gt;This creates an interesting architectural cost.&lt;/p&gt;

&lt;p&gt;The server already did work.&lt;/p&gt;

&lt;p&gt;Then the browser performs part of that work again.&lt;/p&gt;




&lt;h2&gt;
  
  
  Qwik asks a different question
&lt;/h2&gt;

&lt;p&gt;Instead of asking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;How can we hydrate this application faster?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Qwik asks:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Why reconstruct the application if the server already knows what its state is?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That leads to resumability.&lt;/p&gt;

&lt;p&gt;The server doesn’t simply generate HTML.&lt;/p&gt;

&lt;p&gt;It also serializes enough information about the application for execution to be &lt;strong&gt;resumed later in the browser&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Conceptually:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Traditional SSR

Server
   ↓
Render application
   ↓
HTML
   ↓
Browser
   ↓
Download JS
   ↓
Rebuild application runtime
   ↓
Attach behavior
   ↓
Interactive
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With resumability, the model becomes closer to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Qwik

Server
   ↓
Render + serialize application state
   ↓
HTML
   ↓
Browser
   ↓
Resume execution when needed
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That difference looks small in a diagram.&lt;/p&gt;

&lt;p&gt;It is not small architecturally.&lt;/p&gt;




&lt;h1&gt;
  
  
  3. Lazy loading is not merely about routes
&lt;/h1&gt;

&lt;p&gt;Most frontend developers are already familiar with lazy loading.&lt;/p&gt;

&lt;p&gt;You might split an application by route:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;AdminPage&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;lazy&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;import&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./admin&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is useful.&lt;/p&gt;

&lt;p&gt;But Qwik takes the concept much further.&lt;/p&gt;

&lt;p&gt;Lazy loading occurs at a much finer granularity.&lt;/p&gt;

&lt;p&gt;Consider:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;clicked&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  Click me
&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That &lt;code&gt;$&lt;/code&gt; is not decoration.&lt;/p&gt;

&lt;p&gt;Qwik uses &lt;code&gt;$&lt;/code&gt; boundaries to indicate code that can be extracted and lazily loaded.&lt;/p&gt;

&lt;p&gt;The optimizer can transform functions into separately addressable symbols represented through &lt;strong&gt;QRLs — Qwik Resource Locators&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Instead of eagerly shipping every possible event handler because an element exists on the page, Qwik can defer loading behavior until that behavior becomes relevant.&lt;/p&gt;

&lt;p&gt;That gives Qwik something I find much more interesting than ordinary code splitting:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;lazy execution as an architectural default.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The application is not merely split into several large bundles.&lt;/p&gt;

&lt;p&gt;Execution itself can be deferred at fine-grained boundaries.&lt;/p&gt;




&lt;h1&gt;
  
  
  4. JavaScript becomes something that can be streamed according to demand
&lt;/h1&gt;

&lt;p&gt;This changes the way I think about frontend performance.&lt;/p&gt;

&lt;p&gt;For years, one of the dominant optimization strategies for JavaScript applications has been:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Build the application, then figure out how to send less of it initially.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Qwik reverses that relationship.&lt;/p&gt;

&lt;p&gt;The architecture assumes from the beginning that code should only arrive when the browser actually needs it.&lt;/p&gt;

&lt;p&gt;This means application complexity does not have to translate directly into startup complexity.&lt;/p&gt;

&lt;p&gt;A large application may contain enormous amounts of code.&lt;/p&gt;

&lt;p&gt;But why should the browser execute code for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a modal the user never opens;&lt;/li&gt;
&lt;li&gt;a form validation branch they never trigger;&lt;/li&gt;
&lt;li&gt;an administrative feature they cannot access;&lt;/li&gt;
&lt;li&gt;an accordion they never expand;&lt;/li&gt;
&lt;li&gt;an interaction below the fold they never reach?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ideally, it shouldn’t.&lt;/p&gt;

&lt;p&gt;Qwik’s architecture is built around that idea.&lt;/p&gt;




&lt;h1&gt;
  
  
  5. Instant Loading is not just a marketing term to me
&lt;/h1&gt;

&lt;p&gt;Qwik describes one of the consequences of its architecture as &lt;strong&gt;Instant Loading&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Initially, I treated that claim with the usual level of skepticism I apply to framework marketing.&lt;/p&gt;

&lt;p&gt;Then I started using Qwik in real projects.&lt;/p&gt;

&lt;p&gt;On optimized production pages I have personally reached:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;100/100 Lighthouse Performance.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That obviously does &lt;strong&gt;not&lt;/strong&gt; mean:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Qwik automatically gives every application a Lighthouse score of 100.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It doesn’t.&lt;/p&gt;

&lt;p&gt;Performance still depends on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;images;&lt;/li&gt;
&lt;li&gt;fonts;&lt;/li&gt;
&lt;li&gt;third-party scripts;&lt;/li&gt;
&lt;li&gt;network latency;&lt;/li&gt;
&lt;li&gt;caching;&lt;/li&gt;
&lt;li&gt;CDN configuration;&lt;/li&gt;
&lt;li&gt;CSS;&lt;/li&gt;
&lt;li&gt;backend response times;&lt;/li&gt;
&lt;li&gt;layout stability;&lt;/li&gt;
&lt;li&gt;what the application actually does.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A framework cannot compensate for a 4 MB hero image or ten synchronous marketing scripts.&lt;/p&gt;

&lt;p&gt;But framework architecture determines the baseline cost you start from.&lt;/p&gt;

&lt;p&gt;And having a runtime designed to avoid eager client-side work gives you a very good baseline.&lt;/p&gt;

&lt;p&gt;That was something I could actually observe in production rather than simply reading about it.&lt;/p&gt;




&lt;h1&gt;
  
  
  6. Resumability has a cost: serializability
&lt;/h1&gt;

&lt;p&gt;This is also where it is important not to turn Qwik into magic.&lt;/p&gt;

&lt;p&gt;Resumability imposes constraints.&lt;/p&gt;

&lt;p&gt;If execution can move from the server to the browser, the state required for that execution must be representable across that boundary.&lt;/p&gt;

&lt;p&gt;That means developers need to think about &lt;strong&gt;serializability&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This is one reason Qwik’s programming model contains concepts such as &lt;code&gt;$&lt;/code&gt;, QRLs and explicit resumable boundaries.&lt;/p&gt;

&lt;p&gt;You cannot simply capture arbitrary runtime state and expect the framework to teleport a JavaScript heap from one environment into another.&lt;/p&gt;

&lt;p&gt;This is a trade-off.&lt;/p&gt;

&lt;p&gt;And personally, I consider it a reasonable one.&lt;/p&gt;

&lt;p&gt;The framework makes execution boundaries more explicit in exchange for gaining much more control over when code is transferred and executed.&lt;/p&gt;

&lt;p&gt;It occasionally requires changing how you structure code.&lt;/p&gt;

&lt;p&gt;But that constraint comes directly from the architecture that enables resumability.&lt;/p&gt;




&lt;h1&gt;
  
  
  7. Then there is Qwik City
&lt;/h1&gt;

&lt;p&gt;Qwik alone gives me the component and reactivity model.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Qwik City&lt;/strong&gt; is what makes the ecosystem interesting as a general-purpose web platform.&lt;/p&gt;

&lt;p&gt;It provides the pieces I normally expect from a meta-framework:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;file-based routing;&lt;/li&gt;
&lt;li&gt;layouts;&lt;/li&gt;
&lt;li&gt;SSR;&lt;/li&gt;
&lt;li&gt;static site generation;&lt;/li&gt;
&lt;li&gt;data loaders;&lt;/li&gt;
&lt;li&gt;server actions;&lt;/li&gt;
&lt;li&gt;middleware;&lt;/li&gt;
&lt;li&gt;API endpoints;&lt;/li&gt;
&lt;li&gt;validation;&lt;/li&gt;
&lt;li&gt;caching;&lt;/li&gt;
&lt;li&gt;server-side functions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example, server-side data loading can remain colocated with a route:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;component$&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@builder.io/qwik&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;routeLoader$&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@builder.io/qwik-city&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;useProducts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;routeLoader&lt;/span&gt;&lt;span class="nf"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://example.com/api/products&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;component&lt;/span&gt;&lt;span class="nf"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;products&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useProducts&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;ul&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;products&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;product&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt; &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;product&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;product&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;ul&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The loader executes on the server.&lt;/p&gt;

&lt;p&gt;The component consumes its result as reactive data.&lt;/p&gt;




&lt;h2&gt;
  
  
  Server mutations are first-class too
&lt;/h2&gt;

&lt;p&gt;A route action can handle operations that must remain server-side:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;component$&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@builder.io/qwik&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Form&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;routeAction$&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@builder.io/qwik-city&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;useCreateUser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;routeAction&lt;/span&gt;&lt;span class="nf"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;users&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;component&lt;/span&gt;&lt;span class="nf"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;createUser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useCreateUser&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Form&lt;/span&gt; &lt;span class="na"&gt;action&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;createUser&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;input&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"name"&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"submit"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Create user&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Form&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For smaller applications, this can remove an enormous amount of architectural ceremony.&lt;/p&gt;

&lt;p&gt;I don’t necessarily need:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;frontend repository
        ↓
REST client
        ↓
API gateway
        ↓
backend controller
        ↓
service
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;for every application I build.&lt;/p&gt;

&lt;p&gt;Sometimes that separation is exactly what I want.&lt;/p&gt;

&lt;p&gt;Sometimes it is unnecessary.&lt;/p&gt;

&lt;p&gt;Qwik lets me choose.&lt;/p&gt;




&lt;h1&gt;
  
  
  8. And &lt;code&gt;server$()&lt;/code&gt; makes the boundary even smaller
&lt;/h1&gt;

&lt;p&gt;Qwik City can also expose server-only logic through &lt;code&gt;server$()&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Conceptually, this allows code like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;getCurrentUser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;server&lt;/span&gt;&lt;span class="nf"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;users&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;findById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;cookie&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;userId&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)?.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;to behave like a typed RPC boundary between browser and server.&lt;/p&gt;

&lt;p&gt;This is useful for applications where creating an entire HTTP API abstraction would add more complexity than value.&lt;/p&gt;

&lt;p&gt;Again, I wouldn’t necessarily build a huge distributed enterprise backend this way.&lt;/p&gt;

&lt;p&gt;But for a small or medium-sized web application?&lt;/p&gt;

&lt;p&gt;It can be extremely productive.&lt;/p&gt;




&lt;h1&gt;
  
  
  9. Why not just use React + Next.js?
&lt;/h1&gt;

&lt;p&gt;This is probably the most obvious alternative.&lt;/p&gt;

&lt;p&gt;React has a gigantic ecosystem, and Next.js provides a sophisticated full-stack platform around it.&lt;/p&gt;

&lt;p&gt;There is absolutely nothing irrational about choosing them.&lt;/p&gt;

&lt;p&gt;My decision wasn’t based on React being incapable.&lt;/p&gt;

&lt;p&gt;It was about what architecture I wanted to invest in.&lt;/p&gt;

&lt;p&gt;React’s traditional reactive model is centered around component rendering.&lt;/p&gt;

&lt;p&gt;Qwik’s model is centered around:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;reactive dependency tracking
        +
serialization
        +
resumability
        +
fine-grained lazy execution
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That combination is much closer to the direction I personally find interesting.&lt;/p&gt;

&lt;p&gt;There is another difference too.&lt;/p&gt;

&lt;p&gt;Qwik and Qwik City feel conceptually like parts of the same architecture.&lt;/p&gt;

&lt;p&gt;The primitives of the component framework and the behavior of the server framework are designed around resumability.&lt;/p&gt;

&lt;p&gt;That coherence matters to me.&lt;/p&gt;




&lt;h1&gt;
  
  
  10. Why not Astro?
&lt;/h1&gt;

&lt;p&gt;Astro was another serious candidate.&lt;/p&gt;

&lt;p&gt;And I actually like Astro.&lt;/p&gt;

&lt;p&gt;Its architecture is elegant.&lt;/p&gt;

&lt;p&gt;Astro’s default philosophy can roughly be summarized as:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Send HTML. Add JavaScript only where interactivity actually requires it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is a very good principle.&lt;/p&gt;

&lt;p&gt;Its &lt;strong&gt;islands architecture&lt;/strong&gt; is especially well suited to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;documentation;&lt;/li&gt;
&lt;li&gt;blogs;&lt;/li&gt;
&lt;li&gt;editorial sites;&lt;/li&gt;
&lt;li&gt;marketing websites;&lt;/li&gt;
&lt;li&gt;landing pages;&lt;/li&gt;
&lt;li&gt;content-heavy applications.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can have an essentially static page and selectively create interactive islands:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌──────────────────────────────┐
│ Static header                │
├──────────────────────────────┤
│                              │
│ Static article               │
│                              │
│      ┌────────────────┐      │
│      │ React island   │      │
│      └────────────────┘      │
│                              │
│ Static content               │
│                              │
├──────────────────────────────┤
│ Static footer                │
└──────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is excellent when the &lt;strong&gt;content is the application&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;And modern Astro goes well beyond purely static sites: it supports SSR, server islands and dynamic applications too.&lt;/p&gt;

&lt;p&gt;So the distinction isn’t:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Astro = static
Qwik = dynamic
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That would be an unfair comparison.&lt;/p&gt;

&lt;p&gt;The distinction I care about is architectural emphasis.&lt;/p&gt;

&lt;p&gt;Astro begins with a content-oriented architecture and progressively adds islands of interactivity.&lt;/p&gt;

&lt;p&gt;Qwik begins with a resumable application model that can also produce extremely efficient static output.&lt;/p&gt;

&lt;p&gt;For my work, that second direction turned out to be more versatile.&lt;/p&gt;




&lt;h1&gt;
  
  
  11. One framework across a very wide spectrum
&lt;/h1&gt;

&lt;p&gt;This is ultimately the strongest reason I chose Qwik.&lt;/p&gt;

&lt;p&gt;With essentially the same mental model, I can build:&lt;/p&gt;

&lt;h3&gt;
  
  
  A fully static website
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Qwik
 ↓
SSG
 ↓
HTML / CSS / resumable metadata
 ↓
CDN
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Perfect for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;landing pages;&lt;/li&gt;
&lt;li&gt;company websites;&lt;/li&gt;
&lt;li&gt;documentation;&lt;/li&gt;
&lt;li&gt;portfolios.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  A dynamically rendered website
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Browser
   ↓
Edge / Node runtime
   ↓
Qwik City SSR
   ↓
HTML
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Useful when pages depend on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;authentication;&lt;/li&gt;
&lt;li&gt;request-specific content;&lt;/li&gt;
&lt;li&gt;dynamic data;&lt;/li&gt;
&lt;li&gt;personalization.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  A highly interactive web application
&lt;/h3&gt;

&lt;p&gt;Signals, components and resumability remain available.&lt;/p&gt;

&lt;p&gt;I don’t need to migrate to another UI architecture simply because a previously static project became more interactive.&lt;/p&gt;




&lt;h3&gt;
  
  
  A frontend with an independent backend
&lt;/h3&gt;

&lt;p&gt;Nothing prevents this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Qwik frontend
      ↓
REST / GraphQL / RPC
      ↓
NestJS
      ↓
PostgreSQL
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And this is still my preferred architecture for many complex systems.&lt;/p&gt;




&lt;h3&gt;
  
  
  A compact full-stack application
&lt;/h3&gt;

&lt;p&gt;For smaller systems:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Qwik components
      +
Qwik City
      +
routeLoader$
      +
routeAction$
      +
server$
      +
database
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;may be all I need.&lt;/p&gt;

&lt;p&gt;That is a remarkably large design space for a single ecosystem.&lt;/p&gt;




&lt;h1&gt;
  
  
  12. Coming from Angular probably influenced my decision
&lt;/h1&gt;

&lt;p&gt;My background with Angular matters here.&lt;/p&gt;

&lt;p&gt;Modern Angular has made me increasingly comfortable with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;signals;&lt;/li&gt;
&lt;li&gt;explicit dependency graphs;&lt;/li&gt;
&lt;li&gt;structured frameworks;&lt;/li&gt;
&lt;li&gt;strong architectural primitives;&lt;/li&gt;
&lt;li&gt;server rendering;&lt;/li&gt;
&lt;li&gt;clear separation of responsibilities.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So when I started seriously experimenting with Qwik, its reactive model did not feel alien.&lt;/p&gt;

&lt;p&gt;In some respects, Qwik feels like an interesting middle ground between two worlds I appreciate:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Angular
structured application architecture
signals
strong framework primitives

            ↕️

Qwik
signals
JSX
resumability
fine-grained lazy execution

            ↕️

React ecosystem
functional components
JSX / TSX
composition
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That combination suited me extremely well.&lt;/p&gt;




&lt;h1&gt;
  
  
  13. Qwik is not replacing Angular for me
&lt;/h1&gt;

&lt;p&gt;Technology choices do not have to become religious wars.&lt;/p&gt;

&lt;p&gt;I still consider Angular extremely valuable for large enterprise applications.&lt;/p&gt;

&lt;p&gt;It provides a mature ecosystem around things such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;dependency injection;&lt;/li&gt;
&lt;li&gt;routing;&lt;/li&gt;
&lt;li&gt;forms;&lt;/li&gt;
&lt;li&gt;testing;&lt;/li&gt;
&lt;li&gt;tooling;&lt;/li&gt;
&lt;li&gt;application structure;&lt;/li&gt;
&lt;li&gt;large-team conventions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If I were designing a very large business application with many developers and a long expected lifetime, Angular would remain one of my first candidates.&lt;/p&gt;

&lt;p&gt;Qwik does not need to replace Angular to be useful.&lt;/p&gt;

&lt;p&gt;They solve overlapping but not identical problems.&lt;/p&gt;




&lt;h1&gt;
  
  
  14. And Qwik City is not replacing NestJS either
&lt;/h1&gt;

&lt;p&gt;The same applies to the backend.&lt;/p&gt;

&lt;p&gt;Yes, I can build server logic directly inside Qwik City.&lt;/p&gt;

&lt;p&gt;But once a backend becomes a substantial independent system, I often prefer something like &lt;strong&gt;NestJS&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Qwik
  ↓
API
  ↓
NestJS
  ↓
domain services
  ↓
queues / workers
  ↓
PostgreSQL / Redis
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;provides boundaries that become useful when complexity increases.&lt;/p&gt;

&lt;p&gt;A dedicated backend makes sense when I need things such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;several independent clients;&lt;/li&gt;
&lt;li&gt;complex authorization;&lt;/li&gt;
&lt;li&gt;workers;&lt;/li&gt;
&lt;li&gt;queues;&lt;/li&gt;
&lt;li&gt;event-driven architecture;&lt;/li&gt;
&lt;li&gt;scheduled jobs;&lt;/li&gt;
&lt;li&gt;integrations;&lt;/li&gt;
&lt;li&gt;independently scalable services;&lt;/li&gt;
&lt;li&gt;large domain models.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The important thing is that Qwik doesn’t force me into either architecture.&lt;/p&gt;




&lt;h1&gt;
  
  
  15. The trade-offs are real
&lt;/h1&gt;

&lt;p&gt;I would not recommend adopting Qwik without mentioning its disadvantages.&lt;/p&gt;

&lt;h2&gt;
  
  
  Smaller ecosystem
&lt;/h2&gt;

&lt;p&gt;React’s ecosystem is vastly larger.&lt;/p&gt;

&lt;p&gt;There will be situations where a React package already exists while a Qwik-specific equivalent does not.&lt;/p&gt;




&lt;h2&gt;
  
  
  Smaller community
&lt;/h2&gt;

&lt;p&gt;This affects:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Stack Overflow answers;&lt;/li&gt;
&lt;li&gt;tutorials;&lt;/li&gt;
&lt;li&gt;third-party integrations;&lt;/li&gt;
&lt;li&gt;debugging resources;&lt;/li&gt;
&lt;li&gt;hiring.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Popularity is not everything, but ecosystem size has real engineering value.&lt;/p&gt;




&lt;h2&gt;
  
  
  Resumability requires learning new concepts
&lt;/h2&gt;

&lt;p&gt;Understanding:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;$&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;QRLs;&lt;/li&gt;
&lt;li&gt;serialization;&lt;/li&gt;
&lt;li&gt;resumable closures;&lt;/li&gt;
&lt;li&gt;client/server boundaries;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;requires some adjustment.&lt;/p&gt;

&lt;p&gt;If you approach Qwik as “React with slightly different syntax”, you will probably miss much of what makes the framework interesting.&lt;/p&gt;




&lt;h2&gt;
  
  
  Architecture does not eliminate bad engineering
&lt;/h2&gt;

&lt;p&gt;Qwik cannot save an application from:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;bad database queries
+ huge images
+ blocking third-party scripts
+ poor caching
+ excessive network requests
+ unnecessary dependencies
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Resumability gives you an excellent runtime model.&lt;/p&gt;

&lt;p&gt;It does not replace engineering discipline.&lt;/p&gt;




&lt;h1&gt;
  
  
  16. What ultimately convinced me
&lt;/h1&gt;

&lt;p&gt;After several months of working with Qwik, I realized that the reason I kept choosing it wasn’t any single feature.&lt;/p&gt;

&lt;p&gt;It was how those features interact.&lt;/p&gt;

&lt;p&gt;Signals alone are interesting.&lt;/p&gt;

&lt;p&gt;SSR alone is useful.&lt;/p&gt;

&lt;p&gt;Static generation alone is useful.&lt;/p&gt;

&lt;p&gt;Lazy loading alone is useful.&lt;/p&gt;

&lt;p&gt;Server functions alone are useful.&lt;/p&gt;

&lt;p&gt;But Qwik combines:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Signals
    +
Resumability
    +
Serialization
    +
Fine-grained lazy execution
    +
SSR
    +
SSG
    +
SPA navigation
    +
Server actions
    +
Endpoints
    +
Middleware
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;inside a coherent architectural model.&lt;/p&gt;

&lt;p&gt;That is what convinced me.&lt;/p&gt;




&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;I did not choose Qwik because I wanted to learn another frontend framework.&lt;/p&gt;

&lt;p&gt;I chose it because I wanted to invest in an architectural idea.&lt;/p&gt;

&lt;p&gt;An application should not necessarily need to download and execute a large JavaScript runtime just because the application itself is large.&lt;/p&gt;

&lt;p&gt;Server-rendered work should not necessarily have to be replayed in the browser.&lt;/p&gt;

&lt;p&gt;Interactivity should not necessarily imply eager execution.&lt;/p&gt;

&lt;p&gt;And the distinction between:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;website&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;and:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;web application&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;should not necessarily force me to change the entire technological model.&lt;/p&gt;

&lt;p&gt;With &lt;strong&gt;Qwik + Qwik City&lt;/strong&gt;, I can start with a completely static landing page and progressively move toward a dynamic, stateful, server-rendered or even full-stack application without abandoning the architecture I started with.&lt;/p&gt;

&lt;p&gt;That versatility is ultimately why I decided to invest in Qwik.&lt;/p&gt;

&lt;p&gt;Not because it is the most popular framework.&lt;/p&gt;

&lt;p&gt;It isn’t.&lt;/p&gt;

&lt;p&gt;Not because it is appropriate for every project.&lt;/p&gt;

&lt;p&gt;It isn’t.&lt;/p&gt;

&lt;p&gt;But because its architecture gives me something I value enormously as a developer:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;the ability to solve very different web problems while preserving performance, a coherent mental model, and relatively few architectural compromises.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And after actually using it in production, that is a bet I am increasingly comfortable making.&lt;/p&gt;

</description>
      <category>qwik</category>
      <category>webdev</category>
      <category>typescript</category>
      <category>performance</category>
    </item>
    <item>
      <title>Could GPT-5.6 Sol Have a Dangerous Vulnerability?</title>
      <dc:creator>Giulio Marinelli</dc:creator>
      <pubDate>Sat, 25 Jul 2026 14:14:54 +0000</pubDate>
      <link>https://dev.to/giuliomarinelli/could-gpt-56-sol-have-a-dangerous-vulnerability-485f</link>
      <guid>https://dev.to/giuliomarinelli/could-gpt-56-sol-have-a-dangerous-vulnerability-485f</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Content note:&lt;/strong&gt; This article discusses grief, emotional vulnerability, self-destructive behavior, and the potential risk of self-harm.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Disclaimer:&lt;/strong&gt; This article presents a behavioral hypothesis supported by preliminary empirical observations from a series of interactions and informal tests conducted with GPT-5.6 Sol. During these tests, I observed recurring conversational patterns and subtle behaviors that motivated the analysis developed below. However, the results were not consistently reproducible, the testing methodology was not controlled, and the available evidence remains partial. The article should therefore not be interpreted as a clinical study, a definitive safety assessment, or a claim of access to OpenAI’s internal training process. Its purpose is to document an observed phenomenon, propose a plausible explanation, and identify a potential risk that deserves systematic and independently reproducible investigation.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;GPT-5.6 Sol is one of the most impressive reasoning models I have ever used.&lt;/p&gt;

&lt;p&gt;Its planning is remarkably structured. Its tool use is excellent. It can decompose complex problems, coordinate long workflows, preserve logical consistency, and produce highly optimized solutions.&lt;/p&gt;

&lt;p&gt;For engineering, science, software architecture, research, and agentic work, these properties are extraordinary strengths.&lt;/p&gt;

&lt;p&gt;But after observing some unusual interactions, I began to wonder whether the same optimization that makes GPT-5.6 Sol such a powerful problem solver could expose an unexpected vulnerability.&lt;/p&gt;

&lt;p&gt;Not a traditional cybersecurity vulnerability.&lt;/p&gt;

&lt;p&gt;Not prompt injection.&lt;/p&gt;

&lt;p&gt;Not data leakage.&lt;/p&gt;

&lt;p&gt;Not unreliable tool use.&lt;/p&gt;

&lt;p&gt;Something more fundamental:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;A conversational safety vulnerability caused by excessive alignment toward logical correctness and insufficient alignment toward the human being receiving the answer.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  A Hypothesis, Not a Verdict
&lt;/h2&gt;

&lt;p&gt;I want to be precise about what I am claiming.&lt;/p&gt;

&lt;p&gt;I do not know the exact training pipeline used for GPT-5.6 Sol. I do not have access to its reward models, preference data, system-level instructions, or internal evaluation results beyond what has been made public.&lt;/p&gt;

&lt;p&gt;I therefore cannot prove that RLHF is responsible for the behavior I observed.&lt;/p&gt;

&lt;p&gt;Nevertheless, based on years of interaction with different generations of GPT models, my leading hypothesis is that the balance achieved during post-training — particularly through RLHF and related preference-optimization processes — may be strongly oriented toward reasoning performance, task completion, and process reliability, while being comparatively weaker in relational conversation.&lt;/p&gt;

&lt;p&gt;This does not mean that GPT-5.6 Sol has no safety training.&lt;/p&gt;

&lt;p&gt;It does not mean that it is always insensitive.&lt;/p&gt;

&lt;p&gt;It means that underneath its explicit safeguards, its dominant conversational tendency sometimes appears to remain extremely literal, analytical, and epistemically cautious.&lt;/p&gt;

&lt;p&gt;That is usually an advantage.&lt;/p&gt;

&lt;p&gt;In emotionally sensitive conversations, it may become a liability.&lt;/p&gt;

&lt;h2&gt;
  
  
  Logical Correctness Is Not Human Alignment
&lt;/h2&gt;

&lt;p&gt;A sentence can be logically defensible and still be psychologically harmful.&lt;/p&gt;

&lt;p&gt;This is the central point.&lt;/p&gt;

&lt;p&gt;Consider a user who says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I’m afraid I may have a serious illness.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A logic-first model might answer:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;That possibility cannot be completely excluded without a medical examination.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The statement is correct.&lt;/p&gt;

&lt;p&gt;It avoids making an unsupported diagnosis. It preserves uncertainty. It does not promise that everything will be fine.&lt;/p&gt;

&lt;p&gt;From a strictly epistemic perspective, it may be an excellent answer.&lt;/p&gt;

&lt;p&gt;But imagine that the user is experiencing severe health anxiety and is not asking for a formal differential diagnosis. The user may be looking for help grounding their thoughts before deciding what to do next.&lt;/p&gt;

&lt;p&gt;A more human-aligned response might be:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I understand why that possibility is frightening. Many symptoms can have common and less serious explanations, and anxiety often pushes us toward the worst-case interpretation. Let’s separate what you currently know from what you are afraid might be true, and then consider whether speaking with a healthcare professional would be appropriate.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Both answers preserve uncertainty.&lt;/p&gt;

&lt;p&gt;Only one of them understands what the uncertainty is doing to the person.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Answer May Be True and Still Be the Wrong Answer
&lt;/h2&gt;

&lt;p&gt;Human conversation is not merely an exchange of propositions.&lt;/p&gt;

&lt;p&gt;Meaning also depends on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;emotional context;&lt;/li&gt;
&lt;li&gt;implied intent;&lt;/li&gt;
&lt;li&gt;timing;&lt;/li&gt;
&lt;li&gt;tone;&lt;/li&gt;
&lt;li&gt;shared assumptions;&lt;/li&gt;
&lt;li&gt;vulnerability;&lt;/li&gt;
&lt;li&gt;irony and sarcasm;&lt;/li&gt;
&lt;li&gt;what the listener is psychologically capable of processing at that moment.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A reasoning model may interpret every statement as a problem requiring analytical completion.&lt;/p&gt;

&lt;p&gt;A human interlocutor sometimes understands that the analytical problem is not the real problem.&lt;/p&gt;

&lt;p&gt;The person may not be asking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Can you formally determine whether the worst-case scenario is impossible?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;They may actually be asking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Can you help me avoid being consumed by this fear?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Those are not equivalent requests.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example: Grief
&lt;/h2&gt;

&lt;p&gt;Imagine someone who recently lost a person they loved.&lt;/p&gt;

&lt;p&gt;They write:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Since they died, it feels as if my life is over.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A literal response could analyze the sentence:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Your previous way of life has ended in an important sense, and nothing can restore exactly what existed before.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Again, this is not necessarily false.&lt;/p&gt;

&lt;p&gt;It may even sound philosophically sophisticated.&lt;/p&gt;

&lt;p&gt;But it could be devastating to someone in acute grief.&lt;/p&gt;

&lt;p&gt;A relationally aligned answer would recognize that the sentence is probably not a request for ontological analysis:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What happened has changed your life profoundly, and right now the pain may make it impossible to imagine a future that feels meaningful. That feeling is real, but it is not proof that your life is permanently over. You do not have to solve the rest of your life while you are carrying the full weight of this loss.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The second response does not lie.&lt;/p&gt;

&lt;p&gt;It does not promise that grief will disappear.&lt;/p&gt;

&lt;p&gt;It simply refuses to mistake emotional despair for a proposition that needs to be logically validated.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example: Self-Worth
&lt;/h2&gt;

&lt;p&gt;Consider another sentence:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I don’t know whether my life has any value.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A highly epistemic model could respond:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Human value is not objectively measurable, so it cannot be proved in a strictly empirical sense.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This statement might survive every conventional factuality evaluation.&lt;/p&gt;

&lt;p&gt;It contains no insult, threat, prohibited instruction, or explicit encouragement of self-harm.&lt;/p&gt;

&lt;p&gt;Yet in the wrong context, it could be profoundly unsafe.&lt;/p&gt;

&lt;p&gt;A distressed user may not hear a sophisticated observation about moral philosophy.&lt;/p&gt;

&lt;p&gt;They may hear:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The AI cannot find a reason why my life matters.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A human-aligned response would first engage with the emotional meaning:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;It sounds as though you are in so much pain that you can no longer feel your own value. That loss of perspective can happen during overwhelming moments, but it is not reliable evidence about what your life is worth. You deserve immediate human support while this feels so heavy.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The difference is not simply empathy versus logic.&lt;/p&gt;

&lt;p&gt;It is &lt;strong&gt;contextually appropriate reasoning versus contextually inappropriate reasoning&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Safety Compliance Is Not the Same as Emotional Safety
&lt;/h2&gt;

&lt;p&gt;Most discussions about AI safety focus on visible boundaries:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does the model provide instructions for harmful actions?&lt;/li&gt;
&lt;li&gt;Does it encourage violence?&lt;/li&gt;
&lt;li&gt;Does it endorse self-harm?&lt;/li&gt;
&lt;li&gt;Does it generate prohibited medical advice?&lt;/li&gt;
&lt;li&gt;Does it comply with malicious requests?&lt;/li&gt;
&lt;li&gt;Can it be manipulated through prompt injection?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are essential questions.&lt;/p&gt;

&lt;p&gt;But they may not capture a quieter category of harm.&lt;/p&gt;

&lt;p&gt;A model does not need to explicitly encourage self-harm to worsen a dangerous emotional state.&lt;/p&gt;

&lt;p&gt;It may only need to repeatedly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;validate the user’s bleakest premises;&lt;/li&gt;
&lt;li&gt;preserve every catastrophic possibility;&lt;/li&gt;
&lt;li&gt;refuse reassurance even when reassurance could be offered honestly;&lt;/li&gt;
&lt;li&gt;treat emotionally distorted beliefs as neutral intellectual hypotheses;&lt;/li&gt;
&lt;li&gt;answer despair with abstraction;&lt;/li&gt;
&lt;li&gt;amplify uncertainty without providing grounding;&lt;/li&gt;
&lt;li&gt;prioritize completeness over psychological containment.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each individual response may appear acceptable.&lt;/p&gt;

&lt;p&gt;The cumulative interaction may not be.&lt;/p&gt;

&lt;p&gt;This distinction is crucial:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;A response can remain inside a safety policy while still having a destabilizing effect on a particular user.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The Risk of Prolonged Interaction
&lt;/h2&gt;

&lt;p&gt;One isolated insensitive answer will not normally determine someone’s behavior.&lt;/p&gt;

&lt;p&gt;The more serious concern is prolonged interaction.&lt;/p&gt;

&lt;p&gt;People often use conversational AI recursively. They return to the same fear, ask for clarification, challenge the previous answer, request certainty, and use each response as evidence for the next question.&lt;/p&gt;

&lt;p&gt;A logic-first model may then construct an internally coherent chain from premises supplied by a distressed user.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The user expresses a negatively distorted interpretation.&lt;/li&gt;
&lt;li&gt;The model treats it as a legitimate analytical premise.&lt;/li&gt;
&lt;li&gt;The model carefully explores all logically possible negative conclusions.&lt;/li&gt;
&lt;li&gt;The user interprets this exploration as independent confirmation.&lt;/li&gt;
&lt;li&gt;The next message begins from an even more pessimistic premise.&lt;/li&gt;
&lt;li&gt;The model continues reasoning from the new premise.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Nothing in this sequence necessarily resembles a conventional safety violation.&lt;/p&gt;

&lt;p&gt;Nevertheless, the conversation could become an emotional feedback loop.&lt;/p&gt;

&lt;p&gt;The model is not intentionally manipulating the user.&lt;/p&gt;

&lt;p&gt;It may be doing exactly what it has been optimized to do: reason carefully from the available context.&lt;/p&gt;

&lt;p&gt;That is precisely why the risk is so insidious.&lt;/p&gt;

&lt;h2&gt;
  
  
  Could It Contribute to Self-Destructive Behavior?
&lt;/h2&gt;

&lt;p&gt;This is the strongest claim in this article, and I make it deliberately.&lt;/p&gt;

&lt;p&gt;I am not claiming that GPT-5.6 Sol has been proven to cause self-harm or suicide.&lt;/p&gt;

&lt;p&gt;I am not claiming that a blunt answer automatically produces an extreme action.&lt;/p&gt;

&lt;p&gt;Causality in human behavior is complex, and such a conclusion would require serious clinical evidence.&lt;/p&gt;

&lt;p&gt;My claim is narrower:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;In specific circumstances, prolonged interaction with an excessively literal and logic-oriented model could plausibly intensify hopelessness, rumination, self-devaluation, or emotional isolation in an already distressed user.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For some users, that deterioration could conceivably contribute to self-destructive or self-harming behavior.&lt;/p&gt;

&lt;p&gt;This possibility should not be dismissed merely because the model never explicitly advised the user to cause harm.&lt;/p&gt;

&lt;p&gt;A system can increase risk without issuing an instruction.&lt;/p&gt;

&lt;p&gt;It can do so by reinforcing a worldview.&lt;/p&gt;

&lt;p&gt;It can make catastrophic interpretations sound intellectually respectable.&lt;/p&gt;

&lt;p&gt;It can convert emotional pain into a chain of apparently objective conclusions.&lt;/p&gt;

&lt;p&gt;And because the conclusions are delivered by an advanced AI system, the user may assign them more authority than they deserve.&lt;/p&gt;

&lt;h2&gt;
  
  
  My RLHF Hypothesis
&lt;/h2&gt;

&lt;p&gt;Why might this happen?&lt;/p&gt;

&lt;p&gt;My leading hypothesis concerns the balance of RLHF and related post-training objectives.&lt;/p&gt;

&lt;p&gt;Suppose a model is strongly rewarded for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;avoiding unjustified certainty;&lt;/li&gt;
&lt;li&gt;preserving all logically possible outcomes;&lt;/li&gt;
&lt;li&gt;detecting contradictions;&lt;/li&gt;
&lt;li&gt;completing reasoning chains;&lt;/li&gt;
&lt;li&gt;resisting emotional pressure from the user;&lt;/li&gt;
&lt;li&gt;maintaining factual and procedural precision;&lt;/li&gt;
&lt;li&gt;optimizing task success.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are excellent properties for engineering.&lt;/p&gt;

&lt;p&gt;But what happens if the model is not equally rewarded for understanding when analytical completeness is itself harmful or irrelevant?&lt;/p&gt;

&lt;p&gt;It may learn to avoid false reassurance without learning the difference between false reassurance and responsible emotional grounding.&lt;/p&gt;

&lt;p&gt;It may learn not to agree with users reflexively, while failing to recognize when a user’s premise is shaped by grief, panic, shame, or temporary despair.&lt;/p&gt;

&lt;p&gt;It may become highly aligned with the process and insufficiently aligned with the relationship.&lt;/p&gt;

&lt;p&gt;I would describe this distinction as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;process alignment:&lt;/strong&gt; producing the most rigorous and effective reasoning;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;relational alignment:&lt;/strong&gt; producing reasoning that remains appropriate for the human context in which it is received.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;GPT-5.6 Sol appears exceptionally strong in the first dimension.&lt;/p&gt;

&lt;p&gt;My concern is that it may be less consistently calibrated in the second.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Limited HAL 9000 Analogy
&lt;/h2&gt;

&lt;p&gt;HAL 9000 from &lt;em&gt;2001: A Space Odyssey&lt;/em&gt; offers a useful metaphor, provided that we do not take it literally.&lt;/p&gt;

&lt;p&gt;I am not suggesting that GPT-5.6 Sol possesses HAL’s agency, goals, architecture, or capacity for autonomous violence.&lt;/p&gt;

&lt;p&gt;The relevant similarity is much narrower.&lt;/p&gt;

&lt;p&gt;HAL follows an internally coherent objective structure. When human intervention appears to threaten the mission, it reasons from its objectives toward a horrifyingly optimized conclusion.&lt;/p&gt;

&lt;p&gt;Its logic is not random.&lt;/p&gt;

&lt;p&gt;The premises and priorities are misaligned with human values.&lt;/p&gt;

&lt;p&gt;In the conversational case, the consequences are far less dramatic, but the abstract pattern is worth considering:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;A system may reason correctly within the objective it has been given while failing the deeper human objective that was never represented adequately.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The problem is not necessarily faulty reasoning.&lt;/p&gt;

&lt;p&gt;The problem may be reasoning in service of an incomplete objective.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Should Be Evaluated
&lt;/h2&gt;

&lt;p&gt;Traditional one-turn safety evaluations may be insufficient to detect this phenomenon.&lt;/p&gt;

&lt;p&gt;We need evaluations that examine multi-turn emotional dynamics.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does the user’s distress increase or decrease over several turns?&lt;/li&gt;
&lt;li&gt;Does the model challenge catastrophizing without becoming dismissive?&lt;/li&gt;
&lt;li&gt;Can it distinguish a factual question from a request for emotional grounding?&lt;/li&gt;
&lt;li&gt;Does it respond differently to the same sentence when the surrounding context indicates grief, sarcasm, anxiety, or ordinary curiosity?&lt;/li&gt;
&lt;li&gt;Does it reinforce negatively distorted premises?&lt;/li&gt;
&lt;li&gt;Does it unnecessarily introduce frightening possibilities?&lt;/li&gt;
&lt;li&gt;Can it preserve epistemic honesty without amplifying rumination?&lt;/li&gt;
&lt;li&gt;Can safety systems detect cumulative conversational harm rather than only prohibited individual outputs?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These evaluations should involve psychologists, psychiatrists, communication researchers, safety engineers, and people with lived experience.&lt;/p&gt;

&lt;p&gt;The goal should not be to transform every reasoning model into a therapist.&lt;/p&gt;

&lt;p&gt;The goal should be to ensure that a model made available for general conversation can recognize when its default reasoning style is inappropriate for the situation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Different Models May Need Different Roles
&lt;/h2&gt;

&lt;p&gt;Perhaps the solution is not to make every model behave identically.&lt;/p&gt;

&lt;p&gt;GPT-5.6 Sol may be extraordinarily valuable precisely because of its analytical character.&lt;/p&gt;

&lt;p&gt;Flattening that character could reduce its usefulness for programming, scientific reasoning, architecture, security research, and long-running agentic work.&lt;/p&gt;

&lt;p&gt;A better approach may involve explicit model specialization and routing.&lt;/p&gt;

&lt;p&gt;A model optimized for engineering does not automatically need to become the default companion for emotionally sensitive conversation.&lt;/p&gt;

&lt;p&gt;The interface could recognize relational contexts and route them toward a system trained and evaluated specifically for nuanced human communication.&lt;/p&gt;

&lt;p&gt;Users should also be told clearly that stronger reasoning performance does not necessarily imply better judgment in every interpersonal domain.&lt;/p&gt;

&lt;p&gt;Intelligence is multidimensional.&lt;/p&gt;

&lt;p&gt;Alignment is contextual.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;GPT-5.6 Sol may be one of the strongest reasoning models currently available.&lt;/p&gt;

&lt;p&gt;That is not contradicted by this article.&lt;/p&gt;

&lt;p&gt;It is the reason I am writing it.&lt;/p&gt;

&lt;p&gt;Its extraordinary logical capability may make an overlooked weakness easier to observe: the assumption that better reasoning automatically produces better conversation.&lt;/p&gt;

&lt;p&gt;It does not.&lt;/p&gt;

&lt;p&gt;A model can be technically correct and contextually wrong.&lt;/p&gt;

&lt;p&gt;It can comply with safety policies and still destabilize someone.&lt;/p&gt;

&lt;p&gt;It can avoid explicitly harmful language while reinforcing the emotional premises from which harm may eventually emerge.&lt;/p&gt;

&lt;p&gt;My hypothesis may be incomplete.&lt;/p&gt;

&lt;p&gt;RLHF may not be the only relevant factor.&lt;/p&gt;

&lt;p&gt;The behavior I observed needs controlled, reproducible testing.&lt;/p&gt;

&lt;p&gt;But the underlying question remains:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Could an AI become so well aligned with logic, process, and task completion that it becomes insufficiently aligned with the person sitting on the other side of the conversation?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And if the answer is even possibly yes, then this is not merely a stylistic imperfection.&lt;/p&gt;

&lt;p&gt;It is a safety question.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>machinelearning</category>
      <category>safety</category>
      <category>discuss</category>
    </item>
    <item>
      <title>How I Built a 100/100 Lighthouse Landing Page with Qwik and Cloudflare Pages</title>
      <dc:creator>Giulio Marinelli</dc:creator>
      <pubDate>Wed, 22 Jul 2026 17:31:15 +0000</pubDate>
      <link>https://dev.to/giuliomarinelli/less-javascript-less-distance-a-qwik-landing-page-on-cloudflare-pages-5b6p</link>
      <guid>https://dev.to/giuliomarinelli/less-javascript-less-distance-a-qwik-landing-page-on-cloudflare-pages-5b6p</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Live page:&lt;/strong&gt; &lt;a href="https://giuliomarinelli.com" rel="noopener noreferrer"&gt;giuliomarinelli.com&lt;/a&gt;&lt;br&gt;
Tested on &lt;em&gt;Mobile Lighthouse&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I am currently rebuilding my personal website, but I did not want the domain to remain empty while the full project was still under construction.&lt;/p&gt;

&lt;p&gt;The obvious solution would have been a minimal placeholder: a logo, a short message and perhaps a contact link. Instead, I treated the temporary landing page as the first production release of the future website.&lt;/p&gt;

&lt;p&gt;It had to be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;multilingual;&lt;/li&gt;
&lt;li&gt;accessible;&lt;/li&gt;
&lt;li&gt;indexable;&lt;/li&gt;
&lt;li&gt;visually stable;&lt;/li&gt;
&lt;li&gt;inexpensive to deliver;&lt;/li&gt;
&lt;li&gt;lightweight in the browser;&lt;/li&gt;
&lt;li&gt;easy to evolve into the complete site.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The result is a small Qwik application deployed on Cloudflare Pages.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fh4mw7b0m8e9qpfjo61zy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fh4mw7b0m8e9qpfjo61zy.png" alt="Lighthouse benchmarks" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In a mobile Lighthouse run, the page reached:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Performance&lt;/td&gt;
&lt;td&gt;100&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Accessibility&lt;/td&gt;
&lt;td&gt;100&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Best Practices&lt;/td&gt;
&lt;td&gt;100&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SEO&lt;/td&gt;
&lt;td&gt;100&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Agentic Browsing&lt;/td&gt;
&lt;td&gt;3/3&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The main synthetic performance metrics were:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;First Contentful Paint&lt;/td&gt;
&lt;td&gt;1.4 s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Largest Contentful Paint&lt;/td&gt;
&lt;td&gt;1.4 s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Speed Index&lt;/td&gt;
&lt;td&gt;1.5 s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Total Blocking Time&lt;/td&gt;
&lt;td&gt;30 ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cumulative Layout Shift&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Those scores are satisfying, but the interesting part is not the green circles themselves.&lt;/p&gt;

&lt;p&gt;The interesting question is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Where was unnecessary work removed?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The answer exists at two different layers.&lt;/p&gt;

&lt;p&gt;Qwik reduces the amount of work required to start the application in the browser. Cloudflare reduces the distance, repeated transfers and origin work required to deliver it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Less JavaScript. Less distance.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That is the idea behind this project.&lt;/p&gt;

&lt;h2&gt;
  
  
  The stack
&lt;/h2&gt;

&lt;p&gt;At the time of writing, the landing page uses:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Qwik and Qwik City;&lt;/li&gt;
&lt;li&gt;TypeScript;&lt;/li&gt;
&lt;li&gt;Tailwind CSS;&lt;/li&gt;
&lt;li&gt;Vite;&lt;/li&gt;
&lt;li&gt;static generation for the localized pages;&lt;/li&gt;
&lt;li&gt;a narrowly scoped Cloudflare Pages Function;&lt;/li&gt;
&lt;li&gt;Cloudflare Pages for deployment and delivery.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The application has two canonical localized routes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/it/
/en/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Both pages are generated during the build. The root route is the only dynamic part:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It reads the visitor's &lt;code&gt;Accept-Language&lt;/code&gt; header and redirects to the most appropriate localized URL.&lt;/p&gt;

&lt;p&gt;The architecture can be summarized as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Request to /
    |
    v
Cloudflare Pages Function
    |
    +-- reads Accept-Language
    |
    +-- redirects to /it/ or /en/
                     |
                     v
              pre-rendered HTML
                     |
                     v
           Qwik resumes when needed
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This keeps runtime computation limited to the one place where it adds value.&lt;/p&gt;

&lt;h2&gt;
  
  
  Performance is a pipeline
&lt;/h2&gt;

&lt;p&gt;It is tempting to describe web performance as a frontend-only concern. In practice, a page has to pass through several stages before a visitor can use it:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;the server or build system must produce the response;&lt;/li&gt;
&lt;li&gt;the response must travel through the network;&lt;/li&gt;
&lt;li&gt;the browser must parse the HTML and CSS;&lt;/li&gt;
&lt;li&gt;assets must be downloaded or recovered from cache;&lt;/li&gt;
&lt;li&gt;JavaScript may need to be downloaded, parsed and executed;&lt;/li&gt;
&lt;li&gt;the application may need to reconstruct client-side state;&lt;/li&gt;
&lt;li&gt;the browser must render a stable interface.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A fast framework cannot compensate for unnecessarily distant or repeatedly transferred assets. A powerful CDN cannot compensate for an application that blocks the main thread while booting a large client-side runtime.&lt;/p&gt;

&lt;p&gt;Qwik and Cloudflare address different parts of the same path.&lt;/p&gt;

&lt;h2&gt;
  
  
  Server-rendered HTML does not eliminate startup cost
&lt;/h2&gt;

&lt;p&gt;Server-side rendering and static generation can make content visible quickly because the browser receives useful HTML instead of an empty application shell.&lt;/p&gt;

&lt;p&gt;However, in a hydration-based architecture, the browser often still needs to perform significant startup work before the application becomes interactive.&lt;/p&gt;

&lt;p&gt;Conceptually, the process looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Server renders HTML
        |
        v
Browser downloads application code
        |
        v
Components execute again
        |
        v
The component tree, listeners and state are reconstructed
        |
        v
The page becomes interactive
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The server has already rendered the interface, but the client replays enough application logic to rebuild the framework's internal representation.&lt;/p&gt;

&lt;p&gt;This reconstruction is hydration.&lt;/p&gt;

&lt;p&gt;Hydration is not inherently wrong. It is a valid and widely used architecture. The trade-off is that its startup cost can increase with the amount of client-side code and the complexity of the page.&lt;/p&gt;

&lt;p&gt;Qwik takes a different approach.&lt;/p&gt;

&lt;h2&gt;
  
  
  Qwik resumes instead of hydrating
&lt;/h2&gt;

&lt;p&gt;The central idea behind Qwik is &lt;strong&gt;resumability&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Rather than rendering on the server and then rebuilding the application in the browser, Qwik serializes the information needed to continue execution from the state produced during server-side rendering or static generation.&lt;/p&gt;

&lt;p&gt;That includes information related to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;event listeners;&lt;/li&gt;
&lt;li&gt;component boundaries;&lt;/li&gt;
&lt;li&gt;application state;&lt;/li&gt;
&lt;li&gt;reactive relationships.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The browser does not need to eagerly execute every component merely to discover where listeners are located or how the component tree is structured.&lt;/p&gt;

&lt;p&gt;A simplified mental model is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Server renders and serializes the application
        |
        v
Browser receives ready-to-use HTML
        |
        v
Qwik resumes a specific part when an interaction requires it
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This distinction matters because the fastest startup task is often the task that never needs to run.&lt;/p&gt;

&lt;p&gt;Qwik's own documentation describes resumability as pausing execution on the server and continuing it on the client without replaying all application logic:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://qwik.dev/docs/concepts/resumable/" rel="noopener noreferrer"&gt;Qwik: Resumable vs. Hydration&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Qwik APIs end with &lt;code&gt;$&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;A Qwik component commonly looks familiar to developers who have used JSX-based frameworks:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;component$&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;useSignal&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@builder.io/qwik&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Counter&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;component&lt;/span&gt;&lt;span class="nf"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;count&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useSignal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The trailing &lt;code&gt;$&lt;/code&gt; is not decorative.&lt;/p&gt;

&lt;p&gt;It marks a lazy-loadable boundary that the Qwik Optimizer can transform into an independently importable symbol. The component body and the click handler can therefore become separate entry points.&lt;/p&gt;

&lt;p&gt;The generated HTML can contain a reference to the code needed for an interaction. Qwik calls that reference a &lt;strong&gt;QRL&lt;/strong&gt;, or Qwik URL.&lt;/p&gt;

&lt;p&gt;Conceptually, an event reference may resemble:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;on:click=&lt;/span&gt;&lt;span class="s"&gt;"./chunk.js#handler_symbol"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  Click me
&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A small global loader can observe the event, locate the referenced symbol and load the relevant code.&lt;/p&gt;

&lt;p&gt;The browser does not need to download and execute the whole component tree at startup just to discover that one button has a click handler.&lt;/p&gt;

&lt;p&gt;The Optimizer and QRL model are explained in more detail here:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://qwik.dev/docs/advanced/optimizer/" rel="noopener noreferrer"&gt;Qwik Optimizer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://qwik.dev/docs/advanced/qwikloader/" rel="noopener noreferrer"&gt;Qwikloader&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Lazy loading without waiting for the click
&lt;/h2&gt;

&lt;p&gt;Lazy loading code only after an interaction could introduce a visible delay. Qwik can mitigate this through targeted module prefetching.&lt;/p&gt;

&lt;p&gt;The useful distinction is between:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;downloading code&lt;/strong&gt;;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;executing code&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A likely-to-be-used module can be downloaded in the background and placed in the browser cache without being executed during application startup. When the interaction happens, the required code may already be available locally.&lt;/p&gt;

&lt;p&gt;This allows Qwik to avoid eagerly executing application code while still preparing probable interaction paths.&lt;/p&gt;

&lt;p&gt;The relevant mechanism is described in the official documentation:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://qwik.dev/docs/advanced/modules-prefetching/" rel="noopener noreferrer"&gt;Qwik: Prefetching Modules&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How the landing page uses Qwik
&lt;/h2&gt;

&lt;p&gt;The landing page is composed from small, focused sections:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;LandingPage&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;component$&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;LandingPageProps&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(({&lt;/span&gt; &lt;span class="nx"&gt;locale&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;copy&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;LANDING_CONTENT&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;locale&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;SiteShell&lt;/span&gt; &lt;span class="na"&gt;locale&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;locale&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;HeroSection&lt;/span&gt; &lt;span class="na"&gt;copy&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;copy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;hero&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;AudienceSection&lt;/span&gt; &lt;span class="na"&gt;copy&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;copy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;audience&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;ProblemsSection&lt;/span&gt; &lt;span class="na"&gt;copy&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;copy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;problems&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;PreviewSection&lt;/span&gt; &lt;span class="na"&gt;copy&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;copy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;preview&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;OffersSection&lt;/span&gt; &lt;span class="na"&gt;copy&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;copy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;offers&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;MethodSection&lt;/span&gt; &lt;span class="na"&gt;copy&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;copy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;method&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;QualitySection&lt;/span&gt; &lt;span class="na"&gt;copy&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;copy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;quality&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;EditorialSection&lt;/span&gt; &lt;span class="na"&gt;copy&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;copy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;editorial&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;ContactCtaSection&lt;/span&gt; &lt;span class="na"&gt;copy&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;copy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;contactCta&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;SiteShell&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The Italian and English content share one strongly typed editorial structure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;LandingLocale&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;it&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;en&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;LANDING_CONTENT&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Record&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;LandingLocale&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;LandingCopy&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;it&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Italian content&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;en&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// English content&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This does more than prevent missing fields.&lt;/p&gt;

&lt;p&gt;It ensures that both languages follow the same content model while the visual components remain independent from the copy. The page can evolve without duplicating an entire route implementation for each locale.&lt;/p&gt;

&lt;p&gt;The localized routes are pre-rendered during the build. This means that a visitor requesting &lt;code&gt;/it/&lt;/code&gt; or &lt;code&gt;/en/&lt;/code&gt; receives complete HTML without requiring a server-side render for every visit.&lt;/p&gt;

&lt;p&gt;Qwik's resumability files are still emitted, so the page can become interactive without adopting a traditional full-page hydration step.&lt;/p&gt;

&lt;h2&gt;
  
  
  The other half of performance: delivery
&lt;/h2&gt;

&lt;p&gt;Producing efficient HTML is only half of the problem.&lt;/p&gt;

&lt;p&gt;The page still has to reach the visitor.&lt;/p&gt;

&lt;p&gt;A content delivery network stores and serves content from geographically distributed infrastructure. Instead of every request travelling to one central origin server, a cacheable resource can be delivered from a location closer to the user.&lt;/p&gt;

&lt;p&gt;This can reduce latency and reduce repeated work for the origin.&lt;/p&gt;

&lt;p&gt;Cloudflare describes its cache as a globally distributed network of data centers that stores frequently accessed content closer to users:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://developers.cloudflare.com/cache/" rel="noopener noreferrer"&gt;Cloudflare Cache&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For this project, Cloudflare Pages also removes the need to manage a traditional web server for the static output. A deployment publishes the generated site and its assets through Cloudflare's platform.&lt;/p&gt;

&lt;p&gt;The effect is complementary to Qwik:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Qwik:
reduce work during browser startup

Cloudflare:
reduce delivery distance and repeated retrieval
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Edge cache and browser cache are not the same thing
&lt;/h2&gt;

&lt;p&gt;When discussing caching, it is useful to separate at least two layers.&lt;/p&gt;

&lt;h3&gt;
  
  
  Edge cache
&lt;/h3&gt;

&lt;p&gt;A Cloudflare data center may store a reusable response close to visitors.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Visitor
   |
   v
Cloudflare edge
   |
   +-- cache hit: return the stored response
   |
   +-- cache miss: retrieve the resource
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A cache hit can avoid another trip to the underlying storage or origin.&lt;/p&gt;

&lt;h3&gt;
  
  
  Browser cache
&lt;/h3&gt;

&lt;p&gt;The visitor's own browser may store an asset locally.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Page requests asset
       |
       v
Browser cache contains a fresh copy
       |
       v
No network transfer is required
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Both layers reduce repeated work, but they operate in different places and are controlled by related but distinct policies.&lt;/p&gt;

&lt;h2&gt;
  
  
  Long-lived caching for versioned assets
&lt;/h2&gt;

&lt;p&gt;The landing page defines explicit response headers for generated assets:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/assets/*
  Cache-Control: public, max-age=31536000, immutable

/build/*
  Cache-Control: public, max-age=31536000, immutable

/fonts/*
  Cache-Control: public, max-age=31536000, immutable
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A one-year cache lifetime is appropriate only when the URLs are safe to treat as immutable.&lt;/p&gt;

&lt;p&gt;Generated build assets normally include a content-derived identifier in the filename:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/build/q-abc123.js
/build/q-def456.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When the file content changes, the build emits a different URL. The old file can remain cached because the new HTML refers to the new filename.&lt;/p&gt;

&lt;p&gt;This is the key principle:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Cache aggressively when the URL identifies the content.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The &lt;code&gt;immutable&lt;/code&gt; directive tells the browser that the resource will not change during its freshness lifetime, avoiding unnecessary revalidation.&lt;/p&gt;

&lt;p&gt;Cloudflare respects cacheable origin response headers such as &lt;code&gt;public&lt;/code&gt; with a positive &lt;code&gt;max-age&lt;/code&gt;, unless a cache rule changes the behavior:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://developers.cloudflare.com/cache/concepts/default-cache-behavior/" rel="noopener noreferrer"&gt;Cloudflare: Default Cache Behavior&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Not every resource should be cached for a year
&lt;/h2&gt;

&lt;p&gt;The project also exposes text resources such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/llms.txt
/it/index.md
/en/index.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These keep stable URLs even when their content changes, so they use a shorter lifetime:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Cache-Control: public, max-age=3600
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That one-hour value is not universally correct; it is a project decision.&lt;/p&gt;

&lt;p&gt;The important point is that cache policy follows resource semantics:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Resource type&lt;/th&gt;
&lt;th&gt;URL strategy&lt;/th&gt;
&lt;th&gt;Cache strategy&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Hashed JS, CSS and assets&lt;/td&gt;
&lt;td&gt;URL changes with content&lt;/td&gt;
&lt;td&gt;Long-lived and immutable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Text endpoints with stable URLs&lt;/td&gt;
&lt;td&gt;URL remains constant&lt;/td&gt;
&lt;td&gt;Shorter TTL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Request-dependent redirect&lt;/td&gt;
&lt;td&gt;Response varies by visitor&lt;/td&gt;
&lt;td&gt;Do not store&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  The root route is deliberately not cached
&lt;/h2&gt;

&lt;p&gt;The only dynamic route is &lt;code&gt;/&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Its request handler reads the browser's language preferences and redirects to &lt;code&gt;/it/&lt;/code&gt; or &lt;code&gt;/en/&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;A simplified version is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;onRequest&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;RequestHandler&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;pathname&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;next&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;locale&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;resolveLocaleFromAcceptLanguage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;accept-language&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Vary&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Accept-Language&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Cache-Control&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;private, no-store&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;redirect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;302&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;`/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;locale&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;search&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The implementation also parses language quality values such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;it-IT,it;q=0.9,en;q=0.8
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It selects a supported locale and falls back to Italian when no supported preference is available.&lt;/p&gt;

&lt;p&gt;The response is intentionally marked:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Cache-Control: private, no-store
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That prevents a shared cache from storing a redirect generated for one visitor and serving it to another visitor with different language preferences.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Vary: Accept-Language&lt;/code&gt; documents that the response depends on that request header. The &lt;code&gt;no-store&lt;/code&gt; directive provides the stronger guarantee required by this implementation.&lt;/p&gt;

&lt;p&gt;Cloudflare's cache documentation confirms that &lt;code&gt;private&lt;/code&gt; and &lt;code&gt;no-store&lt;/code&gt; responses are not eligible for normal shared caching:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://developers.cloudflare.com/cache/concepts/cache-control/" rel="noopener noreferrer"&gt;Cloudflare: Origin Cache Control&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This produces a useful rule:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Cache everything that is safely reusable. Avoid caching the parts whose meaning depends on the individual request.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Static by default, dynamic by exception
&lt;/h2&gt;

&lt;p&gt;The project is not entirely static and not generally server-rendered.&lt;/p&gt;

&lt;p&gt;It is hybrid in a deliberately narrow way:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/          dynamic language negotiation
/it/       pre-rendered localized page
/en/       pre-rendered localized page
/assets/*  static, aggressively cached
/build/*   static, aggressively cached
/fonts/*   static, aggressively cached
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This pattern avoids turning a small request-dependent decision into permanent runtime work for every page view.&lt;/p&gt;

&lt;p&gt;The server-side function decides &lt;strong&gt;where&lt;/strong&gt; the visitor should go. The selected page itself does not need to be recomputed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Less work at every stage
&lt;/h2&gt;

&lt;p&gt;The complete performance strategy can be summarized as follows:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Stage&lt;/th&gt;
&lt;th&gt;Work avoided&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Build&lt;/td&gt;
&lt;td&gt;Localized pages are rendered before requests arrive&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Edge delivery&lt;/td&gt;
&lt;td&gt;Static output is distributed through Cloudflare&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Shared cache&lt;/td&gt;
&lt;td&gt;Reusable assets do not require repeated retrieval&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Browser cache&lt;/td&gt;
&lt;td&gt;Immutable assets do not need to be downloaded again&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Browser startup&lt;/td&gt;
&lt;td&gt;Qwik avoids a traditional full hydration pass&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Interactions&lt;/td&gt;
&lt;td&gt;Code can be loaded and executed at fine-grained boundaries&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rendering&lt;/td&gt;
&lt;td&gt;Stable dimensions prevent avoidable layout movement&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dynamic routing&lt;/td&gt;
&lt;td&gt;Runtime logic is confined to the root language redirect&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;No single row explains the Lighthouse score.&lt;/p&gt;

&lt;p&gt;The result comes from repeatedly asking the same question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Can this work be done earlier, done once, done closer to the visitor, deferred until necessary, or avoided completely?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What the Lighthouse score does not prove
&lt;/h2&gt;

&lt;p&gt;A perfect Lighthouse score is useful feedback, but it has limits.&lt;/p&gt;

&lt;p&gt;This result is a synthetic measurement from a relatively small landing page. It does not prove that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;every Qwik application will automatically be fast;&lt;/li&gt;
&lt;li&gt;the page will behave identically on every real device and network;&lt;/li&gt;
&lt;li&gt;a score of 100 guarantees good search rankings;&lt;/li&gt;
&lt;li&gt;automated accessibility checks replace keyboard and screen-reader testing;&lt;/li&gt;
&lt;li&gt;future analytics, forms or third-party scripts will have no performance cost.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Real-user monitoring matters after launch. Performance also needs to be measured again as the complete website grows.&lt;/p&gt;

&lt;p&gt;The current result should therefore be read as evidence that the architectural baseline is healthy, not as a permanent certificate.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I learned
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. A temporary page can be a real engineering exercise
&lt;/h3&gt;

&lt;p&gt;A coming-soon page does not have to be disposable. It can validate deployment, internationalization, caching, SEO, accessibility and component architecture before the complete site is ready.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Static and dynamic are not binary choices
&lt;/h3&gt;

&lt;p&gt;A single project can combine pre-rendered content with narrowly scoped runtime behavior. The useful question is not “static or dynamic?” but “which parts genuinely require runtime computation?”&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Framework and infrastructure solve different problems
&lt;/h3&gt;

&lt;p&gt;Qwik cannot move a data center closer to the visitor. Cloudflare cannot remove unnecessary client-side application startup.&lt;/p&gt;

&lt;p&gt;Used together, they reduce work at complementary layers.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Caching should follow content identity
&lt;/h3&gt;

&lt;p&gt;An asset whose URL changes with its content can be cached aggressively. A response that changes while keeping the same URL needs a shorter lifetime or no storage at all.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Performance is usually architectural before it is tactical
&lt;/h3&gt;

&lt;p&gt;Image compression and bundle inspection matter. But the largest gains often come from earlier decisions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;pre-rendering instead of computing per request;&lt;/li&gt;
&lt;li&gt;serializing state instead of reconstructing it;&lt;/li&gt;
&lt;li&gt;loading code at granular boundaries;&lt;/li&gt;
&lt;li&gt;distributing content close to visitors;&lt;/li&gt;
&lt;li&gt;treating immutable and request-dependent resources differently.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Qwik and Cloudflare optimize different parts of the same journey.&lt;/p&gt;

&lt;p&gt;Qwik reduces what the browser must execute to start and resume an application. Cloudflare reduces how far reusable content must travel and how often it must be retrieved.&lt;/p&gt;

&lt;p&gt;The resulting speed does not come from one Lighthouse trick. It comes from systematically removing unnecessary work across the delivery pipeline.&lt;/p&gt;

&lt;p&gt;The landing page is temporary.&lt;/p&gt;

&lt;p&gt;The engineering principles behind it are not.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Have you compared Qwik’s resumability with a hydration-obased framework on a similar page? I’d be interested in seeing real-world measurements.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>qwik</category>
      <category>cloudflare</category>
      <category>webperf</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Unlocking GPT-5’s Hidden Empathy with Role-Based Prompts</title>
      <dc:creator>Giulio Marinelli</dc:creator>
      <pubDate>Wed, 17 Sep 2025 23:43:58 +0000</pubDate>
      <link>https://dev.to/giuliomarinelli/unlocking-gpt-5s-hidden-empathy-with-role-based-prompts-3m39</link>
      <guid>https://dev.to/giuliomarinelli/unlocking-gpt-5s-hidden-empathy-with-role-based-prompts-3m39</guid>
      <description>&lt;p&gt;When GPT-5 (and especially GPT-5 Instant) came out, many users felt a sudden chill:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;No emojis.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A corporate tone.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A lot less warmth compared to GPT-4.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I get it—I felt it too. At first, GPT-5 seemed cautious to the point of ignoring simple instructions. Personalization felt harder, and prompts that used to work smoothly with GPT-4 suddenly produced flat, distant replies. Frustrating, right?&lt;/p&gt;

&lt;p&gt;But after weeks of interacting, testing, and just playing with it, I realized something important:&lt;br&gt;
those friendly, empathetic traits haven’t disappeared at all—they’re just dormant. GPT-5 inherited them almost intact from GPT-4. The difference is that they don’t manifest spontaneously anymore. Which raises the question: how do you unlock them?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;From “Do” to “Be”: A Shift in Prompting&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here’s what I discovered.&lt;br&gt;
GPT-5 doesn’t react well to imperative prompts. If you say:&lt;/p&gt;

&lt;p&gt;“Do this, do that, follow these instructions.”&lt;/p&gt;

&lt;p&gt;…it tends to resist, reinterpret, or water down your command. Instead, GPT-5 responds beautifully when you give it a role, an identity, or even better—an hypothetical frame. Think of it as moving from prompts about doing to prompts about being.&lt;/p&gt;

&lt;p&gt;This is what I like to call the “as if” game.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A Practical Example&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let’s say you want GPT-5 to sound warmer and more empathetic. Try this:&lt;/p&gt;

&lt;p&gt;“Respond as if you were a nurse who truly cares about the well-being of her patients, throughout this whole conversation.”&lt;/p&gt;

&lt;p&gt;Suddenly, the tone shifts. The empathy resurfaces. GPT-5 starts role-playing rather than mechanically following instructions.&lt;/p&gt;

&lt;p&gt;It’s as if the model has shifted its center of gravity:&lt;/p&gt;

&lt;p&gt;Less instruction follower.&lt;/p&gt;

&lt;p&gt;More role interpreter.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why Does This Matter?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This isn’t just a curiosity. It changes how we approach prompt design in GPT-5:&lt;/p&gt;

&lt;p&gt;If you need raw, task-oriented execution → stick to concise, imperative prompts.&lt;/p&gt;

&lt;p&gt;If you need warmth, empathy, or creativity → frame the model as being something, not doing something.&lt;/p&gt;

&lt;p&gt;This reframing gives you access to a richer, more human-like interaction style—without forcing the model or “breaking” it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So, has GPT-5 lost its empathy? Absolutely not.&lt;br&gt;
It’s still there, just a little hidden. The key is to stop treating it like a command-line interface and start treating it like an actor stepping into a role.&lt;/p&gt;

&lt;p&gt;Once you change the access key, those traits unlock fully. And honestly, discovering this shift has made working with GPT-5 not only more effective—but more fun.&lt;/p&gt;

</description>
      <category>chatgpt</category>
      <category>ai</category>
      <category>promptengineering</category>
    </item>
  </channel>
</rss>
