Enterprise Software Development: What Procurement Actually Wants
Your sales engineer joins the call and watches the procurement lead skip past your deck. She opens a spreadsheet instead — 47 rows of security requirements, compliance checkboxes, and SLA minimums that will decide this deal before anyone sees your product. Nobody asks about your Next.js architecture or server components. They want proof of SOC 2 Type II certification. They need screenshots of your audit log interface. They're testing whether your SSO works with their Okta tenant today, not in Q3. The technical demo you prepared? It happens only after you survive the compliance gauntlet. Most vendors don't make it that far.
Building production-grade enterprise applications isn't just an engineering problem. It's a compliance problem, a security problem, a legal problem, and -- most importantly -- a trust problem. The companies that win enterprise contracts aren't always the ones with the best code. They're the ones who understand what a 47-page RFP is actually asking for.
This article is for development teams and agencies building on modern stacks (Next.js, Supabase, AWS) who want to sell into enterprise. I'll walk through exactly what procurement teams evaluate, how to architect for their requirements, and the non-obvious things that kill deals.
Table of Contents
- What Enterprise Procurement Actually Evaluates
- The Modern Enterprise Stack: Next.js + Supabase + AWS
- SSO: The Non-Negotiable Gate
- Audit Logs That Satisfy Compliance Teams
- Compliance Certifications and What They Cost
- SLAs: Writing Ones You Can Actually Keep
- Data Residency and Sovereignty
- Security Architecture for Enterprise
- The Procurement Process: A Realistic Timeline
- FAQ

What Enterprise Procurement Actually Evaluates
I've reviewed procurement scorecards from Fortune 500 companies. The criteria are surprisingly consistent. Here's what a typical enterprise vendor evaluation looks like, weighted by importance:
| Evaluation Criteria | Typical Weight | What They're Really Asking |
|---|---|---|
| Security & Compliance | 25-30% | "Will you get us breached?" |
| Technical Architecture | 15-20% | "Can this scale? Will it integrate?" |
| SLA & Support | 15-20% | "What happens at 2 AM on a Sunday?" |
| Pricing & TCO | 10-15% | "What's the real number over 3 years?" |
| Company Viability | 10-15% | "Will you exist in 2 years?" |
| References & Case Studies | 5-10% | "Has someone like us survived using you?" |
| Implementation Timeline | 5-10% | "Can we hit our Q3 deadline?" |
Notice what's at the top. It's not features. It's not even price. It's security and compliance. I've seen deals worth $500K+ die because a vendor couldn't produce a SOC 2 report. Not because the product was bad -- because the security questionnaire came back with too many "N/A" responses.
The Security Questionnaire
Before you ever get to a demo, you'll likely receive a security questionnaire. These range from 50 to 400+ questions. Some enterprises use standardized formats like SIG (Shared Assessments), CAIQ (Cloud Security Alliance), or their own custom spreadsheets from hell.
Typical questions include:
- Do you encrypt data at rest and in transit? (AES-256 and TLS 1.3, minimum)
- Where is customer data stored geographically?
- Do you support SAML 2.0 / OIDC for SSO?
- What is your incident response plan?
- When was your last penetration test?
- Do you have a formal SDLC with security reviews?
If you're building on Next.js and Supabase, the good news is you can answer most of these honestly and positively. But you need to document it. Enterprise doesn't accept "yeah, we do that" -- they want a PDF with a date stamp.
The Modern Enterprise Stack: Next.js + Supabase + AWS
Let me be specific about why this stack works for enterprise and where it has gaps.
Next.js for the Application Layer
Next.js 15 (and the upcoming 16, expected mid-2026) gives you what enterprise apps need: server-side rendering for performance, API routes for backend logic, middleware for auth checks, and a deployment model that scales horizontally. If you're working with us on Next.js development, you already know this.
But here's what matters for enterprise specifically:
// middleware.ts - Enterprise auth check on every request
import { NextResponse } from 'next/server';
import type { NextRequest } from 'next/server';
export function middleware(request: NextRequest) {
const session = request.cookies.get('sb-session');
const orgId = request.headers.get('x-org-id');
// Enterprise multi-tenancy: every request scoped to org
if (!session || !orgId) {
return NextResponse.redirect(new URL('/auth/login', request.url));
}
// Inject org context for downstream RLS
const response = NextResponse.next();
response.headers.set('x-verified-org', orgId);
// Audit: log every authenticated request
logAuditEvent({
actor: session.value,
org: orgId,
action: 'page_view',
resource: request.nextUrl.pathname,
timestamp: new Date().toISOString(),
ip: request.ip || 'unknown',
});
return response;
}
That audit logging in middleware? That's not optional for enterprise. Every page view, every API call, every data export needs a trail.
Supabase for Data and Auth
Supabase has matured significantly for enterprise use. Their Enterprise plan (custom pricing, but typically $25K-$100K+/year depending on scale) includes:
- SOC 2 Type II compliance
- HIPAA BAA (as of 2024)
- Dedicated infrastructure
- Custom domains
- SLA up to 99.95% uptime
- Point-in-time recovery up to 30 days
The Row Level Security (RLS) model is genuinely excellent for multi-tenant enterprise apps:
-- Multi-tenant RLS policy
CREATE POLICY "Users can only see their org's data"
ON documents
FOR ALL
USING (
org_id = (SELECT org_id FROM profiles WHERE id = auth.uid())
);
-- Audit log table - append-only, immutable
CREATE TABLE audit_logs (
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
org_id UUID NOT NULL REFERENCES organizations(id),
actor_id UUID NOT NULL,
action TEXT NOT NULL,
resource_type TEXT NOT NULL,
resource_id TEXT,
metadata JSONB DEFAULT '{}',
ip_address INET,
created_at TIMESTAMPTZ DEFAULT now() NOT NULL
);
-- Nobody deletes audit logs. Ever.
REVOKE DELETE ON audit_logs FROM ALL;
REVOKE UPDATE ON audit_logs FROM ALL;
AWS for Infrastructure
Supabase runs on AWS already, but for enterprise you'll often need additional AWS services:
- AWS WAF in front of your Next.js deployment for DDoS protection and bot mitigation
- CloudTrail for infrastructure-level audit logging
- KMS for customer-managed encryption keys (some enterprises require this)
- VPC with private subnets for Supabase dedicated instances
- S3 with server-side encryption for file storage
- GuardDuty for threat detection
The total AWS cost for a mid-size enterprise application typically runs $2,000-$8,000/month depending on traffic and data volume. That's before Supabase and any other SaaS costs.
SSO: The Non-Negotiable Gate
I cannot stress this enough: if you don't support SSO, you will not close enterprise deals. Full stop. This is the single most common reason modern SaaS products get rejected by enterprise procurement.
Enterprise SSO means SAML 2.0 and/or OIDC with specific identity providers:
| Identity Provider | Market Share (Enterprise) | Protocol | Notes |
|---|---|---|---|
| Microsoft Entra ID (Azure AD) | ~45% | SAML 2.0, OIDC | Most common by far |
| Okta | ~25% | SAML 2.0, OIDC | Dominant in tech companies |
| Google Workspace | ~15% | SAML 2.0, OIDC | Growing in enterprise |
| Ping Identity | ~5% | SAML 2.0, OIDC | Financial services |
| OneLogin | ~3% | SAML 2.0, OIDC | Mid-market |
| Other (ADFS, etc.) | ~7% | SAML 2.0 | Legacy, but still around |
Supabase supports SSO via SAML 2.0 on their Pro plan and above. Here's a realistic implementation:
// SSO login flow with Supabase
import { createClient } from '@supabase/supabase-js';
const supabase = createClient(
process.env.NEXT_PUBLIC_SUPABASE_URL!,
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!
);
async function handleSSOLogin(domain: string) {
const { data, error } = await supabase.auth.signInWithSSO({
domain, // e.g., 'acmecorp.com'
});
if (data?.url) {
// Redirect to the IdP
window.location.href = data.url;
}
}
// On the enterprise admin side: provision SSO
async function provisionSSO(orgId: string, metadata: string) {
// This typically requires Supabase management API
// or their dashboard for manual setup
const response = await fetch('/api/admin/sso/provision', {
method: 'POST',
body: JSON.stringify({
org_id: orgId,
saml_metadata_xml: metadata,
}),
});
return response.json();
}
SCIM Provisioning
SSO gets you authentication. But enterprise IT teams also want SCIM (System for Cross-domain Identity Management) for automated user provisioning and deprovisioning. When someone leaves the company and IT disables their Okta account, they expect that user to lose access to your app immediately. Not on next login. Immediately.
Supabase doesn't natively support SCIM as of early 2026. You'll need to build a SCIM endpoint or use a service like WorkOS ($5,000-$25,000+/year) or Clerk Enterprise. This is a real gap that you need to plan for.

Audit Logs That Satisfy Compliance Teams
Enterprise audit logs aren't just a database table with timestamps. Compliance teams need specific properties:
- Immutability -- logs cannot be modified or deleted, even by admins
- Completeness -- every state change, every access, every export
- Retention -- typically 1-7 years depending on industry
- Searchability -- compliance officers need to query by user, date range, action type
- Exportability -- CSV/JSON export for external auditors
- Tamper evidence -- cryptographic proof logs haven't been altered
Here's a pattern I've used in production:
// lib/audit.ts
interface AuditEvent {
actor: {
id: string;
email: string;
role: string;
ip: string;
userAgent: string;
};
org_id: string;
action: string; // 'document.created', 'user.invited', 'settings.updated'
resource: {
type: string;
id: string;
};
changes?: {
before: Record<string, unknown>;
after: Record<string, unknown>;
};
metadata?: Record<string, unknown>;
}
export async function logAudit(event: AuditEvent) {
// Write to Supabase (queryable, short-term)
await supabase.from('audit_logs').insert({
...event,
created_at: new Date().toISOString(),
hash: computeHash(event), // SHA-256 of event data
});
// Write to S3 (immutable, long-term retention)
await s3.putObject({
Bucket: process.env.AUDIT_BUCKET,
Key: `${event.org_id}/${new Date().toISOString()}/${crypto.randomUUID()}.json`,
Body: JSON.stringify(event),
ServerSideEncryption: 'aws:kms',
ObjectLockMode: 'COMPLIANCE', // Cannot be deleted, even by root
ObjectLockRetainUntilDate: addYears(new Date(), 7),
});
}
The S3 Object Lock with COMPLIANCE mode is critical. It means even your AWS root account can't delete those logs during the retention period. That's what auditors want to hear.
Compliance Certifications and What They Cost
Let's talk real numbers, because this catches a lot of startups and agencies off guard.
| Certification | Timeline | Cost (2026) | Annual Renewal | Who Requires It |
|---|---|---|---|---|
| SOC 2 Type I | 2-4 months | $20K-$50K | N/A (one-time snapshot) | Most US enterprises |
| SOC 2 Type II | 6-12 months | $30K-$100K | $20K-$50K/year | Serious enterprise |
| ISO 27001 | 6-18 months | $30K-$80K | $15K-$30K/year | European enterprises, global |
| HIPAA | 3-6 months | $15K-$40K | $10K-$25K/year | Healthcare |
| FedRAMP | 12-24 months | $500K-$2M+ | $200K-$500K/year | US Government |
| GDPR compliance | 2-4 months | $10K-$30K (legal review) | Ongoing | EU data subjects |
| PCI DSS Level 1 | 6-12 months | $50K-$200K | $50K-$100K/year | Payment processing |
For most agencies and startups building enterprise apps, SOC 2 Type II is your first target. Tools like Vanta ($10K-$30K/year), Drata ($10K-$25K/year), or Secureframe ($8K-$20K/year) can automate 70-80% of the evidence collection.
Here's the thing: your stack choices matter here. Using Supabase Enterprise? They're SOC 2 Type II compliant. AWS? Obviously. Vercel Enterprise? SOC 2 Type II. If your entire stack has these certifications, your own audit becomes much simpler because you can inherit their controls.
SLAs: Writing Ones You Can Actually Keep
Enterprise contracts require Service Level Agreements. And they're not just about uptime.
A realistic SLA for a Next.js + Supabase + AWS application:
| Metric | Target | Measurement | Credit |
|---|---|---|---|
| Availability | 99.9% (8.76h downtime/year) | Monthly, excluding maintenance | 10% credit per 0.1% below |
| API Response Time | p95 < 500ms | Measured at edge | Escalation, not credit |
| Support Response (P1) | < 1 hour | Business hours initially | Penalty clause |
| Support Response (P2) | < 4 hours | Business hours | None |
| RTO (Recovery Time) | < 4 hours | Post-incident measurement | Penalty clause |
| RPO (Recovery Point) | < 1 hour | Data loss window | Penalty clause |
| Security Patch (Critical) | < 24 hours | From CVE publication | Escalation |
Don't promise 99.99% unless you have a multi-region active-active setup. 99.9% is achievable on a single-region Vercel + Supabase deployment. 99.95% is achievable with some engineering effort. 99.99% requires real investment in redundancy.
For support, enterprise buyers expect named contacts, not a help desk ticket queue. If you're an agency building a custom application, you need to staff for this. A 1-hour P1 response time means someone is on-call 24/7. Factor that into your pricing.
Data Residency and Sovereignty
This one kills deals more often than you'd think. European enterprises under GDPR often require that data stays within the EU. Financial services may require US-only. Government contracts have strict sovereignty requirements.
Supabase offers regional deployments (US East, US West, EU West, AP Southeast, etc.). AWS has regions everywhere. The tricky part is making sure all data flows respect residency:
- Database: Supabase region selection ✓
- File storage: S3 bucket region ✓
- CDN/Edge: Vercel's edge network caches globally -- you may need to restrict this
- Analytics/logging: Where do your logs go? DataDog, Sentry, etc. all need regional configs
- Backups: Where are database backups stored?
- Email services: Does your transactional email provider store data in-region?
I've seen teams nail the database residency and then get flagged because their error tracking tool was sending stack traces (containing PII in some cases) to US servers.
Security Architecture for Enterprise
Beyond compliance checkboxes, enterprise security teams will review your actual architecture. Here's what they look for:
Defense in Depth
User → Cloudflare/AWS WAF → Vercel Edge → Next.js Middleware (Auth) → API Routes → Supabase RLS → Encrypted Storage
↓
Audit Logging
↓
S3 (Object Lock) + CloudWatch
Each layer provides independent security. If one fails, the next catches it.
Key Security Requirements
- Encryption at rest: AES-256 (Supabase and AWS default)
- Encryption in transit: TLS 1.3 everywhere
- Key management: AWS KMS with customer-managed keys for sensitive deployments
- Secrets management: AWS Secrets Manager or HashiCorp Vault, never
.envfiles in production - Penetration testing: Annual at minimum, quarterly for high-security. Budget $15K-$50K per test.
- Vulnerability scanning: Automated via Snyk, GitHub Dependabot, or similar. Continuous.
- Access control: RBAC minimum, ABAC preferred. Zero standing privileges for infrastructure.
If you're working with a headless CMS as part of the stack, make sure it meets the same security standards. A CMS that doesn't support SSO or audit logging becomes a weak link.
The Procurement Process: A Realistic Timeline
If you've never sold into enterprise before, the timeline will shock you.
| Phase | Duration | What Happens |
|---|---|---|
| Initial discovery | 2-4 weeks | Demos, requirements gathering |
| Security questionnaire | 2-6 weeks | 100-400 questions, back-and-forth |
| Technical evaluation | 2-4 weeks | Proof of concept, architecture review |
| Legal review | 4-12 weeks | MSA, DPA, SLA negotiations |
| Procurement approval | 2-8 weeks | Budget approval, internal sign-offs |
| Contract execution | 2-4 weeks | Signatures, PO issuance |
| Total | 3-9 months | Average: ~6 months |
That's 6 months from first call to signed contract. Plan your cash flow accordingly.
Some tips that speed things up:
- Have your security documentation ready before the first call. SOC 2 report, architecture diagram, data flow diagram, incident response plan.
- Use a trust center. Tools like Vanta Trust Center or SafeBase let prospects self-serve security documentation.
- Pre-build the DPA. Data Processing Agreements are required for GDPR. Have a standard one reviewed by your attorney.
- Get references early. Enterprise buyers want to talk to similar companies. Two or three solid references can accelerate the decision by weeks.
We've been through this process many times working with enterprise clients. If you want help building an application that can actually pass procurement, reach out -- we know where the landmines are.
FAQ
What does an enterprise software development company actually need to provide beyond code?
Beyond the application itself, enterprise clients expect: SOC 2 Type II compliance reports, a signed SLA with uptime guarantees and financial penalties, SAML/OIDC SSO integration, detailed audit logging with export capabilities, a Data Processing Agreement (DPA), documented incident response procedures, and ongoing support with defined response times. The code is maybe 40% of what you're delivering. The other 60% is trust infrastructure.
Is Supabase enterprise-ready in 2026?
Yes, with caveats. Supabase's Enterprise plan includes SOC 2 Type II compliance, HIPAA BAA support, dedicated infrastructure, and 99.95% SLA. The main gaps are native SCIM support for user provisioning and some advanced audit logging features that you'll need to build yourself. For most enterprise use cases that don't require FedRAMP, Supabase is a solid choice. It's significantly cheaper than building on raw AWS services while providing comparable security guarantees.
How much does it cost to build an enterprise-grade application on Next.js and Supabase?
A realistic budget for an MVP enterprise application: $150K-$400K for initial development (3-6 months), plus $30K-$80K for SOC 2 Type II certification, plus $3K-$10K/month for infrastructure (Supabase Enterprise, AWS, Vercel Enterprise). Ongoing maintenance and support runs $10K-$30K/month depending on SLA requirements. Total first-year cost is typically $250K-$600K. This assumes a team of 3-5 engineers and doesn't include sales and marketing costs.
What's the difference between SOC 2 Type I and Type II?
SOC 2 Type I is a point-in-time snapshot: "On this date, your controls were properly designed." Type II covers a period (usually 6-12 months): "Over this period, your controls were operating effectively." Enterprise buyers strongly prefer Type II because it demonstrates ongoing discipline, not just a good day. Most enterprises won't accept Type I as a permanent state -- they'll give you a grace period (6-12 months) to get Type II completed.
Can you achieve HIPAA compliance with a Next.js and Supabase stack?
Yes. Supabase offers HIPAA BAA on their Enterprise plan. AWS is HIPAA-eligible across most services. Vercel currently does not offer HIPAA compliance, so for healthcare applications, you'd need to self-host on AWS (using ECS/EKS or EC2) rather than deploying to Vercel. All PHI must be encrypted at rest and in transit, access must be logged, and you need a formal risk assessment. Budget an additional $15K-$40K for HIPAA-specific compliance work.
How do you handle multi-tenancy in enterprise applications?
The most common pattern with Supabase is shared database with Row Level Security (RLS) policies scoping every query to the authenticated user's organization. For highly regulated industries or clients that demand it, you can use separate Supabase projects per tenant (isolated tenancy), though this increases cost and operational complexity significantly. Shared-with-RLS works for 90%+ of enterprise use cases. The key is making sure tenant isolation is enforced at the database level, not just the application level.
What SLA uptime percentage should we promise enterprise clients?
For a standard deployment on Vercel + Supabase Enterprise, promise 99.9% (8.76 hours of downtime per year). This is achievable and gives you headroom. Supabase Enterprise offers 99.95%, and Vercel Enterprise offers 99.99% on their edge network, but your application's uptime is limited by the weakest link in your chain. Don't promise 99.99% unless you've built multi-region failover with automated health checks and traffic routing. Over-promising on SLAs leads to financial penalties and lost trust.
Do enterprise clients actually check compliance certifications, or is it just a checkbox?
They absolutely check. Large enterprises have dedicated security teams that will read your SOC 2 report cover to cover, flag exceptions, and ask follow-up questions about remediation plans. Financial services and healthcare companies are especially thorough. I've had security reviews where the client's team spent 3 hours going through our SOC 2 findings. It's not a checkbox -- it's a conversation, and you need someone on your team who can speak to every finding intelligently.