<?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: Teamvoy</title>
    <description>The latest articles on DEV Community by Teamvoy (@teamvoy).</description>
    <link>https://dev.to/teamvoy</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%2F4063210%2Fcfcc886b-fbc3-4fee-b691-6b63ae8b3c85.png</url>
      <title>DEV Community: Teamvoy</title>
      <link>https://dev.to/teamvoy</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/teamvoy"/>
    <language>en</language>
    <item>
      <title>The WordPress PHP Vulnerability Is Three CVEs With Three Owners</title>
      <dc:creator>Teamvoy</dc:creator>
      <pubDate>Wed, 04 Nov 2026 21:02:03 +0000</pubDate>
      <link>https://dev.to/teamvoy/the-wordpress-php-vulnerability-is-three-cves-with-three-owners-43cg</link>
      <guid>https://dev.to/teamvoy/the-wordpress-php-vulnerability-is-three-cves-with-three-owners-43cg</guid>
      <description>&lt;p&gt;The WordPress PHP vulnerability going round this week is actually three separate remote-code-execution risks, reaching WordPress operators through three different components with three different owners and three different release channels. A "WordPress is updated" screenshot answers roughly a third of the question.&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%2Ftnjymno8tqrytqhkydzm.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%2Ftnjymno8tqrytqhkydzm.png" alt=" " width="800" height="506"&gt;&lt;/a&gt;&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;Issue&lt;/th&gt;
&lt;th&gt;Affected&lt;/th&gt;
&lt;th&gt;Fixed in&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;PHP runtime&lt;/td&gt;
&lt;td&gt;CVE-2026-109618 and CVE-2026-109619 (php2shell)&lt;/td&gt;
&lt;td&gt;8.2 &amp;lt; 8.2.35, 8.3 &amp;lt; 8.3.36, 8.4 &amp;lt; 8.4.27, 8.5 &amp;lt; 8.5.12&lt;/td&gt;
&lt;td&gt;PHP releases of 21 October&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WordPress Core&lt;/td&gt;
&lt;td&gt;CVE-2026-119977&lt;/td&gt;
&lt;td&gt;4.7.0 through 7.1.3&lt;/td&gt;
&lt;td&gt;7.1.4, released 28 October, plus branch backports to 4.7.39&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Plugin&lt;/td&gt;
&lt;td&gt;CVE-2026-120534 in ACF Extended PRO&lt;/td&gt;
&lt;td&gt;through 0.9.2.6&lt;/td&gt;
&lt;td&gt;0.9.2.7 — but see below&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Start with Core, because the clock is real
&lt;/h2&gt;

&lt;p&gt;CISA added CVE-2026-119977 to its Known Exploited Vulnerabilities catalogue on 3 November, with a federal remediation deadline of &lt;strong&gt;6 November&lt;/strong&gt;. It is being exploited now.&lt;/p&gt;

&lt;p&gt;The mechanics are worth understanding, because they're unusual: it's a time-of-check-to-time-of-use race in the full-package core upgrade process. The staging directory had a predictable, web-accessible name derived from the version string, so an unauthenticated attacker who hits the window during an upgrade can execute code. &lt;strong&gt;The update itself was the exposed moment.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;7.1.4 fixes it by randomising the staging directory with a cryptographically unpredictable suffix, keeping and recreating an &lt;code&gt;index.php&lt;/code&gt; guard, and preventing unsafe promotion of staged configuration data.&lt;/p&gt;

&lt;p&gt;On the speed of exploitation: Wordfence deployed a blocking rule roughly three hours after the release announcement, and the first request matching it arrived nine minutes later. Recent telemetry has it blocking over 13,000 attacks against this CVE in a 24-hour window.&lt;/p&gt;

&lt;p&gt;Every branch from 4.7 up got a backport. 4.6 and earlier get nothing — those sites need an upgrade, not a patch.&lt;/p&gt;

&lt;h2&gt;
  
  
  The PHP layer is a different owner
&lt;/h2&gt;

&lt;p&gt;php2shell sits in the PHP engine, below the application. WordPress Core and every plugin can be fully current and the site is still exploitable on a vulnerable runtime. CVE-2026-109618 concerns request-memory handling after out-of-memory errors; CVE-2026-109619 concerns stale global state surviving into later requests.&lt;/p&gt;

&lt;p&gt;Two practical notes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;php -v&lt;/code&gt; reports the CLI binary, which can differ from the build your web SAPI serves. Check the served version, and ask your host to map its package build to both CVE numbers — a branch label doesn't settle patch status when distributions backport.&lt;/li&gt;
&lt;li&gt;PHP's advisory names session upload progress as an attack path for CVE-2026-109619 and suggests turning it off, and keeping it off if you don't use it. WordPress Core doesn't use the feature. For anything still on 8.1 or older, where there's no official release at all, that setting blocks the confirmed session paths without being a complete fix.
## The plugin layer, and a correction worth making&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;CVE-2026-120534 is an unrestricted upload of a file with a dangerous type (CWE-434), CVSS 9.8, affecting ACF Extended PRO through 0.9.2.6.&lt;/p&gt;

&lt;p&gt;Patchstack lists 0.9.2.7 as the patched version for that CVE. But Patchstack separately records two further issues in the 0.9.2.4–0.9.2.7 range — an unauthenticated arbitrary shortcode execution and a contributor-level XSS — both patched in &lt;strong&gt;0.9.2.8&lt;/strong&gt;. If you're touching this plugin anyway, go to 0.9.2.8 or later rather than stopping at the version one CVE record names.&lt;/p&gt;

&lt;p&gt;Check whether the plugin is installed, active, or present-but-disabled. Deactivated plugin files still sit on disk.&lt;/p&gt;

&lt;h2&gt;
  
  
  Patch sequence that doesn't become an outage
&lt;/h2&gt;

&lt;p&gt;Urgency should shorten decision time, not remove recovery controls.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Freeze unrelated changes.&lt;/strong&gt; Keep the security release small enough to diagnose and reverse.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inventory all three layers&lt;/strong&gt; across every environment — PHP build, Core version, plugins, themes, custom code, hosting model.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Preserve evidence first&lt;/strong&gt; if compromise is plausible. Save logs and deployment records before retention windows or routine updates overwrite them. This step is irreversible if you skip it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Take a restorable backup&lt;/strong&gt; — database, uploads, configuration, deployment artifacts — and test the restore path.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rehearse in staging&lt;/strong&gt; matching production PHP settings, extensions, and web server behaviour.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test the business paths&lt;/strong&gt;: login, forms, publishing, scheduled jobs, email, payments, API integrations, admin workflows.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Patch each exposed layer&lt;/strong&gt;, then run production smoke tests.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Retain the change evidence&lt;/strong&gt; — versions, timestamps, approvals, test results, rollback decisions.
Order depends on exposure and control. If your host can patch PHP without application changes, take that reduction early and document it. An exposed plugin may need isolating before a wider upgrade.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Patching is not proof of a clean site
&lt;/h2&gt;

&lt;p&gt;A patch closes a known path. It doesn't demonstrate nobody used it earlier, and with Core under active exploitation since 28 October, "we updated" and "we were never compromised" are different claims.&lt;/p&gt;

&lt;p&gt;Post-patch triage, compared against a known-good baseline:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Web, PHP, application, WAF/CDN, authentication, and hosting control-plane logs.&lt;/li&gt;
&lt;li&gt;Unexpected administrator accounts, API credentials, scheduled tasks, configuration changes.&lt;/li&gt;
&lt;li&gt;Modified PHP files, unfamiliar plugins or themes, files added to writable directories.&lt;/li&gt;
&lt;li&gt;Outbound connections, process activity, redirects, traffic that differs from baseline.&lt;/li&gt;
&lt;li&gt;Deployment history and file-integrity results against a known-good release.&lt;/li&gt;
&lt;li&gt;Whether your logs even cover the vulnerable period, and whether clocks align across systems.
Absence of indicators isn't absence of compromise. Scanners miss deleted artefacts and anything outside their visibility.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The useful mental model for all of this: the fastest response isn't one blanket update, it's accurate ownership. Someone owns the runtime, someone owns Core, someone owns the plugin inventory, and until all three have answered, the response is incomplete.&lt;/p&gt;

&lt;p&gt;Full write-up with the version tables, evidence checklist, and sources: &lt;a href="https://teamvoy.com/blog/wordpress-php-vulnerability-2026/" rel="noopener noreferrer"&gt;teamvoy.com/blog/wordpress-php-vulnerability-2026&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;More engineering writing from the Teamvoy team at &lt;a href="https://teamvoy.com/blog" rel="noopener noreferrer"&gt;teamvoy.com/blog&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>wordpress</category>
      <category>php</category>
      <category>security</category>
      <category>devops</category>
    </item>
    <item>
      <title>Claude Code 2.0 Was a Release, Not a Capability Set</title>
      <dc:creator>Teamvoy</dc:creator>
      <pubDate>Fri, 30 Oct 2026 13:37:37 +0000</pubDate>
      <link>https://dev.to/teamvoy/claude-code-20-was-a-release-not-a-capability-set-47ai</link>
      <guid>https://dev.to/teamvoy/claude-code-20-was-a-release-not-a-capability-set-47ai</guid>
      <description>&lt;p&gt;Claude Code 2.0 was version 2.0 of Anthropic's terminal interface for its coding agent, announced on 29 September 2025. It is not a model, and it is not the product you'd install today.&lt;/p&gt;

&lt;p&gt;That distinction matters more than it sounds, because search results blend three things: the historical launch, later 2.0.x package releases, and current behaviour. Teams end up writing rollout policy against a frozen feature list from over a year ago. Use the release for context, then check the current changelog before anything goes into a control document.&lt;/p&gt;

&lt;p&gt;Same goes for naming. "Claude Skills 2.0" isn't an Anthropic product name — it's search shorthand. The official terms are Agent Skills (the open standard) and Claude Code skills (the implementation). Useful phrasing for discovery, bad phrasing for an architecture diagram or a procurement record.&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%2Fhtm2pmhfgr4sgy1f8rbr.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%2Fhtm2pmhfgr4sgy1f8rbr.png" alt=" " width="800" height="684"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What actually shipped in the 2.0 bundle
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A refreshed terminal interface with better status visibility and searchable prompt history on &lt;code&gt;Ctrl+R&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;A native VS Code extension, in beta at the time. "Beta at launch" is not a current support statement.&lt;/li&gt;
&lt;li&gt;Checkpoints, for automatic code-state recovery.&lt;/li&gt;
&lt;li&gt;Agent SDK support for subagents and hooks, under the renamed Claude Agent SDK.
The durable idea in there is controlled delegation. Everything else has moved.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Checkpoints are local undo, not history
&lt;/h2&gt;

&lt;p&gt;This is the part worth knowing precisely, because it looks like a full undo and isn't. Per the current checkpointing docs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A checkpoint is created at each prompt that starts a turn, with no configuration.&lt;/li&gt;
&lt;li&gt;Claude Code keeps file snapshots for the &lt;strong&gt;100 most recent checkpoints&lt;/strong&gt; in a session, cleaned up around 30 days after the session's last snapshot (configurable via &lt;code&gt;cleanupPeriodDays&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;/rewind&lt;/code&gt;, or double-&lt;code&gt;Esc&lt;/code&gt; on an empty prompt, opens the menu. You can restore code, conversation, or both.&lt;br&gt;
What it does &lt;strong&gt;not&lt;/strong&gt; cover:&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Files modified by bash commands.&lt;/strong&gt; &lt;code&gt;rm&lt;/code&gt;, &lt;code&gt;mv&lt;/code&gt;, &lt;code&gt;cp&lt;/code&gt; — the docs are explicit. If Claude runs a script that rewrites 300 files, rewind won't bring them back.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;External changes.&lt;/strong&gt; Edits you made outside the session, or from a concurrent session.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Subagent edits, symlinked and hard-linked files.&lt;/strong&gt; A restore will tell you it skipped them.&lt;br&gt;
Anthropic's own docs put it plainly: treat checkpoints as local undo and Git as permanent history. The practical consequence is a routine rather than a preference — commit before you delegate anything wide-scale, because the more shell autonomy you grant, the more of the work happens outside the checkpoint's reach.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Keep facts in CLAUDE.md, procedures in skills
&lt;/h2&gt;

&lt;p&gt;A skill is a directory built around &lt;code&gt;SKILL.md&lt;/code&gt;. Claude loads it when the description matches the task, or you invoke it as &lt;code&gt;/skill-name&lt;/code&gt;. The useful split:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;CLAUDE.md&lt;/strong&gt; — persistent project facts that should be available broadly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Skills&lt;/strong&gt; — procedures. A code-review checklist, a release-note workflow, a migration playbook. The full body only loads when used, which keeps irrelevant context out and gives you a versioned artifact to review.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hooks&lt;/strong&gt; — deterministic actions at defined events, like running tests.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Subagents&lt;/strong&gt; — isolation or parallelism for specialized work.
Checkpoints manage session state. Skills define a procedure. Those are different layers and conflating them is how teams end up with neither.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  A skill is code plus policy
&lt;/h2&gt;

&lt;p&gt;Skills don't make a process deterministic. The model still interprets the instructions, the tools still change state, and a third-party skill can carry scripts and references nobody on your team has read. A catalog listing is not a security review.&lt;/p&gt;

&lt;p&gt;Six things before one gets installed:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Inspect &lt;code&gt;SKILL.md&lt;/code&gt; and every bundled script.&lt;/li&gt;
&lt;li&gt;Pin the repository revision or package version.&lt;/li&gt;
&lt;li&gt;Limit permissions to the files, commands, networks, and tools the task actually needs.&lt;/li&gt;
&lt;li&gt;Test in an isolated repository with representative failure cases.&lt;/li&gt;
&lt;li&gt;Record the owner, approved use, review date, and rollback path.&lt;/li&gt;
&lt;li&gt;Require a human merge decision for production code.
Anything that can run commands, call MCP tools, or fetch network content expands the same attack surface as any other automation dependency — because that's what it is.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Store project skills with the repository when the procedure belongs to one codebase. Use centrally governed distribution when the same approved procedure spans several. Either way it needs a named owner and a review cadence.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the gates are worth it, and where they aren't
&lt;/h2&gt;

&lt;p&gt;Sandboxing, managed settings, deny rules, and monitoring reduce risk rather than remove it. Prompt injection, broad tool access, and weak review can still produce a supply-chain or production problem.&lt;/p&gt;

&lt;p&gt;But a governed skill takes longer to approve than a private prompt, and that overhead is only justified where it buys something. Strong gates belong on workflows touching production, customer data, authentication, payments, or regulated records. Apply the same gates to every low-risk local task and you get review theatre plus usage quietly migrating to personal accounts — which is worse than where you started, because you've lost the visibility too.&lt;/p&gt;

&lt;p&gt;The controls that carry the load are the boring ones: permissions enforced outside the prompt, provenance on the commit, a human signing every merge, Git as the durable source of truth, and a quarterly pass over the changelog to check your controls still match the product.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cursor or Claude Code
&lt;/h2&gt;

&lt;p&gt;Briefly, because this isn't the comparison article: Cursor is editor-first and keeps the agent inside an interactive coding session. Claude Code started terminal-led and now spans terminal, IDE, desktop, and browser. Cursor usually fits teams who want minimal workflow change; Claude Code fits terminal-heavy and platform work and larger delegated tasks.&lt;/p&gt;

&lt;p&gt;Neither product's checkpoints replace Git. Both need ownership and version control on their reusable instructions. Most organizations will end up splitting by task rather than picking a winner.&lt;/p&gt;

&lt;p&gt;Full write-up — the release table, the governance control matrix, and where to source skills: &lt;a href="https://teamvoy.com/blog/claude-code-2-0/" rel="noopener noreferrer"&gt;teamvoy.com/blog/claude-code-2-0&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Written by BYLINE_TO_CONFIRM, Teamvoy. More engineering writing at &lt;a href="https://teamvoy.com/blog" rel="noopener noreferrer"&gt;teamvoy.com/blog&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>devops</category>
      <category>productivity</category>
      <category>security</category>
    </item>
    <item>
      <title>Pick an LLM Gateway by Who Runs It, Not by Feature Count</title>
      <dc:creator>Teamvoy</dc:creator>
      <pubDate>Tue, 27 Oct 2026 14:20:01 +0000</pubDate>
      <link>https://dev.to/teamvoy/pick-an-llm-gateway-by-who-runs-it-not-by-feature-count-3id9</link>
      <guid>https://dev.to/teamvoy/pick-an-llm-gateway-by-who-runs-it-not-by-feature-count-3id9</guid>
      <description>&lt;p&gt;An LLM gateway is a reverse proxy between your applications and model providers. It exposes one API, usually OpenAI-compatible, and applies policy to every request: which model answers, what happens on failure, whether a cached answer gets reused, who may spend how much, and what gets logged.&lt;/p&gt;

&lt;p&gt;Every comparison of them ends in a ranked list, and the ranking is useless, because a self-hosted MIT proxy and a credit-funded model marketplace solve different procurement problems. The question that actually narrows the field is who operates the thing.&lt;/p&gt;

&lt;p&gt;Four roles:&lt;/p&gt;

&lt;p&gt;Self-hosted open-source proxies — LiteLLM, Portkey Gateway, Bifrost, llmgateway.io, Helicone AI Gateway. You own the keys, the logs, and the patching.&lt;br&gt;
Managed gateways — Cloudflare, Vercel, OpenRouter, Portkey Cloud, TrueFoundry. Live this week; you inherit a billing model instead of an ops burden.&lt;br&gt;
API-management platforms with LLM policies — Kong, Azure API Management, Apigee. Cheapest to adopt if your platform team already runs one, hardest to leave.&lt;br&gt;
Cloud patterns — AWS publishes a reference architecture that runs LiteLLM in your own account. No gateway license, just infrastructure.&lt;/p&gt;

&lt;h2&gt;
  
  
  What makes it an LLM gateway
&lt;/h2&gt;

&lt;p&gt;A classic API gateway terminates TLS, authenticates callers, rate-limits by request count, and routes by path. The LLM layer adds token quotas, semantic caching, provider-format translation, fallback on 429 and 5xx, prompt guardrails, and per-token cost attribution.&lt;/p&gt;

&lt;p&gt;One test separates the two: can it reject a request because a team spent its token budget, and can it tell you which key, model, and prompt consumed it? A classic gateway answers neither without custom plugins.&lt;/p&gt;

&lt;p&gt;The request path, in order: client → virtual-key auth → policy checks → cache lookup → router → provider adapter → provider API → response guardrail → logging and cost attribution → client. Each stage can short-circuit. An over-budget key stops at policy. A cache hit stops before routing. A provider failure loops back for a fallback.&lt;/p&gt;

&lt;h2&gt;
  
  
  Read the license before the feature list
&lt;/h2&gt;

&lt;p&gt;This is where the open-source category gets interesting, and where a lot of shortlists go wrong. As documented on 22 October 2026:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;LiteLLM is MIT outside its enterprise/ directory. Virtual keys, budgets, spend tracking, the admin UI, load balancing, guardrails, and an MCP gateway are in open source. The license key gates SSO and SCIM beyond 5 users, audit logs, org and team admins, and secret-manager integrations.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Portkey Gateway is MIT, with a 2.0 pre-release that merges the enterprise gateway into open source. Last repository push was May 2026, so check which branch you're deploying.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Bifrost is Apache-2.0 and ships as a single Go binary. Clustering, guardrails, and the MCP gateway are commercial with no published price.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;llmgateway.io is AGPLv3 for the core with a commercial ee/ directory. If you modify the gateway and expose it as a service, have legal read the license before the pilot, not after.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Helicone AI Gateway is Apache-2.0 and still carried a public beta badge, with its last push in November 2025. Verify maintenance before shortlisting.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The pattern worth internalizing: a LICENSE file that points to a second file for an entire directory means the feature you're evaluating may not be under the license you think it is.&lt;/p&gt;

&lt;h2&gt;
  
  
  The billing models split four ways
&lt;/h2&gt;

&lt;p&gt;Managed gateways remove the patching duty and replace it with a bill whose shape matters more than its size.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Free core, paid logs. Cloudflare keeps analytics, caching, and rate limiting free; log retention follows your Workers plan. Observability depth and spend move together.&lt;/li&gt;
&lt;li&gt;Pass-through. Vercel charges no markup and no platform fee on tokens, with payment processing fees unless you invoice as enterprise.&lt;/li&gt;
&lt;li&gt;A cut of credits. OpenRouter takes a percentage on credit purchases, with provider pricing passed through. Painless at $2,000 a month, very visible at $200,000.&lt;/li&gt;
&lt;li&gt;Per recorded log. Portkey Cloud prices by logs recorded, with a free developer tier the vendor itself labels not production-suitable.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And the fifth, for self-hosting: infrastructure only, which looks free until you cost the engineer who runs it and answers the 3 a.m. page.&lt;/p&gt;

&lt;h2&gt;
  
  
  Eight questions for a one-hour vendor call
&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%2Fh2m1jwzc12oxrrbma0x3.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%2Fh2m1jwzc12oxrrbma0x3.png" alt=" " width="800" height="636"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Four ways gateways fail
&lt;/h2&gt;

&lt;p&gt;Each is manageable. Each costs engineering time the pricing page doesn't show.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The extra hop.&lt;/strong&gt; Every gateway adds a round trip and a translation step. Vendors publish their own overhead figures; the only number worth anything is the one measured on your path. Compare p50 and p99 with and without the gateway on identical prompts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A new tier-one dependency.&lt;/strong&gt; A gateway everything depends on is a single point of failure. Self-hosted needs HA and a runbook. Managed moves the risk to a vendor's status page, which is a different risk rather than a smaller one. Keep a documented bypass for apps that can't tolerate gateway downtime.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cache staleness.&lt;/strong&gt; A cached answer about a price, a policy, or an account balance is wrong the moment the source changes. Scope caching to prompts whose correct answer holds for the TTL, exclude anything personalized, set the similarity threshold per endpoint, and log cache hits separately so support can trace a stale response.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lock-in through config.&lt;/strong&gt; Routing rules, guardrail configs and virtual-key hierarchies in one vendor's format are the migration cost you pay later. Prefer plain YAML or JSON in your repo, and treat the OpenAI-compatible interface as the contract your apps depend on.&lt;/p&gt;

&lt;h2&gt;
  
  
  A two-week pilot
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Shortlist two gateways from different operating roles&lt;/strong&gt; — one self-hosted, one managed — so you're comparing cost models rather than feature lists.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mirror production traffic.&lt;/strong&gt; Send a copy of real requests through each and discard the responses. Shadow traffic surfaces translation bugs that synthetic prompts never hit.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Write SLOs before measuring.&lt;/strong&gt; A p99 ceiling, an availability target, a fallback success rate. A pilot without SLOs produces opinions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Measure cost per accepted request&lt;/strong&gt; — total spend including engineer-hours, divided by requests that produced a response your application actually used. Cache hits and fallbacks move this more than token prices do.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Exercise failure.&lt;/strong&gt; Revoke a provider key, force a 429, fill a budget. Record what the gateway did and what your application saw.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test the exit.&lt;/strong&gt; Export the routing config, the logs, the virtual-key hierarchy. If the export needs a vendor ticket, the lock-in surface is bigger than the docs suggest.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Decide and document rollback.&lt;/strong&gt; Write the bypass procedure for direct provider calls, and date the decision so pricing gets rechecked next quarter.
One caveat on fallbacks, since it bites people in step 5: every fallback needs its own cost ceiling, or an outage at your cheap provider turns into a bill from your expensive one.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Most teams should adopt rather than build, and that includes teams who could pay someone to build it. LiteLLM, Cloudflare, or Vercel can run on shadow traffic within days from documentation alone. A bespoke gateway is justified when policy requirements exceed every license tier you can afford — data residency that rules out SaaS, air-gapped deployment, MCP governance across dozens of teams. Otherwise the interesting work isn't the gateway, it's the evaluation set behind the routing rules and the observability pipeline into your SIEM.&lt;/p&gt;

&lt;p&gt;Full breakdown — per-vendor tables with sources and retrieval dates, pricing comparison, and the full criteria list: &lt;a href="https://teamvoy.com/blog/best-llm-gateway-platforms/" rel="noopener noreferrer"&gt;see the full guide&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Written by Zhanna Yuskevych, CPO at Teamvoy. More engineering writing at &lt;a href="https://teamvoy.com/blog" rel="noopener noreferrer"&gt;teamvoy.com/blog&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>devops</category>
      <category>architecture</category>
      <category>opensource</category>
    </item>
    <item>
      <title>What Is Grok Bot? Separate Bots Are Not a Security Boundary</title>
      <dc:creator>Teamvoy</dc:creator>
      <pubDate>Mon, 26 Oct 2026 11:56:48 +0000</pubDate>
      <link>https://dev.to/teamvoy/what-is-grok-bot-separate-bots-are-not-a-security-boundary-b42</link>
      <guid>https://dev.to/teamvoy/what-is-grok-bot-separate-bots-are-not-a-security-boundary-b42</guid>
      <description>&lt;p&gt;The short answer to what is Grok Bot: named, persistent AI agents from xAI that run on a cloud computer with a browser, filesystem and terminal, sign into your existing tools, and finish multi-step work while you're away. It launched in beta on 11 August 2026, and it's a separate product from Grok, the chat assistant.&lt;/p&gt;

&lt;p&gt;The longer answer is a contradiction in xAI's own material. The launch page says Bots have their own computer. The documentation, published the same day, says all of your Bots share one persistent cloud computer — and that separate Bots should not be used as a security boundary.&lt;/p&gt;

&lt;p&gt;Both statements are from xAI. Only one survives a security review. If you're evaluating Grok Bot for ops work, that gap is the evaluation; everything else is a pricing conversation.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the shared computer actually means
&lt;/h2&gt;

&lt;p&gt;Each Bot gets a screen. The account gets a machine. So:&lt;/p&gt;

&lt;p&gt;A browser session one Bot opened is available to every other Bot on that account. Sign a Bot into your CRM and every Bot you run can reach it.&lt;br&gt;
Files written by one Bot sit on the same filesystem as the next.&lt;br&gt;
Deleting a Bot does not remove its files or its logins from the computer.&lt;/p&gt;

&lt;p&gt;Isolation between users is strict — each user gets a dedicated microVM with its own kernel, memory, and virtual devices. Isolation between Bots doesn't exist, by design. The product itself has described the arrangement as a real blast radius.&lt;/p&gt;

&lt;p&gt;The practical consequence for a mid-market team: "can we point it at our ERP?" resolves to "only with an account scoped to what you'd let every Bot on that account touch." That's a different question from the one most people think they're asking.&lt;/p&gt;

&lt;h2&gt;
  
  
  The credential handoff is the part to watch
&lt;/h2&gt;

&lt;p&gt;When a Bot hits a login, a 2FA prompt, or a CAPTCHA, it hands the computer back to you. You type the credential, hand control back, and the session persists — for every Bot on the account, from then on.&lt;/p&gt;

&lt;p&gt;This is also the genuine differentiator. API-first agents can only reach systems someone instrumented. A browser-driven agent reaches the legacy SaaS and admin panels nobody ever built a connector for. That's real capability, and it comes with the obvious cost: the agent is only as reliable as a browser session on a site that may block automation, expire, or demand a human step at 3am.&lt;/p&gt;

&lt;p&gt;There's a review layer — an independent model evaluates shell commands, plugin calls, and automation writes before they run, and can allow, require approval, or deny. Treat it as a control on actions, not as isolation between agents. It doesn't change the shared-machine fact above.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it is not
&lt;/h2&gt;

&lt;p&gt;Taken from the vendor's own documentation rather than from critics:&lt;/p&gt;

&lt;p&gt;Not on-prem. No deployment inside your own perimeter, no bring-your-own-image.&lt;br&gt;
Not a model you pick. Model selection is vendor-managed with no customer-facing picker, and the serving mix can change. An enterprise allowlist exists, with enforcement the docs themselves don't guarantee.&lt;br&gt;
Not a data-residency commitment. Computers run in the US today; the US-only residency program doesn't cover Grok Bot by default.&lt;br&gt;
Not auditable on self-serve plans. Audit logs, action recording, telemetry export, and network allowlists sit behind the enterprise contract. Self-serve defaults to allow-all.&lt;/p&gt;

&lt;h2&gt;
  
  
  The trade, stated plainly
&lt;/h2&gt;

&lt;p&gt;Speed to value comes from zero setup: one message, one shared cloud computer, vendor-managed models, five minutes. The price is zero perimeter control. You can't run it in your network, can't pin the model, can't isolate one Bot's credentials from another's.&lt;/p&gt;

&lt;p&gt;That's a reasonable trade for low-sensitivity ops, sales, and support work. It's the wrong trade when the workload needs its own perimeter — data that can't leave your region or VPC, a model you must pin for audit or cost reasons, credentials isolated per process rather than per user, or a system that only exists behind your VPN.&lt;/p&gt;

&lt;p&gt;Build in that case, and accept the other side of the trade: design and integration cost up front, you own operations, and a first version takes weeks rather than minutes.&lt;/p&gt;

&lt;p&gt;The alternatives split along the same axis. Ecosystem agents from the big model vendors get you admin controls at a lower tier. Hosted agent platforms get you bring-your-own-model keys. Open-source agents run on your own hardware with your own keys, and you own patching and security forever. None of them match the sign-into-anything-with-a-browser reach. Each wins on one axis Grok Bot gives up deliberately.&lt;/p&gt;

&lt;p&gt;Pick the axis that matches the workload, and check the current pricing page yourself — the plan structure moved once between the August launch and October, and it'll move again.&lt;/p&gt;

&lt;p&gt;Full breakdown — plan-by-plan access, the security control list, and alternatives compared: see the full guide &lt;a href="https://dev.tourl"&gt;https://teamvoy.com/blog/what-is-grok-bot/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Written by Zhanna Yuskevych, CPO at Teamvoy. More engineering writing at  &lt;a href="https://dev.tourl"&gt;https://teamvoy.com/blog&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>devops</category>
      <category>productivity</category>
      <category>security</category>
    </item>
    <item>
      <title>PHP Vulnerability 2026: Critical Security Alert for CVE-2026-109618 and CVE-2026-109619</title>
      <dc:creator>Teamvoy</dc:creator>
      <pubDate>Thu, 22 Oct 2026 13:52:25 +0000</pubDate>
      <link>https://dev.to/teamvoy/php-vulnerability-2026-critical-security-alert-for-cve-2026-109618-and-cve-2026-109619-2n86</link>
      <guid>https://dev.to/teamvoy/php-vulnerability-2026-critical-security-alert-for-cve-2026-109618-and-cve-2026-109619-2n86</guid>
      <description>&lt;p&gt;Your hosting provider says the servers are patched. Your agency says the sites are current. Somewhere in the estate there's a Docker image, a vendor appliance, or a PHP 7.4 app nobody has opened since 2022.&lt;/p&gt;

&lt;p&gt;Two critical flaws in the PHP engine, CVE-2026-109618 and CVE-2026-109619, were fixed on 21 October 2026. Both allow unauthenticated remote code execution &lt;em&gt;before your application code runs&lt;/em&gt;. Updating a CMS or a plugin changes nothing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fixed versions: PHP 8.5.12, 8.4.27, 8.3.36, 8.2.35.&lt;/strong&gt; The PHP project states there are no complete mitigations and that updating is the only safe choice.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the CMS update doesn't help
&lt;/h2&gt;

&lt;p&gt;The bugs sit in memory management and error handling — code paths nearly every request touches. PHP parses the request before WordPress, Drupal, or Magento sees it.&lt;/p&gt;

&lt;p&gt;Two consequences people are getting wrong right now:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A fully current CMS on an unpatched runtime is fully exploitable. Unauthenticated code execution has been demonstrated against current releases of all the major PHP applications.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Maintenance mode doesn't count.&lt;/strong&gt; PHP parses the request before the CMS checks its maintenance flag. A "down for maintenance" page on an unpatched runtime is a live target.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A WAF rule buys time against known request shapes and nothing more. Cloudflare's CTO called its own mitigations a stopgap and told people to patch.&lt;/p&gt;

&lt;h2&gt;
  
  
  Five steps
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Inventory every PHP runtime&lt;/strong&gt; — hosts, containers, build images, control panels, and vendor products that bundle PHP without advertising it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Apply the update&lt;/strong&gt; from your distribution, LTS vendor, or source.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Restart or redeploy.&lt;/strong&gt; PHP-FPM pools, Apache, LiteSpeed, containers. A patched package with a running old worker is still exploitable.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verify the SAPI version, not the CLI version.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Review logs for pre-patch activity&lt;/strong&gt; and record what changed, when, and who verified it.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Step 4 is the one that catches people. &lt;code&gt;php -v&lt;/code&gt; reports the CLI binary, which can be a different build from the PHP-FPM pool or mod_php module serving traffic. Put a one-line &lt;code&gt;phpinfo()&lt;/code&gt; behind an allowlist, load it over HTTP, read the version &lt;em&gt;and&lt;/em&gt; the Server API line, then delete the file.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where PHP hides
&lt;/h2&gt;

&lt;p&gt;Four places, in order of how often they're missed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Managed hosting and control panels.&lt;/strong&gt; cPanel and Plesk let each site pick its own PHP version. Check per site, and get the patched package version from your provider in writing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Containers.&lt;/strong&gt; The image tag (&lt;code&gt;php:8.3-fpm&lt;/code&gt;) tells you the branch, not the patch level. Pull the latest digest, run &lt;code&gt;php -v&lt;/code&gt; inside it, redeploy.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Appliances and bundled PHP.&lt;/strong&gt; Monitoring dashboards, VoIP admin panels, vendor products that never mention PHP anywhere in their docs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Your build pipeline.&lt;/strong&gt; A CI runner on an old base image can quietly rebuild a patched image back to an unpatched one.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sophos made the point to the BBC that the hard part isn't installing the patch — it's finding every PHP instance. If nobody on your team can say which version production serves, that gap is itself the finding.&lt;/p&gt;

&lt;h2&gt;
  
  
  If you can't patch today
&lt;/h2&gt;

&lt;p&gt;Isolate. Several agencies advised taking internet-facing systems offline until the fix is applied and verified, and large operators took that advice: government platforms in Finland, the Netherlands, Australia, and the UK went dark as a precaution rather than because of a breach.&lt;/p&gt;

&lt;p&gt;The pattern that worked was read-only behind a CDN. Australia's GovCMS disconnected its origin and served cached pages via Akamai overnight. Visitors kept getting pages, the exposed surface dropped to zero, and the cost was a night without content editing. Cheap caution.&lt;/p&gt;

&lt;p&gt;The partial mitigations in PHP's advisory (&lt;code&gt;memory_limit=-1&lt;/code&gt;, a low &lt;code&gt;post_max_size&lt;/code&gt;, &lt;code&gt;session.upload_progress.enabled=0&lt;/code&gt;) reduce exposure to specific paths. They do not make an installation safe.&lt;/p&gt;

&lt;h2&gt;
  
  
  Checking whether you were already hit
&lt;/h2&gt;

&lt;p&gt;Three detection signals worth grepping for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Unusual multipart requests followed by memory-limit errors or repeated HTTP 500s.&lt;/li&gt;
&lt;li&gt;Oversized or malformed &lt;code&gt;PHPSESSID&lt;/code&gt; response cookies — the first bug can leak process memory into the session cookie, Heartbleed-style.&lt;/li&gt;
&lt;li&gt;Unexplained PHP worker crashes or restarts.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Their absence doesn't prove you're clean. Patch regardless, then look for web shells, new cron entries, and unexpected outbound connections.&lt;/p&gt;

&lt;p&gt;On exploitation: attempts are confirmed at scale and automated, with Cloudflare reporting millions by the evening of the 21st. Publicly confirmed successful breaches are a different question and, as of 22 October, a thinner one. Nobody can tell you your server wasn't one of the successes.&lt;/p&gt;

&lt;h2&gt;
  
  
  The decision that outlasts the week
&lt;/h2&gt;

&lt;p&gt;Branches 8.1, 8.0, and 7.4 got minimal source backports and no binary releases. Researchers trace the affected code back as far as PHP 5.4.&lt;/p&gt;

&lt;p&gt;So most of your fleet needs a package update and a restart. That's not a project, and anyone telling you otherwise during a 48-hour incident is selling something. The exception is the app on 8.1 or older with no vendor binary. Building PHP from patched source once is a day's work. Doing it for every future PHP CVE, across a fleet, with an extension stack that may not compile, is an ongoing tax.&lt;/p&gt;

&lt;p&gt;Patch first. Verify the served version. File the compromise assessment. Then look at the list of runtimes that have no binary fix coming — that list, not the CVE, is what tells you whether you have a patch or a project.&lt;/p&gt;

&lt;p&gt;Fuller write-up with the version table, UTC timeline, and what to keep for auditors: &lt;a href="https://teamvoy.com/blog/php-vulnerability-2026/" rel="noopener noreferrer"&gt;teamvoy.com/blog/php-vulnerability-2026&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Written by Bohdan Varshchuk, CTO at Teamvoy. More engineering writing at &lt;a href="https://teamvoy.com/blog" rel="noopener noreferrer"&gt;teamvoy.com/blog&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>security</category>
      <category>php</category>
      <category>cybersecurity</category>
      <category>vulnerabilities</category>
    </item>
    <item>
      <title>What Happens When This Fails at 2 a.m.?\" and Five Other Questions That Beat a Coding Test"</title>
      <dc:creator>Teamvoy</dc:creator>
      <pubDate>Tue, 20 Oct 2026 22:46:02 +0000</pubDate>
      <link>https://dev.to/teamvoy/what-happens-when-this-fails-at-2-am-and-five-other-questions-that-beat-a-coding-test-36if</link>
      <guid>https://dev.to/teamvoy/what-happens-when-this-fails-at-2-am-and-five-other-questions-that-beat-a-coding-test-36if</guid>
      <description>&lt;p&gt;A country name is not hiring evidence. Neither is a university, a framework list, or a logo slide. If you are evaluating an engineering team — in Ukraine, Poland, Brazil, or three miles from your office — the only thing that predicts delivery is evidence from the specific people who will do the work.&lt;/p&gt;

&lt;p&gt;That sounds obvious and almost nobody runs their process that way. The usual version compares hourly rates, checks a few references, and discovers in month four that nobody owns production.&lt;/p&gt;

&lt;h2&gt;
  
  
  Six areas, and what to actually ask
&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%2Fb7y6t9gdqltk53nlpk8v.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%2Fb7y6t9gdqltk53nlpk8v.png" alt=" " width="800" height="548"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The architecture question is the one that separates seniority fastest. An engineer who names the option they rejected, and why, is reasoning about trade-offs. An engineer with one recommendation and no alternatives is reciting.&lt;/p&gt;

&lt;h2&gt;
  
  
  Replace the coding test with a paid slice of your actual system
&lt;/h2&gt;

&lt;p&gt;Generic coding exercises test whether someone can do a generic coding exercise. Use a bounded paid engagement instead — an audit, a prototype, a migration slice, a production hardening task — with real acceptance criteria.&lt;/p&gt;

&lt;p&gt;Six steps, in order:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Define the owned outcome.&lt;/strong&gt; What must be running, who uses it, what production responsibility the supplier carries.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test architecture judgment&lt;/strong&gt; against a real constraint from your system. Ask for options, risks, a recommended path.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inspect delivery mechanics.&lt;/strong&gt; Planning, code review, QA, release controls, observability, incident response, decision records.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interview the actual team&lt;/strong&gt; — the people doing the work, not sales or leadership.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Validate security and continuity.&lt;/strong&gt; Access controls, backups, staffing coverage, escalation. Test the plan with a scenario rather than accepting "we've never had an issue."&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Run the bounded paid engagement.&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A pilot that costs money and touches your real code tells you more in two weeks than a reference call tells you ever.&lt;/p&gt;

&lt;h2&gt;
  
  
  Match the model to the work
&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%2Fdcl3gytn126sxke1fa34.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%2Fdcl3gytn126sxke1fa34.png" alt=" " width="800" height="332"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Worth saying plainly: an internal hire or a specialist freelancer is often the better call. Stable, narrow, long-lived work belongs in-house. A partner earns its cost when the problem crosses architecture, delivery, operations, and product decisions at once.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why rate comparison misleads
&lt;/h2&gt;

&lt;p&gt;A lower hourly rate is a real number attached to the wrong question. The savings disappear when designs change repeatedly, questions wait days for answers, or production has no owner. Compare the cost of a stable release and its operation, not one engineering hour.&lt;/p&gt;

&lt;p&gt;Time zones work the same way. Overlap between Europe and North America supports a clean handoff and also delays decisions when teams depend on synchronous meetings. Define core overlap hours, asynchronous approval rules, and which incidents justify after-hours escalation — before signing, not after the first missed deadline.&lt;/p&gt;

&lt;h2&gt;
  
  
  On the market data
&lt;/h2&gt;

&lt;p&gt;For context, since buyers ask: Ukraine's IT Association reported $3.343 billion in computer-services exports for the first half of 2026, up 4.1% year over year, with the US accounting for $1.234 billion or 36.9%. The National Bank reported $6.8 billion in IT-services exports for 2025, 12.6% of total goods and services exports, while the Association's own 2025 figure is $6.6 billion across more than 305,000 tech professionals.&lt;/p&gt;

&lt;p&gt;Those numbers don't agree, because the definitions and time windows differ. Check the terms before comparing them, and treat all of it as context rather than as evidence about any vendor. Sector size tells you a market exists. It tells you nothing about whether a specific team has mature operations.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Contract terms worth a lawyer's time
&lt;/h2&gt;

&lt;p&gt;Ukraine's Diia City regime sets rules for qualifying tech companies and includes employment and gig-contract models, under Law No. 1667-IX. A vendor's tax status doesn't change your rights. Confirm whether the supplier is a resident and which entity signs.&lt;/p&gt;

&lt;p&gt;Then have counsel cover: IP assignment for code, models, prompts, documentation and designs; data-processing roles, transfers, retention, deletion and incident notice; subcontractor use and approval rights for sensitive systems; security requirements, audit evidence and access removal; sanctions and export controls; and continuity, termination assistance, repository access and knowledge transfer.&lt;/p&gt;

&lt;p&gt;That last cluster is the one skipped most often, and it's the one that matters when an engagement ends badly.&lt;/p&gt;

&lt;p&gt;For AI work specifically, add: evals, grounding, logging, cost control, human review, and who carries production support.&lt;/p&gt;

&lt;p&gt;Keep narrow work narrow. When the work spans AI, legacy systems, data integration, security and production, judge partners by the result they can own — and make them prove it on a paid slice of your real system first.&lt;/p&gt;

&lt;p&gt;Full guide — the evidence table, the six-step process, and the engagement models in detail: &lt;a href="https://dev.toREPLACE_WITH_LIVE_URL"&gt;see the full guide&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Written by Bohdan Varshchuk, CTO at Teamvoy. More engineering writing at &lt;a href="https://teamvoy.com/blog" rel="noopener noreferrer"&gt;teamvoy.com/blog&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>software</category>
      <category>hiring</category>
      <category>webdev</category>
    </item>
    <item>
      <title>What Does LLMOps Cover That MLOps Does Not?</title>
      <dc:creator>Teamvoy</dc:creator>
      <pubDate>Mon, 21 Sep 2026 16:25:11 +0000</pubDate>
      <link>https://dev.to/teamvoy/what-does-llmops-cover-that-mlops-does-not-454m</link>
      <guid>https://dev.to/teamvoy/what-does-llmops-cover-that-mlops-does-not-454m</guid>
      <description>&lt;p&gt;&lt;em&gt;What the operations layer around a production language model actually contains, and what it costs to skip it.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Picture the failure. Support deflection has sat at 61% for six weeks. On a Tuesday it reads 48%. Your repo has no new commits. Latency is flat, the error rate is zero, every HTTP response is a 200. The provider rolled a point release behind the model identifier you pinned loosely, and the summarization step now writes three sentences where it wrote one, so the routing logic downstream stopped matching.&lt;/p&gt;

&lt;p&gt;You find out from a customer.&lt;/p&gt;

&lt;p&gt;That gap between “the service is up” and “the answers are right” is the entire subject of LLMOps. It is the engineering between a model endpoint and the people depending on it, and in 2026 it is the part of the stack most teams shipped without.&lt;/p&gt;

&lt;h2&gt;
  
  
  The thing you are operating is a configuration, not a model
&lt;/h2&gt;

&lt;p&gt;Here is the distinction that makes LLMOps its own discipline rather than MLOps with new vocabulary.&lt;/p&gt;

&lt;p&gt;In MLOps you version training data, features and weights. You own the artifact. When it degrades, the cause is data drift or a broken feature pipeline, and the fix is a retrain on your schedule.&lt;/p&gt;

&lt;p&gt;In LLMOps the artifact belongs to a vendor. What you own is everything wrapped around it: prompt versions, a retrieval corpus, tool contracts, a routing config, a provider and model version. A regression comes from a version bump you did not schedule, a corpus update someone ran at 4pm, or a one-word prompt edit that passed review because nobody had a way to test it.&lt;/p&gt;

&lt;p&gt;Rollback means restoring a previous combination of prompt, corpus and provider. There is no artifact to roll back to. That difference cascades into five components, and most engagements start with whichever one is missing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Evaluation suites.&lt;/strong&gt; A versioned case set covering the paths users take, run in CI against every prompt edit, corpus change and provider bump, with a pass threshold gating release.&lt;br&gt;
&lt;strong&gt;Tracing.&lt;/strong&gt; Every model call, retrieval and tool invocation, captured at the request level.&lt;br&gt;
&lt;strong&gt;Versioning.&lt;/strong&gt; Prompts, corpora and tool contracts under change control, the same way code is.&lt;br&gt;
&lt;strong&gt;Cost telemetry.&lt;/strong&gt; Spend attributed per request across a multi-step path.&lt;br&gt;
&lt;strong&gt;Release control.&lt;/strong&gt; A documented rollback path someone has actually used.&lt;/p&gt;

&lt;h2&gt;
  
  
  Evaluation is the control plane, and logging is not
&lt;/h2&gt;

&lt;p&gt;The industry spent two years buying tracing tools and calling it observability. Tracing tells you what happened after it happened. An evaluation suite stops the bad change from shipping.&lt;/p&gt;

&lt;p&gt;A working suite is a versioned case set with graded expectations, run in the same pipeline as your unit tests. Four kinds of case earn their place:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Golden cases with known-correct answers.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Adversarial cases covering ambiguous and out-of-scope input.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Multi-step cases that exercise the tool path, including the loop that runs twice.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Regressions pulled from real traces, added the week each one broke.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The pass threshold blocks the merge. That single mechanic turns a prompt edit from a judgment call into a diff someone reviews on evidence, and it turns a provider release from an incident into a report: the suite runs against the new version, the delta comes back case by case, and the routing config either moves or stays.&lt;br&gt;
Now the honest part. Real evaluation adds weeks to a first release and returns nothing on that release. It pays back on the first model change and every one after. A team shipping one prompt into a low-volume internal tool should skip it and spend the time elsewhere.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a trace has to carry before it is useful
&lt;/h2&gt;

&lt;p&gt;Most LLM tracing captures the model call and stops. That covers maybe a third of your failure modes. A trace that answers real questions has four layers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Retrieval.&lt;/strong&gt; Which documents came back, what they scored, and whether the answer actually cited them. Most quality complaints resolve here, and they resolve fast when the retrieved chunks sit next to the output.&lt;br&gt;
&lt;strong&gt;The model call.&lt;/strong&gt; Provider, model identifier, prompt version, tokens in and out, time to first token, total latency.&lt;br&gt;
&lt;strong&gt;Tool calls.&lt;/strong&gt; Which tool the model picked, the arguments it passed, what came back, and how many times the loop ran before it stopped.&lt;br&gt;
&lt;strong&gt;Outcome.&lt;/strong&gt; Whether the request resolved, escalated to a person, or got retried.&lt;/p&gt;

&lt;p&gt;Join that last layer to cost and the number changes meaning. Spend per million tokens is an accounting figure. Spend per resolved request is an operating one, and it is the only version of the metric that tells you whether a cheaper model is actually cheaper once it escalates twice as often.&lt;/p&gt;

&lt;h2&gt;
  
  
  In a regulated deployment, the ops layer is the evidence layer
&lt;/h2&gt;

&lt;p&gt;If you run in fintech, insurance or health, the auditor will ask for records rather than architecture. Four artifacts carry that weight, and each is a design decision taken before launch rather than a report generated after one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Version lineage per decision.&lt;/strong&gt; For any output that affected a customer: the prompt version, model identifier, retrieval snapshot and tool responses behind it. Under SR 11–7 model risk guidance, this is what makes a language model component reviewable in the same terms as a credit scorecard.&lt;br&gt;
&lt;strong&gt;Human review records.&lt;/strong&gt; Which outputs a person approved, changed or rejected, timestamped and attributable. Where a fully automated decision would sit in scope under the EU AI Act, this is the control teams most often rely on to stay outside it.&lt;br&gt;
&lt;strong&gt;Retention and residency.&lt;/strong&gt; Traces hold customer text. Retention windows, redaction and inference region are GDPR questions rather than infrastructure preferences, and DORA adds concentration risk where one provider serves every route.&lt;br&gt;
&lt;strong&gt;Change control.&lt;/strong&gt; SOC 2 change management applied to prompts and corpora, not only to code, because both move model behavior.&lt;/p&gt;

&lt;p&gt;Teams that treat these as a compliance workstream separate from engineering build the system twice.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the classical model still wins
&lt;/h2&gt;

&lt;p&gt;One more thing worth saying out loud, because vendors rarely say it.&lt;/p&gt;

&lt;p&gt;On a stable, high-volume classification step, a small trained classifier or a deterministic rule beats a model call on cost, latency and predictability. Every time. If the step is “route this ticket to one of nine queues” and you have labeled history, the language model is the expensive option with the worse audit story.&lt;/p&gt;

&lt;p&gt;Teams already running classical models are in the best position here anyway. The registry, the deployment pipeline, the monitoring backbone and the incident rota serve both disciplines. Splitting them doubles the operational surface for no return. What diverges is the clock: a classical model gets retrained on your data, a model route gets reconfigured on a vendor’s release schedule.&lt;/p&gt;

&lt;h2&gt;
  
  
  Four questions for whoever you hire
&lt;/h2&gt;

&lt;p&gt;Apply these to us as readily as to anyone else.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Who writes the evaluation suite, and when? If the answer is “after the first release,” evaluation is an add-on rather than part of the engineering.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Where does inference run and who holds the keys? Your cloud account, a vendor platform, or a mix, and the data path in each case.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is the handover artifact? A running system with traces, a documented case set and an on-call rota is a different deliverable from an architecture diagram.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What did the team do the week a provider last deprecated a model? &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This one is hard to fake.&lt;br&gt;
We wrote up how we run this work, including a 3–5 day readiness audit that leaves you with a written gap list you can act on with any partner: &lt;a href="https://teamvoy.com/llmops-consulting-services/" rel="noopener noreferrer"&gt;LLMOps consulting services&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Or take the shorter path. A 15-minute call with our CTO about where your model runs, what your traces show today, and what breaks the next time a provider ships a version bump.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>programming</category>
      <category>llmops</category>
    </item>
    <item>
      <title>If Reviewers Accept 95% of Drafts Unchanged, They Stopped Reading</title>
      <dc:creator>Teamvoy</dc:creator>
      <pubDate>Tue, 15 Sep 2026 15:44:02 +0000</pubDate>
      <link>https://dev.to/teamvoy/if-reviewers-accept-95-of-drafts-unchanged-they-stopped-reading-3551</link>
      <guid>https://dev.to/teamvoy/if-reviewers-accept-95-of-drafts-unchanged-they-stopped-reading-3551</guid>
      <description>&lt;p&gt;Track one number when you put a generative model into a review workflow: how often reviewers accept the draft unchanged.&lt;/p&gt;

&lt;p&gt;Above roughly 95% and they've stopped reading. That's automation bias, and it looks exactly like success on every dashboard you have. The person's job changed from doing the work to approving it, which is a different job with different failure modes, and the main one is approving what they should have caught.&lt;/p&gt;

&lt;p&gt;This is the shape of the whole problem. A prototype proves the model can produce the artifact. Production asks whether you can show a regulator, six months later, why a particular output was produced — and whether a customer can challenge it. Those are design problems long before they're engineering problems.&lt;/p&gt;

&lt;p&gt;The integration work is roughly 20% model and 80% everything else: data pipelines, evals, audit logging, human review paths, and the interface showing a user what the model did.&lt;/p&gt;

&lt;p&gt;Three things change when the output is probabilistic&lt;br&gt;
The same input can produce a different artifact tomorrow. Interfaces built on deterministic assumptions break quietly. Pin temperature and seed or you cannot reproduce a decision.&lt;br&gt;
The audit surface grows. Every inference becomes a record you may need to reconstruct.&lt;br&gt;
The human role moves from producing to approving, with the acceptance-rate problem above.&lt;br&gt;
Generative and predictive are different products wearing one name&lt;/p&gt;

&lt;p&gt;A credit model returning a default probability is predictive. An assistant drafting the adverse-action notice that follows is generative. Vendors blur this and buyers inherit the blur — one platform sells "AI for lending" and you've bought two unrelated risk profiles under one contract.&lt;/p&gt;

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

&lt;/div&gt;

&lt;p&gt;Output  Score, class, ranking   Text, document, summary&lt;br&gt;
Evaluation  Precision, recall, AUC vs labels    Faithfulness, groundedness, human preference&lt;br&gt;
Failure mode    Systematic bias against a group Confident fabrication, one output at a time&lt;br&gt;
Found by    Aggregate analysis  Per-instance review&lt;br&gt;
Reproducibility Deterministic given version Varies unless parameters pinned&lt;br&gt;
Cost profile    Training-heavy, inference-cheap Training-light, inference-expensive&lt;/p&gt;

&lt;p&gt;A generative feature needs a review path. A predictive feature needs a challenger model. Building one and governing it as the other is the most expensive mistake in the category, because it's usually found during an examination rather than during a sprint.&lt;/p&gt;

&lt;p&gt;RAG sits between them and confuses things further. Govern the retrieval as a data-access control and the generation as a content control. Treating it as one component makes both halves harder to defend.&lt;/p&gt;

&lt;p&gt;Four prerequisites, each with a pass/fail test&lt;/p&gt;

&lt;p&gt;Run these in week one, on paper, before anyone writes a prompt:&lt;/p&gt;

&lt;p&gt;Data — can you pull 200 real cases with labeled correct outcomes without a manual export? If that takes more than two days, the data problem is your project.&lt;br&gt;
Team — is a compliance reviewer named in the sprint, not on the distribution list?&lt;br&gt;
Baseline — is there a current metric with today's number written next to it?&lt;br&gt;
Sponsor — does one executive own the outcome and the budget, in writing?&lt;/p&gt;

&lt;p&gt;The data test fails most often, and it fails in week five, after the model work is already scheduled. That moves the launch by a quarter.&lt;/p&gt;

&lt;p&gt;Write the eval suite before picking the model&lt;/p&gt;

&lt;p&gt;The sequence teams actually run: pick the model in week one because it's the interesting decision, design the interface around whatever it produces, hand the whole thing to compliance in week ten. Reversing that is most of what separates a six-week build from a six-month one.&lt;/p&gt;

&lt;p&gt;The dependency order that can't move:&lt;/p&gt;

&lt;p&gt;You cannot validate a model against evals you haven't written.&lt;br&gt;
You cannot write evals without knowing what a correct output looks like in the workflow.&lt;br&gt;
So the domain expert who does this work today has to be in the room before model selection, scoring 100 to 300 real cases.&lt;/p&gt;

&lt;p&gt;Cost, latency, data residency, and vendor retention policy narrow the field faster than benchmark scores do. And test for disparate outcomes on protected characteristics even when the output is a draft rather than a decision — a drafting assistant that writes warmer letters to one group is a fair-lending problem wearing a different hat.&lt;/p&gt;

&lt;p&gt;Design the reviewer's screen before the customer's&lt;/p&gt;

&lt;p&gt;The review interface decides whether reviewers catch errors or rubber-stamp them, and that single behaviour sets the feature's real error rate more than model quality does. It's the part of the work that never shows up in a portfolio.&lt;/p&gt;

&lt;p&gt;Beyond acceptance rate, two things help: put the retrieved records next to the generated draft so the grounding is visible, and seed known-bad cases into the queue to check people are still catching them.&lt;/p&gt;

&lt;p&gt;On the customer side, three patterns carry the trust load:&lt;/p&gt;

&lt;p&gt;Confidence disclosure that states the basis, not a number. "Drafted from your March statement and two prior disputes" tells a user more than "87% confidence" and is much harder to misread.&lt;br&gt;
Reversible action. Anything the model initiates gets an undo with a stated window. Where reversal is impossible — a sent payment — require confirmation before rather than explanation after.&lt;br&gt;
A visible human path. One click, with expected response time on the button.&lt;/p&gt;

&lt;p&gt;When a fraud hold lands on a legitimate transaction, the customer doesn't want an explanation of the model. They want the hold lifted and they want to know how long that takes. Trust in financial products is mostly a function of recoverability. Users trust what they can undo more than what they can read.&lt;/p&gt;

&lt;p&gt;Two anti-patterns: acting without confirmation on anything material, and decorative explainability — a "why did I see this" link returning generic text. A weak explanation is worse than none, because it signals the team knew the answer mattered and chose not to give one.&lt;/p&gt;

&lt;p&gt;Audit log before prompt&lt;/p&gt;

&lt;p&gt;The artifact people underbuild. It has to store the prompt, the retrieved context, the model version, the parameters, the output, and the reviewer's decision — keyed so one case can be reconstructed on request.&lt;/p&gt;

&lt;p&gt;The examiner's first question is rarely about the model. It's who signed off, what they saw when they did, and whether you can produce that record now. Teams that treat compliance as a document written after the build find the document has to describe decisions nobody wrote down.&lt;/p&gt;

&lt;p&gt;Cheap to build in week one. Expensive to retrofit, and the feature sits idle while it happens.&lt;/p&gt;

&lt;p&gt;What it costs, and where&lt;/p&gt;

&lt;p&gt;A first production feature in a regulated fintech workflow: roughly $110,000 to $220,000 for a customer-support-style assistant, $320,000 to $1.1M for transaction monitoring, over three to six months. Run costs $2,000 to $25,000 a month depending on volume.&lt;/p&gt;

&lt;p&gt;The model is the cheap part — inference on a well-scoped workflow is often under $2,000 a month at pilot volume. The spread comes from data readiness and regulatory tier, not model choice. Rough split: data prep 25–35%, model integration and evals 15–20%, interface and review design 20–25%, audit logging 10–15%, validation and documentation 10–20%.&lt;/p&gt;

&lt;p&gt;What pushes a build past the top of the range is nearly always the same thing: the workflow wasn't scoped to one queue, and it grew a second and third use case before the first one shipped.&lt;/p&gt;

&lt;p&gt;One trade-off this approach doesn't solve. Running compliance in parallel from step one makes your first feature slower than a team that skips it — measurably, often four to six weeks. The payback lands on features two and three, when the control framework is reusable. If your organization judges the first project on speed alone, negotiate the measure before the project starts rather than cutting the governance work.&lt;/p&gt;

&lt;p&gt;Scope to one workflow with a number attached. Write the kill criteria before the code.&lt;/p&gt;

&lt;p&gt;Full guide — the seven-step process, the regulatory table, and build vs buy: see the full guide&lt;/p&gt;

&lt;p&gt;Written by Bohdan Varshchuk, CTO at Teamvoy. More engineering writing at teamvoy.com/blog.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>design</category>
      <category>webdev</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Ten Things to Wire Up Before an Agent Touches Production</title>
      <dc:creator>Teamvoy</dc:creator>
      <pubDate>Tue, 08 Sep 2026 18:53:46 +0000</pubDate>
      <link>https://dev.to/teamvoy/ten-things-to-wire-up-before-an-agent-touches-production-2ejo</link>
      <guid>https://dev.to/teamvoy/ten-things-to-wire-up-before-an-agent-touches-production-2ejo</guid>
      <description>&lt;p&gt;A developer deployed a customer-support agent that got stuck in a retry loop with a CRM tool. No hard circuit breaker. It spent six hours overnight repeating the same broken call while he slept, and he woke up to roughly a $4,200 OpenAI bill for doing nothing useful.&lt;/p&gt;

&lt;p&gt;That's the failure mode. Not a dramatic hack — a boring loop with no external stop.&lt;/p&gt;

&lt;p&gt;Roughly 95% of enterprise generative-AI pilots in 2025 delivered no measurable return, and almost none of those were model failures. Teams optimized the brain and skipped the nervous system. A read-only chatbot is a wiki with better search. A deployed agent &lt;em&gt;does things&lt;/em&gt; — writes to a database, calls an API, refunds a customer. That shift from reading to doing is where pilots die.&lt;/p&gt;

&lt;p&gt;The useful mental model: treat the LLM as a fallible kernel, not a magic box. You don't trust a kernel blindly. You wrap it in checks, limits, and a way to roll back.&lt;/p&gt;

&lt;h2&gt;
  
  
  Agents break three assumptions your ops playbook depends on
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Non-determinism.&lt;/strong&gt; The same input can produce different actions on different days. An agent succeeds Monday and fails on the identical request Tuesday. Call it ghost debugging — the bug won't sit still long enough to catch. Design for a 3% to 15% tool-call failure rate as a normal state, not an exception.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cost grows with loop length, not request count.&lt;/strong&gt; This is the mechanism most guides skip. The agent loops: think, call a tool, read the result, think again. Frameworks append every step &lt;em&gt;and every tool error&lt;/em&gt; to the running history, then resend the whole cumulative log on the next call. Token use grows quadratically. A 20-step loop is not twice a 10-step loop — each step re-pays for everything before it. Related trap: past roughly the 40% context-fill mark, answers get worse. Load the window with tool definitions and raw JSON and you're doing your real work in the dumb zone.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Every tool you connect widens the blast radius.&lt;/strong&gt; Which brings us to the controls.&lt;/p&gt;

&lt;h2&gt;
  
  
  Four controls the agent cannot touch
&lt;/h2&gt;

&lt;p&gt;Wire these before you touch agent logic, not after. The principle is determinism of enforcement: limits live outside the model, in code it cannot rewrite. An agent told to stay under budget will, often enough, talk itself into one more call.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Circuit breaker.&lt;/strong&gt; Hard cap on retries and loop iterations. Hit it and the agent stops, full stop.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deny-by-default allowlist.&lt;/strong&gt; The agent calls only tools you explicitly permit. Everything else is blocked, not warned.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Confirmation gate.&lt;/strong&gt; Anything destructive or irreversible — delete, refund, send — waits for a human yes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost ceiling.&lt;/strong&gt; Spend limit per run and per day, enforced by infrastructure rather than by asking the model nicely.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Research on action-level privilege control found enforcement cut attack success from 70.3% to 7.3%, and to zero with manual policies. The control plane protects you, not the prompt.&lt;/p&gt;

&lt;p&gt;Worth being honest about the limit: external controls stop catastrophes. They don't make a weak agent good. They buy you the safety to improve it in production instead of gambling with it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three identities, not one
&lt;/h2&gt;

&lt;p&gt;Most teams give an agent one set of credentials. That's how a single prompt injection becomes a full breach. Split it:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;The user&lt;/strong&gt; — who asked for the action.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The agent&lt;/strong&gt; — its own machine identity, separate from any human.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The tool token&lt;/strong&gt; — a scoped, on-behalf-of credential per tool call.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In a DORA- or PCI-DSS-bound system, "the AI did it" is not an answer an auditor accepts.&lt;/p&gt;

&lt;p&gt;There's a quieter risk in the tool descriptors themselves. A study of 1,899 live MCP servers found 7.2% carried general vulnerabilities and 5.5% were open to tool poisoning, where a malicious description hijacks the agent. Pin and version your descriptors. Treat them as supply-chain code, not config.&lt;/p&gt;

&lt;p&gt;And assume prompt injection — direct, where a user types it, and indirect, where the agent reads a poisoned page or document and follows hidden orders. You cannot prompt your way out of this. Checks run outside the model, in deterministic code. One scan of 5,000 AI-built apps found 60% vulnerable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ship it in five stages
&lt;/h2&gt;

&lt;p&gt;Never all at once. Each stage answers one question before the next earns traffic.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Offline eval suite&lt;/strong&gt; — proves broadly correct on known cases, before any real traffic.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Shadow mode&lt;/strong&gt; — the agent decides, nothing executes. Proves it behaves sanely on live data at zero risk.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Canary&lt;/strong&gt; — a small slice of low-risk real traffic. Proves it survives messy production input.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Graduated rollout&lt;/strong&gt; — widen in steps, confirmation gates on anything destructive.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Post-deploy validation&lt;/strong&gt; — behaviour drifts as inputs and model versions change. Proves it &lt;em&gt;stays&lt;/em&gt; correct.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The rollback detail teams get wrong: an agent's behaviour is set by four things together — code, prompts, tool catalog, model version. Reverting code while keeping yesterday's prompt is not a rollback. It's a new configuration you have never run. Revert all four as one atomic bundle.&lt;/p&gt;

&lt;h2&gt;
  
  
  Monitor the trajectory, not the endpoint
&lt;/h2&gt;

&lt;p&gt;Uptime dashboards tell you the agent returned a 200. They don't tell you the answer was confidently wrong. Three surfaces:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Operational&lt;/strong&gt; — is it running? p95 latency, error rates, cost per run.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cognitive&lt;/strong&gt; — what did it decide, and why? Full reasoning trace and every tool call, in order.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Contextual&lt;/strong&gt; — what did it see? Exact inputs, retrieved documents, tool outputs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Track task-completion rate, tool-call success rate, tokens per run, and latency. Drift in any of them is the early warning.&lt;/p&gt;

&lt;p&gt;Almost-right output passes every uptime check. It's the expensive failure mode precisely because completely wrong gets caught — tests fail, the build breaks — while almost right ships and compounds for months. AI-generated pull requests average 10.8 issues against 6.4 in human code, and the tell is often suppression rather than error: one review turned up a file carrying eleven &lt;code&gt;eslint-disable&lt;/code&gt; comments where the agent had silenced the type errors instead of fixing them.&lt;/p&gt;

&lt;p&gt;Three questions before any agent-written change merges: does it reuse what exists or reinvent it badly, does it follow your conventions or invent its own, and can a developer explain it without reading the AI's comments?&lt;/p&gt;

&lt;h2&gt;
  
  
  What it actually costs
&lt;/h2&gt;

&lt;p&gt;Inference is rarely the big number. Integration and compliance run 40% to 60% of total deployment spend. Get the data layer wrong and everything else inflates.&lt;/p&gt;

&lt;p&gt;Pick hosting by workload shape rather than by which is "cheaper": serverless for spiky or unpredictable volume, containers for steady high volume, hybrid if you genuinely have both and can afford to run two systems. Cloud is rented elasticity — if your load is steady, you're paying a premium for flexibility you aren't using.&lt;/p&gt;

&lt;p&gt;Then cap the variable part: token budgets per run and per day enforced in infrastructure, semantic caching so repeated questions don't re-pay the model, and model tiering so the expensive model only runs on the steps that need it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The ten-line go/no-go
&lt;/h2&gt;

&lt;p&gt;Empty box means you're shipping a demo:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Eval suite passes.&lt;/li&gt;
&lt;li&gt;Staged rollout ready — shadow, canary, graduated, with gates.&lt;/li&gt;
&lt;li&gt;Circuit breaker live, enforced outside the model.&lt;/li&gt;
&lt;li&gt;Cost ceiling set in infrastructure.&lt;/li&gt;
&lt;li&gt;Tool allowlist is deny-by-default.&lt;/li&gt;
&lt;li&gt;Three-identity auth.&lt;/li&gt;
&lt;li&gt;Trajectory logging on.&lt;/li&gt;
&lt;li&gt;Atomic rollback bundle — code, prompts, tools, model version.&lt;/li&gt;
&lt;li&gt;Spec-first verification with the three-question test.&lt;/li&gt;
&lt;li&gt;Named incident owner — a specific human, not a team alias.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you went quiet on three or four of those, you're in the same place as most teams shipping their first production agent. Writing the agent is the cheap part. The gap between a working demo and something you trust at 2 a.m. is everything above.&lt;/p&gt;

&lt;p&gt;Full guide — architecture patterns, identity delegation, cost modelling, and deploying onto a legacy core: &lt;a href="https://teamvoy.com/blog/ai-agent-deployment-best-practices/" rel="noopener noreferrer"&gt;teamvoy.com/blog/ai-agent-deployment-best-practices&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Written by Taras Voytovych, Founder &amp;amp; CEO at Teamvoy. More engineering writing at &lt;a href="https://teamvoy.com/blog" rel="noopener noreferrer"&gt;teamvoy.com/blog&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>devops</category>
      <category>security</category>
      <category>architecture</category>
    </item>
    <item>
      <title>The Systems That Need Modernizing Most Aren't the Broken Ones</title>
      <dc:creator>Teamvoy</dc:creator>
      <pubDate>Thu, 03 Sep 2026 11:54:36 +0000</pubDate>
      <link>https://dev.to/teamvoy/the-systems-that-need-modernizing-most-arent-the-broken-ones-3lid</link>
      <guid>https://dev.to/teamvoy/the-systems-that-need-modernizing-most-arent-the-broken-ones-3lid</guid>
      <description>&lt;p&gt;The applications that most need modernizing are usually not the ones that are obviously broken.&lt;/p&gt;

&lt;p&gt;They're the stable ones. Running for years, rarely paging anyone, and increasingly impossible to change. Nothing on a dashboard flags that, because "hard to change" isn't an outage — it's a slow tax paid in every estimate that comes back three times longer than the feature deserves.&lt;/p&gt;

&lt;p&gt;Which is why the first question shouldn't be what technology replaces the current stack. It should be: what does the current architecture prevent the product and engineering teams from doing? That question has a concrete answer. "Should we move to microservices" does not.&lt;/p&gt;

&lt;h2&gt;
  
  
  Modernization is not a synonym for rewrite
&lt;/h2&gt;

&lt;p&gt;This is the assumption that turns a scoped project into a two-year program. The real decision is what stays, what changes, and where the investment actually removes a constraint on the business.&lt;/p&gt;

&lt;p&gt;The 7 R's are useful precisely because two of the seven are "don't touch it":&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Retire&lt;/strong&gt; — it no longer provides value. Delete it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Retain&lt;/strong&gt; — still useful, still cost-effective, leave it alone.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rehost&lt;/strong&gt; — move it, minimal changes. Fastest path to a new environment, solves the least.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Replatform&lt;/strong&gt; — new platform, minor changes to optimize.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Refactor&lt;/strong&gt; — improve the code's structure without changing external behaviour.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rearchitect&lt;/strong&gt; — redesign for new capability or scale.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Replace&lt;/strong&gt; — retire it and adopt something else, often SaaS.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Run every application in the portfolio through that list before picking a strategy for any of them. Teams that skip this step tend to apply one R uniformly, usually rearchitect, because it's the most interesting one.&lt;/p&gt;

&lt;p&gt;Worth being blunt about the trade at each level: rehosting is the fastest way to the cloud and will carry every legacy problem with it. Rearchitecting and rebuilding are where the real capability change happens, and where the schedule risk lives.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  What actually goes wrong
&lt;/h2&gt;

&lt;p&gt;Three challenges, and each has one thing that contains it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Technical debt.&lt;/strong&gt; Legacy code makes every update slower than it should be. Contained by structured assessment first — you cannot sequence work you haven't inventoried.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Integration complexity.&lt;/strong&gt; Connecting modern components to legacy systems is where the unknown work hides. Contained by phased rollout, so an integration surprise costs one phase instead of the program.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security risk.&lt;/strong&gt; Changing infrastructure exposes new surface. Contained by continuous monitoring through the migration, not a review at the end.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of those three are technology problems. They're sequencing problems, which is why the assessment phase is the one worth over-investing in.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tie it to a number or it drifts
&lt;/h2&gt;

&lt;p&gt;Modernization without a defined outcome becomes an infrastructure project that nobody can defend at budget time. Three things keep it honest:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Named KPIs.&lt;/strong&gt; Cost per deploy, time to ship a feature, incident rate — whatever the constraint actually was. Define it before the work starts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cross-functional ownership.&lt;/strong&gt; IT, business, and operations working from the same target. Modernization that only engineering can explain the value of gets cut.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prioritized workloads.&lt;/strong&gt; Start with the applications where the constraint costs the business the most, not the ones easiest to migrate.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For context on scale: 83% of C-suite executives see app and data modernization as central to business strategy, and worldwide public cloud end-user spending was forecast at $723.4 billion for 2025, growing 21.5% year over year. The money is moving. Whether your slice of it removes a constraint or just relocates one depends on the sequencing above.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where AI helps, and where the data layer stops it
&lt;/h2&gt;

&lt;p&gt;Two things worth separating. AI &lt;em&gt;in&lt;/em&gt; the modernized system — automation, forecasting, analytics — needs clean, governed data to be worth anything. If the data layer is the actual blocker, that's the modernization project, and no amount of application refactoring routes around it.&lt;/p&gt;

&lt;p&gt;AI &lt;em&gt;in the migration&lt;/em&gt; is a different claim. It compresses the mechanical parts: reading unfamiliar code, generating tests for untested paths, drafting the boring half of a refactor. It doesn't compress the assessment or the integration work, because those are constrained by other people's systems and by decisions someone has to own.&lt;/p&gt;

&lt;p&gt;The sprint framing is the one part of the process worth copying regardless of scale: short iterative cycles against one measurable constraint, so you find out early whether the approach works. A modernization program that shows nothing for six months isn't lower risk than a rewrite. It's a rewrite with better branding.&lt;/p&gt;

&lt;p&gt;Start with what the architecture prevents, not with what would replace it.&lt;/p&gt;

&lt;p&gt;Full guide — all seven R's, the sprint model, and partner selection criteria: &lt;a href="https://dev.toREPLACE_WITH_LIVE_URL"&gt;see the full guide&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Written by Bohdan Varshchuk, CTO at Teamvoy. More engineering writing at &lt;a href="https://teamvoy.com/blog" rel="noopener noreferrer"&gt;teamvoy.com/blog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devops</category>
      <category>cloud</category>
      <category>architecture</category>
      <category>ai</category>
    </item>
    <item>
      <title>Every AI Readiness Score Skips the Part That Actually Blocks You</title>
      <dc:creator>Teamvoy</dc:creator>
      <pubDate>Tue, 01 Sep 2026 17:42:44 +0000</pubDate>
      <link>https://dev.to/teamvoy/every-ai-readiness-score-skips-the-part-that-actually-blocks-you-2ji7</link>
      <guid>https://dev.to/teamvoy/every-ai-readiness-score-skips-the-part-that-actually-blocks-you-2ji7</guid>
      <description>&lt;p&gt;Over 85% of AI projects fail to reach their full potential, and the reason is almost never that the model didn't work. It's infrastructure, data hygiene, governance, or missing skills.&lt;/p&gt;

&lt;p&gt;Which is what readiness assessments are supposed to catch. Except most of them stop exactly where the blocking problems start. They score strategy, data, infrastructure, governance, and culture — all at the level a survey can reach, filled in by one executive, without an engineer in the room.&lt;/p&gt;

&lt;p&gt;So you get a "governance: strong" rating that means a policy document exists. It does not mean a model-risk committee, a SOC 2 auditor, or an enterprise security team will accept that policy as evidence. Those are different questions, and you find out which one you were answering months later.&lt;/p&gt;

&lt;h2&gt;
  
  
  Score yourself before paying anyone
&lt;/h2&gt;

&lt;p&gt;Eight questions. More than two "no" answers means a formal assessment will find real gaps — useful information, not a reason to skip it.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Strategy&lt;/strong&gt; — Is there a named AI initiative with a defined business outcome, or is "we're exploring AI" the whole plan?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data&lt;/strong&gt; — Can the team point to the specific source an AI feature would read from, and confirm it's clean enough to trust?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Infrastructure&lt;/strong&gt; — Does the current setup support the latency and scaling the feature needs, or would it need rework first?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Governance&lt;/strong&gt; — Is there a named owner for AI decisions with a documented approval path, or does responsibility sit nowhere specific?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Culture&lt;/strong&gt; — Have the engineers who'd build this used the intended tools before, or would it be a first attempt under deadline pressure?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Codebase health&lt;/strong&gt; — Would a new engineer joining today understand the code well enough to safely add an AI component, or is onboarding already a multi-week process?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Evaluation coverage&lt;/strong&gt; — Is there any automated way to check whether a model's output is correct, or does a person read it?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Regulatory evidence&lt;/strong&gt; (regulated industries) — Can you produce model risk documentation, an audit trail, and a data residency answer today, or would all three be built from scratch?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Six or more "yes" and you're closer to production-ready than most tools assume by default. Fewer than four points at a real assessment before committing engineering time.&lt;/p&gt;

&lt;h2&gt;
  
  
  The two questions nobody's scorecard asks
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Codebase health.&lt;/strong&gt; This is the one that actually decides whether a pilot ships. 88% of organizations use AI in some form, but fewer than 20% track results for generative AI specifically — a measurement failure that starts in engineering, not strategy. Pilots stall for three repeating reasons: the codebase is too tangled to hold a new component safely, test coverage is thin enough that every change risks something else, and the team is overloaded or missing the specific skills the project assumed. None of those show up on a strategy survey.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Eval coverage.&lt;/strong&gt; If correctness is checked by a person reading output, you don't have evaluation, you have review. That works until volume arrives.&lt;/p&gt;

&lt;h2&gt;
  
  
  If you're regulated, "governance" is six separate things
&lt;/h2&gt;

&lt;p&gt;A generic assessment treats governance as one pillar. For a bank, lender, payments company, or insurer it has to produce evidence someone external will accept:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Model risk management&lt;/strong&gt; — SR 11-7-style validation. Who approved the model, what it was tested against, how drift is monitored after deployment.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audit trail&lt;/strong&gt; — every model decision that touched a real transaction, retained and retrievable, not logged and forgotten.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data residency&lt;/strong&gt; — where training and inference data physically sits, and whether a provider outside the EU ever touches EU customer data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;EU AI Act classification&lt;/strong&gt; — whether the feature is high-risk, which changes the documentation burden &lt;em&gt;before&lt;/em&gt; deployment.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SOC 2 and PCI DSS&lt;/strong&gt; — proof the AI layer didn't open a gap in controls that were already passing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;FFIEC and NYDFS Part 500&lt;/strong&gt; — examiner expectations for third-party risk now extend to AI vendors and AI-generated decisions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pass a generic assessment on governance, then stall in compliance review months later. Same failure the assessment was meant to prevent, just moved downstream.&lt;/p&gt;

&lt;h2&gt;
  
  
  If you're AI-native, the question is inverted
&lt;/h2&gt;

&lt;p&gt;You're not asking "can we deploy AI safely." You're asking "will our product survive an enterprise buyer's security review." Five things get asked, in roughly this order:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Multi-tenancy isolation&lt;/strong&gt; — can one customer's data, prompts, or fine-tuning artifacts reach another's session? This is the first question, every time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Eval harness maturity&lt;/strong&gt; — automated evaluation covering multi-step paths, not a spot check before release.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;RAG infrastructure&lt;/strong&gt; — document versioning, access control at the chunk level, stale-index detection.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Production monitoring&lt;/strong&gt; — observability on every model and tool call, so a bad output traces back to the input that caused it instead of being reported by a customer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SOC 2 readiness&lt;/strong&gt; — whether the posture needed to close the deal exists or is aspirational in a deck.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Score well on a generic readiness tool and still lose the deal, because the tool never asked any of these.&lt;/p&gt;

&lt;h2&gt;
  
  
  The mistakes that turn a diagnostic into shelfware
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Treating the score as pass/fail. A 60% isn't a verdict, it's an ordered list of what to fix. Waiting for a perfect score delays a project that could have shipped after three specific fixes.&lt;/li&gt;
&lt;li&gt;Running it without the engineers who'd build the feature.&lt;/li&gt;
&lt;li&gt;Never re-running it. Readiness changes as gaps close, and you have no way to confirm the fixes worked.&lt;/li&gt;
&lt;li&gt;Choosing by brand recognition rather than scope. A strategy tool answers whether leadership is aligned. An engineering tool answers whether the codebase can carry what's planned. They aren't substitutes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The useful thing about a readiness assessment isn't the number. It's finding out, before the budget moves, which of these questions you can't currently answer.&lt;/p&gt;

&lt;p&gt;Full comparison of ten tools — what each scores, who it fits, what it costs: &lt;a href="https://teamvoy.com/blog/best-ai-readiness-assessment-tools-in-2026/" rel="noopener noreferrer"&gt;teamvoy.com/blog/best-ai-readiness-assessment-tools-in-2026&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Written by Zhanna Yuskevych, CPO at Teamvoy. More engineering writing at &lt;a href="https://teamvoy.com/blog" rel="noopener noreferrer"&gt;teamvoy.com/blog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>aiops</category>
      <category>webdev</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Most of You Should Not Be Custom-Building an Ecommerce Store</title>
      <dc:creator>Teamvoy</dc:creator>
      <pubDate>Mon, 31 Aug 2026 12:08:25 +0000</pubDate>
      <link>https://dev.to/teamvoy/most-of-you-should-not-be-custom-building-an-ecommerce-store-355m</link>
      <guid>https://dev.to/teamvoy/most-of-you-should-not-be-custom-building-an-ecommerce-store-355m</guid>
      <description>&lt;p&gt;Ecommerce projects rarely get hard because of the storefront. They get hard when the storefront has to meet the needs of the rest of the business.&lt;/p&gt;

&lt;p&gt;Inventory already lives somewhere. Orders land somewhere else. Finance has its own systems. Payments drag security and compliance into scope. And the platform picked in month one defines what's easy, expensive, or impossible two years later.&lt;/p&gt;

&lt;p&gt;Which is why the first question shouldn't be Shopify vs Magento vs WooCommerce vs custom. Starting there means arguing about features before anyone understands the constraints. The better opening question: what are we actually building, and which parts genuinely need to be custom?&lt;/p&gt;

&lt;p&gt;For most people reading this, the honest answer is buy a platform and move on.&lt;/p&gt;

&lt;h2&gt;
  
  
  The phase ordering that costs the most
&lt;/h2&gt;

&lt;p&gt;Seven phases: discovery, architecture and platform selection, design, build and integration, data migration, compliance and security review, launch and first optimization. Four to seven months for a mid-market build.&lt;/p&gt;

&lt;p&gt;The sequence matters more than the labels, and one inversion is expensive above all others: &lt;strong&gt;choosing a platform before you've scoped compliance.&lt;/strong&gt; Do it in that order and a compliance finding can force a re-architecture eight weeks into the build.&lt;/p&gt;

&lt;p&gt;Two phases account for most overruns:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Build slips because discovery missed a system.&lt;/strong&gt; The integration nobody scoped in phase 1 surfaces two months late, when the schedule has no slack left. Discovery in commerce isn't about pages — it's about finding every system holding a number the store needs, &lt;em&gt;and&lt;/em&gt; finding who can grant access to it. That list is always longer than the brief.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compliance review slips because it was treated as a formality.&lt;/strong&gt; Remediation lands on a team that has already released its engineers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both are schedule problems created long before they appear.&lt;/p&gt;

&lt;p&gt;Staffing note worth agreeing in writing before kickoff: phases 1, 2, and 6 need someone on the client side — a person who can get you into the ERP, whoever signs the contract, and named owners for the payment page and accessibility. Phases 3, 4, and 5 can sit almost entirely with the build team. The three phases you have to staff are the three that stall when nobody's free.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three dates that already passed
&lt;/h2&gt;

&lt;p&gt;These are no longer planning questions. They're evidence questions.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;PCI DSS v4.0.1 req 6.4.3 and 11.6.1&lt;/strong&gt;, in force since 2025-03-31. Inventory every script on the payment page, authorize each one, justify why it's there, and detect unauthorized changes to page headers and content. The catch: the scripts in question are usually marketing tags nobody in engineering added. PCI now has an owner problem — the tag manager on checkout needs a named owner and an approval step.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;European Accessibility Act, Art. 2(2)(f)&lt;/strong&gt;, applying after 2025-06-28 to ecommerce services sold to EU consumers. Measured against EN 301 549, which points at WCAG. "We'll do accessibility after launch" is now a statement about legal exposure, not backlog priority.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GDPR / CCPA / CPRA&lt;/strong&gt;, unchanged but load-bearing. Consent, access, and deletion paths wired into the customer data model rather than bolted on. If a deletion request can't be executed against the customer record without an engineer, it doesn't scale past the first hundred.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Accessibility written as an acceptance criterion in phase 3 costs days. Discovered in phase 6, it costs weeks. Same work, different bill.&lt;/p&gt;

&lt;h2&gt;
  
  
  Checkout: the causes are business decisions, not design problems
&lt;/h2&gt;

&lt;p&gt;The average documented cart abandonment rate is 70.22% (Baymard, across 50 studies, updated 2025-09-22). Among shoppers who intended to buy, the top causes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Extra costs shown too late — shipping, tax, fees — at 40%.&lt;/li&gt;
&lt;li&gt;Slow delivery, 20%.&lt;/li&gt;
&lt;li&gt;Distrust of the payment form, 19%.&lt;/li&gt;
&lt;li&gt;Forced account creation, 18%.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Three of those four are decisions no redesign can make on your behalf. In order of what actually abandons carts: show the full total on the cart page, offer guest checkout, give a real delivery date rather than a shipping-method name, make the payment step look like a payment step, and cut every optional field.&lt;/p&gt;

&lt;p&gt;Run A/B tests only after those five are in place. Below a few thousand checkouts a month you don't have the traffic to detect a one-point conversion change without weeks per variant, and teams routinely call the result on day four because the chart looks decided. Testing earns its place above the checkout — category layouts, product page structure, price and delivery presentation — where there's more traffic per decision.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where AI actually earns its place
&lt;/h2&gt;

&lt;p&gt;The test: does the model's output change a decision somebody was already making on worse information?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Demand forecasting and replenishment.&lt;/strong&gt; Output is a purchase order quantity. Error is countable against what sold.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fraud and chargeback scoring.&lt;/strong&gt; Output is a score with a threshold. Both false positives and false negatives show up in the finance report — which means the review interface is in scope, not a follow-up.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Search and merchandising&lt;/strong&gt;, but above roughly ten thousand SKUs, where manual merchandising already stopped covering the tail.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Where it doesn't: personalization on a 200-SKU catalog has too little behaviour to learn from and the engineering cost lands anyway. Dynamic pricing on consumer goods invites a customer to screenshot two prices and post them. Generated product copy at scale reads like generated product copy at scale, on exactly the pages you wanted indexed.&lt;/p&gt;

&lt;p&gt;Separately — AI &lt;em&gt;in the build&lt;/em&gt; is a different question from AI &lt;em&gt;in the store&lt;/em&gt;. Coding assistants compress phases 3 and 4. They don't touch 1, 5, or 6, which is where the schedule risk lives, because those are constrained by other people's systems and by evidence someone has to sign.&lt;/p&gt;

&lt;h2&gt;
  
  
  Composable, honestly
&lt;/h2&gt;

&lt;p&gt;Headless decouples the front end and is a configuration option on several hosted platforms. Composable replaces the engine with separate services. Headless is a weekend of architecture; composable is a program of work. The terms get used interchangeably and shouldn't be.&lt;/p&gt;

&lt;p&gt;On a composable build, expect the first feature to take four to six weeks longer than on a coupled platform, and expect payback to start around the third. If your roadmap has three changes in it, the arithmetic doesn't work.&lt;/p&gt;

&lt;p&gt;You also inherit a service layer somebody maintains, and six services that fail in more ways than one platform does. "Wanting to be modern" is not a reason. Multi-channel selling from one inventory, or business rules no vendor has productized, are.&lt;/p&gt;

&lt;p&gt;If the reason is real, migrate incrementally: routing layer in front of the existing store, move one capability behind it, run both, move the next. Search and product content first — read-heavy, low-risk. Checkout near the end, because it handles the money and the compliance scope. Teams that move checkout first take the program's largest risk before learning anything.&lt;/p&gt;

&lt;h2&gt;
  
  
  The three-year number
&lt;/h2&gt;

&lt;p&gt;Build cost is the number in the quote and the smaller half of the decision. A $70,000 build with $12,000 annual maintenance and $1,500 a month in platform fees is a $160,000 commitment before a single new feature ships.&lt;/p&gt;

&lt;p&gt;Price every platform over three years, because the fee structures behave differently: revenue-percentage platforms get more expensive as you succeed, self-hosted charges you in engineering hours whether you grow or not, licence-plus-build front-loads and holds steady. Ask each vendor what the bill looks like at three times current volume, and get it in writing. That belongs in phase 2, not the post-launch review.&lt;/p&gt;

&lt;p&gt;And then the question underneath all of it. Under roughly $5M in annual online revenue, with a standard catalog and standard checkout, buying wins on price, time, and risk. Custom development is the answer to a named business rule you can attach a cost to living without — never to a general preference for control.&lt;/p&gt;

&lt;p&gt;Full breakdown — all seven phases, the platform comparison table, and the build-vs-buy signals: &lt;a href="https://dev.toREPLACE_WITH_LIVE_URL"&gt;see the full guide&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Written by Bohdan Varshchuk, CTO at Teamvoy. More engineering writing at &lt;a href="https://teamvoy.com/blog" rel="noopener noreferrer"&gt;teamvoy.com/blog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>ecommerce</category>
      <category>productivity</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
