<?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: Seiya Sato</title>
    <description>The latest articles on DEV Community by Seiya Sato (@seiyasato).</description>
    <link>https://dev.to/seiyasato</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%2F4076422%2Faa5df6fa-1098-4219-9279-6795c7b64832.png</url>
      <title>DEV Community: Seiya Sato</title>
      <link>https://dev.to/seiyasato</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/seiyasato"/>
    <language>en</language>
    <item>
      <title>The scope you pick decides whether you can ship alone</title>
      <dc:creator>Seiya Sato</dc:creator>
      <pubDate>Fri, 14 Aug 2026 08:01:25 +0000</pubDate>
      <link>https://dev.to/seiyasato/the-scope-you-pick-decides-whether-you-can-ship-alone-11gl</link>
      <guid>https://dev.to/seiyasato/the-scope-you-pick-decides-whether-you-can-ship-alone-11gl</guid>
      <description>&lt;p&gt;Last time I killed a SaaS idea because an API said Forge and OAuth2 apps could not reach the data. This time the API let me in and the &lt;em&gt;review process&lt;/em&gt; was the wall.&lt;/p&gt;

&lt;p&gt;Same check, different platform. I think the check generalises, so here it is with the second worked example.&lt;/p&gt;

&lt;h2&gt;
  
  
  The check
&lt;/h2&gt;

&lt;p&gt;Before writing code I try to answer one question: can the architecture I actually intend to ship reach the data it needs — commercially, not just technically?&lt;/p&gt;

&lt;p&gt;"Commercially" is doing the work in that sentence. It covers access, but it also covers what it costs to keep that access, forever, as one person.&lt;/p&gt;

&lt;h2&gt;
  
  
  The idea
&lt;/h2&gt;

&lt;p&gt;A Google Workspace add-on that reads a user's existing Drive files and reports on them. The specifics don't matter — anything shaped like "point it at what you already have and it tells you something" lands in the same place.&lt;/p&gt;

&lt;p&gt;To read files the user already owns, you need a Drive scope. So the checkable question becomes narrow: which scope, and what does that scope cost?&lt;/p&gt;

&lt;h2&gt;
  
  
  What the docs say
&lt;/h2&gt;

&lt;p&gt;Google sorts OAuth scopes into three tiers — non-sensitive, sensitive, and restricted — and the tier decides your review path.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;drive.file&lt;/code&gt; is non-sensitive. It grants access to&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Create new Drive files, or modify existing files, that you open with an app or that the user shares with an app while using the Google Picker API or the app's file picker.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Read that carefully. It is scoped to files your app created, or that the user handed to your app one at a time through a picker. It is not "the user's Drive".&lt;/p&gt;

&lt;p&gt;To reach the user's Drive, you need &lt;code&gt;drive&lt;/code&gt; or &lt;code&gt;drive.readonly&lt;/code&gt;. Both are &lt;strong&gt;restricted&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Restricted scopes require OAuth verification &lt;em&gt;and&lt;/em&gt; a security assessment: CASA. And CASA is where the shape of the problem changes, because of one sentence:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;All applications must be revalidated every year.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Assessments are performed by ADA-authorised labs. I could not find a self-assessment path for the tiers that apply here.&lt;/p&gt;

&lt;p&gt;(Verified 2026-08-14, against &lt;code&gt;developers.google.com/workspace/drive/api/guides/api-specific-auth&lt;/code&gt; and &lt;code&gt;appdefensealliance.dev/casa/casa-tiering&lt;/code&gt;. If you are reading this later, check it again rather than trusting me — this is exactly the kind of thing a platform changes without telling anyone.)&lt;/p&gt;

&lt;h2&gt;
  
  
  Why that is fatal, and why it isn't about money
&lt;/h2&gt;

&lt;p&gt;The obvious objection is that an audit is a cost, and costs are survivable. That framing is what fooled me for about twenty minutes.&lt;/p&gt;

&lt;p&gt;It isn't a cost. It's a &lt;strong&gt;recurring fixed liability on someone else's schedule&lt;/strong&gt;. Every year, for as long as the product exists, some number of days-to-weeks gets taken out of a one-person business by a process that produces no features, on dates you don't choose, where failure means your users lose access. There is no version of "I'll do it when I have time".&lt;/p&gt;

&lt;p&gt;A funded team absorbs that. It is a line item and a person's job. Solo, it is the whole of some month, every year, forever.&lt;/p&gt;

&lt;h2&gt;
  
  
  The part that actually changed what I would build
&lt;/h2&gt;

&lt;p&gt;Here is the consequence, and it is a product decision, not a compliance one:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Anything that processes files the user already has needs a restricted scope. Anything that creates new files can live on &lt;code&gt;drive.file&lt;/code&gt;.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So the scope tier quietly sorts every Workspace add-on idea into two piles, before you write a line of code:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Diagnose / analyse / audit what already exists&lt;/em&gt; → restricted → annual lab assessment&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Generate something new&lt;/em&gt; → non-sensitive → no verification required&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I went in wanting to build the first kind. The docs told me that as one person I get to build the second kind. That is a better outcome than finding out during review, and it cost two hours.&lt;/p&gt;

&lt;p&gt;One thing I have &lt;strong&gt;not&lt;/strong&gt; verified verbatim: what &lt;code&gt;drive.file&lt;/code&gt; does when a user picks a &lt;em&gt;folder&lt;/em&gt; rather than a file. I read the scope definition as not extending to the folder's contents, but that is my inference from the wording, not a quoted line. If you have shipped an add-on and know the real behaviour, please correct me in the comments — that detail decides whether a whole category of product is viable on the free tier of review.&lt;/p&gt;

&lt;h2&gt;
  
  
  The general version
&lt;/h2&gt;

&lt;p&gt;"There is an API" and "my architecture can commercially use that API" are different claims, and only the second one matters. The second claim has more ways to fail than access control:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The app model you need is excluded (last post's Atlassian finding)&lt;/li&gt;
&lt;li&gt;The permission you need triggers a review you cannot sustain (this one)&lt;/li&gt;
&lt;li&gt;The access exists but the terms forbid the use you had in mind&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All three are checkable in about two hours, before any code. None of them look like market questions, which is why "validate your idea" advice never mentions them, and why I nearly skipped this one because the idea felt obviously good.&lt;/p&gt;




&lt;p&gt;I wrote up the full method as a memo — the seven checks I run, which passed, which failed, and the sources with dates.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://killtest.sumitsubo.com/sample-jira-automation-preflight?utm_source=devto&amp;amp;utm_medium=post&amp;amp;utm_campaign=post002" rel="noopener noreferrer"&gt;Memo No. 001 — Jira Automation Conflict Preflight, verdict: kill&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Disclosure so nobody feels ambushed: that page also sells the method as a $49 product. The memo itself is the complete worked example and costs nothing — if you only want the seven questions and the reasoning, they are all in there.&lt;/p&gt;

&lt;p&gt;What is the permission or review requirement that killed something you were building?&lt;/p&gt;

</description>
      <category>api</category>
      <category>saas</category>
      <category>startup</category>
      <category>googlecloud</category>
    </item>
    <item>
      <title>The API exists. That doesn't mean you can build on it.</title>
      <dc:creator>Seiya Sato</dc:creator>
      <pubDate>Thu, 13 Aug 2026 13:53:42 +0000</pubDate>
      <link>https://dev.to/seiyasato/the-api-exists-that-doesnt-mean-you-can-build-on-it-2p5b</link>
      <guid>https://dev.to/seiyasato/the-api-exists-that-doesnt-mean-you-can-build-on-it-2p5b</guid>
      <description>&lt;p&gt;I killed a SaaS idea last week after about two hours of research. The thing that killed it is one sentence in Atlassian's API documentation, and the general shape of that failure seems more useful than the idea was.&lt;/p&gt;

&lt;h2&gt;
  
  
  The idea
&lt;/h2&gt;

&lt;p&gt;Jira automation rules fail in ways that are hard to see before they hurt: two rules firing on the same transition and racing, a rule editing an issue another rule just deleted, circular triggers, behaviour that silently depends on rule ordering. Teams hit this and debug it by hand, after the fact.&lt;/p&gt;

&lt;p&gt;A static analyzer for automation rules looked tractable. Rules are structured data rather than free text, so the analysis is deterministic — no model guessing at intent. Atlassian has a marketplace, so distribution is at least partly solved. I have built smaller things on thinner reasoning than that.&lt;/p&gt;

&lt;h2&gt;
  
  
  The check
&lt;/h2&gt;

&lt;p&gt;Before writing any code I try to answer one question: can the architecture I actually intend to ship reach the data it needs — commercially, not just technically?&lt;/p&gt;

&lt;p&gt;For a Marketplace app, "install it and it works" means Forge, or an OAuth2 integration. That is the entire product experience. So the question becomes narrow and checkable: can a Forge app read automation rule definitions?&lt;/p&gt;

&lt;p&gt;Every endpoint in the Automation REST API's rule-management group carries the same line:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Forge and OAuth2 apps cannot access this REST resource.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Eight endpoints, same sentence on each. (Verified 2026-08-13. If you are reading this later, check it again rather than trusting me — this is exactly the kind of fact a vendor changes without telling anyone.)&lt;/p&gt;

&lt;h2&gt;
  
  
  Why that is fatal rather than annoying
&lt;/h2&gt;

&lt;p&gt;There are workarounds. A user can export rules as JSON and upload them. An API token scoped to a user's own account can read them. A local CLI could do it on their machine.&lt;/p&gt;

&lt;p&gt;Each of those is technically fine and commercially different. They replace "install it from the marketplace and see your problems" with "read these setup instructions, produce a file, then upload it". For a low-touch self-serve product sold to teams who are already annoyed, that is not a smaller version of the product. It is a different product, with worse economics and worse conversion at exactly the moment a new user decides whether to care.&lt;/p&gt;

&lt;p&gt;The problem is real. The analyzer is buildable. The business I wanted is not available.&lt;/p&gt;

&lt;h2&gt;
  
  
  The general form
&lt;/h2&gt;

&lt;p&gt;"There is an API" and "my architecture can commercially use that API" are different claims, and only the second one decides whether you have a product.&lt;/p&gt;

&lt;p&gt;Worth checking before you write code, roughly in the order these things kill projects:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is commercial use permitted at all, or is the API for internal and personal use?&lt;/li&gt;
&lt;li&gt;Does your intended auth model — Forge, OAuth2, API token, service account — reach the exact objects you need? Not the API in general. The specific resource.&lt;/li&gt;
&lt;li&gt;Is there a partner agreement, certification, or security review standing between you and production?&lt;/li&gt;
&lt;li&gt;Do the rate limits fit your access pattern, or do they fit a dashboard that refreshes once an hour?&lt;/li&gt;
&lt;li&gt;If the platform absorbs this capability in 12 months, what is left of your product?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of this is exotic, and all of it is in public documentation. It just requires reading the docs for the thing that would kill you rather than the docs for the thing you want to build.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I bother
&lt;/h2&gt;

&lt;p&gt;AI-assisted coding made building cheap enough that building is no longer the expensive mistake. Choosing what to build is. A weekend prototype costs a weekend; the wrong choice costs a month, and you find out at the end of it.&lt;/p&gt;

&lt;p&gt;So I run a fixed set of checks before starting. This one — commercial API reality — has killed more of my ideas than any other, and it is the one that generic "validate your idea" advice never mentions, because it does not look like a market question. It looks like a documentation question, right up until it ends the project.&lt;/p&gt;




&lt;p&gt;I wrote the whole thing up as a memo: the seven checks I run, which passed, which failed, and the sources with dates.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://killtest.sumitsubo.com/sample-jira-automation-preflight?utm_source=devto&amp;amp;utm_medium=post&amp;amp;utm_campaign=memo001" rel="noopener noreferrer"&gt;Memo No. 001 — Jira Automation Conflict Preflight, verdict: kill&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Disclosure so nobody feels ambushed: that page also sells the method as a $49 product. The memo itself is the complete worked example and costs nothing — if you only want the seven questions and the reasoning, they are all in there.&lt;/p&gt;

&lt;p&gt;What is the check you wish you had run before building something?&lt;/p&gt;

</description>
      <category>api</category>
      <category>startup</category>
      <category>saas</category>
      <category>discuss</category>
    </item>
  </channel>
</rss>
