<?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: Lucas S.</title>
    <description>The latest articles on DEV Community by Lucas S. (@thefirstfilelegal).</description>
    <link>https://dev.to/thefirstfilelegal</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%2F4086473%2Fa5dd5928-2516-4a6e-a301-c1783a4d9035.png</url>
      <title>DEV Community: Lucas S.</title>
      <link>https://dev.to/thefirstfilelegal</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/thefirstfilelegal"/>
    <language>en</language>
    <item>
      <title>Shipping a Cloud Product? Build Privacy and Contract Risk Into the Architecture</title>
      <dc:creator>Lucas S.</dc:creator>
      <pubDate>Thu, 20 Aug 2026 10:48:43 +0000</pubDate>
      <link>https://dev.to/thefirstfilelegal/shipping-a-cloud-product-build-privacy-and-contract-risk-into-the-architecture-3n90</link>
      <guid>https://dev.to/thefirstfilelegal/shipping-a-cloud-product-build-privacy-and-contract-risk-into-the-architecture-3n90</guid>
      <description>&lt;p&gt;&lt;em&gt;By Lucas S., independent writer and researcher. This article provides general educational information, not legal advice.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A cloud product can pass its test suite and still ship with a structural problem: the system does something the company cannot accurately describe, limit, or promise.&lt;/p&gt;

&lt;p&gt;That gap often appears late. A prospective customer asks where its data is stored. Security wants a complete subprocessor list. Legal discovers that “delete” means removing a database row while backups, logs, analytics events, and derived embeddings remain. Sales has already promised a recovery objective the platform has never tested.&lt;/p&gt;

&lt;p&gt;None of these is only a paperwork issue. They are architecture issues with privacy and contract consequences.&lt;/p&gt;

&lt;p&gt;The useful engineering question is therefore not “How do we make the lawyers happy before launch?” It is: &lt;strong&gt;Can the system prove that its behavior matches the claims and commitments the business makes about it?&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with the data path, not the privacy policy
&lt;/h2&gt;

&lt;p&gt;Before assigning controls, model the complete path of each important data class:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;collection -&amp;gt; validation -&amp;gt; primary storage -&amp;gt; replication -&amp;gt; processing
           -&amp;gt; logs/telemetry -&amp;gt; exports -&amp;gt; backups -&amp;gt; deletion
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Do this separately for account data, customer content, secrets, billing records, support attachments, device identifiers, and any sensitive or regulated data. A single box labeled “customer data” hides the decisions that matter.&lt;/p&gt;

&lt;p&gt;For each transition, record:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the service and region involved;&lt;/li&gt;
&lt;li&gt;whether the data is encrypted and who controls the keys;&lt;/li&gt;
&lt;li&gt;the identities, roles, and service accounts that can read or alter it;&lt;/li&gt;
&lt;li&gt;the retention trigger and deletion mechanism;&lt;/li&gt;
&lt;li&gt;every external processor that receives it;&lt;/li&gt;
&lt;li&gt;the telemetry or audit evidence the transition produces.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This model immediately exposes ambiguous promises. “Data stays in the United States” is not true if the primary database is domestic but a support tool receives attachments elsewhere. “We delete customer data within 30 days” is incomplete if immutable backups remain for 90 days and deletion occurs only when a backup expires.&lt;/p&gt;

&lt;p&gt;Data minimization is also an architectural control. If a value is not necessary, avoiding its collection removes an access-control problem, a retention problem, a breach surface, and a contract representation. The FTC has long emphasized collecting only what a business needs and retaining it only for a legitimate business purpose.&lt;/p&gt;

&lt;h2&gt;
  
  
  Make privacy requirements executable
&lt;/h2&gt;

&lt;p&gt;Policy prose is difficult to test. Convert important privacy behavior into invariants that can fail a build or produce an operational alert.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;production logs reject or redact known secret and payment-data patterns;&lt;/li&gt;
&lt;li&gt;every persisted data class has a named owner and retention rule;&lt;/li&gt;
&lt;li&gt;account deletion generates a durable workflow with status for each downstream store;&lt;/li&gt;
&lt;li&gt;production access requires an individual identity, a defined role, and an auditable event;&lt;/li&gt;
&lt;li&gt;new outbound data destinations cannot be deployed without registry metadata;&lt;/li&gt;
&lt;li&gt;regional routing tests verify where data is written, not merely where an API endpoint resolves;&lt;/li&gt;
&lt;li&gt;privacy-related feature flags have explicit defaults and cannot silently expand collection.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;An inventory in a spreadsheet becomes stale because it describes intent. A registry connected to infrastructure-as-code, service ownership, schemas, and deployment checks describes deployed reality. The registry does not need to become an enormous governance platform. A small, version-controlled manifest can answer surprisingly important questions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;data_class&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;support_attachment&lt;/span&gt;
&lt;span class="na"&gt;owner&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;customer-operations&lt;/span&gt;
&lt;span class="na"&gt;stores&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;object-storage-us&lt;/span&gt;
&lt;span class="na"&gt;processors&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;malware-scanner&lt;/span&gt;
&lt;span class="na"&gt;retention&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;active_account&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;365d&lt;/span&gt;
  &lt;span class="na"&gt;closed_account&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;30d&lt;/span&gt;
&lt;span class="na"&gt;deletion_workflow&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;purge-support-object-v2&lt;/span&gt;
&lt;span class="na"&gt;contains_customer_content&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The exact schema matters less than the ability to compare the declared state with deployed resources and observed events.&lt;/p&gt;

&lt;h2&gt;
  
  
  Treat deletion as a distributed systems feature
&lt;/h2&gt;

&lt;p&gt;Deletion is rarely one SQL statement. Data may exist in a primary store, search index, cache, event stream, warehouse, object store, observability system, and backup set. A deletion feature should therefore behave like a distributed workflow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create an immutable request identifier.&lt;/li&gt;
&lt;li&gt;Resolve the identifiers used by each participating system.&lt;/li&gt;
&lt;li&gt;Send idempotent deletion commands.&lt;/li&gt;
&lt;li&gt;Record completion, retryable failure, or a documented exception for every destination.&lt;/li&gt;
&lt;li&gt;Prevent a later replay or restore from silently recreating deleted data.&lt;/li&gt;
&lt;li&gt;Preserve only the evidence needed to show that the workflow ran, without retaining the deleted content itself.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Backups require precise language. Immediate removal from every backup may be technically incompatible with immutable backup design. A product may instead remove data from active systems promptly, isolate backups from ordinary processing, and let the data disappear as backup sets expire under a documented schedule. Whatever the design, product behavior, internal documentation, customer terms, and support answers should describe the same lifecycle.&lt;/p&gt;

&lt;h2&gt;
  
  
  Engineer the boundary between your system and every provider
&lt;/h2&gt;

&lt;p&gt;Cloud infrastructure does not transfer all responsibility to the provider. The provider may secure physical facilities, the hypervisor, or a managed database engine, while the product team still controls identity, network policy, application authorization, tenant separation, configuration, secrets, data classification, and retention.&lt;/p&gt;

&lt;p&gt;Turn that shared-responsibility boundary into a service matrix:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;Provider owns&lt;/th&gt;
&lt;th&gt;Product team owns&lt;/th&gt;
&lt;th&gt;Evidence&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Object storage&lt;/td&gt;
&lt;td&gt;Service availability and platform controls&lt;/td&gt;
&lt;td&gt;Bucket policy, encryption choice, lifecycle, public-access prevention&lt;/td&gt;
&lt;td&gt;Policy scan and configuration history&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Managed database&lt;/td&gt;
&lt;td&gt;Engine maintenance within the service scope&lt;/td&gt;
&lt;td&gt;Roles, network exposure, schema access, backups, deletion jobs&lt;/td&gt;
&lt;td&gt;Access logs and restore tests&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Identity provider&lt;/td&gt;
&lt;td&gt;Authentication service&lt;/td&gt;
&lt;td&gt;Enrollment policy, privileged roles, offboarding, recovery paths&lt;/td&gt;
&lt;td&gt;Identity events and quarterly review&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SaaS analytics&lt;/td&gt;
&lt;td&gt;Hosted processing platform&lt;/td&gt;
&lt;td&gt;Event schema, identifiers sent, retention, user choices&lt;/td&gt;
&lt;td&gt;Data-flow registry and vendor settings&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This matrix should inform both threat modeling and contract review. If the contract promises a control that belongs to a provider, the product team still needs evidence that the provider supplies it and that the deployment enables it correctly.&lt;/p&gt;

&lt;p&gt;Subprocessors should also be represented as dependencies, not as a forgotten web page. A provider change can alter data location, retention, incident-notification timing, deletion capability, or permitted use. Procurement metadata belongs close enough to engineering that a new SDK or SaaS integration cannot bypass review simply because it arrived through a pull request rather than a purchase order.&lt;/p&gt;

&lt;h2&gt;
  
  
  Design tenant isolation as a claim you can demonstrate
&lt;/h2&gt;

&lt;p&gt;Multi-tenant products often describe customer data as “isolated.” That word can refer to very different designs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a tenant identifier checked in application code;&lt;/li&gt;
&lt;li&gt;database row-level security;&lt;/li&gt;
&lt;li&gt;separate schemas or databases;&lt;/li&gt;
&lt;li&gt;separate accounts, projects, or encryption keys;&lt;/li&gt;
&lt;li&gt;physically separate deployments.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The strongest design is not automatically the most expensive option. The necessary level depends on the product, data, threat model, customer commitments, and applicable rules. But the chosen boundary should be explicit and testable.&lt;/p&gt;

&lt;p&gt;Negative authorization tests are particularly valuable. Instead of testing only that Tenant A can retrieve Tenant A's object, test systematically that Tenant A cannot retrieve an object, export, search result, background job, cached response, or support artifact belonging to Tenant B. Include indirect identifiers and bulk endpoints. Run these tests in CI and against representative deployed configurations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Connect product claims to release evidence
&lt;/h2&gt;

&lt;p&gt;Privacy policies, security pages, sales questionnaires, and contracts create a distributed specification for the product. The specification is dangerous when no one can tell which statements depend on which controls.&lt;/p&gt;

&lt;p&gt;A lightweight claims registry can bridge that gap:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Claim: Customer content is encrypted in transit and at rest.
Scope: Primary content, attachments, replicas, backups.
Controls: TLS policy; storage encryption; key policy.
Evidence: Deployment checks; configuration snapshots; restore test.
Owner: Platform security.
Change trigger: New store, region, key model, or transfer path.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Linking claims to controls prevents two common failures. First, marketing cannot casually broaden a statement beyond what engineering built. Second, engineering can recognize that a seemingly local change—adding a logging destination, extending retention, or introducing a new model provider—may invalidate an external commitment.&lt;/p&gt;

&lt;p&gt;The broader legal landscape varies with the product, data, customers, and jurisdictions. For a plain-English map of how privacy promises, security duties, sector-specific rules, and contract terms can interact, see &lt;a href="https://thefirstfile.com/a-cloud-computing-business-in-2026-can-face-privacy-security-and-contract-law-issues/" rel="noopener noreferrer"&gt;A cloud computing business in 2026 can face privacy, security, and contract law issues&lt;/a&gt;. That legal context is useful precisely because it shows why a one-size-fits-all “compliance architecture” does not exist.&lt;/p&gt;

&lt;h2&gt;
  
  
  Build incident obligations into the event model
&lt;/h2&gt;

&lt;p&gt;Incident response starts before an incident. Contracts and laws may define different events, affected data, notification recipients, and timelines. Engineering cannot make the legal determination, but it can preserve the facts needed to make one.&lt;/p&gt;

&lt;p&gt;Useful event data includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;what system and tenant were affected;&lt;/li&gt;
&lt;li&gt;what categories and approximate volume of data were involved;&lt;/li&gt;
&lt;li&gt;whether data was viewed, altered, exported, or only potentially accessible;&lt;/li&gt;
&lt;li&gt;when the event began, when it was detected, and when containment occurred;&lt;/li&gt;
&lt;li&gt;which credentials, keys, regions, providers, and subprocessors were involved;&lt;/li&gt;
&lt;li&gt;which evidence is confirmed and which remains an estimate.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Avoid a single boolean named &lt;code&gt;is_breach&lt;/code&gt;. That collapses a fact-intensive legal and contractual analysis into application logic. Record observable facts, maintain evidence integrity, and route the event to the people responsible for classification.&lt;/p&gt;

&lt;p&gt;Provider notification also deserves testing. If a critical subprocessor promises notice “without undue delay” or within a stated period, the product needs an owned intake path that operates outside one employee's inbox. A notice that arrives promptly but is not seen for four days is not an effective integration.&lt;/p&gt;

&lt;h2&gt;
  
  
  Make safe defaults the cheapest path
&lt;/h2&gt;

&lt;p&gt;CISA's Secure by Design guidance places responsibility on software manufacturers to improve customer security outcomes and reduce the burden placed on customers. For cloud products, that principle has concrete architectural consequences:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;multifactor authentication and modern federation should not be artificial premium barriers for customers that need them;&lt;/li&gt;
&lt;li&gt;public access should require a deliberate change rather than being a default state;&lt;/li&gt;
&lt;li&gt;privileged actions should be attributable to individual identities;&lt;/li&gt;
&lt;li&gt;secrets should be short-lived and managed outside source code;&lt;/li&gt;
&lt;li&gt;new tenants should begin with conservative sharing and retention settings;&lt;/li&gt;
&lt;li&gt;dangerous configurations should produce clear warnings and, where appropriate, deployment failures.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Secure defaults also make contractual statements more dependable. A control that exists only when every customer finds and enables an obscure setting is a fragile basis for a broad security claim.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical architecture review before launch
&lt;/h2&gt;

&lt;p&gt;A useful pre-launch review can be organized around evidence rather than documents:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Trace representative records.&lt;/strong&gt; Follow each sensitive data class through collection, storage, processing, logs, exports, backups, and deletion.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test isolation negatively.&lt;/strong&gt; Attempt cross-tenant access through APIs, jobs, caches, support tooling, and bulk operations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Execute deletion end to end.&lt;/strong&gt; Verify downstream completion, retry behavior, restore behavior, and the evidence left behind.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reconcile providers.&lt;/strong&gt; Compare deployed endpoints, SDKs, and data destinations with the approved processor registry.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Map external claims.&lt;/strong&gt; Tie significant privacy, security, residency, availability, and deletion statements to controls and current evidence.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Exercise an incident.&lt;/strong&gt; Generate an event, preserve the timeline, identify affected tenants and data classes, and test provider-notice intake.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Review the change path.&lt;/strong&gt; Confirm that a new region, store, provider, or retention period triggers the right technical and business review.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The goal is not to make developers perform legal analysis. It is to give the organization a system whose behavior can be observed, explained, and compared with its commitments.&lt;/p&gt;

&lt;p&gt;Cloud products change continuously. Infrastructure evolves, vendors add features, SDKs create new data flows, and customer requirements become more specific. Privacy and contract risk cannot be eliminated with a launch checklist. But it can be made visible, testable, and governable when architecture carries the same truth the company presents to its users.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.nist.gov/privacy-framework" rel="noopener noreferrer"&gt;NIST Privacy Framework&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.nist.gov/cyberframework" rel="noopener noreferrer"&gt;NIST Cybersecurity Framework 2.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.cisa.gov/securebydesign" rel="noopener noreferrer"&gt;CISA: Secure by Design&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.ftc.gov/business-guidance/resources/start-security-guide-business" rel="noopener noreferrer"&gt;Federal Trade Commission: Start with Security—A Guide for Business&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.ftc.gov/business-guidance/blog/2020/06/six-steps-toward-more-secure-cloud-computing" rel="noopener noreferrer"&gt;Federal Trade Commission: Six Steps Toward More Secure Cloud Computing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://cloudsecurityalliance.org/artifacts/shared-responsibility-model-in-the-age-of-cloud" rel="noopener noreferrer"&gt;Cloud Security Alliance: Shared Responsibility Model in the Age of Cloud&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>cloud</category>
      <category>privacy</category>
      <category>security</category>
      <category>architecture</category>
    </item>
  </channel>
</rss>
