<?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: Piyush Singh</title>
    <description>The latest articles on DEV Community by Piyush Singh (@piyush_singh_1e46b1d69414).</description>
    <link>https://dev.to/piyush_singh_1e46b1d69414</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%2F3179997%2F68a5654d-3966-4050-941b-caea51152ae6.png</url>
      <title>DEV Community: Piyush Singh</title>
      <link>https://dev.to/piyush_singh_1e46b1d69414</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/piyush_singh_1e46b1d69414"/>
    <language>en</language>
    <item>
      <title>How a Large Language Model Actually Generates Text</title>
      <dc:creator>Piyush Singh</dc:creator>
      <pubDate>Mon, 27 Jul 2026 12:14:05 +0000</pubDate>
      <link>https://dev.to/piyush_singh_1e46b1d69414/how-a-large-language-model-actually-generates-text-jgn</link>
      <guid>https://dev.to/piyush_singh_1e46b1d69414/how-a-large-language-model-actually-generates-text-jgn</guid>
      <description>&lt;p&gt;Everything an AI agent does — writing code, answering support tickets, browsing the web — bottoms out in a single operation: a language model predicting the next token. Understand that one mechanism, and its limits, and the entire "AI agent" stack stops being magic and starts being engineering.&lt;/p&gt;

&lt;p&gt;Let's build it up from nothing.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Text becomes tokens
&lt;/h2&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%2F3h6a3m82d4yrzka3z212.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%2F3h6a3m82d4yrzka3z212.png" alt=" " width="800" height="447"&gt;&lt;/a&gt;&lt;br&gt;
A model never sees letters. The first thing that happens to your prompt is &lt;strong&gt;tokenization&lt;/strong&gt;: the text is chopped into &lt;strong&gt;tokens&lt;/strong&gt; — sub-word chunks produced by an algorithm called Byte-Pair Encoding (BPE). A token is roughly ¾ of an English word (about 4 characters). Common words like "the" are a single token; "unbelievable" might be three (&lt;code&gt;un&lt;/code&gt; / &lt;code&gt;believ&lt;/code&gt; / &lt;code&gt;able&lt;/code&gt;). Each token maps to an integer ID in a fixed vocabulary of tens of thousands of entries.&lt;/p&gt;

&lt;p&gt;Why should you care? Because &lt;strong&gt;everything downstream is counted and billed in tokens, not words.&lt;/strong&gt; Context limits, latency, and cost are all token-denominated. When someone says a model has a "200K context window," they mean tokens.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. The transformer reads everything at once — through attention
&lt;/h2&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%2Frc69k6rlsb20899t5p9v.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%2Frc69k6rlsb20899t5p9v.png" alt=" " width="800" height="447"&gt;&lt;/a&gt;&lt;br&gt;
Token IDs become &lt;strong&gt;embedding vectors&lt;/strong&gt; (lists of numbers), which flow through a stack of transformer layers. The engine of each layer is &lt;strong&gt;self-attention&lt;/strong&gt;, and it's the idea that made modern AI work.&lt;/p&gt;

&lt;p&gt;Self-attention lets every token look at every other token to build context — for example, linking the pronoun "it" back to the noun it refers to. Mechanically, each token is projected into three vectors:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a &lt;strong&gt;Query&lt;/strong&gt; ("what am I looking for?"),&lt;/li&gt;
&lt;li&gt;a &lt;strong&gt;Key&lt;/strong&gt; ("what do I offer?"),&lt;/li&gt;
&lt;li&gt;a &lt;strong&gt;Value&lt;/strong&gt; ("what do I contribute if attended to?").&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A token's attention to another is the &lt;strong&gt;dot product of its Query with the other's Key&lt;/strong&gt;, squashed through a softmax so the weights are positive and sum to 1. The output for each token is a weighted blend of the Value vectors. Run several of these in parallel — the original Transformer used &lt;strong&gt;eight attention heads&lt;/strong&gt; — and concatenate the results. Because attention has no built-in sense of order, a &lt;strong&gt;positional encoding&lt;/strong&gt; is added so the model knows word order.&lt;/p&gt;

&lt;p&gt;Here's the catch that shapes the whole industry: &lt;strong&gt;attention compares every token to every other token, so &lt;code&gt;n&lt;/code&gt; tokens create &lt;code&gt;n²&lt;/code&gt; relationships.&lt;/strong&gt; That quadratic cost is the root reason context windows are finite, expensive, and degrade as they fill.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. It generates one token at a time
&lt;/h2&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%2Fqx08svluoqj8c7flln6b.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%2Fqx08svluoqj8c7flln6b.png" alt=" " width="800" height="447"&gt;&lt;/a&gt;&lt;br&gt;
An LLM is &lt;strong&gt;autoregressive&lt;/strong&gt;. The final layer produces a &lt;strong&gt;logit vector&lt;/strong&gt; — a raw score for every token in the vocabulary — which softmax turns into a probability distribution over "the next token." The model picks one, appends it to the input, and repeats. That loop &lt;em&gt;is&lt;/em&gt; text generation.&lt;/p&gt;

&lt;p&gt;So how does it "pick"? Through &lt;strong&gt;sampling&lt;/strong&gt; knobs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Greedy decoding&lt;/strong&gt; always takes the single most probable token. Deterministic, but repetitive.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Temperature&lt;/strong&gt; sharpens or flattens the distribution. Low temperature → focused and repetitive; high temperature → diverse but risks incoherence.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Top-p (nucleus) sampling&lt;/strong&gt; draws only from the smallest set of tokens whose probabilities sum to &lt;code&gt;p&lt;/code&gt;. It adapts to the model's confidence at each step, which is why it's usually preferred over top-k.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Repetition penalty&lt;/strong&gt; (~1.2–1.5) down-weights tokens it has already produced, to break loops.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  4. Why models hallucinate
&lt;/h2&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%2F5dvpmz9dxlyjxdmvh2f4.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%2F5dvpmz9dxlyjxdmvh2f4.png" alt=" " width="800" height="447"&gt;&lt;/a&gt;&lt;br&gt;
This is the part people find unsettling: the model's objective is &lt;strong&gt;plausible next tokens, not truth.&lt;/strong&gt; It has no built-in database and no grounding step. When it lacks a fact, it still produces the most likely-sounding continuation — confidently.&lt;/p&gt;

&lt;p&gt;Hallucination isn't a bug waiting for a patch; it's a property of the mechanism. And it's precisely &lt;em&gt;why&lt;/em&gt; the rest of the stack exists. Retrieval (RAG), tool use, and grounding all do the same job: feed the model real facts inside its context so that "most plausible" and "correct" line up.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. The context window is the model's entire memory
&lt;/h2&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%2Fes4yrgdipqpn249bjtji.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%2Fes4yrgdipqpn249bjtji.png" alt=" " width="800" height="447"&gt;&lt;/a&gt;&lt;br&gt;
The single most important thing to internalize: &lt;strong&gt;an LLM is a stateless function.&lt;/strong&gt; Tokens in, next-token distribution out. It remembers nothing between calls. Its only working memory is the &lt;strong&gt;context window&lt;/strong&gt; — the tokens you pass in &lt;em&gt;this&lt;/em&gt; call (system prompt + conversation history + tools + retrieved documents).&lt;/p&gt;

&lt;p&gt;Two consequences shape all of agent engineering:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Every token has an opportunity cost.&lt;/strong&gt; Recall accuracy &lt;em&gt;degrades as the window fills&lt;/em&gt; — more tokens means worse retrieval from within them. This is sometimes called "context rot," and the &lt;code&gt;n²&lt;/code&gt; attention cost is why.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lost in the middle.&lt;/strong&gt; A well-known 2023 study ("Lost in the Middle") showed that models attend best to information at the &lt;em&gt;start and end&lt;/em&gt; of the context and worst to the &lt;em&gt;middle&lt;/em&gt;, producing a U-shaped accuracy curve — even in models explicitly built for long context. Simply moving a relevant passage to the middle can degrade the answer without changing a single word of content.&lt;/p&gt;

&lt;h2&gt;
  
  
  The one idea to carry forward
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;An LLM is a stateless, next-token predictor with a fixed attention budget. Memory, tools, agents, RAG, and caching are all machinery bolted around that stateless core — to give it state, facts, actions, and efficiency.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Once you see it this way, "agents" stop being a mysterious new species. They're a control loop wrapped around a very good autocomplete. In the next article, we'll build that loop.&lt;/p&gt;

</description>
      <category>llm</category>
      <category>ai</category>
      <category>agents</category>
      <category>vectordatabase</category>
    </item>
    <item>
      <title>From a Language Model to an Agent: The Loop That Changes Everything</title>
      <dc:creator>Piyush Singh</dc:creator>
      <pubDate>Mon, 27 Jul 2026 12:10:23 +0000</pubDate>
      <link>https://dev.to/piyush_singh_1e46b1d69414/from-a-language-model-to-an-agent-the-loop-that-changes-everything-1gm</link>
      <guid>https://dev.to/piyush_singh_1e46b1d69414/from-a-language-model-to-an-agent-the-loop-that-changes-everything-1gm</guid>
      <description>&lt;p&gt;A large language model, on its own, can only do one thing: emit text. It can't check your calendar, run a test suite, or refund a payment. So how did we get from "very good autocomplete" to systems that book travel and fix codebases?  &lt;/p&gt;

&lt;p&gt;The answer is almost embarrassingly simple: &lt;strong&gt;you wrap the model in a loop and give it tools.&lt;/strong&gt; That's an agent. Everything else is detail — but the details are where production systems live or die.  &lt;/p&gt;

&lt;h2&gt;
  
  
  What actually counts as an "agent"
&lt;/h2&gt;

&lt;p&gt;There's a lot of hype-driven vagueness here, so let's use the definitions the labs themselves use.  &lt;/p&gt;

&lt;p&gt;OpenAI's working definition: &lt;strong&gt;an agent is a system that uses an LLM to control workflow execution.&lt;/strong&gt; It decides the next step, recognizes when the task is complete, self-corrects, and can hand control back to a human. Crucially, things that embed an LLM but &lt;em&gt;don't&lt;/em&gt; let it control the flow — a simple chatbot, a single-turn call, a sentiment classifier — are explicitly &lt;strong&gt;not&lt;/strong&gt; agents.  &lt;/p&gt;

&lt;p&gt;Anthropic draws the same line differently: a &lt;strong&gt;workflow&lt;/strong&gt; runs LLMs and tools through &lt;em&gt;predefined code paths&lt;/em&gt;; an &lt;strong&gt;agent&lt;/strong&gt; lets the model &lt;em&gt;dynamically direct its own process and tool usage.&lt;/em&gt; The dividing line is &lt;strong&gt;who decides what happens next&lt;/strong&gt; — your code, or the model.  &lt;/p&gt;

&lt;p&gt;Every agent is built from three components:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Model&lt;/strong&gt; — the LLM doing the reasoning and deciding.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tools&lt;/strong&gt; — functions and APIs it can call to take action.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Instructions&lt;/strong&gt; — the guidelines and guardrails that define behavior.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tools come in three flavors: &lt;strong&gt;data tools&lt;/strong&gt; (query a database, read a PDF, search the web), &lt;strong&gt;action tools&lt;/strong&gt; (send an email, update a CRM record), and &lt;strong&gt;orchestration tools&lt;/strong&gt; (other agents, exposed as callable tools).  &lt;/p&gt;

&lt;h2&gt;
  
  
  The agent loop (the "run")
&lt;/h2&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%2F11l66iny4rm0y4brv6tv.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%2F11l66iny4rm0y4brv6tv.png" alt=" " width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The core mechanism is a loop — often called a &lt;strong&gt;run&lt;/strong&gt; — that repeatedly calls the model until an exit condition is met. Each pass accumulates state in the context, so a decision made late in the run still carries the residue of every earlier step.  &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Assemble context&lt;/strong&gt; — system prompt + tool definitions + conversation history + any retrieved data.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Call the model&lt;/strong&gt; — it returns &lt;em&gt;either&lt;/em&gt; a final answer &lt;em&gt;or&lt;/em&gt; a request to call a tool.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;If it's a tool call, execute it&lt;/strong&gt; — your harness (not the model) runs the actual function and captures the result.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Feed the result back&lt;/strong&gt; — append it to the context and loop.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Exit&lt;/strong&gt; — on a final answer, no tool calls, an error, or a max-turn cap.
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Anthropic frames the same cycle as &lt;strong&gt;gather context → take action → verify work → repeat.&lt;/strong&gt; That word &lt;em&gt;verify&lt;/em&gt; matters: agents get "ground truth" from tool results and code execution at each step — real feedback from the environment, instead of reasoning in a vacuum. A coding agent that runs the tests after editing is doing exactly this.  &lt;/p&gt;

&lt;h2&gt;
  
  
  Tool calling: the exact mechanics
&lt;/h2&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%2Fc4cztac5db4m3hq7jvbf.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%2Fc4cztac5db4m3hq7jvbf.png" alt=" " width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is the single most important mechanism to understand, because it's how a text model "does things." Walk through it carefully:  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. You declare tools as JSON Schema.&lt;/strong&gt; Each tool is a &lt;code&gt;name&lt;/code&gt;, a &lt;code&gt;description&lt;/code&gt;, and a &lt;code&gt;parameters&lt;/code&gt; schema, passed in the API's &lt;code&gt;tools&lt;/code&gt; field. That description is not decoration — a vague one will misdirect the model entirely.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. The model decides.&lt;/strong&gt; With the default &lt;code&gt;tool_choice: "auto"&lt;/code&gt;, it may call zero, one, or several tools. When it decides a tool is needed, it &lt;em&gt;interrupts its own prose&lt;/em&gt; and emits structured JSON arguments that match the schema — for example, a &lt;code&gt;location&lt;/code&gt; argument with the value &lt;code&gt;"Paris"&lt;/code&gt;.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Your code executes.&lt;/strong&gt; You parse the tool call (function name + JSON arguments), run the real function, and get a result. &lt;strong&gt;The model never executes anything itself.&lt;/strong&gt; It only emits &lt;em&gt;intentions&lt;/em&gt;; your harness does the work. This separation is also your security boundary.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. You feed the result back.&lt;/strong&gt; Append a message with role &lt;code&gt;tool&lt;/code&gt;, the matching &lt;code&gt;tool_call_id&lt;/code&gt;, and the result content — then call the model again so it can incorporate the output into its next step.  &lt;/p&gt;

&lt;h3&gt;
  
  
  Structured outputs
&lt;/h3&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%2Fj0z6dhrned7kbr5p80wz.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%2Fj0z6dhrned7kbr5p80wz.png" alt=" " width="800" height="447"&gt;&lt;/a&gt;&lt;br&gt;
To &lt;em&gt;guarantee&lt;/em&gt; valid JSON (not just hope for it), &lt;strong&gt;strict mode&lt;/strong&gt; constrains generation to the schema (&lt;code&gt;additionalProperties: false&lt;/code&gt;, all fields required). Without it, JSON output is best-effort: you validate &lt;em&gt;after&lt;/em&gt; generation and re-prompt on failure — a feedback loop, not a guarantee. For anything downstream-critical, use the constrained version.  &lt;/p&gt;

&lt;h2&gt;
  
  
  Design the interface like a product
&lt;/h2&gt;

&lt;p&gt;Anthropic makes a point worth stealing: the &lt;strong&gt;Agent–Computer Interface (ACI)&lt;/strong&gt; deserves as much design care as a human UI. That includes &lt;strong&gt;error-proofing&lt;/strong&gt; ("poka-yoke") — designing tool signatures so the model &lt;em&gt;can't&lt;/em&gt; easily make a mistake. Clear names, tight schemas, and helpful error messages do more for reliability than any amount of clever prompting.  &lt;/p&gt;

&lt;p&gt;Think about it from the model's side: it's operating your system blind, through a keyhole of text. Good tools are self-describing, hard to misuse, and fail loudly with actionable messages.  &lt;/p&gt;

&lt;h2&gt;
  
  
  Single agent first
&lt;/h2&gt;

&lt;p&gt;One last, load-bearing piece of advice before the fancy stuff: &lt;strong&gt;start with a single agent.&lt;/strong&gt; A single model in a loop with well-designed tools solves a surprising share of real problems. Reach for multiple agents only when specialization genuinely removes a bottleneck — because, as we'll see later in the series, more agents means distributed-systems complexity, not maturity.  &lt;/p&gt;

&lt;h2&gt;
  
  
  Key takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;An agent = an LLM + tools + instructions, run in a loop the model controls.
&lt;/li&gt;
&lt;li&gt;The model only &lt;em&gt;emits intentions&lt;/em&gt;; your harness executes them and feeds results back.
&lt;/li&gt;
&lt;li&gt;Tools are declared as JSON Schema; strict mode makes outputs reliable.
&lt;/li&gt;
&lt;li&gt;Treat the tool interface like a product surface — clarity beats cleverness.
&lt;/li&gt;
&lt;/ul&gt;




</description>
      <category>ai</category>
      <category>agents</category>
      <category>llm</category>
    </item>
    <item>
      <title>When SSL Expiry Takes Down Giants: What Happened with Cricbuzz</title>
      <dc:creator>Piyush Singh</dc:creator>
      <pubDate>Mon, 19 May 2025 11:51:26 +0000</pubDate>
      <link>https://dev.to/piyush_singh_1e46b1d69414/when-ssl-expiry-takes-down-giants-what-happened-with-cricbuzz-5ggl</link>
      <guid>https://dev.to/piyush_singh_1e46b1d69414/when-ssl-expiry-takes-down-giants-what-happened-with-cricbuzz-5ggl</guid>
      <description>&lt;h1&gt;
  
  
  ⚠️ When SSL Expiry Takes Down Giants: What Happened with Cricbuzz — And How zop.dev Would Have Prevented It
&lt;/h1&gt;

&lt;p&gt;On 19th May 2025, Cricbuzz packed with live cricket action, millions of users were shocked to find &lt;strong&gt;Cricbuzz&lt;/strong&gt;, one of the world’s most popular cricket platforms, completely inaccessible.&lt;/p&gt;

&lt;p&gt;The culprit?&lt;br&gt;&lt;br&gt;
An &lt;strong&gt;expired SSL certificate&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;🔒 “This domain was pending verification and has since been verified. It may take 24–48 hours for the website to come back online.”&lt;/p&gt;

&lt;h3&gt;
  
  
  🌐 What Actually Happened?
&lt;/h3&gt;

&lt;p&gt;Cricbuzz’s domain was &lt;strong&gt;temporarily suspended&lt;/strong&gt; due to &lt;strong&gt;unverified WHOIS information&lt;/strong&gt;, as mandated by &lt;strong&gt;ICANN&lt;/strong&gt; (Internet Corporation for Assigned Names and Numbers).&lt;/p&gt;

&lt;p&gt;Since January 1, 2014, ICANN requires that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;All new domain registrations and contact detail changes must be verified within &lt;strong&gt;15 days&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If not, the domain is &lt;strong&gt;automatically suspended&lt;/strong&gt; by the registrar&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The site remains down until verification is complete&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So what users saw &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;🔒 _“This domain was pending verification and has since been verified. It may take 24–48 hours for the website to come back online.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  ❌ What Happens When an SSL Certificate Expires?
&lt;/h3&gt;

&lt;p&gt;Secure Sockets Layer (SSL) certificates are what allow your browser to create an encrypted connection with a website. When these certificates expire, users are immediately warned that the website is no longer secure — and most browsers block access altogether.&lt;/p&gt;

&lt;p&gt;That’s exactly what happened with Cricbuzz.&lt;/p&gt;

&lt;p&gt;Users were greeted with messages like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Your connection is not private."&lt;/em&gt;&lt;br&gt;&lt;br&gt;
&lt;em&gt;"NET::ERR_CERT_DATE_INVALID"&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For a high-traffic site like Cricbuzz, especially during ongoing tournaments, this kind of downtime is costly — both in lost ad revenue and in damage to user trust.&lt;/p&gt;




&lt;h2&gt;
  
  
  💥 Why SSL Expiry Still Happens — Even in 2025
&lt;/h2&gt;

&lt;p&gt;Despite SSL certificates being foundational to web security, many organizations still rely on &lt;strong&gt;manual&lt;/strong&gt; processes to renew and install them.&lt;/p&gt;

&lt;p&gt;The reality is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;SSL certificates (especially from Let’s Encrypt) often &lt;strong&gt;expire every 90 days&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Renewal requires attention, scripting, and integration&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Any delay—even by minutes—can cause a global outage&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Most teams don’t monitor certificates proactively&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In short: SSL expiry is still a &lt;strong&gt;very real threat&lt;/strong&gt;, even for large enterprises with DevOps and SRE teams.&lt;/p&gt;




&lt;h2&gt;
  
  
  🛡️ How zop.dev Prevents SSL Outages — Automatically
&lt;/h2&gt;

&lt;p&gt;At &lt;strong&gt;zop.dev&lt;/strong&gt;, we’ve seen this problem too many times. That’s why SSL automation is &lt;strong&gt;built in by design&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Here’s how we do it:&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ 1. Automated Issuance &amp;amp; Renewal
&lt;/h3&gt;

&lt;p&gt;zop.dev uses &lt;strong&gt;cert-manager&lt;/strong&gt;, an open-source Kubernetes add-on that automates the entire lifecycle of TLS certificates. Whether you're using Let’s Encrypt or your internal CA, zop.dev ensures your SSL certs are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Requested automatically&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Issued and stored as Kubernetes Secrets&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Renewed automatically before expiry&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🔄 2. No Human Involvement Required
&lt;/h3&gt;

&lt;p&gt;Once configured, you don’t need to touch your SSL setup again:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Renewal is &lt;strong&gt;scheduled&lt;/strong&gt; before expiry&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Failures are retried automatically&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ingress controllers or services are auto-reloaded after renewal&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You won’t even get a Slack alert — because there’s no incident to respond to.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔐 3. Seamless HTTPS for Every Service
&lt;/h3&gt;

&lt;p&gt;Whether you’re running one microservice or hundreds, zop.dev ensures that every public endpoint is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Secured with HTTPS&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Always backed by a valid, trusted certificate&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reloaded with zero downtime&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🚀 SSL Is Just One Piece of What zop.dev Offers
&lt;/h2&gt;

&lt;p&gt;While we’re proud of our SSL automation, it’s just one part of zop.dev’s mission:&lt;br&gt;&lt;br&gt;
To &lt;strong&gt;streamline infrastructure and deployment&lt;/strong&gt; so you can build and scale without firefighting.&lt;/p&gt;

&lt;p&gt;With zop.dev, you get:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Automated Kubernetes deployments&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Managed autoscaling and cron jobs&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Secure Redis &amp;amp; MySQL integrations&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Built-in monitoring &amp;amp; alerting&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Zero YAML&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ⚡ Don’t Let a Certificate Be Your Single Point of Failure
&lt;/h2&gt;

&lt;p&gt;Cricbuzz’s SSL expiry is a wake-up call:&lt;br&gt;&lt;br&gt;
Even the biggest, most visited platforms are vulnerable to the smallest oversights.&lt;/p&gt;

&lt;p&gt;But they don’t have to be.&lt;/p&gt;

&lt;p&gt;With zop.dev, SSL expiry is one less thing you ever have to think about again.&lt;/p&gt;




&lt;p&gt;🔗 Learn more about how zop.dev automates SSL management in Kubernetes: &lt;a href="https://zop.dev/" rel="noopener noreferrer"&gt;https://zop.dev&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;📬 Got questions? Let’s talk about how we can help your team ship faster — without surprises.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>ssl</category>
      <category>kubernetes</category>
      <category>cloud</category>
    </item>
  </channel>
</rss>
