Readiness field guide
Finding the answer should not require a security engineer.
Every readiness question below explains where to look, what the setting means, and when the answer is something your team needs to decide or document rather than find in a dashboard.
Jump to a section
Data isolation
Backups & resilience
Access governance
Engineering process
People & policy
Data isolation
01
Is Row-Level Security enabled on every table holding customer data?
If you use Supabase (most common for small teams): go to supabase.com and log in → click into your project → in the left-hand menu click Table Editor or Authentication → open the Policies tab. Each table shows a green "RLS enabled" tag, or a warning that it's off. A table with no policies listed counts as "no."
If you use a different database host (AWS RDS, Google Cloud SQL, PlanetScale, etc.): this is a developer-level setting inside the database console, usually under something called "row security" or "permissions." It's faster to just ask whoever set up the database.
Not sure who manages your database? Check your hosting bill for a company name - Supabase, AWS, and Google Cloud are the most common - or ask whoever built the product.
Has anyone tested whether one customer can reach another customer's data by changing an ID?
Are your service-role / admin API keys scoped down, or do they have full access?
If you use Supabase: supabase.com → your project → Settings (gear icon) → API. You'll see two keys - anon (safe to expose publicly) and service_role (full access, must stay secret). Ask your developer where the service_role key is used. It should only run on a server you control, never inside code a visitor's browser can see.
If you use Firebase: Project Settings → Service Accounts.
Quick question to ask instead of digging in yourself: "Where does our admin key get used?" - if the answer is "in the website code," that's a "no."
Backups & resilience
02
Do you have automated backups, and has anyone tested a restore?
If you use Supabase: supabase.com → your project → Settings → Database → scroll to Backups. It shows whether backups are on, how often, and whether Point-in-Time Recovery is available (usually a paid-plan feature).
If you use AWS RDS: your database's page in the AWS console → Maintenance & backups tab.
Do you have a written RTO/RPO for your main database?
If a critical dependency goes down, does your app degrade gracefully or break?
Access governance
03
Is MFA required - not just available - for everyone with access?
For your own team's logins to tools like GitHub, Supabase, or your hosting provider, check each one separately - most have this under an admin or organization security setting:
GitHub: your organization → Settings → Authentication security → look for "Require two-factor authentication for members."
Google Workspace: admin.google.com → Security → 2-Step Verification → check the enforcement setting.
For your product's own users (if you use Supabase Auth): Authentication → Providers / Settings - check whether MFA is required or just offered.
Is there a written checklist for revoking access when someone leaves?
Do you rotate API keys on a schedule, or only after an incident?
Check the "created on" date next to each key: Supabase (Settings → API), Stripe (Developers → API keys), AWS (IAM → Users → Security credentials). A key that's a year or more old and has never been replaced is worth flagging.
Engineering process
04
Is your main code branch protected - review required, no direct pushes?
If your code is on GitHub: your repository → Settings tab → Branches (left menu) → look under Branch protection rules for your main branch. Nothing listed there means it's not protected.
If you use GitLab: Settings → Repository → Protected branches.
Are secrets (API keys, passwords) kept out of your code repository?
In your GitHub repository, use the search bar (magnifying glass icon) and search the repo for words like API_KEY or password. If real key values show up in the code itself, that's a "no." Keys should live in your hosting provider's Environment Variables page instead - in Vercel or Netlify: your project → Settings → Environment Variables.
Do you verify signatures on webhooks from third parties?
If you use Stripe: Developers → Webhooks → click into each endpoint and confirm a "signing secret" is set up. Ask your developer to confirm the code actually checks it - having a secret listed isn't the same as using it.
People & policy
05
Do you have a written incident response plan?
Has anyone documented a risk assessment in the last 12 months?
Do new hires and contractors get security or privacy training?
Vendor management
06
Do you have a list of every vendor that touches customer data?
The fastest way to build this: open your company card or billing statement and write down every recurring software charge - that covers most of it. Add anything else that touches customer data even if it's free, like an email or analytics tool.
Do you have signed DPAs with those vendors?
Most vendors publish their Data Processing Agreement on their own site - search "[vendor name] DPA" or look under Legal, Trust, or Privacy on their homepage. Supabase, Stripe, and Google Workspace all publish one without needing to contact anyone.
Has anyone reviewed your critical vendors' security posture?
Search "[vendor name] trust center" or "[vendor name] SOC 2." Most larger vendors - Supabase, Stripe, AWS, Google, GitHub - publish a security or trust page, and some let you request their own SOC 2 report directly from it.