<?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: Enoch Chan</title>
    <description>The latest articles on DEV Community by Enoch Chan (@enochchan).</description>
    <link>https://dev.to/enochchan</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%2F4068091%2F68809527-e022-4202-902f-0f909e65525f.jpg</url>
      <title>DEV Community: Enoch Chan</title>
      <link>https://dev.to/enochchan</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/enochchan"/>
    <language>en</language>
    <item>
      <title>Google Preferred Sources: reader choice, not a ranking guarantee</title>
      <dc:creator>Enoch Chan</dc:creator>
      <pubDate>Mon, 24 Aug 2026 09:41:16 +0000</pubDate>
      <link>https://dev.to/enochchan/google-preferred-sources-reader-choice-not-a-ranking-guarantee-32da</link>
      <guid>https://dev.to/enochchan/google-preferred-sources-reader-choice-not-a-ranking-guarantee-32da</guid>
      <description>&lt;h1&gt;
  
  
  Google Preferred Sources: reader choice, not a ranking guarantee
&lt;/h1&gt;

&lt;p&gt;Google documents an interactive Preferred Sources button that can return readers to the page after they complete the selection flow. For publishers, the useful question is not how to promise a search outcome. It is where a reader who already values the publication can make a preference explicit and continue reading.&lt;/p&gt;

&lt;p&gt;The safe message is simple: make the action easy to find, explain what the reader is confirming, and keep the experience tied to an existing trust moment such as the article end or publication information area. Do not turn that reader preference into a ranking, traffic, or eligibility guarantee.&lt;/p&gt;

&lt;p&gt;A short implementation review can therefore follow three steps: choose, confirm, and return. The page should make the action understandable without imitating Google UI or inventing proof. The exact Google documentation remains the source for the feature details and eligibility boundaries.&lt;/p&gt;

</description>
      <category>google</category>
      <category>search</category>
      <category>seo</category>
    </item>
    <item>
      <title>Hydrogen pageviews: verify what client-side navigation actually emits</title>
      <dc:creator>Enoch Chan</dc:creator>
      <pubDate>Sat, 22 Aug 2026 22:18:53 +0000</pubDate>
      <link>https://dev.to/enochchan/hydrogen-pageviews-verify-what-client-side-navigation-actually-emits-6j1</link>
      <guid>https://dev.to/enochchan/hydrogen-pageviews-verify-what-client-side-navigation-actually-emits-6j1</guid>
      <description>&lt;h1&gt;
  
  
  Hydrogen pageviews: verify what client-side navigation actually emits
&lt;/h1&gt;

&lt;p&gt;Shopify's August 18, 2026 Hydrogen developer preview includes a specific observability change: every navigation now emits a page view. The safe takeaway is scoped. It is not a claim that every Shopify storefront was losing pageviews, and it is not a promise of better revenue attribution. It is a reason to test the Hydrogen version and analytics path you actually run.&lt;/p&gt;

&lt;h2&gt;
  
  
  The useful test
&lt;/h2&gt;

&lt;p&gt;Start with one initial page load. Navigate through two client-side routes. Then inspect the events that arrived, including their route context and timestamps. Compare what your instrumentation recorded with the navigation sequence you performed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the distinction matters
&lt;/h2&gt;

&lt;p&gt;A single recorded pageview can hide what happened after the first load when a storefront behaves like an app. Treating the first load as the whole session can make a team reason from incomplete telemetry. The practical check is simple: load, navigate, verify.&lt;/p&gt;

&lt;p&gt;Keep the result tied to the Hydrogen developer preview scope described by Shopify. If the event trail differs from the behaviour described in the preview, record the deployed version and investigate the analytics integration rather than generalising from one test.&lt;/p&gt;

&lt;p&gt;Source: &lt;a href="https://shopify.dev/changelog/hydrogen-developer-preview-update-august-18-2026" rel="noopener noreferrer"&gt;Shopify Hydrogen developer preview update: August 18, 2026&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>analytics</category>
      <category>frontend</category>
      <category>testing</category>
      <category>webdev</category>
    </item>
    <item>
      <title>From views to a feedback loop: a three-step rule for new accounts</title>
      <dc:creator>Enoch Chan</dc:creator>
      <pubDate>Fri, 21 Aug 2026 07:17:31 +0000</pubDate>
      <link>https://dev.to/enochchan/from-views-to-a-feedback-loop-a-three-step-rule-for-new-accounts-4ch5</link>
      <guid>https://dev.to/enochchan/from-views-to-a-feedback-loop-a-three-step-rule-for-new-accounts-4ch5</guid>
      <description>&lt;h1&gt;
  
  
  Views are exposure, not a conversation
&lt;/h1&gt;

&lt;p&gt;YouTube's official creator guidance makes a useful distinction: views do not automatically equal fans, and community is built through conversation rather than monologue. The exact Shorts features are platform-specific, so the transferable idea is a behaviour loop rather than a universal feature claim.&lt;/p&gt;

&lt;h2&gt;
  
  
  The loop
&lt;/h2&gt;

&lt;p&gt;Ask one answerable question. Listen for repeated answers, objections or examples. Reply with the next useful post. That changes a one-way calendar into a feedback loop: POST → RESPONSE → NEXT POST.&lt;/p&gt;

&lt;p&gt;The point is not manufactured comments or a guaranteed audience outcome. It is to make participation easy enough that a real response can shape what comes next. The source describes polls, quizzes, Q&amp;amp;A, Add Yours stickers and video replies as YouTube Shorts features; use those examples only on YouTube and adapt the underlying conversation mechanic carefully elsewhere.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical check
&lt;/h2&gt;

&lt;p&gt;Before publishing, ask: what can someone answer in one sentence, what response would change the next post, and how will the reply visibly acknowledge that input? Those questions turn a broad audience-growth ambition into an observable editorial workflow.&lt;/p&gt;

&lt;p&gt;Source: &lt;a href="https://blog.youtube/creator-and-artist-stories/grow-youtube-channel-interactive-shorts/" rel="noopener noreferrer"&gt;https://blog.youtube/creator-and-artist-stories/grow-youtube-channel-interactive-shorts/&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Why integrations fail quietly</title>
      <dc:creator>Enoch Chan</dc:creator>
      <pubDate>Wed, 19 Aug 2026 08:34:53 +0000</pubDate>
      <link>https://dev.to/enochchan/why-integrations-fail-quietly-3b7f</link>
      <guid>https://dev.to/enochchan/why-integrations-fail-quietly-3b7f</guid>
      <description>&lt;h1&gt;
  
  
  Why integrations fail quietly
&lt;/h1&gt;

&lt;p&gt;An integration can be technically connected while still being operationally fragile. A request may time out, a downstream system may reject a value, or a retry may happen without anyone knowing what changed. The danger is not only the error. It is the silence around the error.&lt;/p&gt;

&lt;p&gt;A useful first step is to map one real workflow from request to outcome. Name the system that owns each important field. Decide which failures are safe to retry and which need a human decision. Then log the handoff in a way that lets someone answer three questions: what happened, where did it stop, and what should happen next?&lt;/p&gt;

&lt;p&gt;This is a small control loop, not a promise to connect every tool. Start with one flow, make the failure path visible, and only then add more automation.&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>monitoring</category>
      <category>systemdesign</category>
    </item>
    <item>
      <title>Search Beyond Your Website</title>
      <dc:creator>Enoch Chan</dc:creator>
      <pubDate>Mon, 17 Aug 2026 10:04:33 +0000</pubDate>
      <link>https://dev.to/enochchan/search-beyond-your-website-4l0m</link>
      <guid>https://dev.to/enochchan/search-beyond-your-website-4l0m</guid>
      <description>&lt;h1&gt;
  
  
  Search beyond your website
&lt;/h1&gt;

&lt;p&gt;Social and video teams often judge a post through native reach, likes, comments or watch time. Google discovery is a separate evidence layer, and it can answer a different question: which posts and queries are earning attention from Google Search and Discover?&lt;/p&gt;

&lt;p&gt;Google Search Console platform properties can show how Instagram, TikTok, X and YouTube content performs on Google Search and Discover. The reporting can also show which queries and posts drive Google discovery, including clicks and impressions.&lt;/p&gt;

&lt;p&gt;That does not make Search Console a replacement for native analytics. Google discovery is not total in-platform reach or engagement, and discovery alone does not prove conversion. The useful workflow is to keep the two layers separate, then compare them before choosing the next topic or format.&lt;/p&gt;

&lt;h2&gt;
  
  
  A bounded review rule
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Start with the native-platform signal your team already tracks.&lt;/li&gt;
&lt;li&gt;Check the relevant Search Console platform property.&lt;/li&gt;
&lt;li&gt;Compare the queries and posts earning Google discovery.&lt;/li&gt;
&lt;li&gt;Choose the next experiment only after looking at both evidence layers.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This keeps a discovery signal from becoming an exaggerated reach claim. It also gives content operators a practical reason to review search data alongside their existing social workflow.&lt;/p&gt;

&lt;p&gt;The source for the platform-property claim is &lt;a href="https://developers.google.com/search/blog/2026/07/search-console-social-video-platforms" rel="noopener noreferrer"&gt;Google Search Central&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>analytics</category>
      <category>seo</category>
      <category>socialmedia</category>
    </item>
    <item>
      <title>Inventory Moved Buckets, Not Totals</title>
      <dc:creator>Enoch Chan</dc:creator>
      <pubDate>Sun, 16 Aug 2026 19:19:08 +0000</pubDate>
      <link>https://dev.to/enochchan/inventory-moved-buckets-not-totals-3b96</link>
      <guid>https://dev.to/enochchan/inventory-moved-buckets-not-totals-3b96</guid>
      <description>&lt;h1&gt;
  
  
  Inventory moved buckets, not totals
&lt;/h1&gt;

&lt;p&gt;Shopify says certain active holds from draft orders and transfer shipments are moving from reserved to committed. The available, on-hand and total inventory values remain unchanged in this migration.&lt;/p&gt;

&lt;p&gt;That distinction matters in competitor research and operations reporting. A bucket label can move while the underlying inventory totals stay fixed. If a dashboard only shows the bucket delta, it is easy to escalate a reporting migration as though stock changed.&lt;/p&gt;

&lt;h2&gt;
  
  
  A bounded review rule
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Timestamp the change&lt;/strong&gt; — record when the bucket movement appeared.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Add platform context&lt;/strong&gt; — note the Shopify change before interpreting the metric.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check the totals&lt;/strong&gt; — compare available, on-hand and total before calling it a real stock event.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is a measurement and systems-design rule, not a claim that every reserved inventory movement is covered. The &lt;a href="https://shopify.dev/changelog/draft-order-and-transfer-shipment-inventory-is-moving-from-reserved-to-committed" rel="noopener noreferrer"&gt;Shopify changelog&lt;/a&gt; is the source for the specific migration.&lt;/p&gt;

</description>
      <category>analytics</category>
      <category>operations</category>
      <category>product</category>
    </item>
    <item>
      <title>Can an EPOS Audit Trail Prove What Changed?</title>
      <dc:creator>Enoch Chan</dc:creator>
      <pubDate>Sat, 15 Aug 2026 22:05:28 +0000</pubDate>
      <link>https://dev.to/enochchan/can-an-epos-audit-trail-prove-what-changed-5chi</link>
      <guid>https://dev.to/enochchan/can-an-epos-audit-trail-prove-what-changed-5chi</guid>
      <description>&lt;h1&gt;
  
  
  Can an EPOS audit trail prove what changed?
&lt;/h1&gt;

&lt;p&gt;HMRC is consulting on proposed EPOS/MPOS software standards until 18 August 2026. The proposed package includes an unalterable and complete transaction log with individual transactions and adjustments indelibly linked in an encrypted chain. These are consultation-stage proposals, not current final standards.&lt;/p&gt;

&lt;p&gt;The practical engineering question is broader than the policy context: when a sale changes, does the system preserve the original state, record the adjustment explicitly and keep the relationship between both states traceable? A final value by itself may be easy to read, but it does not necessarily explain what changed or how a reviewer can reconstruct the path.&lt;/p&gt;

&lt;h2&gt;
  
  
  A simple review rule
&lt;/h2&gt;

&lt;p&gt;Use three visible states:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Original&lt;/strong&gt; — retain the first recorded transaction.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Adjustment&lt;/strong&gt; — represent the correction as a distinct event.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Linked history&lt;/strong&gt; — preserve the relationship so the change can be followed later.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is an audit-trail design test, not tax advice and not a claim that the consultation proposals are already mandatory. The &lt;a href="https://www.gov.uk/government/consultations/electronic-sales-suppression-introduction-of-software-standards/electronic-sales-suppression-introduction-of-software-standards-in-eposmpos-systems" rel="noopener noreferrer"&gt;HM Revenue &amp;amp; Customs consultation&lt;/a&gt; is the source for the policy context; the implementation process and timeline have not yet been decided.&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>database</category>
      <category>software</category>
    </item>
    <item>
      <title>How to Read a Competitor Review-Count Change</title>
      <dc:creator>Enoch Chan</dc:creator>
      <pubDate>Fri, 14 Aug 2026 09:55:43 +0000</pubDate>
      <link>https://dev.to/enochchan/how-to-read-a-competitor-review-count-change-2lnn</link>
      <guid>https://dev.to/enochchan/how-to-read-a-competitor-review-count-change-2lnn</guid>
      <description>&lt;h1&gt;
  
  
  How to read a competitor review-count change
&lt;/h1&gt;

&lt;p&gt;A competitor app review count can move while the cause remains uncertain. Treat the movement as an observed delta, not as automatic proof that customer demand changed.&lt;/p&gt;

&lt;p&gt;Shopify said on 6 July 2026 that expanded authenticity signals apply to existing and new App Store reviews, and reviews that do not meet its authenticity bar will be unpublished gradually during the backfill. That platform context matters when a team compares counts across dates.&lt;/p&gt;

&lt;h2&gt;
  
  
  A bounded monitoring rule
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Timestamp the count and preserve the before/after observation.&lt;/li&gt;
&lt;li&gt;Annotate known platform-policy or moderation context.&lt;/li&gt;
&lt;li&gt;Keep the conclusion narrow: the count changed; the cause still needs evidence.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This approach avoids turning a useful competitive signal into an unsupported demand story. Pair the count with other evidence before making a product or market decision.&lt;/p&gt;

</description>
      <category>analytics</category>
      <category>monitoring</category>
      <category>reviews</category>
    </item>
    <item>
      <title>When an empty Shopify result is a broken filter</title>
      <dc:creator>Enoch Chan</dc:creator>
      <pubDate>Thu, 13 Aug 2026 09:46:02 +0000</pubDate>
      <link>https://dev.to/enochchan/when-an-empty-shopify-result-is-a-broken-filter-34c</link>
      <guid>https://dev.to/enochchan/when-an-empty-shopify-result-is-a-broken-filter-34c</guid>
      <description>&lt;h1&gt;
  
  
  When an empty Shopify result is a broken filter
&lt;/h1&gt;

&lt;p&gt;An empty API result is not automatically proof that there is no data. The filter itself may be invalid, and a silent response can make that failure look like a business fact.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 2026-10 change
&lt;/h2&gt;

&lt;p&gt;Shopify’s official changelog says that, starting in API version 2026-10, invalid metafield filters return an explanatory error instead of silently returning misleading results. The release is scheduled for 1 October 2026; 2026-07 and earlier retain previous behaviour until upgrade.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three checks before trusting an empty result
&lt;/h2&gt;

&lt;p&gt;First, confirm that the metafield has a definition. Second, confirm that filtering is enabled for it. Third, confirm that the comparison is supported. A valid filter using a supported comparison behaves as before; the point is to distinguish a valid empty result from an invalid query.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical migration rule
&lt;/h2&gt;

&lt;p&gt;Inventory metafield-filter queries before upgrading, test each one against the target version, and treat an explanatory error as a query defect rather than “no data”. That small check keeps a silent filter problem from becoming an unverified product or reporting assumption.&lt;/p&gt;

&lt;p&gt;Source: &lt;a href="https://shopify.dev/changelog/invalid-metafield-queries-now-return-errors-in-the-graphql-admin-api" rel="noopener noreferrer"&gt;Shopify — Invalid metafield queries now return errors in the GraphQL Admin API&lt;/a&gt;&lt;/p&gt;

</description>
      <category>api</category>
      <category>software</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Which suppliers need Cyber Essentials?</title>
      <dc:creator>Enoch Chan</dc:creator>
      <pubDate>Wed, 12 Aug 2026 08:45:54 +0000</pubDate>
      <link>https://dev.to/enochchan/which-suppliers-need-cyber-essentials-1fi5</link>
      <guid>https://dev.to/enochchan/which-suppliers-need-cyber-essentials-1fi5</guid>
      <description>&lt;h1&gt;
  
  
  Which suppliers need Cyber Essentials?
&lt;/h1&gt;

&lt;p&gt;The voluntary UK Cyber Resilience Pledge gives signatories a useful supplier-assurance rule: audit Cyber Essentials coverage across the supply chain, then use supplier risk to decide where certification is required. It is not a universal legal duty and it does not say every supplier must hold Cyber Essentials.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with coverage
&lt;/h2&gt;

&lt;p&gt;First, establish which suppliers already hold Cyber Essentials and where coverage is absent or unclear. A coverage audit turns a vague policy discussion into a visible supplier list that can be reviewed by the people responsible for risk.&lt;/p&gt;

&lt;h2&gt;
  
  
  Assess supplier risk
&lt;/h2&gt;

&lt;p&gt;The declaration calls for a risk-based approach. That means the requirement should follow the supplier's role, access, dependency and potential impact rather than one blanket checklist. The public guidance does not prescribe one scoring model, so organisations still need to define their own risk appetite and decision ownership.&lt;/p&gt;

&lt;h2&gt;
  
  
  Choose the assurance path
&lt;/h2&gt;

&lt;p&gt;Where risk justifies it, require Cyber Essentials. Where certification is not required, the declaration says the exception should align with organisational risk appetite and strategy, and adequate assurance should be obtained through other means. Record the reason, the alternative evidence and the reviewer.&lt;/p&gt;

&lt;p&gt;A reusable workflow is: &lt;strong&gt;coverage → risk → requirement → evidence&lt;/strong&gt;. Keep each supplier decision tied to the evidence that supports it, and revisit the decision when the supplier's access, service or risk changes.&lt;/p&gt;

&lt;p&gt;Sources:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.gov.uk/government/publications/cyber-resilience-pledge/cyber-resilience-pledge-declaration" rel="noopener noreferrer"&gt;Cyber Resilience Pledge declaration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.gov.uk/government/publications/cyber-resilience-pledge" rel="noopener noreferrer"&gt;Cyber Resilience Pledge overview&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>cybersecurity</category>
      <category>infosec</category>
      <category>security</category>
    </item>
    <item>
      <title>Why a live payment is not a release test</title>
      <dc:creator>Enoch Chan</dc:creator>
      <pubDate>Tue, 11 Aug 2026 09:35:41 +0000</pubDate>
      <link>https://dev.to/enochchan/why-a-live-payment-is-not-a-release-test-c4c</link>
      <guid>https://dev.to/enochchan/why-a-live-payment-is-not-a-release-test-c4c</guid>
      <description>&lt;h1&gt;
  
  
  Why a live payment is not a release test
&lt;/h1&gt;

&lt;p&gt;The riskiest way to test a SaaS checkout is to make a real payment to yourself. It feels reassuring: the live checkout opened, the card worked, the webhook fired and the refund came back. But that proof mixes engineering QA with revenue evidence.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three different proofs
&lt;/h2&gt;

&lt;p&gt;A cleaner billing release process separates three questions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Does billing behave correctly?&lt;/strong&gt; Test payment, refund, webhook and subscription edge cases in a Stripe sandbox.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Is production configured correctly?&lt;/strong&gt; Verify the live price, currency, checkout destination, webhook configuration and deployed revision without moving money.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Did a customer pay?&lt;/strong&gt; Treat a genuine live transaction as customer activity and revenue evidence, not as an engineering fixture.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Stripe documents sandboxes as isolated testing environments and separates sandbox credentials from live credentials. The practical lesson is broader than Stripe: operational proof and commercial proof should not share the same transaction.&lt;/p&gt;

&lt;h2&gt;
  
  
  A useful boundary
&lt;/h2&gt;

&lt;p&gt;Use this sequence: &lt;strong&gt;Sandbox QA → read-only production verification → genuine customer payment&lt;/strong&gt;. It keeps release evidence, reconciliation and revenue numbers easier to interpret.&lt;/p&gt;

&lt;p&gt;We recently tightened the same boundary in VendorOS. That does not prove live customer revenue; it is a workflow lesson about keeping evidence categories separate.&lt;/p&gt;

&lt;p&gt;If your release process still requires a live self-payment, ask which part of the verification can become read-only.&lt;/p&gt;

&lt;p&gt;Sources:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.stripe.com/sandboxes" rel="noopener noreferrer"&gt;Stripe Sandboxes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.stripe.com/keys" rel="noopener noreferrer"&gt;Stripe API keys&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.stripe.com/testing" rel="noopener noreferrer"&gt;Stripe testing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/enoch11230945/vendoros/commit/d85ca2861edc418c884d8cc5eae273525723ffc4" rel="noopener noreferrer"&gt;VendorOS release boundary&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>saas</category>
      <category>productivity</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>A Five-Part Evidence Check for ICT Supplier Due Diligence</title>
      <dc:creator>Enoch Chan</dc:creator>
      <pubDate>Mon, 10 Aug 2026 11:25:09 +0000</pubDate>
      <link>https://dev.to/enochchan/a-five-part-evidence-check-for-ict-supplier-due-diligence-1bhd</link>
      <guid>https://dev.to/enochchan/a-five-part-evidence-check-for-ict-supplier-due-diligence-1bhd</guid>
      <description>&lt;p&gt;Supplier questionnaires are useful, but completion is not the same as due diligence.&lt;/p&gt;

&lt;p&gt;NIST SP 1326, finalised on 8 July 2026, defines five Due Diligence Assessment components for ICT suppliers: Foreign Ownership, Control, or Influence (FOCI); Provenance; Resilience; Foundational Cyber Practices; and Supply Chain Tiers.&lt;/p&gt;

&lt;p&gt;Turn each component into an evidence test. For FOCI, record the relevant evidence and any uncertainty. For provenance, record the evidence available about origin. For resilience, capture the evidence the review relies on. For foundational cyber practices, record concrete supporting material. For supply-chain tiers, identify the evidence available about relevant upstream dependencies.&lt;/p&gt;

&lt;p&gt;Before approval, a practical internal rule is to record one of three things for each component: an evidence note, an explicit gap, or a named risk acceptance. That creates a clearer decision record than treating questionnaire completion as the end of the review.&lt;/p&gt;

&lt;p&gt;SP 1326 is NIST guidance scoped to ICT supplier due diligence. It should not be presented as a universal legal requirement.&lt;/p&gt;

&lt;p&gt;VendorOS can be used as evidence-workflow context for questionnaire review and explicit approval. The five-part framework itself comes from NIST.&lt;/p&gt;

</description>
      <category>security</category>
      <category>productivity</category>
      <category>saas</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
