<?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: Techifive</title>
    <description>The latest articles on DEV Community by Techifive (techifivehq).</description>
    <link>https://dev.to/techifivehq</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%2Forganization%2Fprofile_image%2F14277%2F96baf806-2349-40dc-81e4-1553092b5b8e.png</url>
      <title>DEV Community: Techifive</title>
      <link>https://dev.to/techifivehq</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/techifivehq"/>
    <language>en</language>
    <item>
      <title>HTTP QUERY Is Official: Should You Replace POST /search Yet?</title>
      <dc:creator>Techifive</dc:creator>
      <pubDate>Wed, 26 Aug 2026 12:30:00 +0000</pubDate>
      <link>https://dev.to/techifivehq/http-query-is-official-should-you-replace-post-search-yet-1am6</link>
      <guid>https://dev.to/techifivehq/http-query-is-official-should-you-replace-post-search-yet-1am6</guid>
      <description>&lt;h1&gt;
  
  
  HTTP QUERY Is Official: Should You Replace POST /search Yet?
&lt;/h1&gt;

&lt;p&gt;For years, API developers have written endpoints like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="nf"&gt;POST&lt;/span&gt; &lt;span class="nn"&gt;/products/search&lt;/span&gt; &lt;span class="k"&gt;HTTP&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="m"&gt;1.1&lt;/span&gt;
&lt;span class="na"&gt;Content-Type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;application/json&lt;/span&gt;

&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"filters"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"category"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"laptops"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"tablets"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"price"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"min"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"max"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2000&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"inStock"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"sort"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"field"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"rating"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"direction"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"desc"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"page"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"size"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nothing is being created. Nothing is being updated.&lt;/p&gt;

&lt;p&gt;The client is asking a complicated question, but &lt;code&gt;GET&lt;/code&gt; becomes awkward once the input turns into nested filters, ranges, sorting rules, cursors, and other structured data. So we use &lt;code&gt;POST&lt;/code&gt; because it gives us a request body.&lt;/p&gt;

&lt;p&gt;That workaround now has an official alternative.&lt;/p&gt;

&lt;p&gt;In June 2026, the IETF published &lt;a href="https://www.rfc-editor.org/rfc/rfc10008.html" rel="noopener noreferrer"&gt;RFC 10008&lt;/a&gt;, defining a new HTTP request method called &lt;code&gt;QUERY&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The same search can now be expressed as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="nf"&gt;QUERY&lt;/span&gt; &lt;span class="nn"&gt;/products&lt;/span&gt; &lt;span class="k"&gt;HTTP&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="m"&gt;1.1&lt;/span&gt;
&lt;span class="na"&gt;Content-Type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;application/json&lt;/span&gt;
&lt;span class="na"&gt;Accept&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;application/json&lt;/span&gt;

&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"filters"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"category"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"laptops"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"tablets"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"price"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"min"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"max"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2000&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"inStock"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"sort"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"field"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"rating"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"direction"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"desc"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"page"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"size"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That looks like a small syntax change.&lt;/p&gt;

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

&lt;p&gt;&lt;code&gt;QUERY&lt;/code&gt; tells the HTTP stack that this request:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;can carry structured request content&lt;/li&gt;
&lt;li&gt;is safe&lt;/li&gt;
&lt;li&gt;is idempotent&lt;/li&gt;
&lt;li&gt;can be retried as a query&lt;/li&gt;
&lt;li&gt;has cacheable responses by specification&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The interesting question in 2026 is no longer "what is QUERY?"&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Should you actually use it in production yet?&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;If you only remember five things:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;QUERY&lt;/code&gt; is standardized in RFC 10008 and registered as a safe, idempotent HTTP method.&lt;/li&gt;
&lt;li&gt;It is designed for read-only server-side queries where the input belongs in request content rather than a giant URI.&lt;/li&gt;
&lt;li&gt;Browser &lt;code&gt;fetch()&lt;/code&gt; can send it today, but cross-origin requests require CORS preflight.&lt;/li&gt;
&lt;li&gt;QUERY responses are cacheable, but a correct cache key must include the request content. Browser caching support is still catching up.&lt;/li&gt;
&lt;li&gt;I would not migrate every &lt;code&gt;POST /search&lt;/code&gt; endpoint today. I would consider QUERY for new APIs or controlled environments where I can test the complete request path.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That last point matters most.&lt;/p&gt;

&lt;p&gt;A new HTTP method only works when every layer between the client and your handler agrees to let it pass.&lt;/p&gt;




&lt;h2&gt;
  
  
  The gap between GET and POST
&lt;/h2&gt;

&lt;p&gt;A normal read fits GET perfectly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;GET /products?category=laptop&amp;amp;brand=apple&amp;amp;sort=price
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It is readable, shareable, easy to inspect, and works naturally with existing caching infrastructure.&lt;/p&gt;

&lt;p&gt;Then requirements grow.&lt;/p&gt;

&lt;p&gt;You add:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;nested AND/OR conditions&lt;/li&gt;
&lt;li&gt;multiple ranges&lt;/li&gt;
&lt;li&gt;faceted filters&lt;/li&gt;
&lt;li&gt;geospatial constraints&lt;/li&gt;
&lt;li&gt;cursor pagination&lt;/li&gt;
&lt;li&gt;aggregations&lt;/li&gt;
&lt;li&gt;semantic search parameters&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Eventually the query becomes a serialized data structure pretending to be a URL.&lt;/p&gt;

&lt;h3&gt;
  
  
  GET has practical URI limits
&lt;/h3&gt;

&lt;p&gt;RFC 10008 points out that a request may travel through many independent systems with different URI limits. HTTP recommends support for request targets of at least 8,000 octets, but that does not give you one universal maximum across browsers, proxies, gateways, WAFs, CDNs, frameworks, and servers.&lt;/p&gt;

&lt;p&gt;The problem is not finding a magic number.&lt;/p&gt;

&lt;p&gt;The problem is that you do not control every hop.&lt;/p&gt;

&lt;h3&gt;
  
  
  Structured filters do not map cleanly to a URI
&lt;/h3&gt;

&lt;p&gt;This is easy to understand:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"and"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"category"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"laptop"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"or"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"brand"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Framework"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"repairabilityScore"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"gte"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Encoding the same structure into query parameters usually means inventing a convention every client must learn.&lt;/p&gt;

&lt;h3&gt;
  
  
  URIs are highly observable
&lt;/h3&gt;

&lt;p&gt;URLs commonly appear in access logs, browser history, analytics systems, monitoring tools, and intermediary infrastructure.&lt;/p&gt;

&lt;p&gt;A request body is not automatically private. Your infrastructure can log bodies too, and TLS is still mandatory.&lt;/p&gt;

&lt;p&gt;But RFC 10008 explicitly notes that URIs are more likely to be logged or processed by intermediaries than request content. That matters when query inputs should not casually appear in a URL.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why not just send a GET body?
&lt;/h3&gt;

&lt;p&gt;Because HTTP does not define general semantics for GET request content.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.rfc-editor.org/rfc/rfc9110.html#name-get" rel="noopener noreferrer"&gt;RFC 9110&lt;/a&gt; warns that GET content has no generally defined semantics and may be rejected by some implementations because of request smuggling concerns.&lt;/p&gt;

&lt;p&gt;A private agreement between your browser and origin is not enough when several intermediaries sit between them.&lt;/p&gt;

&lt;p&gt;This is the gap QUERY closes.&lt;/p&gt;




&lt;h2&gt;
  
  
  Important correction: POST /search was never "invalid"
&lt;/h2&gt;

&lt;p&gt;A lot of QUERY explainers make this claim:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;POST is for creating things, so POST /search is wrong.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is too simplistic.&lt;/p&gt;

&lt;p&gt;POST is broader than "create a resource." HTTP allows the target resource to process the enclosed content according to its own semantics. APIs have legitimately used POST for complex searches for years.&lt;/p&gt;

&lt;p&gt;The real limitation is different.&lt;/p&gt;

&lt;p&gt;A generic HTTP component cannot look at &lt;code&gt;POST /search&lt;/code&gt; and know that your particular operation is safe and idempotent.&lt;/p&gt;

&lt;p&gt;With &lt;code&gt;QUERY&lt;/code&gt;, it can.&lt;/p&gt;

&lt;h3&gt;
  
  
  Safe
&lt;/h3&gt;

&lt;p&gt;A safe method means the client is not requesting a state change to the target resource.&lt;/p&gt;

&lt;p&gt;The server may still write logs, metrics, cache entries, or other incidental data. "Safe" describes the requested semantics, not the absence of every server-side write.&lt;/p&gt;

&lt;h3&gt;
  
  
  Idempotent
&lt;/h3&gt;

&lt;p&gt;Idempotent means the intended effect of repeating the same request is the same as sending it once.&lt;/p&gt;

&lt;p&gt;That becomes important when a connection fails halfway through a request.&lt;/p&gt;

&lt;p&gt;An intermediary cannot generically assume that retrying POST is harmless.&lt;/p&gt;

&lt;p&gt;QUERY explicitly provides that contract.&lt;/p&gt;




&lt;h2&gt;
  
  
  GET vs POST vs QUERY
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Property&lt;/th&gt;
&lt;th&gt;GET&lt;/th&gt;
&lt;th&gt;POST&lt;/th&gt;
&lt;th&gt;QUERY&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Safe by method semantics&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Not guaranteed&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Idempotent by method semantics&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Not guaranteed&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Request content has defined query semantics&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Resource-specific&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Best for simple, shareable reads&lt;/td&gt;
&lt;td&gt;Excellent&lt;/td&gt;
&lt;td&gt;Usually unnecessary&lt;/td&gt;
&lt;td&gt;Usually unnecessary&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Best for large structured read inputs&lt;/td&gt;
&lt;td&gt;Awkward&lt;/td&gt;
&lt;td&gt;Common workaround&lt;/td&gt;
&lt;td&gt;Designed for it&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Response cacheable by HTTP semantics&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Possible, with different rules&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Query input outside the URI&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The key point is simple:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;QUERY does not replace GET.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;GET remains the best choice for ordinary retrieval.&lt;/p&gt;

&lt;p&gt;QUERY becomes interesting when the operation is still a read, but the input deserves a structured representation.&lt;/p&gt;




&lt;h2&gt;
  
  
  Four details in RFC 10008 that developers should know
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Content-Type matters
&lt;/h3&gt;

&lt;p&gt;The target URI defines the scope of the query. The request content and media type define the query itself.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="nf"&gt;QUERY&lt;/span&gt; &lt;span class="nn"&gt;/orders&lt;/span&gt; &lt;span class="k"&gt;HTTP&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="m"&gt;1.1&lt;/span&gt;
&lt;span class="na"&gt;Content-Type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;application/json&lt;/span&gt;
&lt;span class="na"&gt;Accept&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;application/json&lt;/span&gt;

&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"where"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"paid"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"shipped"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"groupBy"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"country"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"limit"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;RFC 10008 requires the server to fail a QUERY request when &lt;code&gt;Content-Type&lt;/code&gt; is missing or inconsistent with the request content.&lt;/p&gt;

&lt;p&gt;That also gives useful error semantics:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;400&lt;/code&gt; for missing or inconsistent media type&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;415&lt;/code&gt; for an unsupported query format&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;422&lt;/code&gt; for valid content that cannot be processed&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;406&lt;/code&gt; when the requested response format is unavailable&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Accept-Query advertises supported query formats
&lt;/h3&gt;

&lt;p&gt;RFC 10008 introduces &lt;code&gt;Accept-Query&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;Accept-Query: application/json, application/sql
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A client can also discover QUERY support through &lt;code&gt;OPTIONS&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="nf"&gt;OPTIONS&lt;/span&gt; &lt;span class="nn"&gt;/products&lt;/span&gt; &lt;span class="k"&gt;HTTP&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="m"&gt;1.1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Possible response:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="k"&gt;HTTP&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="m"&gt;1.1&lt;/span&gt; &lt;span class="m"&gt;200&lt;/span&gt; &lt;span class="ne"&gt;OK&lt;/span&gt;
&lt;span class="na"&gt;Allow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;GET, QUERY, OPTIONS, HEAD&lt;/span&gt;
&lt;span class="na"&gt;Accept-Query&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;application/json&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That gives an API a protocol-level way to say both "I support QUERY" and "these are the query representations I understand."&lt;/p&gt;

&lt;h3&gt;
  
  
  3. QUERY can participate in conditional requests
&lt;/h3&gt;

&lt;p&gt;Because QUERY has retrieval-like semantics, it can work with validators and conditional requests.&lt;/p&gt;

&lt;p&gt;That means a repeated expensive query can potentially use mechanisms such as &lt;code&gt;If-Modified-Since&lt;/code&gt; and receive &lt;code&gt;304 Not Modified&lt;/code&gt; when appropriate.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. A server can assign the query a GET-able URI
&lt;/h3&gt;

&lt;p&gt;A successful QUERY can return a &lt;code&gt;Location&lt;/code&gt; pointing to an equivalent resource.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="k"&gt;HTTP&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="m"&gt;1.1&lt;/span&gt; &lt;span class="m"&gt;200&lt;/span&gt; &lt;span class="ne"&gt;OK&lt;/span&gt;
&lt;span class="na"&gt;Location&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/queries/8f4b32a1&lt;/span&gt;
&lt;span class="na"&gt;Content-Type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;application/json&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The client can later use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;GET /queries/8f4b32a1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This pattern is especially interesting for saved searches, analytics, expensive reports, and repeated complex queries.&lt;/p&gt;




&lt;h2&gt;
  
  
  Browser fetch can already send QUERY
&lt;/h2&gt;

&lt;p&gt;Scripted &lt;code&gt;fetch()&lt;/code&gt; requests can use QUERY because it is not a forbidden Fetch method.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&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="s2"&gt;https://api.example.com/products&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="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;QUERY&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&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;Content-Type&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;application/json&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&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;application/json&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;filters&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;category&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;laptop&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;minRating&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;4.5&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;limit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;20&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;data&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;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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One small 2026 gotcha: use uppercase &lt;code&gt;QUERY&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The Fetch Standard currently normalizes only a fixed set of familiar methods such as GET and POST. QUERY is not yet in that normalization list, so lowercase &lt;code&gt;query&lt;/code&gt; may be transmitted as lowercase instead of being automatically normalized.&lt;/p&gt;

&lt;p&gt;Tiny detail, long debugging session.&lt;/p&gt;




&lt;h2&gt;
  
  
  Cross-origin QUERY requires CORS preflight
&lt;/h2&gt;

&lt;p&gt;QUERY is not a CORS-safelisted method.&lt;/p&gt;

&lt;p&gt;If your frontend and API are on different origins, the browser will send a preflight request first.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="nf"&gt;OPTIONS&lt;/span&gt; &lt;span class="nn"&gt;/products&lt;/span&gt; &lt;span class="k"&gt;HTTP&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="m"&gt;1.1&lt;/span&gt;
&lt;span class="na"&gt;Origin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;https://app.example.com&lt;/span&gt;
&lt;span class="na"&gt;Access-Control-Request-Method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;QUERY&lt;/span&gt;
&lt;span class="na"&gt;Access-Control-Request-Headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;content-type&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your API needs to authorize it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="k"&gt;HTTP&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="m"&gt;1.1&lt;/span&gt; &lt;span class="m"&gt;204&lt;/span&gt; &lt;span class="ne"&gt;No Content&lt;/span&gt;
&lt;span class="na"&gt;Access-Control-Allow-Origin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;https://app.example.com&lt;/span&gt;
&lt;span class="na"&gt;Access-Control-Allow-Methods&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;GET, POST, QUERY, OPTIONS&lt;/span&gt;
&lt;span class="na"&gt;Access-Control-Allow-Headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Content-Type&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If your CORS config has a hard-coded method list 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;GET, POST, PUT, PATCH, DELETE
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;QUERY will fail even if your route handler understands it perfectly.&lt;/p&gt;

&lt;p&gt;That leads to the biggest rollout lesson:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Application support is not the same as end-to-end support.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Caching is where QUERY gets difficult
&lt;/h2&gt;

&lt;p&gt;RFC 10008 says QUERY responses are cacheable.&lt;/p&gt;

&lt;p&gt;But there is a critical rule:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;the cache key MUST incorporate the request content and related metadata.&lt;/strong&gt;&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;QUERY /products
Content-Type: application/json

{ "category": "laptops" }
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;QUERY /products
Content-Type: application/json

{ "category": "cameras" }
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The URI is identical. The query is not.&lt;/p&gt;

&lt;p&gt;A cache that only keys on method plus URL could return laptop results for the camera request.&lt;/p&gt;

&lt;p&gt;That is not a minor cache miss problem. It can become a data correctness or isolation problem.&lt;/p&gt;

&lt;p&gt;A QUERY-aware cache needs something 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;method
+ target URI
+ request content
+ relevant representation metadata
+ Vary dimensions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The RFC allows semantically insignificant differences to be normalized before calculating the key, but normalization itself is tricky.&lt;/p&gt;

&lt;p&gt;For example, these JSON documents may be semantically equivalent:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"category"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"laptops"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"limit"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"limit"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"category"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"laptops"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Generic infrastructure should not assume every query format can be normalized the same way.&lt;/p&gt;

&lt;h3&gt;
  
  
  The spec is currently ahead of browser caches
&lt;/h3&gt;

&lt;p&gt;An open &lt;a href="https://github.com/whatwg/fetch/issues/1938" rel="noopener noreferrer"&gt;WHATWG Fetch discussion&lt;/a&gt; notes that scripted QUERY requests work, but tests with Chrome and Firefox did not cache repeated identical QUERY requests in the body-aware way RFC 10008 permits.&lt;/p&gt;

&lt;p&gt;So keep these two statements separate:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;QUERY is cacheable by specification.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Your browser, CDN, proxy, or gateway currently implements QUERY caching correctly.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Do not assume the second from the first.&lt;/p&gt;




&lt;h2&gt;
  
  
  What should you test before production?
&lt;/h2&gt;

&lt;p&gt;As of August 2026, the method itself is standardized, but ecosystem support remains uneven.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Status to expect in 2026&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;RFC / IANA&lt;/td&gt;
&lt;td&gt;Standardized and registered&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Browser &lt;code&gt;fetch()&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Can send QUERY&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cross-origin browser request&lt;/td&gt;
&lt;td&gt;Requires CORS preflight&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Browser QUERY caching&lt;/td&gt;
&lt;td&gt;Do not rely on it yet&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;curl&lt;/td&gt;
&lt;td&gt;Can send custom QUERY requests&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Node.js&lt;/td&gt;
&lt;td&gt;Verify your deployed runtime with &lt;code&gt;http.METHODS&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Framework routing&lt;/td&gt;
&lt;td&gt;Support is arriving, verify your exact version&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HTML forms&lt;/td&gt;
&lt;td&gt;Do not rely on declarative QUERY submission yet&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CDN / WAF / gateway&lt;/td&gt;
&lt;td&gt;Must be tested explicitly&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A valid request can still be rejected by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;reverse proxies&lt;/li&gt;
&lt;li&gt;CDNs&lt;/li&gt;
&lt;li&gt;WAFs&lt;/li&gt;
&lt;li&gt;bot mitigation&lt;/li&gt;
&lt;li&gt;API gateways&lt;/li&gt;
&lt;li&gt;CORS middleware&lt;/li&gt;
&lt;li&gt;service meshes&lt;/li&gt;
&lt;li&gt;authentication middleware&lt;/li&gt;
&lt;li&gt;observability pipelines&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you are testing Node, start with this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;http&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;node:http&lt;/span&gt;&lt;span class="dl"&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="nx"&gt;http&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;METHODS&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;includes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;QUERY&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;And curl can send the method directly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; QUERY https://api.example.com/products &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s1"&gt;'Content-Type: application/json'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"category":"laptops","limit":20}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But localhost success proves very little.&lt;/p&gt;

&lt;p&gt;Run that request through the same public hostname, CDN, gateway, firewall, and application path your real users will hit.&lt;/p&gt;




&lt;h2&gt;
  
  
  The production rollout checklist I would use
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Confirm the operation is truly safe
&lt;/h3&gt;

&lt;p&gt;Good candidates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;catalog search&lt;/li&gt;
&lt;li&gt;analytics queries&lt;/li&gt;
&lt;li&gt;log search&lt;/li&gt;
&lt;li&gt;complex resource filtering&lt;/li&gt;
&lt;li&gt;semantic search&lt;/li&gt;
&lt;li&gt;data exploration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Bad candidates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;checkout&lt;/li&gt;
&lt;li&gt;sending email&lt;/li&gt;
&lt;li&gt;triggering deployments&lt;/li&gt;
&lt;li&gt;marking notifications as read&lt;/li&gt;
&lt;li&gt;anything whose requested semantics change application state&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Do not use QUERY merely because an endpoint returns data.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Search the stack for method allowlists
&lt;/h3&gt;

&lt;p&gt;Look for configurations like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GET|POST|PUT|PATCH|DELETE|OPTIONS
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That may be hiding in a proxy, WAF, gateway policy, router, rate limiter, or test fixture.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Fix CORS deliberately
&lt;/h3&gt;

&lt;p&gt;For browser clients across origins, add QUERY to allowed methods and test the preflight path.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Decide the cache strategy before launch
&lt;/h3&gt;

&lt;p&gt;I would start with one of two options:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Option A:&lt;/strong&gt; disable shared QUERY caching until every layer is verified.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Option B:&lt;/strong&gt; implement a body-aware cache key deliberately and test it with adversarial inputs.&lt;/p&gt;

&lt;p&gt;Never put QUERY behind a cache that ignores the request content.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Update observability
&lt;/h3&gt;

&lt;p&gt;Make sure dashboards do not dump QUERY into &lt;code&gt;OTHER&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Track request count, latency, error rate, cache behavior, preflight failures, and edge rejections separately.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Keep a fallback for public APIs
&lt;/h3&gt;

&lt;p&gt;For a transition period, supporting both can be reasonable:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;POST  /products/search   compatibility endpoint
QUERY /products          standards-based query endpoint
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That lets early adopters use QUERY without forcing every SDK and intermediary to upgrade at once.&lt;/p&gt;




&lt;h2&gt;
  
  
  So, should you replace POST /search?
&lt;/h2&gt;

&lt;p&gt;My answer is &lt;strong&gt;not everywhere, and not simply because a new RFC exists&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I would use QUERY today when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I am designing a new API or can evolve both client and server&lt;/li&gt;
&lt;li&gt;the operation is genuinely read-only&lt;/li&gt;
&lt;li&gt;the query is too complex for a clean GET URI&lt;/li&gt;
&lt;li&gt;safe retry semantics matter&lt;/li&gt;
&lt;li&gt;I can test the entire proxy and gateway path&lt;/li&gt;
&lt;li&gt;I have a deliberate caching strategy&lt;/li&gt;
&lt;li&gt;I can keep a fallback when interoperability matters&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I would keep GET when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the query is small&lt;/li&gt;
&lt;li&gt;the URL is useful to bookmark or share&lt;/li&gt;
&lt;li&gt;mature CDN and browser caching matters&lt;/li&gt;
&lt;li&gt;maximum interoperability matters&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I would keep POST when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;compatibility is more important than protocol purity&lt;/li&gt;
&lt;li&gt;I cannot verify all intermediaries&lt;/li&gt;
&lt;li&gt;the operation is not actually safe&lt;/li&gt;
&lt;li&gt;migration creates more complexity than value&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;QUERY is not a reason to rewrite healthy APIs.&lt;/p&gt;

&lt;p&gt;It is a better primitive for the next complex read endpoint you design.&lt;/p&gt;




&lt;h2&gt;
  
  
  A note from Techifive
&lt;/h2&gt;

&lt;p&gt;At &lt;a href="https://www.techifive.com/" rel="noopener noreferrer"&gt;Techifive&lt;/a&gt;, we design and build custom software systems, including &lt;a href="https://www.techifive.com/services" rel="noopener noreferrer"&gt;REST and GraphQL APIs, web applications, cloud infrastructure, edge delivery, security, and performance optimization&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;HTTP QUERY is a good example of why production API design does not stop at the controller. A request crosses clients, CORS policy, gateways, caches, security layers, observability systems, and application code. A standards-compliant endpoint can still fail if one layer in that chain is not ready.&lt;/p&gt;

&lt;p&gt;For teams modernizing an API platform, the useful question is not only "does my framework support this?" It is "does the complete production path support it safely and predictably?"&lt;/p&gt;

&lt;p&gt;That is the level at which architecture decisions should be evaluated.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final takeaway
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;QUERY&lt;/code&gt; is now a real part of HTTP, not an experimental naming convention.&lt;/p&gt;

&lt;p&gt;It gives developers something that was missing for a long time: a standardized way to send structured query content while explicitly preserving safe and idempotent semantics.&lt;/p&gt;

&lt;p&gt;But standards adoption happens in layers.&lt;/p&gt;

&lt;p&gt;Your browser may send QUERY while your CORS policy blocks it.&lt;/p&gt;

&lt;p&gt;Your application may route it while your WAF rejects it.&lt;/p&gt;

&lt;p&gt;Your origin may understand it while your cache keys it incorrectly.&lt;/p&gt;

&lt;p&gt;So yes, learn it.&lt;/p&gt;

&lt;p&gt;Yes, prototype it.&lt;/p&gt;

&lt;p&gt;And for the right new API, consider using it.&lt;/p&gt;

&lt;p&gt;Just test the complete request path before replacing every &lt;code&gt;POST /search&lt;/code&gt; in production.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you have already tested HTTP QUERY, which layer in your stack was the first to reject it?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That answer is probably more useful to other developers right now than another explanation of what an HTTP method is.&lt;/p&gt;




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

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.rfc-editor.org/rfc/rfc10008.html" rel="noopener noreferrer"&gt;RFC 10008: The HTTP QUERY Method&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.rfc-editor.org/rfc/rfc9110.html" rel="noopener noreferrer"&gt;RFC 9110: HTTP Semantics&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/whatwg/fetch/issues/1938" rel="noopener noreferrer"&gt;WHATWG Fetch: HTTP QUERY integration discussion&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://fetch.spec.whatwg.org/" rel="noopener noreferrer"&gt;Fetch Living Standard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://curl.se/docs/manpage.html" rel="noopener noreferrer"&gt;curl documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nodejs.org/api/http.html" rel="noopener noreferrer"&gt;Node.js HTTP documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://expressjs.com/en/5x/api/" rel="noopener noreferrer"&gt;Express 5 API documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.techifive.com/services" rel="noopener noreferrer"&gt;Techifive Services&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>http</category>
      <category>api</category>
      <category>webdev</category>
      <category>backend</category>
    </item>
    <item>
      <title>The Real Cost of AI Coding Tools Goes Beyond the Subscription</title>
      <dc:creator>Techifive</dc:creator>
      <pubDate>Fri, 07 Aug 2026 13:00:00 +0000</pubDate>
      <link>https://dev.to/techifivehq/the-real-cost-of-ai-coding-tools-goes-beyond-the-subscription-3pd0</link>
      <guid>https://dev.to/techifivehq/the-real-cost-of-ai-coding-tools-goes-beyond-the-subscription-3pd0</guid>
      <description>&lt;p&gt;AI coding assistants are often evaluated by one visible number: the subscription price.&lt;/p&gt;

&lt;p&gt;That number is easy to compare, but it rarely represents the full cost of using AI across an engineering organization.&lt;/p&gt;

&lt;p&gt;A tool may cost a fixed amount per developer while also creating expenses related to model usage, security reviews, identity management, integrations, training, code validation, compliance, and vendor management. At the same time, a more expensive tool may still be the better choice if it produces measurable engineering value without creating unacceptable risk.&lt;/p&gt;

&lt;p&gt;The useful question is not:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Which AI coding assistant is cheapest?&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;blockquote&gt;
&lt;p&gt;Which tool creates enough verified value to justify its total cost and risk?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This post provides a practical framework for answering that question.&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;The real cost of an AI coding tool may include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Seat licenses&lt;/li&gt;
&lt;li&gt;API and token usage&lt;/li&gt;
&lt;li&gt;Supporting infrastructure&lt;/li&gt;
&lt;li&gt;Security and privacy reviews&lt;/li&gt;
&lt;li&gt;Identity and access management&lt;/li&gt;
&lt;li&gt;Integration and maintenance work&lt;/li&gt;
&lt;li&gt;Developer onboarding and training&lt;/li&gt;
&lt;li&gt;Human review of generated code&lt;/li&gt;
&lt;li&gt;Rework caused by incorrect output&lt;/li&gt;
&lt;li&gt;Compliance and legal evaluation&lt;/li&gt;
&lt;li&gt;Monitoring and incident response&lt;/li&gt;
&lt;li&gt;Vendor lock-in and migration risk&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Do not approve or reject an AI tool based only on its monthly price.&lt;/p&gt;

&lt;p&gt;Run a limited pilot, measure the work it improves, track the work it creates, and evaluate whether the organization can operate it safely.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why enterprise AI decisions are becoming more complicated
&lt;/h2&gt;

&lt;p&gt;In July 2026, Reuters reported that Alibaba planned to restrict employee use of Claude Code following concerns about software behavior, data exposure, and the broader relationship between the companies. The report also noted that employees were being directed toward an internal alternative.&lt;/p&gt;

&lt;p&gt;The important lesson is not that one product is automatically good or bad.&lt;/p&gt;

&lt;p&gt;The lesson is that enterprise technology decisions involve much more than feature quality. A tool can be technically impressive and still conflict with an organization's security requirements, regional policies, internal strategy, or preferred infrastructure.&lt;/p&gt;

&lt;p&gt;Large organizations commonly evaluate AI tools across several dimensions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Capability&lt;/li&gt;
&lt;li&gt;Cost&lt;/li&gt;
&lt;li&gt;Security&lt;/li&gt;
&lt;li&gt;Data handling&lt;/li&gt;
&lt;li&gt;Compliance&lt;/li&gt;
&lt;li&gt;Reliability&lt;/li&gt;
&lt;li&gt;Integration&lt;/li&gt;
&lt;li&gt;Vendor stability&lt;/li&gt;
&lt;li&gt;Strategic control&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A successful demonstration proves that a tool can perform a task. It does not prove that the tool is ready for organization-wide deployment.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. License cost is only the starting point
&lt;/h2&gt;

&lt;p&gt;The first cost is usually simple:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Number of users x monthly seat price
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That calculation is useful, but incomplete.&lt;/p&gt;

&lt;p&gt;Some tools also introduce:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Usage-based model charges&lt;/li&gt;
&lt;li&gt;Premium model access&lt;/li&gt;
&lt;li&gt;Additional storage&lt;/li&gt;
&lt;li&gt;Higher network usage&lt;/li&gt;
&lt;li&gt;Administrative licenses&lt;/li&gt;
&lt;li&gt;Enterprise support contracts&lt;/li&gt;
&lt;li&gt;Separate API costs for internal integrations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Usage-based pricing is especially important because cost can grow with adoption. A successful rollout may increase spending instead of stabilizing it.&lt;/p&gt;

&lt;p&gt;That is not necessarily a problem. Higher usage may be justified when it creates more value. The organization simply needs to measure both sides of the equation.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Integration creates engineering work
&lt;/h2&gt;

&lt;p&gt;An AI coding assistant rarely enters a large organization as an isolated application.&lt;/p&gt;

&lt;p&gt;Teams may need to integrate it with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Source control&lt;/li&gt;
&lt;li&gt;Single sign-on&lt;/li&gt;
&lt;li&gt;Identity providers&lt;/li&gt;
&lt;li&gt;Role-based access controls&lt;/li&gt;
&lt;li&gt;Internal documentation&lt;/li&gt;
&lt;li&gt;Issue trackers&lt;/li&gt;
&lt;li&gt;Continuous integration pipelines&lt;/li&gt;
&lt;li&gt;Logging and monitoring systems&lt;/li&gt;
&lt;li&gt;Approved model gateways&lt;/li&gt;
&lt;li&gt;Secret-management platforms&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each integration requires design, implementation, testing, maintenance, and ownership.&lt;/p&gt;

&lt;p&gt;A tool that saves developers time may still require a platform or security team to support it. That supporting work belongs in the cost calculation.&lt;/p&gt;

&lt;p&gt;Before deployment, ask:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Who will own the integration?&lt;/li&gt;
&lt;li&gt;How many systems will it touch?&lt;/li&gt;
&lt;li&gt;What happens when the vendor changes an API?&lt;/li&gt;
&lt;li&gt;Can access be removed immediately when an employee leaves?&lt;/li&gt;
&lt;li&gt;Are logs available for investigation and auditing?&lt;/li&gt;
&lt;li&gt;Can the organization limit access by team, repository, or data type?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The best developer experience is not enough if the surrounding operational model is unclear.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Security and privacy have ongoing costs
&lt;/h2&gt;

&lt;p&gt;AI coding assistants may interact with some of an organization's most sensitive assets:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Proprietary source code&lt;/li&gt;
&lt;li&gt;Configuration files&lt;/li&gt;
&lt;li&gt;Internal documentation&lt;/li&gt;
&lt;li&gt;Architecture details&lt;/li&gt;
&lt;li&gt;Customer information&lt;/li&gt;
&lt;li&gt;API definitions&lt;/li&gt;
&lt;li&gt;Security controls&lt;/li&gt;
&lt;li&gt;Business logic&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This creates questions that cannot be answered by a product demo alone.&lt;/p&gt;

&lt;p&gt;Security teams may need to determine:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What data leaves the device or network&lt;/li&gt;
&lt;li&gt;Where requests are processed&lt;/li&gt;
&lt;li&gt;Whether prompts or outputs are retained&lt;/li&gt;
&lt;li&gt;Whether submitted data is used for model improvement&lt;/li&gt;
&lt;li&gt;Which employees and repositories may use the tool&lt;/li&gt;
&lt;li&gt;How secrets are detected or blocked&lt;/li&gt;
&lt;li&gt;Which audit records are available&lt;/li&gt;
&lt;li&gt;What happens after a security incident&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The organization may also need policies, employee training, technical controls, and periodic reviews.&lt;/p&gt;

&lt;p&gt;These activities cost time and money, but skipping them can create a much larger risk.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. AI-generated code still requires review
&lt;/h2&gt;

&lt;p&gt;AI can produce code quickly. That does not make every output correct, secure, maintainable, or appropriate for the project.&lt;/p&gt;

&lt;p&gt;Generated code may include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Incorrect assumptions&lt;/li&gt;
&lt;li&gt;Missing edge cases&lt;/li&gt;
&lt;li&gt;Outdated APIs&lt;/li&gt;
&lt;li&gt;Weak error handling&lt;/li&gt;
&lt;li&gt;Unnecessary dependencies&lt;/li&gt;
&lt;li&gt;Security vulnerabilities&lt;/li&gt;
&lt;li&gt;Performance problems&lt;/li&gt;
&lt;li&gt;Patterns that conflict with the existing codebase&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This creates a hidden cost: verification.&lt;/p&gt;

&lt;p&gt;If AI produces more code, teams may need more review capacity. A developer can save 30 minutes generating an implementation and then spend 45 minutes testing, correcting, and adapting it.&lt;/p&gt;

&lt;p&gt;That does not mean the tool failed. It means productivity must be measured across the complete workflow rather than only at the generation step.&lt;/p&gt;

&lt;p&gt;Track questions such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Did the tool reduce time from task start to production?&lt;/li&gt;
&lt;li&gt;Did pull requests become larger or harder to review?&lt;/li&gt;
&lt;li&gt;Did defect rates change?&lt;/li&gt;
&lt;li&gt;Did developers spend less time searching documentation?&lt;/li&gt;
&lt;li&gt;Did code review time increase?&lt;/li&gt;
&lt;li&gt;How often was generated code substantially rewritten?&lt;/li&gt;
&lt;li&gt;Did incident volume change after adoption?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A fast first draft is valuable only when it helps the team reach a reliable final result faster.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Training and governance are part of adoption
&lt;/h2&gt;

&lt;p&gt;Giving employees access to a tool is not the same as deploying it successfully.&lt;/p&gt;

&lt;p&gt;Developers need guidance on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which tools are approved&lt;/li&gt;
&lt;li&gt;Which repositories may be used&lt;/li&gt;
&lt;li&gt;What data must never be shared&lt;/li&gt;
&lt;li&gt;When human review is required&lt;/li&gt;
&lt;li&gt;How generated code should be tested&lt;/li&gt;
&lt;li&gt;How AI-assisted work should be documented&lt;/li&gt;
&lt;li&gt;Which actions require additional approval&lt;/li&gt;
&lt;li&gt;How security concerns should be reported&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without clear rules, different teams create their own standards. That produces inconsistent risk and makes incidents harder to investigate.&lt;/p&gt;

&lt;p&gt;A practical governance policy does not need to block experimentation. It should make safe experimentation easier by defining boundaries in advance.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Vendor strategy affects long-term cost
&lt;/h2&gt;

&lt;p&gt;An AI tool may become deeply connected to development workflows.&lt;/p&gt;

&lt;p&gt;Over time, teams may accumulate:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Custom prompts&lt;/li&gt;
&lt;li&gt;Agent instructions&lt;/li&gt;
&lt;li&gt;Tool integrations&lt;/li&gt;
&lt;li&gt;Internal documentation formats&lt;/li&gt;
&lt;li&gt;Model-specific workflows&lt;/li&gt;
&lt;li&gt;Usage dashboards&lt;/li&gt;
&lt;li&gt;Evaluation datasets&lt;/li&gt;
&lt;li&gt;Approval processes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Moving to another vendor may require more than changing a subscription.&lt;/p&gt;

&lt;p&gt;Before standardizing on a tool, ask:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Can prompts and configurations be exported?&lt;/li&gt;
&lt;li&gt;Are integrations based on open standards?&lt;/li&gt;
&lt;li&gt;Can another model use the same evaluation process?&lt;/li&gt;
&lt;li&gt;What data must be migrated?&lt;/li&gt;
&lt;li&gt;How difficult would it be to disable the tool?&lt;/li&gt;
&lt;li&gt;Is there an acceptable fallback if the service becomes unavailable?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Vendor lock-in is not always avoidable, but it should be an intentional decision.&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%2F5p1ty7v36hzrfw0tcgrx.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%2F5p1ty7v36hzrfw0tcgrx.png" alt=" " width="800" height="1067"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical total-cost model
&lt;/h2&gt;

&lt;p&gt;A useful internal estimate can begin with this structure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Monthly AI cost =
  seat licenses
  + usage charges
  + supporting infrastructure
  + integration maintenance
  + security and governance work
  + training and support
  + code review and rework
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This model does not assign a price to every possible risk. It creates a more complete baseline than subscription cost alone.&lt;/p&gt;

&lt;p&gt;For a pilot, track the following table:&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;What to measure&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Direct cost&lt;/td&gt;
&lt;td&gt;Licenses, API usage, model usage, support plans&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Adoption&lt;/td&gt;
&lt;td&gt;Active users, frequency, retained usage after onboarding&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Delivery&lt;/td&gt;
&lt;td&gt;Time from task start to merged and deployed work&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Quality&lt;/td&gt;
&lt;td&gt;Defects, rollbacks, failed tests, security findings&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Review&lt;/td&gt;
&lt;td&gt;Pull request review time and amount of rewritten output&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Operations&lt;/td&gt;
&lt;td&gt;Incidents, support requests, integration maintenance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Developer experience&lt;/td&gt;
&lt;td&gt;Useful tasks, frustrating tasks, abandoned workflows&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Business value&lt;/td&gt;
&lt;td&gt;Features delivered, cycle time reduced, capacity released&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Avoid treating generated lines of code as the primary success metric. More code is not automatically more value.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to run a responsible pilot
&lt;/h2&gt;

&lt;p&gt;A small pilot can provide better evidence than a large immediate rollout.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Choose a specific use case
&lt;/h3&gt;

&lt;p&gt;Examples include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Unit-test generation&lt;/li&gt;
&lt;li&gt;Legacy code explanation&lt;/li&gt;
&lt;li&gt;Documentation assistance&lt;/li&gt;
&lt;li&gt;Small refactoring tasks&lt;/li&gt;
&lt;li&gt;Pull request summaries&lt;/li&gt;
&lt;li&gt;Boilerplate generation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Do not begin with "use AI for everything."&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Establish a baseline
&lt;/h3&gt;

&lt;p&gt;Measure the current workflow before introducing the tool.&lt;/p&gt;

&lt;p&gt;Record:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Completion time&lt;/li&gt;
&lt;li&gt;Review time&lt;/li&gt;
&lt;li&gt;Defect rate&lt;/li&gt;
&lt;li&gt;Developer effort&lt;/li&gt;
&lt;li&gt;Existing software cost&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without a baseline, teams may confuse novelty with improvement.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Define security boundaries
&lt;/h3&gt;

&lt;p&gt;Specify:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Approved repositories&lt;/li&gt;
&lt;li&gt;Prohibited data&lt;/li&gt;
&lt;li&gt;Allowed accounts&lt;/li&gt;
&lt;li&gt;Required review&lt;/li&gt;
&lt;li&gt;Logging expectations&lt;/li&gt;
&lt;li&gt;Escalation procedures&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 4: Measure the complete workflow
&lt;/h3&gt;

&lt;p&gt;Include generation, testing, review, correction, deployment, and maintenance.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 5: Compare value with total cost
&lt;/h3&gt;

&lt;p&gt;A tool should not be judged only by whether developers enjoy using it. It should also improve a meaningful engineering or business outcome.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 6: Decide whether to expand, limit, change, or stop
&lt;/h3&gt;

&lt;p&gt;A pilot can produce four valid results:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Expand usage&lt;/li&gt;
&lt;li&gt;Limit usage to specific tasks&lt;/li&gt;
&lt;li&gt;Test a different tool&lt;/li&gt;
&lt;li&gt;Stop the rollout&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Stopping is not a failed experiment when the organization learned before committing at scale.&lt;/p&gt;

&lt;h2&gt;
  
  
  Does this mean AI coding tools are not worth it?
&lt;/h2&gt;

&lt;p&gt;No.&lt;/p&gt;

&lt;p&gt;AI coding assistants can reduce repetitive work, explain unfamiliar code, accelerate first drafts, improve documentation, and help developers explore solutions.&lt;/p&gt;

&lt;p&gt;A 2026 study of early adoption at Microsoft found that users of command-line AI coding agents merged more pull requests on average, while the researchers also cautioned that merged pull requests are not the same as delivered business value.&lt;/p&gt;

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

&lt;p&gt;An AI tool can improve output while still requiring careful evaluation of quality, cost, security, and long-term maintainability.&lt;/p&gt;

&lt;p&gt;The goal is not to minimize AI spending at all costs. The goal is to spend intentionally and verify that the investment creates useful outcomes.&lt;/p&gt;

&lt;h2&gt;
  
  
  What developers should expect
&lt;/h2&gt;

&lt;p&gt;Developers will probably see more workplace rules around AI-assisted development, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Approved tool lists&lt;/li&gt;
&lt;li&gt;Repository restrictions&lt;/li&gt;
&lt;li&gt;Usage budgets&lt;/li&gt;
&lt;li&gt;Human review requirements&lt;/li&gt;
&lt;li&gt;Secure prompting guidelines&lt;/li&gt;
&lt;li&gt;Audit logging&lt;/li&gt;
&lt;li&gt;Model-specific access controls&lt;/li&gt;
&lt;li&gt;Rules for handling customer and proprietary data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These controls are not automatically signs that a company opposes AI. They may indicate that AI is becoming important enough to manage like any other critical engineering platform.&lt;/p&gt;

&lt;h2&gt;
  
  
  Enterprise AI is moving from experimentation to operations
&lt;/h2&gt;

&lt;p&gt;The first phase of AI adoption focused on capability:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Can this tool help us write software?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The next phase focuses on operations:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Can we use it safely, consistently, and economically across the organization?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That question requires collaboration between engineering, security, legal, finance, procurement, and leadership.&lt;/p&gt;

&lt;p&gt;The best AI coding tool is not always the one with the most impressive demonstration or the lowest subscription price. It is the one that creates verified value while fitting the organization's technical, financial, and security requirements.&lt;/p&gt;

&lt;p&gt;At &lt;a href="https://www.techifive.com/" rel="noopener noreferrer"&gt;Techifive&lt;/a&gt;, we believe AI tools should be evaluated as complete engineering systems, not isolated code generators.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which hidden cost has mattered most in your organization's AI adoption: review time, security, integration, governance, or usage?&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.reuters.com/world/china/alibaba-ban-claude-code-workplace-over-alleged-backdoor-risks-source-says-2026-07-03/" rel="noopener noreferrer"&gt;Reuters: Alibaba to ban employees from using Anthropic's coding tool, source says&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://arxiv.org/abs/2607.01418" rel="noopener noreferrer"&gt;Adoption and Impact of Command-Line AI Coding Agents: A Study of Microsoft's Early 2026 Rollout of Claude Code and GitHub Copilot CLI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>productivity</category>
      <category>security</category>
    </item>
    <item>
      <title>AI Can Write Code. Here Is What Software Engineers Still Own</title>
      <dc:creator>Techifive</dc:creator>
      <pubDate>Wed, 05 Aug 2026 21:22:24 +0000</pubDate>
      <link>https://dev.to/techifivehq/ai-can-write-code-here-is-what-software-engineers-still-own-4jga</link>
      <guid>https://dev.to/techifivehq/ai-can-write-code-here-is-what-software-engineers-still-own-4jga</guid>
      <description>&lt;p&gt;AI coding tools can generate functions, explain unfamiliar code, write tests, refactor files, and suggest fixes in seconds.&lt;/p&gt;

&lt;p&gt;That capability has created a difficult question for developers:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If AI can write code, what is left for software engineers to do?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The answer is not "nothing." Writing syntax is only one part of engineering. The harder work begins before the first line is generated and continues long after the code compiles.&lt;/p&gt;

&lt;p&gt;This post explains what engineers still own, how the role is changing, and which skills developers should strengthen as AI becomes part of everyday software development.&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;AI is increasingly useful for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Boilerplate code&lt;/li&gt;
&lt;li&gt;Test generation&lt;/li&gt;
&lt;li&gt;Documentation&lt;/li&gt;
&lt;li&gt;Refactoring suggestions&lt;/li&gt;
&lt;li&gt;Legacy code explanations&lt;/li&gt;
&lt;li&gt;Syntax lookup&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Software engineers still remain responsible for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Defining the correct problem&lt;/li&gt;
&lt;li&gt;Designing the system&lt;/li&gt;
&lt;li&gt;Evaluating technical trade-offs&lt;/li&gt;
&lt;li&gt;Verifying AI-generated output&lt;/li&gt;
&lt;li&gt;Protecting security and reliability&lt;/li&gt;
&lt;li&gt;Maintaining software over time&lt;/li&gt;
&lt;li&gt;Responding when production systems fail&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI can produce an implementation. It cannot take ownership of the outcome.&lt;/p&gt;

&lt;h2&gt;
  
  
  Code generation is not the same as software engineering
&lt;/h2&gt;

&lt;p&gt;A prompt can produce a working function. That does not mean the function belongs in a production system.&lt;/p&gt;

&lt;p&gt;An engineer still has to answer questions such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does this solve the actual user problem?&lt;/li&gt;
&lt;li&gt;Does it match the existing architecture?&lt;/li&gt;
&lt;li&gt;What happens when the input is incomplete or malicious?&lt;/li&gt;
&lt;li&gt;Can the team maintain this code six months from now?&lt;/li&gt;
&lt;li&gt;Will it behave correctly under real traffic?&lt;/li&gt;
&lt;li&gt;Does it introduce security, licensing, or privacy concerns?&lt;/li&gt;
&lt;li&gt;Is there a simpler solution?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These questions require business context, technical judgment, and responsibility. AI can assist with the analysis, but the engineering team still makes the decision.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Engineers define the real problem
&lt;/h2&gt;

&lt;p&gt;AI usually responds to the task it is given. The quality of the result depends heavily on whether the task itself is correct.&lt;/p&gt;

&lt;p&gt;Consider a request such as:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Add caching to make the API faster.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The immediate implementation might be straightforward, but an engineer should first investigate:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which endpoint is slow?&lt;/li&gt;
&lt;li&gt;Is the database query the real bottleneck?&lt;/li&gt;
&lt;li&gt;Is the delay caused by an external service?&lt;/li&gt;
&lt;li&gt;Can the data safely become stale?&lt;/li&gt;
&lt;li&gt;How will cached values be invalidated?&lt;/li&gt;
&lt;li&gt;Does the system actually need caching?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Generating code before understanding the problem can make the system more complicated without fixing the root cause.&lt;/p&gt;

&lt;p&gt;The engineer's first responsibility is not to write code. It is to make sure the team is solving the correct problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Engineers design systems, not isolated functions
&lt;/h2&gt;

&lt;p&gt;AI tools are often effective at producing local solutions. Production software requires a wider view.&lt;/p&gt;

&lt;p&gt;A feature may affect:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Authentication&lt;/li&gt;
&lt;li&gt;Authorization&lt;/li&gt;
&lt;li&gt;Database structure&lt;/li&gt;
&lt;li&gt;API contracts&lt;/li&gt;
&lt;li&gt;Background jobs&lt;/li&gt;
&lt;li&gt;Logging&lt;/li&gt;
&lt;li&gt;Monitoring&lt;/li&gt;
&lt;li&gt;Deployment&lt;/li&gt;
&lt;li&gt;Cost&lt;/li&gt;
&lt;li&gt;User experience&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;An implementation can look correct inside one file while creating problems elsewhere in the system.&lt;/p&gt;

&lt;p&gt;Architecture work requires engineers to understand how components interact, where failures can occur, and which trade-offs are acceptable for the project.&lt;/p&gt;

&lt;p&gt;For example, adding a new AI feature may require decisions about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Where prompts are stored&lt;/li&gt;
&lt;li&gt;How model responses are validated&lt;/li&gt;
&lt;li&gt;What data can be sent to a third-party provider&lt;/li&gt;
&lt;li&gt;How failed requests are retried&lt;/li&gt;
&lt;li&gt;How usage costs are monitored&lt;/li&gt;
&lt;li&gt;When a human must review the result&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The code is only one part of that design.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Engineers validate AI-generated output
&lt;/h2&gt;

&lt;p&gt;AI-generated code should be treated as a proposed solution, not an automatically trusted answer.&lt;/p&gt;

&lt;p&gt;The output may contain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Incorrect assumptions&lt;/li&gt;
&lt;li&gt;Missing edge cases&lt;/li&gt;
&lt;li&gt;Outdated patterns&lt;/li&gt;
&lt;li&gt;Inefficient logic&lt;/li&gt;
&lt;li&gt;Weak error handling&lt;/li&gt;
&lt;li&gt;Security vulnerabilities&lt;/li&gt;
&lt;li&gt;Dependencies that do not fit the project&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A useful AI-assisted workflow looks like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Define the expected behavior before requesting code.&lt;/li&gt;
&lt;li&gt;Ask the AI to explain its assumptions.&lt;/li&gt;
&lt;li&gt;Review the output line by line.&lt;/li&gt;
&lt;li&gt;Test normal, invalid, and boundary inputs.&lt;/li&gt;
&lt;li&gt;Check security and performance implications.&lt;/li&gt;
&lt;li&gt;Compare the solution with the project's existing patterns.&lt;/li&gt;
&lt;li&gt;Document why the final approach was accepted.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The faster AI produces code, the more important disciplined review becomes. Speed without verification only creates defects faster.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Engineers own security and reliability
&lt;/h2&gt;

&lt;p&gt;A generated solution may compile and still be unsafe.&lt;/p&gt;

&lt;p&gt;Engineers must check areas such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Input validation&lt;/li&gt;
&lt;li&gt;Authentication and authorization&lt;/li&gt;
&lt;li&gt;Secret management&lt;/li&gt;
&lt;li&gt;SQL injection&lt;/li&gt;
&lt;li&gt;Cross-site scripting&lt;/li&gt;
&lt;li&gt;File upload restrictions&lt;/li&gt;
&lt;li&gt;Dependency risks&lt;/li&gt;
&lt;li&gt;Sensitive data exposure&lt;/li&gt;
&lt;li&gt;Rate limiting&lt;/li&gt;
&lt;li&gt;Failure recovery&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI does not know every security requirement, business rule, or compliance constraint unless that context is provided. Even when the context is provided, the result still needs human review.&lt;/p&gt;

&lt;p&gt;Reliability creates a similar problem. A feature that works during a demonstration may fail when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An external API times out&lt;/li&gt;
&lt;li&gt;A queue processes the same job twice&lt;/li&gt;
&lt;li&gt;A database connection drops&lt;/li&gt;
&lt;li&gt;Traffic suddenly increases&lt;/li&gt;
&lt;li&gt;A model returns an unexpected format&lt;/li&gt;
&lt;li&gt;A deployment introduces an incompatible change&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Production engineering is about preparing for those conditions, not only making the successful path work.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Engineers make trade-offs
&lt;/h2&gt;

&lt;p&gt;Most engineering decisions do not have one perfect answer.&lt;/p&gt;

&lt;p&gt;A team may need to choose between:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Faster delivery and cleaner architecture&lt;/li&gt;
&lt;li&gt;Lower cost and higher reliability&lt;/li&gt;
&lt;li&gt;Flexibility and simplicity&lt;/li&gt;
&lt;li&gt;A managed service and greater control&lt;/li&gt;
&lt;li&gt;A monolith and microservices&lt;/li&gt;
&lt;li&gt;A new dependency and custom code&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI can list advantages and disadvantages, but it does not own the consequences.&lt;/p&gt;

&lt;p&gt;The correct decision depends on the team's experience, deadlines, users, budget, existing systems, and tolerance for operational complexity.&lt;/p&gt;

&lt;p&gt;Strong engineers do not only ask, "Can we build this?" They also ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Is this the right solution for this team and this product?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  6. Engineers maintain software after it ships
&lt;/h2&gt;

&lt;p&gt;Software development does not end when a pull request is merged.&lt;/p&gt;

&lt;p&gt;Engineers continue to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Monitor production behavior&lt;/li&gt;
&lt;li&gt;Investigate incidents&lt;/li&gt;
&lt;li&gt;Fix regressions&lt;/li&gt;
&lt;li&gt;Update dependencies&lt;/li&gt;
&lt;li&gt;Improve performance&lt;/li&gt;
&lt;li&gt;Respond to user feedback&lt;/li&gt;
&lt;li&gt;Migrate data&lt;/li&gt;
&lt;li&gt;Remove outdated code&lt;/li&gt;
&lt;li&gt;Explain decisions to future team members&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI can help with many of these tasks, but long-term maintainability depends on consistent architecture, documentation, testing, and team knowledge.&lt;/p&gt;

&lt;p&gt;A codebase filled with quickly generated solutions can become harder to maintain when those solutions do not follow shared patterns.&lt;/p&gt;

&lt;p&gt;The goal is not to generate the largest amount of code. The goal is to build software the team can safely operate and change.&lt;/p&gt;

&lt;h2&gt;
  
  
  What changes for junior developers?
&lt;/h2&gt;

&lt;p&gt;Junior developers face a real challenge. Many routine tasks that once provided early experience can now be completed quickly with AI.&lt;/p&gt;

&lt;p&gt;That does not make programming fundamentals less important. It makes them more important because developers must understand enough to recognize when generated code is wrong.&lt;/p&gt;

&lt;p&gt;Entry-level engineers should practice:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Breaking large problems into smaller tasks&lt;/li&gt;
&lt;li&gt;Reading unfamiliar code&lt;/li&gt;
&lt;li&gt;Debugging without immediately requesting a replacement solution&lt;/li&gt;
&lt;li&gt;Writing and evaluating tests&lt;/li&gt;
&lt;li&gt;Explaining technical decisions&lt;/li&gt;
&lt;li&gt;Understanding data flow through a system&lt;/li&gt;
&lt;li&gt;Reviewing code for security and maintainability&lt;/li&gt;
&lt;li&gt;Using AI while preserving independent judgment&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A junior developer who can generate code is common. A junior developer who can verify, explain, test, and improve that code is much more valuable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Skills worth strengthening in the AI era
&lt;/h2&gt;

&lt;p&gt;Developers do not need to compete with AI at typing speed. They need to become stronger at the work that surrounds code generation.&lt;/p&gt;

&lt;h3&gt;
  
  
  System design
&lt;/h3&gt;

&lt;p&gt;Learn how services, databases, queues, APIs, caches, and clients work together.&lt;/p&gt;

&lt;h3&gt;
  
  
  Security
&lt;/h3&gt;

&lt;p&gt;Understand common vulnerabilities and make security part of design and review, not an afterthought.&lt;/p&gt;

&lt;h3&gt;
  
  
  Testing and debugging
&lt;/h3&gt;

&lt;p&gt;Learn how to prove that software works and how to isolate the cause when it does not.&lt;/p&gt;

&lt;h3&gt;
  
  
  Product thinking
&lt;/h3&gt;

&lt;p&gt;Understand the user, the business goal, and the cost of solving the wrong problem.&lt;/p&gt;

&lt;h3&gt;
  
  
  Communication
&lt;/h3&gt;

&lt;p&gt;Engineers must explain risks, requirements, trade-offs, and decisions to both technical and nontechnical teammates.&lt;/p&gt;

&lt;h3&gt;
  
  
  AI-assisted development
&lt;/h3&gt;

&lt;p&gt;Learn how to provide useful context, review generated output, protect sensitive information, and decide when AI should not be used.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical checklist for reviewing AI-generated code
&lt;/h2&gt;

&lt;p&gt;Before accepting AI-generated code, ask:&lt;/p&gt;

&lt;h3&gt;
  
  
  Correctness
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Does it satisfy the actual requirement?&lt;/li&gt;
&lt;li&gt;Are the assumptions clearly stated?&lt;/li&gt;
&lt;li&gt;Are edge cases handled?&lt;/li&gt;
&lt;li&gt;Do the tests verify behavior rather than only execution?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Security
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Is all external input validated?&lt;/li&gt;
&lt;li&gt;Are permissions checked on the server?&lt;/li&gt;
&lt;li&gt;Could secrets or sensitive data be exposed?&lt;/li&gt;
&lt;li&gt;Are new dependencies necessary and trustworthy?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Maintainability
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Does the code follow existing project patterns?&lt;/li&gt;
&lt;li&gt;Are names and abstractions clear?&lt;/li&gt;
&lt;li&gt;Is the solution more complex than the problem requires?&lt;/li&gt;
&lt;li&gt;Could another engineer understand and modify it later?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Reliability
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;What happens when a dependency fails?&lt;/li&gt;
&lt;li&gt;Are errors logged with enough context?&lt;/li&gt;
&lt;li&gt;Can retries create duplicate work?&lt;/li&gt;
&lt;li&gt;Is there a safe fallback?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Performance and cost
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Does the implementation create unnecessary database queries or API calls?&lt;/li&gt;
&lt;li&gt;How does it behave as usage grows?&lt;/li&gt;
&lt;li&gt;Does it introduce recurring infrastructure or model costs?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Ownership
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Can you explain every important part of the solution?&lt;/li&gt;
&lt;li&gt;Are you willing to support it in production?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If the answer to the final question is no, the code is not ready to merge.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI is changing engineering, not removing responsibility
&lt;/h2&gt;

&lt;p&gt;AI can make developers faster. It can reduce repetitive work and help teams explore solutions more quickly.&lt;/p&gt;

&lt;p&gt;It can also generate convincing mistakes, increase the amount of code that needs review, and encourage teams to move before they fully understand the problem.&lt;/p&gt;

&lt;p&gt;This is not an argument that every engineering role or task will remain unchanged. Routine work will continue to evolve, and expectations for developers will rise. The strongest engineers will be those who combine AI speed with technical fundamentals, product understanding, and careful judgment.&lt;/p&gt;

&lt;p&gt;At Techifive, we view AI as part of the engineering workflow, not a substitute for engineering ownership.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which engineering skill has become more important for you since you started using AI coding tools?&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>career</category>
      <category>discuss</category>
    </item>
  </channel>
</rss>
