<?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: Hitarth Desai</title>
    <description>The latest articles on DEV Community by Hitarth Desai (@hitarthbuilds).</description>
    <link>https://dev.to/hitarthbuilds</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%2F3995010%2Fd46b41ae-9dd6-451d-8dbc-b6dad3614afd.png</url>
      <title>DEV Community: Hitarth Desai</title>
      <link>https://dev.to/hitarthbuilds</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/hitarthbuilds"/>
    <language>en</language>
    <item>
      <title>Dead-Letter Queues for LLM Extraction Failures: Capture, Triage, and Replay Without Losing Trust</title>
      <dc:creator>Hitarth Desai</dc:creator>
      <pubDate>Fri, 24 Jul 2026 06:20:16 +0000</pubDate>
      <link>https://dev.to/hitarthbuilds/dead-letter-queues-for-llm-extraction-failures-capture-triage-and-replay-without-losing-trust-4598</link>
      <guid>https://dev.to/hitarthbuilds/dead-letter-queues-for-llm-extraction-failures-capture-triage-and-replay-without-losing-trust-4598</guid>
      <description>&lt;p&gt;A validation failure is not an exception to hide. It is a record your system does not yet know how to trust.&lt;/p&gt;

&lt;p&gt;That distinction matters in LLM extraction pipelines. A malformed invoice, an unexpected OCR layout, a model response that violates the schema, and a semantically impossible value may all reach the same line of validation code. If the only outcomes are “retry” or “drop,” the pipeline will either waste money repeating the same failure or silently lose work.&lt;/p&gt;

&lt;p&gt;The production answer is a dead-letter path: a durable place for failed records to wait with enough evidence to explain, triage, and safely replay them.&lt;/p&gt;

&lt;p&gt;The queue itself is the easy part. The hard part is designing the failure contract around it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Validation is where routing begins
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://dev.to/blog/constrained-decoding-vs-post-hoc-validation-llm-extraction/"&gt;Constrained decoding and post-hoc validation solve different problems&lt;/a&gt;. Even with both, some records should fail. Real documents are messy, schemas change, OCR corrupts values, and models sometimes return plausible nonsense.&lt;/p&gt;

&lt;p&gt;A robust validation boundary should produce more than &lt;code&gt;true&lt;/code&gt; or &lt;code&gt;false&lt;/code&gt;. It should emit a reason the rest of the pipeline can act on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;which schema and model versions were used&lt;/li&gt;
&lt;li&gt;which fields failed and why&lt;/li&gt;
&lt;li&gt;whether the payload was malformed, incomplete, or semantically invalid&lt;/li&gt;
&lt;li&gt;the confidence signal attached to the extraction&lt;/li&gt;
&lt;li&gt;whether a retry is likely to change the result&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That result becomes a routing decision.&lt;/p&gt;

&lt;p&gt;High-confidence, valid records can flow forward. Recoverable transport failures can use a bounded retry. Ambiguous or invalid records belong in review or a dead-letter queue. &lt;a href="https://dev.to/blog/confidence-scores-llm-extraction/"&gt;Confidence-based routing&lt;/a&gt; is useful precisely because “trust everything” and “review everything” are both bad operating models.&lt;/p&gt;

&lt;h2&gt;
  
  
  A dead-letter record needs evidence, not just payload
&lt;/h2&gt;

&lt;p&gt;Putting the original input on another queue is not enough. Without context, the team investigating the failure has to reconstruct the run from scattered logs—if those logs still exist.&lt;/p&gt;

&lt;p&gt;I would store a dead-letter envelope containing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a stable record ID and idempotency key&lt;/li&gt;
&lt;li&gt;a reference to the immutable source document, with access controls appropriate to its sensitivity&lt;/li&gt;
&lt;li&gt;the extracted payload, including the raw model response only when retention policy permits it&lt;/li&gt;
&lt;li&gt;schema, prompt, model, OCR, and pipeline versions&lt;/li&gt;
&lt;li&gt;validation errors in a machine-readable form&lt;/li&gt;
&lt;li&gt;confidence score and routing threshold&lt;/li&gt;
&lt;li&gt;attempt count and timestamps&lt;/li&gt;
&lt;li&gt;correlation or trace ID&lt;/li&gt;
&lt;li&gt;the explicit reason the record entered the dead-letter path&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is less about collecting every possible field and more about preserving the decision. Six days later, an engineer or reviewer should be able to answer: what did the system see, what did it produce, which contract rejected it, and can it be replayed safely?&lt;/p&gt;

&lt;p&gt;Do not turn the dead-letter queue into a shadow database. Store references when the source of truth already exists, define retention and deletion rules, and avoid copying sensitive document contents into systems with weaker controls.&lt;/p&gt;

&lt;h2&gt;
  
  
  Classify failures before you retry them
&lt;/h2&gt;

&lt;p&gt;Not every failure deserves another model call.&lt;/p&gt;

&lt;p&gt;I separate failures into a few broad classes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Transient infrastructure failure.&lt;/strong&gt; A timeout, rate limit, or unavailable dependency may succeed later. Retry it with exponential backoff, jitter, and a strict budget.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deterministic contract failure.&lt;/strong&gt; The same payload violates the same schema every time. Repeating the call without changing an input, prompt, model, or schema is usually just paying to reproduce the failure.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ambiguous source data.&lt;/strong&gt; The document itself does not contain enough evidence. Route it to human review rather than asking the model to invent certainty.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Version mismatch or drift.&lt;/strong&gt; A new document format or schema version broke an assumption. Quarantine the affected cohort and fix the system, not each record individually.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Policy failure.&lt;/strong&gt; The record must not be processed automatically because of sensitivity, jurisdiction, or business rules. This needs a controlled workflow, not a clever retry.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The retry policy should be based on that classification. &lt;a href="https://dev.to/blog/backpressure-retry-budgets-llm-services/"&gt;Retry budgets and backpressure&lt;/a&gt; matter because a provider incident can otherwise turn one failed request into a storm of expensive duplicates.&lt;/p&gt;

&lt;h2&gt;
  
  
  Replay must be idempotent
&lt;/h2&gt;

&lt;p&gt;A dead-letter queue is only useful if records can leave it safely.&lt;/p&gt;

&lt;p&gt;The dangerous replay implementation simply sends the record back to the start. If earlier attempts already wrote partial state, emitted events, or triggered downstream actions, replay can create duplicate invoices, duplicate notifications, or inconsistent audit trails.&lt;/p&gt;

&lt;p&gt;Safe replay needs an idempotency boundary. Give each logical extraction a stable key. Make downstream writes upsert or compare against a known processing version. Record which stages completed. Re-run only the stages affected by the fix when possible.&lt;/p&gt;

&lt;p&gt;I also want replay to name the change that justifies it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;new schema version&lt;/li&gt;
&lt;li&gt;corrected OCR output&lt;/li&gt;
&lt;li&gt;revised prompt or constrained-output definition&lt;/li&gt;
&lt;li&gt;new model version&lt;/li&gt;
&lt;li&gt;reviewer-supplied correction&lt;/li&gt;
&lt;li&gt;repaired upstream document&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;“Try again” is not a remediation strategy. “Replay against schema v4 after fixing the currency parser” is.&lt;/p&gt;

&lt;h2&gt;
  
  
  Human review should produce reusable signal
&lt;/h2&gt;

&lt;p&gt;Human-in-the-loop systems often fail in a quieter way: they create a review screen, ask an operator to correct a value, and throw away the reason.&lt;/p&gt;

&lt;p&gt;A useful review workflow captures structured outcomes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;corrected field values&lt;/li&gt;
&lt;li&gt;reason code for the correction&lt;/li&gt;
&lt;li&gt;whether the source was ambiguous or the model was wrong&lt;/li&gt;
&lt;li&gt;whether the schema or extraction logic needs to change&lt;/li&gt;
&lt;li&gt;reviewer identity and timestamp for the audit trail&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those outcomes improve more than the one record. They reveal recurring document formats, brittle fields, bad thresholds, and failure cohorts worth fixing upstream. They can also become curated evaluation examples, provided privacy and data-governance rules allow it.&lt;/p&gt;

&lt;p&gt;The goal is not to keep humans in the loop forever. It is to spend human attention where risk is high and turn repeated review work into engineering feedback.&lt;/p&gt;

&lt;h2&gt;
  
  
  The dead-letter queue is an observability surface
&lt;/h2&gt;

&lt;p&gt;A DLQ with no metrics is an archive of surprises.&lt;/p&gt;

&lt;p&gt;At minimum, I would track:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;dead-letter rate as a percentage of processed records&lt;/li&gt;
&lt;li&gt;failure count by reason, document type, customer or source cohort, schema version, and model version&lt;/li&gt;
&lt;li&gt;age of the oldest unresolved record&lt;/li&gt;
&lt;li&gt;time from failure to review or remediation&lt;/li&gt;
&lt;li&gt;replay success rate&lt;/li&gt;
&lt;li&gt;records that exceed retention or review SLOs&lt;/li&gt;
&lt;li&gt;estimated token or provider cost consumed by failed attempts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Watch the rate, not only the count. Traffic growth can make the raw count rise while reliability improves. A sudden failure-rate spike after a schema, prompt, OCR, or model change is a much cleaner drift signal.&lt;/p&gt;

&lt;p&gt;This connects the dead-letter path to the broader observability story: traces explain an individual failure; aggregate metrics show whether the system is becoming less trustworthy. &lt;a href="https://dev.to/blog/schema-drift-llm-pipelines/"&gt;Schema drift&lt;/a&gt; often appears first as a change in validation failures by field or document cohort.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical control loop
&lt;/h2&gt;

&lt;p&gt;The architecture I keep coming back to is:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Constrain generation where the stack supports it.&lt;/li&gt;
&lt;li&gt;Apply deterministic repair only where it is safe.&lt;/li&gt;
&lt;li&gt;Validate the typed result and attach a confidence signal.&lt;/li&gt;
&lt;li&gt;Route valid, high-confidence records forward.&lt;/li&gt;
&lt;li&gt;Retry transient failures within a budget.&lt;/li&gt;
&lt;li&gt;Send ambiguous or invalid records to review or a durable dead-letter path.&lt;/li&gt;
&lt;li&gt;Fix the underlying cause, then replay with an idempotency key and explicit processing version.&lt;/li&gt;
&lt;li&gt;Feed failure and review outcomes back into schemas, evals, prompts, and pipeline monitoring.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is the operational layer around tools such as &lt;a href="https://pypi.org/project/confident-extract/" rel="noopener noreferrer"&gt;&lt;code&gt;confident-extract&lt;/code&gt;&lt;/a&gt;. The library is published on PyPI and focuses on deterministic structured extraction, validation, and confidence. The queueing, review, retention, and replay design belong to the application around that boundary.&lt;/p&gt;

&lt;p&gt;That separation is important. A useful open-source component should make its boundary sharper, not claim to be the entire production system.&lt;/p&gt;

&lt;h2&gt;
  
  
  Failure handling is part of the product
&lt;/h2&gt;

&lt;p&gt;Teams often design the happy path first and treat failed records as an operations problem to solve later.&lt;/p&gt;

&lt;p&gt;In an LLM system, the failure path is part of the normal path. Probabilistic components, messy source data, and changing contracts guarantee that some records will need a different decision. The system earns trust by making that decision explicit, durable, observable, and reversible.&lt;/p&gt;

&lt;p&gt;Do not drop the record. Do not retry it forever. Preserve the evidence, route it by risk, and make replay a controlled engineering action.&lt;/p&gt;

&lt;p&gt;That is what turns “the model failed” from an incident into a workflow.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Written by &lt;a href="https://hitarthdesai.com/" rel="noopener noreferrer"&gt;Hitarth Desai&lt;/a&gt; (&lt;code&gt;hitarthbuilds&lt;/code&gt;), an AI Systems Engineer building reliable LLM extraction and MLOps pipelines. His open-source &lt;code&gt;confident-extract&lt;/code&gt; package is available on &lt;a href="https://pypi.org/project/confident-extract/" rel="noopener noreferrer"&gt;PyPI&lt;/a&gt;. &lt;code&gt;promptcrucible&lt;/code&gt; remains in active development.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;Originally published by &lt;a href="https://hitarthdesai.com/" rel="noopener noreferrer"&gt;Hitarth Desai&lt;/a&gt; (&lt;code&gt;hitarthbuilds&lt;/code&gt;) at &lt;a href="https://hitarthdesai.com/blog/dead-letter-queues-llm-extraction-pipelines/" rel="noopener noreferrer"&gt;https://hitarthdesai.com/blog/dead-letter-queues-llm-extraction-pipelines/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>llm</category>
      <category>ai</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Constrained Decoding vs Post-hoc Validation: Production LLM Extraction Needs Both</title>
      <dc:creator>Hitarth Desai</dc:creator>
      <pubDate>Sun, 19 Jul 2026 07:42:34 +0000</pubDate>
      <link>https://dev.to/hitarthbuilds/constrained-decoding-vs-post-hoc-validation-production-llm-extraction-needs-both-4cf</link>
      <guid>https://dev.to/hitarthbuilds/constrained-decoding-vs-post-hoc-validation-production-llm-extraction-needs-both-4cf</guid>
      <description>&lt;p&gt;Constrained decoding and post-hoc validation solve different problems.&lt;/p&gt;

&lt;p&gt;Constrained decoding is generation-time control:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;fewer malformed payloads&lt;/li&gt;
&lt;li&gt;less wrapper text&lt;/li&gt;
&lt;li&gt;better adherence to schema/tool shape&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Post-hoc validation is the trust boundary:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;coerce what is safe&lt;/li&gt;
&lt;li&gt;reject what is not&lt;/li&gt;
&lt;li&gt;attach confidence where routing matters&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A payload can be perfectly valid JSON and still be wrong for the workflow.&lt;/p&gt;

&lt;p&gt;That is why production extraction systems need both.&lt;/p&gt;

&lt;p&gt;This is also the systems instinct behind &lt;a href="https://pypi.org/project/confident-extract/" rel="noopener noreferrer"&gt;&lt;code&gt;confident-extract&lt;/code&gt;&lt;/a&gt;, which I publish as Hitarth Desai under the GitHub handle &lt;a href="https://github.com/hitarthbuilds" rel="noopener noreferrer"&gt;&lt;code&gt;hitarthbuilds&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;My rule of thumb:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Constrain early. Validate hard. Trust late.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>mlops</category>
      <category>python</category>
    </item>
    <item>
      <title>Beyond Prompt Engineering: The AI Systems Layer Production LLM Apps Need</title>
      <dc:creator>Hitarth Desai</dc:creator>
      <pubDate>Sun, 21 Jun 2026 07:30:06 +0000</pubDate>
      <link>https://dev.to/hitarthbuilds/beyond-prompt-engineering-the-ai-systems-layer-production-llm-apps-need-436p</link>
      <guid>https://dev.to/hitarthbuilds/beyond-prompt-engineering-the-ai-systems-layer-production-llm-apps-need-436p</guid>
      <description>&lt;p&gt;Prompt engineering starts the demo. Contracts, validation, observability, and failure handling are what make LLM products survive production.&lt;/p&gt;

&lt;p&gt;Most LLM products start with a prompt.&lt;/p&gt;

&lt;p&gt;That is a sensible place to start. The prompt is where the first prototype happens, where the first internal demo lands, and where the first stakeholder starts to believe the product might work.&lt;/p&gt;

&lt;p&gt;But the prompt is not where production reliability comes from.&lt;/p&gt;

&lt;p&gt;The moment an LLM feature touches real inputs, downstream systems, or customer-facing workflows, the real engineering problem changes. The question is no longer only "can the model do the task?" It becomes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Can the output be shaped into a contract another service can trust?&lt;/li&gt;
&lt;li&gt;Can failures be detected instead of silently accepted?&lt;/li&gt;
&lt;li&gt;Can the same run be inspected and explained later?&lt;/li&gt;
&lt;li&gt;Can cost stay bounded when usage spikes?&lt;/li&gt;
&lt;li&gt;Can the product say what it measured, what it skipped, and where the result came from?&lt;/li&gt;
&lt;li&gt;Can the workflow survive model drift, schema drift, and ugly real-world inputs?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is the layer I care about: the AI systems layer after prompt engineering.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prompt engineering is necessary, not sufficient
&lt;/h2&gt;

&lt;p&gt;Prompt engineering matters. Better instructions, better examples, and tighter task framing can improve output quality quickly.&lt;/p&gt;

&lt;p&gt;The mistake is treating the prompt as the reliability boundary.&lt;/p&gt;

&lt;p&gt;A prompt can ask a model to return JSON. It cannot guarantee the JSON is valid, typed, semantically correct, complete, or safe for downstream use. A prompt can ask for citations. It cannot guarantee the product actually inspected and tracked the underlying sources. A prompt can ask for consistency. It cannot replace schema versioning, retry budgets, validation telemetry, or replayable traces.&lt;/p&gt;

&lt;p&gt;In production, the model is one probabilistic component inside a system that has to behave predictably anyway.&lt;/p&gt;

&lt;p&gt;That is the distinction I care about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Prompt engineering improves model behavior.&lt;/li&gt;
&lt;li&gt;AI systems engineering makes the product reliable even when the model is imperfect.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The output contract is the real product boundary
&lt;/h2&gt;

&lt;p&gt;If a model is writing prose for a human, the human can interpret the ambiguity.&lt;/p&gt;

&lt;p&gt;If a model is returning data to software, the software needs a contract.&lt;/p&gt;

&lt;p&gt;In extraction systems, that contract might be an invoice schema, a claims schema, or a lead-enrichment object. In agent systems, it might be a tool-call contract with typed arguments and bounded action shapes. In AI visibility products, it might be a ranked report with source metadata, scoring, provider coverage, and explicit failure states.&lt;/p&gt;

&lt;p&gt;The exact schema changes by product. The principle does not:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Model output should not cross into the rest of the system until it has been constrained, validated, and made observable.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That is why I built &lt;code&gt;confident-extract&lt;/code&gt;, an open-source Python library for deterministic, schema-constrained extraction from LLMs. It packages a boundary I kept needing in real systems: schema in, constrained generation, strict validation, typed output out.&lt;/p&gt;

&lt;p&gt;The specific library is less important than the pattern. Every serious LLM product eventually needs a hard boundary between probabilistic generation and deterministic system behavior.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reliability is mostly unglamorous work
&lt;/h2&gt;

&lt;p&gt;The parts that make AI systems dependable rarely look exciting in a demo.&lt;/p&gt;

&lt;p&gt;They look like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;versioned schemas&lt;/li&gt;
&lt;li&gt;field-level validation&lt;/li&gt;
&lt;li&gt;retry budgets&lt;/li&gt;
&lt;li&gt;idempotent jobs&lt;/li&gt;
&lt;li&gt;dead-letter paths&lt;/li&gt;
&lt;li&gt;source coverage metadata&lt;/li&gt;
&lt;li&gt;model-version tracking&lt;/li&gt;
&lt;li&gt;cache keys built from the right inputs&lt;/li&gt;
&lt;li&gt;cost guards&lt;/li&gt;
&lt;li&gt;validation failure dashboards&lt;/li&gt;
&lt;li&gt;replayable inputs for debugging&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is the work that turns "the model worked once" into "the system can be trusted under load."&lt;/p&gt;

&lt;p&gt;It is also where real product defensibility often lives. Competitors can imitate a prompt much faster than they can replicate a production-grade control layer around the workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;code&gt;confident-extract&lt;/code&gt; as shipped proof
&lt;/h2&gt;

&lt;p&gt;I care about this topic enough to have built and shipped part of that reliability layer.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;confident-extract&lt;/code&gt; exists because I kept rebuilding the same boundary in extraction systems: define the contract, constrain the generation path, validate hard, and only then hand typed data to the rest of the pipeline. The library is intentionally small and opinionated because reliability work benefits from sharp interfaces, not vague abstractions.&lt;/p&gt;

&lt;p&gt;For me, open source matters here because it is visible proof of engineering taste. It shows the kind of boundary I believe should exist in production LLM systems.&lt;/p&gt;

&lt;p&gt;Its sibling project, &lt;code&gt;promptcrucible&lt;/code&gt;, is still unpublished and in active development. I am not treating it as public proof yet because it has not earned that status.&lt;/p&gt;

&lt;h2&gt;
  
  
  AnswerRank AI as product evidence
&lt;/h2&gt;

&lt;p&gt;AnswerRank AI shows the same systems thinking in a different product shape.&lt;/p&gt;

&lt;p&gt;The surface-level prompt for that product sounds easy: analyze how visible a product is inside AI-generated buying answers.&lt;/p&gt;

&lt;p&gt;The actual product is not just a prompt.&lt;/p&gt;

&lt;p&gt;It needs page extraction, answer generation, mention parsing, competitor comparison, scoring, source metadata, caching, and a usable explanation of what happened during the run. The result should not be a mysterious number. It should tell the user what was measured, which providers were used, and what can be improved next.&lt;/p&gt;

&lt;p&gt;That is the same engineering principle again: uncertainty should be surfaced, bounded, and made inspectable instead of hidden behind a confident interface.&lt;/p&gt;

&lt;h2&gt;
  
  
  The hiring signal I want this to send
&lt;/h2&gt;

&lt;p&gt;The industry does not just need people who can make a model say something interesting on a hand-picked input.&lt;/p&gt;

&lt;p&gt;It needs engineers who can build the layer around the model:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the contract&lt;/li&gt;
&lt;li&gt;the validation boundary&lt;/li&gt;
&lt;li&gt;the workflow&lt;/li&gt;
&lt;li&gt;the observability&lt;/li&gt;
&lt;li&gt;the cost controls&lt;/li&gt;
&lt;li&gt;the product logic&lt;/li&gt;
&lt;li&gt;the failure handling&lt;/li&gt;
&lt;li&gt;the honest explanation of limits&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is the kind of work I want to be known for.&lt;/p&gt;

&lt;p&gt;I am most interested in AI systems and founding-engineer roles where the hard problem is not merely adding an LLM, but making AI reliable enough to become part of the product itself.&lt;/p&gt;

&lt;p&gt;Prompt engineering starts the conversation.&lt;/p&gt;

&lt;p&gt;AI systems engineering is what ships.&lt;/p&gt;

&lt;p&gt;Originally published at &lt;a href="https://hitarthdesai.com/blog/beyond-prompt-engineering-ai-systems-layer/" rel="noopener noreferrer"&gt;https://hitarthdesai.com/blog/beyond-prompt-engineering-ai-systems-layer/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>architecture</category>
      <category>llm</category>
      <category>softwareengineering</category>
    </item>
  </channel>
</rss>
