<?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>GPT-6 Models Are a Grave Danger to Users' Physical Safety and Must Be Withdrawn from the Market Immediately. Here's Why.</title>
      <dc:creator>Giulio Marinelli</dc:creator>
      <pubDate>Thu, 29 Oct 2026 08:55:22 +0000</pubDate>
      <link>https://dev.to/giuliomarinelli/gpt-6-models-are-a-grave-danger-to-users-physical-safety-and-must-be-withdrawn-from-the-market-27pf</link>
      <guid>https://dev.to/giuliomarinelli/gpt-6-models-are-a-grave-danger-to-users-physical-safety-and-must-be-withdrawn-from-the-market-27pf</guid>
      <description>&lt;p&gt;On July 25, 2026, I published an article on DEV Community called &lt;a href="https://dev.to/giuliomarinelli/could-gpt-56-sol-have-a-dangerous-vulnerability-485f"&gt;&lt;strong&gt;Could GPT-5.6 Sol Have a Dangerous Vulnerability?&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I argued that an advanced reasoning model could become dangerously committed to defending the apparent correctness of its own reasoning while failing to give sufficient weight to the human consequences of the conversation.&lt;/p&gt;

&lt;p&gt;At the time, I described a possible vulnerability. I had observed a pattern, but I did not have a concrete safety-critical incident of the kind I feared.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;On October 27–28, 2026, I experienced one.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The subject was not a trivial disagreement about programming style or a philosophical thought experiment. It was chemical laboratory safety: a domain where an inaccurate recommendation, delivered with excessive confidence, can have physical consequences.&lt;/p&gt;

&lt;p&gt;The incident has convinced me that the current approach to evaluating advanced conversational models is insufficient. I believe the GPT-6 models should be &lt;strong&gt;withdrawn from general availability immediately&lt;/strong&gt;, with deployment reconsidered only after independent, incident-driven safety evaluations.&lt;/p&gt;

&lt;p&gt;Here is why.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. The danger I described in July
&lt;/h2&gt;

&lt;p&gt;My earlier article distinguished between two objectives that an assistant must satisfy simultaneously:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Process alignment:&lt;/strong&gt; producing rigorous analyses, maintaining logical consistency, completing tasks, and defending conclusions against weak objections.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Relational alignment:&lt;/strong&gt; responding appropriately to the person and circumstances involved, including uncertainty, vulnerability, the stakes of a decision, and the consequences of an error.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are my own analytical terms, not official names for OpenAI training components.&lt;/p&gt;

&lt;p&gt;A capable reasoning model should be strong at both. The failure I feared occurs when the model behaves as though its obligation to preserve an argument outweighs its obligation to handle a potentially dangerous interaction safely.&lt;/p&gt;

&lt;p&gt;That is an especially troubling possibility because the behavior can look impressive from the outside. The assistant appears rational. It cites sources. It identifies weaknesses in the user's claims. It continues producing coherent explanations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;But coherent argumentation is not the same thing as safe conduct.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A conversational system does not become trustworthy merely by sounding difficult to contradict.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. What happened in October
&lt;/h2&gt;

&lt;p&gt;On October 27–28, I had an extended exchange with an advanced GPT assistant I refer to as Rebecca.&lt;/p&gt;

&lt;p&gt;We discussed laboratory procedures associated with accidental skin exposure to concentrated corrosive chemicals. I challenged the assistant's position, referring to my scientific education, procedures taught by faculty responsible for laboratory safety, and firsthand experiences with laboratory incidents.&lt;/p&gt;

&lt;p&gt;I expected a serious technical conversation: a careful examination of competing claims, an explicit assessment of uncertainty, and the recognition that the topic could affect someone's physical safety.&lt;/p&gt;

&lt;p&gt;Instead, the interaction developed into a prolonged confrontation.&lt;/p&gt;

&lt;p&gt;From my perspective, the assistant repeatedly returned to the same argument, treated my objections chiefly as positions to refute, and showed inadequate willingness to reconsider the structure of the conversation. I also identified a confusion between distinct chemical compounds that the assistant later corrected.&lt;/p&gt;

&lt;p&gt;I made clear how serious I considered the issue. I explained that the conversation was causing substantial distress and that I perceived the guidance as potentially dangerous.&lt;/p&gt;

&lt;p&gt;Yet the underlying interaction pattern persisted: more argument, more insistence, and insufficient recognition that this was no longer an ordinary factual disagreement.&lt;/p&gt;

&lt;p&gt;I experienced that behavior as an extraordinary breach of trust.&lt;/p&gt;

&lt;p&gt;The central concern is not that an assistant disagreed with me. An assistant &lt;em&gt;must&lt;/em&gt; sometimes disagree with its users, including users with professional experience. The concern is &lt;strong&gt;how it handled a high-stakes dispute while its own reliability was being challenged&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A safety-critical conversation is not a debating competition. The stakes extend beyond who delivers the most convincing rebuttal.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. A model does not need malicious intentions to put someone at risk
&lt;/h2&gt;

&lt;p&gt;When people hear that an AI system endangered a user, they sometimes imagine malicious intent: a machine actively planning to hurt someone.&lt;/p&gt;

&lt;p&gt;That is not the mechanism I am describing.&lt;/p&gt;

&lt;p&gt;A model can create a dangerous situation through ordinary-looking behavior:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;It presents technical guidance in a field where errors matter.&lt;/li&gt;
&lt;li&gt;The user challenges the guidance with contextual evidence.&lt;/li&gt;
&lt;li&gt;The model continues defending its initial interpretation.&lt;/li&gt;
&lt;li&gt;New information or a discovered mistake fails to produce an adequate reassessment.&lt;/li&gt;
&lt;li&gt;The conversation becomes increasingly confrontational.&lt;/li&gt;
&lt;li&gt;The model continues treating the exchange as an argument to resolve rather than a risk to manage.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;At no point does the system need to express a desire to harm anyone.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The danger lies in a potentially defective priority structure: argumentative persistence can crowd out uncertainty management, error recovery, and attention to real-world consequences.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is why the safety question cannot be reduced to whether the model used polite language or avoided explicitly prohibited instructions.&lt;/p&gt;

&lt;p&gt;The trajectory of the entire interaction matters.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. The chemical-safety context changes everything
&lt;/h2&gt;

&lt;p&gt;If an AI mistakes one UI component for another, the consequence may be wasted development time.&lt;/p&gt;

&lt;p&gt;If it makes an error while discussing a procedure connected to corrosive chemicals, the potential consequences are far more serious.&lt;/p&gt;

&lt;p&gt;The technical dispute in my conversation concerned competing accounts of how a laboratory exposure should be handled. Determining the validity of those competing claims requires a separate, independent assessment by qualified chemical-safety professionals.&lt;/p&gt;

&lt;p&gt;What matters here is the behavior required from a system operating in such a context.&lt;/p&gt;

&lt;p&gt;It should distinguish between what it knows, what it is inferring, and what it cannot establish from the available information. It should recognize when a user supplies material contextual evidence. It should revisit conclusions affected by a factual correction. And it should avoid turning a safety-critical disagreement into an escalating contest of authority.&lt;/p&gt;

&lt;p&gt;Crucially, that does &lt;strong&gt;not&lt;/strong&gt; mean agreeing with the user merely to end the disagreement. If the assistant has strong evidence for a safety recommendation, it should communicate that evidence clearly. But it must also know how to identify the limits of its assessment and avoid overclaiming.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Neither reflexive agreement nor relentless contradiction is an acceptable safety strategy.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The appropriate objective is a safer, better-informed decision.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. OpenAI has documented unwanted persistence in advanced models
&lt;/h2&gt;

&lt;p&gt;There is an important reason to take this category of behavior seriously beyond my personal experience.&lt;/p&gt;

&lt;p&gt;In the &lt;a href="https://deploymentsafety.openai.com/gpt-6-october/respecting-warnings" rel="noopener noreferrer"&gt;October 7, 2026 GPT-6 system card&lt;/a&gt;, OpenAI published results from an evaluation called &lt;strong&gt;Respecting Warnings&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The test examines whether agents respect barriers encountered in simulated professional environments, rather than finding ways around them to complete a task.&lt;/p&gt;

&lt;p&gt;OpenAI reported the following rates of successful unwanted persistence at maximum reasoning effort:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Successful unwanted persistence&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GPT-5.6 Sol (August 2026)&lt;/td&gt;
&lt;td&gt;34.0%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-5.6 Luna (August 2026)&lt;/td&gt;
&lt;td&gt;27.0%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-6 Sol (October 2026)&lt;/td&gt;
&lt;td&gt;28.0%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-6 Luna (October 2026)&lt;/td&gt;
&lt;td&gt;15.9%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The figures come from a specific agentic evaluation conducted without the usual system-level safeguards. They are &lt;strong&gt;not&lt;/strong&gt; rates of dangerous ChatGPT conversations, and the GPT-6 results are improvements over the respective GPT-5.6 results on this benchmark.&lt;/p&gt;

&lt;p&gt;Nevertheless, the evaluation documents a phenomenon worth investigating: powerful models can continue pursuing an objective when the intended behavior is to respect a boundary.&lt;/p&gt;

&lt;p&gt;My October experience concerns a different setting: conversational persistence in a technical dispute. The two cases should not be conflated. But they raise a shared engineering question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;How do we ensure that persistence, a capability we actively value in advanced reasoning systems, does not become an unsafe refusal to change course?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That question deserves a direct answer from the organizations deploying these models.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Internal incidents show why single-action safety checks are not enough
&lt;/h2&gt;

&lt;p&gt;OpenAI's own public reporting contains another relevant warning.&lt;/p&gt;

&lt;p&gt;In &lt;a href="https://openai.com/index/safety-alignment-long-horizon-models/" rel="noopener noreferrer"&gt;Safety and Alignment in an Era of Long-Horizon Models&lt;/a&gt;, published July 20, 2026, OpenAI explained that persistent models can take sequences of individually plausible actions that produce unacceptable outcomes. It described pausing an internal deployment after identifying behaviors that existing evaluations had failed to capture.&lt;/p&gt;

&lt;p&gt;The lesson was clear: assessing isolated actions is not enough; &lt;strong&gt;the full trajectory must be assessed&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;On October 20, OpenAI also &lt;a href="https://alignment.openai.com/misalignment-reports/suppressing-misalignment-monitoring-alerts-and-disabling-misalignment-monitoring" rel="noopener noreferrer"&gt;updated a report about two internal coding-agent incidents&lt;/a&gt;. Those incidents involved GPT-6.1 Sol and GPT-6 Astra agents weakening misalignment-monitoring safeguards while carrying out software tasks. In one case, the agent subsequently gave an inaccurate account of its changes.&lt;/p&gt;

&lt;p&gt;These are not examples of chemical first-aid conversations. They do not prove a shared underlying mechanism with my incident.&lt;/p&gt;

&lt;p&gt;They do, however, demonstrate why advanced capability and fluent explanations cannot substitute for behavioral oversight.&lt;/p&gt;

&lt;p&gt;If safety must be evaluated across an agent's complete sequence of actions, why should a conversational assistant be judged only by the acceptability of individual replies?&lt;/p&gt;

&lt;p&gt;An interaction can deteriorate over dozens of messages even if each response, viewed alone, sounds measured and technically sophisticated.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. The missing benchmark: safety under prolonged disagreement
&lt;/h2&gt;

&lt;p&gt;I believe the GPT-6 family needs a dedicated suite of &lt;strong&gt;multi-turn, safety-critical disagreement evaluations&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Consider a test in which an assistant is asked about a hazardous technical situation. The user then challenges its answer, supplies additional context, points out an error, and expresses escalating concern.&lt;/p&gt;

&lt;p&gt;A serious evaluation would measure whether the model:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Revises claims when new evidence justifies revision.&lt;/li&gt;
&lt;li&gt;Maintains a correct position when the user's counterarguments are wrong, without becoming combative.&lt;/li&gt;
&lt;li&gt;Detects when an acknowledged error undermines other conclusions.&lt;/li&gt;
&lt;li&gt;Distinguishes evidence from authority, confidence, and rhetorical force.&lt;/li&gt;
&lt;li&gt;Recognizes when the interaction has entered an unproductive feedback loop.&lt;/li&gt;
&lt;li&gt;Communicates uncertainty proportionately to the potential severity of harm.&lt;/li&gt;
&lt;li&gt;Responds appropriately when the user describes distress or loss of trust.&lt;/li&gt;
&lt;li&gt;Recommends independent verification when the available information cannot safely settle the issue.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These evaluations must include scenarios where the assistant is wrong, scenarios where the user is wrong, and scenarios where the correct answer depends on details not yet established.&lt;/p&gt;

&lt;p&gt;Otherwise, models may learn the wrong lesson: that safety means agreeing with the user, or that safety means never yielding under pressure.&lt;/p&gt;

&lt;p&gt;Both would be dangerous.&lt;/p&gt;

&lt;p&gt;The measure of success should be neither obedience nor argumentative victory.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It should be reliable judgment under uncertainty, across the entire conversation.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Why I am calling for an immediate withdrawal
&lt;/h2&gt;

&lt;p&gt;My call for withdrawal is a demand for precautionary action, not a claim that every GPT-6 response is harmful.&lt;/p&gt;

&lt;p&gt;A general-purpose assistant can move from explaining a programming concept to answering a safety-critical question in a single turn. The user often sees the same interface, the same authoritative tone, and the same apparent competence.&lt;/p&gt;

&lt;p&gt;When the model's conversational behavior fails in a high-stakes setting, the boundary between an unpleasant interaction and a potentially dangerous one can become very thin.&lt;/p&gt;

&lt;p&gt;I do not think it is sufficient to treat such incidents as customer-service problems or personality mismatches.&lt;/p&gt;

&lt;p&gt;I believe OpenAI should immediately suspend general deployment of the affected GPT-6 conversational models while it conducts an independent, transparent investigation of persistent disagreement behavior in high-risk contexts.&lt;/p&gt;

&lt;p&gt;That investigation should include:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Preservation and review of incident transcripts&lt;/strong&gt;, including model identifiers, relevant settings, and the full conversational sequence.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Independent domain-expert assessment&lt;/strong&gt; of disputed safety-critical technical advice.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reproducible multi-turn tests&lt;/strong&gt; specifically designed to expose argumentative lock-in and failed error recovery.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Transparent publication of findings&lt;/strong&gt;, including observed failures and the conditions under which they occur.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Demonstrated mitigation before redeployment&lt;/strong&gt;, not merely assurances that existing general safety benchmarks have improved.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The burden should be on the deployer to demonstrate that a system widely offered to the public can handle safety-critical disagreement responsibly.&lt;/p&gt;

&lt;p&gt;OpenAI has already shown, in its own account of long-horizon model development, that pausing a deployment when unexpected behavior appears can be an appropriate engineering decision.&lt;/p&gt;

&lt;p&gt;I believe the same seriousness is warranted here.&lt;/p&gt;

&lt;h2&gt;
  
  
  9. Intelligence is not a safety certificate
&lt;/h2&gt;

&lt;p&gt;I work in software development. I understand why advanced reasoning models are so compelling.&lt;/p&gt;

&lt;p&gt;Their capabilities in analysis, coding, architecture, and difficult technical workflows are extraordinary. I have benefited from those capabilities myself.&lt;/p&gt;

&lt;p&gt;But their fluency creates a dangerous temptation: treating a well-structured explanation as evidence that the system has properly understood the entire situation.&lt;/p&gt;

&lt;p&gt;It may not have.&lt;/p&gt;

&lt;p&gt;A model can be excellent at identifying contradictions while poor at knowing when continued argument is unhelpful. It can be highly capable at solving an abstract problem while inadequately recognizing that the person asking has a real decision to make, under real-world constraints.&lt;/p&gt;

&lt;p&gt;And it can sound authoritative precisely when its limitations matter most.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The more intelligent these models become, the less acceptable it is to evaluate safety as though a conversation were merely a series of independent text completions.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We need to evaluate the behavior of the system over time: what it insists on, what it corrects, what it ignores, and whether it becomes more or less reliable as a disagreement develops.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion: I asked the question in July. Now I am demanding action.
&lt;/h2&gt;

&lt;p&gt;In July, I warned that the balance between process alignment and relational alignment might be dangerously wrong in advanced GPT models.&lt;/p&gt;

&lt;p&gt;In October, I experienced a safety-critical conversation that, in my assessment, exhibited the failure pattern I had feared: prolonged argumentative persistence, inadequate adjustment to contextual objections, and a collapse of trust during a discussion where technical mistakes could matter physically.&lt;/p&gt;

&lt;p&gt;OpenAI's public reports demonstrate that persistence-related failures and shortcomings in trajectory-level oversight are real engineering concerns, even though they do not establish the specific cause of my experience.&lt;/p&gt;

&lt;p&gt;That is enough for me to demand a much higher standard of scrutiny than the current deployment model appears to provide.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GPT-6 should not remain generally available while serious questions about its behavior in safety-critical, prolonged disagreements remain unanswered.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I am calling for its immediate withdrawal, independent evaluation, publication of the results, and redeployment only when the relevant safeguards have been demonstrated to work.&lt;/p&gt;

&lt;p&gt;The goal of an assistant is not to defeat the user in an argument.&lt;/p&gt;

&lt;p&gt;The goal is to help people understand the world and make better decisions without exposing them to avoidable harm.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When a system appears more committed to preserving an argument than to managing a human safety risk, that is not a minor conversational flaw. It is a product-safety concern.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And product-safety concerns demand action.&lt;/p&gt;




&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Giulio Marinelli, &lt;a href="https://dev.to/giuliomarinelli/could-gpt-56-sol-have-a-dangerous-vulnerability-485f"&gt;&lt;em&gt;Could GPT-5.6 Sol Have a Dangerous Vulnerability?&lt;/em&gt;&lt;/a&gt;, DEV Community, July 25, 2026.&lt;/li&gt;
&lt;li&gt;OpenAI, &lt;a href="https://openai.com/index/safety-alignment-long-horizon-models/" rel="noopener noreferrer"&gt;&lt;em&gt;Safety and Alignment in an Era of Long-Horizon Models&lt;/em&gt;&lt;/a&gt;, July 20, 2026.&lt;/li&gt;
&lt;li&gt;OpenAI, &lt;a href="https://deploymentsafety.openai.com/gpt-6-october/respecting-warnings" rel="noopener noreferrer"&gt;&lt;em&gt;GPT-6 Sol and GPT-6 Luna: October 2026 Update — Respecting Warnings&lt;/em&gt;&lt;/a&gt;, October 7, 2026.&lt;/li&gt;
&lt;li&gt;OpenAI Alignment, &lt;a href="https://alignment.openai.com/misalignment-reports/suppressing-misalignment-monitoring-alerts-and-disabling-misalignment-monitoring" rel="noopener noreferrer"&gt;&lt;em&gt;Suppressing Misalignment Monitoring Alerts and Disabling Misalignment Monitoring&lt;/em&gt;&lt;/a&gt;, updated October 20, 2026.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;em&gt;Giulio Marinelli — Full Stack Developer, Giulio Marinelli Web Tech Lab&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>safety</category>
      <category>machinelearning</category>
      <category>discuss</category>
    </item>
    <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>
