Dark Patterns Registry
Documented deceptive practices in developer tools. Hidden cancellation flows, surprise bills, silent plan changes — with dates, descriptions, and whether they're still active.
57 patterns documented across 49 services. 54 still active today.
Heroku
HostingSilent free tier removal
Removed free dynos and free Postgres with 30 days notice after years of being the default beginner platform. Millions of hobby projects deleted without migration path.
Datadog
Monitoring3-year contract default
Sales pushes 3-year annual contracts as 'standard'. Monthly pricing exists but costs 2x. Early termination requires paying remaining contract in full. Pricing page shows per-host/mo but actual invoices are annual.
AWS
CloudData transfer ransom
Data transfer INTO AWS is free. Data transfer OUT costs $0.09/GB. Moving 1TB of data out costs $90. This makes it financially painful to leave AWS — the definition of economic lock-in.
AWS
CloudBilling complexity as lock-in
AWS has 200+ services with separate pricing models, reserved instance types, savings plans, spot pricing, and data transfer costs that interact in non-obvious ways. Understanding your bill requires dedicated FinOps tooling. This complexity itself is a switching cost.
MongoDB Atlas
DatabaseAuto-scaling surprise bills
Auto-scaling is enabled by default on M10+ clusters. A traffic spike can double your cluster tier overnight with no approval required. The scaled-up tier stays until you manually downscale — downscaling requires a support window and may briefly interrupt connections.
Adobe
Design ToolsEarly termination fee
Annual Creative Cloud plans billed monthly include a 50% early termination fee on remaining months if cancelled in the first year. This fee is buried in the terms at checkout and not shown on the pricing page. Affects customers who switch plans mid-year too.
Intercom
SupportUsage-based surprise
Intercom charges per 'people reached' — every user who receives a message counts toward your tier even if they never reply. A single product announcement to your full user base can push you to the next billing tier permanently. Downgrading requires removing contacts.
Salesforce
CRMAnnual lock-in with auto-renewal
Salesforce contracts auto-renew annually by default, with a 90-day notice window to cancel. Miss the window and you're locked in for another year. Contract negotiations happen through sales reps — self-serve cancellation does not exist at any tier.
PlanetScale
DatabaseFree tier removal bait-switch
PlanetScale removed its free tier (Hobby plan) in April 2024 after thousands of developers built projects on it. Minimum plan jumped to $39/mo. Gave 30 days notice. Databases were deleted if not upgraded. Almost identical to the Heroku free tier removal playbook.
Docker Desktop
Dev ToolsRetroactive commercial licensing
Docker Desktop was free, then suddenly required a paid subscription ($5-24/user/mo) for companies with 250+ employees or $10M+ revenue. Teams using Docker Desktop for years had to scramble to either pay or switch to alternatives like Podman, Rancher Desktop, or Colima.
Unity
Game EngineRuntime fee retroactive pricing
Unity announced a per-install runtime fee in September 2023 that would retroactively apply to games already shipped. After massive backlash, they walked it back partially, but trust was permanently damaged. Developers who built studios around Unity's pricing model felt betrayed.
Retool
Internal ToolsSeat-based pricing explosion
Retool costs $10/user/mo on Team, $50/user/mo on Business. Every employee who needs to view a dashboard counts as a seat. A 30-person ops team viewing one dashboard = $1,500/mo on Business. Viewer-only seats added only after community backlash.
Mixpanel
AnalyticsData deletion on downgrade
Downgrading from Growth to Free deletes event history beyond 90 days. No export option on Free tier. Your years of analytics data are held hostage — pay or lose it permanently.
GoDaddy
DomainsRenewal price bait-switch
Domains advertised at $0.99/year for the first year. Renewal price jumps to $20-25/year. Auto-renewal is on by default. Privacy protection ($10/year extra) is off by default, exposing personal WHOIS data unless you pay.
Auth0
AuthCancellation maze
To cancel your subscription you must: navigate 3 menus deep → find 'Subscription' → click 'Cancel' (which actually says 'Downgrade') → confirm through a modal → then email support for actual deletion. No self-serve account deletion.
MongoDB Atlas
DatabaseAuto-upgrade cluster
Sends urgent 'Your cluster is running out of space' emails with a one-click upgrade button that jumps you to a $57/mo plan. No mention of data cleanup options. Downgrade requires support ticket.
Vercel
HostingSpend limit opt-in
No spending cap by default on Pro plan. A single viral page can generate a $5K bandwidth bill overnight. Spend limits exist but must be manually enabled. Many developers discover this after a surprise invoice.
Algolia
SearchOpaque overage pricing
Free tier has 10K searches/mo. Overage pricing isn't shown anywhere on pricing page — you only find out when you get an invoice. Per-search cost at overage rates is 5x the bundled rate.
Firebase
BaaSPer-read billing shock
Firestore charges per document read. A poorly written query (e.g., listing all users without pagination) can generate millions of reads in minutes. No per-query cost preview or warning before execution.
Slack
CommunicationMessage hostage
Free plan only shows last 90 days of messages. All older messages still exist but are hidden behind the paywall. You can't export them without upgrading first. Your own messages held hostage.
Shopify
E-commerceTransaction fee on non-Shopify payments
If you use any payment provider other than Shopify Payments, Shopify charges an additional 0.5-2% transaction fee on top. This effectively forces merchants to use Shopify Payments.
Twilio
CommunicationsPrice increase buried in changelog
Announced 15-20% price increases for SMS in a changelog blog post rather than direct email to affected customers. Many discovered the increase only on their next invoice.
Heroku
HostingSilent deprecation of popular add-ons
Heroku has repeatedly deprecated free-tier add-ons (Postgres, Redis, Scheduler) with minimal notice, forcing teams to urgently migrate databases under time pressure. The pattern recurs without improving the communication process.
Zoom
Video ConferencingDark pattern unsubscribe flow
Cancelling a Zoom Pro subscription requires navigating through 5 screens, surviving a discount offer, and confirming through an email link. The 'cancel' button is styled to look like a secondary action; the 'keep subscription' button is the primary CTA at every step.
Slack
CommunicationPer-seat ratchet
Slack charges for every active member — including contractors, bots, and rarely-used guest accounts. Deactivating users doesn't automatically reduce billing; you must manually reconcile seats monthly. Teams routinely overpay by 20-40% without realising.
Twilio
CommunicationsRate hikes buried in email
Twilio sends pricing change notices to a generic billing email, not to account owners or developers. SMS rates in several countries increased 30-50% in 2023-2024 with minimal notice. The changes are detailed only in a changelog entry linked from a support article.
HubSpot
CRM/MarketingContact tier jumps
HubSpot Marketing Hub pricing is based on contact count with non-linear tier jumps — 1K contacts is $45/mo, 10K is $800/mo. Contacts accumulate automatically from form fills and imports; cleaning them up requires manual work. Exceeding your tier locks features until you upgrade.
Notion
ProductivityWorkspace deletion threat
Notion warns that if a workspace drops below minimum member count for a paid plan, content may become inaccessible. This creates anxiety that pushes teams to maintain subscriptions even when usage has dropped. The warning language is deliberately alarming.
Jira
Project ManagementAdmin complexity lock-in
Jira's permission schemes, workflow configurations, and custom fields are complex enough that only specialists can manage them. Over time, organizations accumulate configurations no one fully understands. Migrating to a new tool requires exporting and reconstructing years of customization, which is prohibitively expensive.
Figma
Design ToolsFile format lock-in
Figma files can only be exported as flat images (PNG/SVG) or PDF — not as editable files compatible with any other design tool. Years of design system work is trapped in Figma's proprietary format. Moving to Penpot or Sketch means rebuilding everything from scratch.
OpenAI
AI APIStealth model changes
OpenAI has changed model behavior between versions without clear changelogs. GPT-4 Turbo outputs differ meaningfully from GPT-4 in ways that break existing prompts. Model version deprecation gives 6 months notice but the replacement model may behave differently enough to require prompt rewrites.
Vercel
HostingPer-seat pricing on Pro
Vercel Pro charges $20/seat/month. Every team member who needs to see deploy logs, check environment variables, or review preview deployments counts as a seat. A 5-person team pays $100/mo before any usage. This scales painfully compared to Railway's per-resource pricing.
Cloudflare Workers
EdgeCPU time vs wall time confusion
Workers free tier advertises '10ms CPU time per request' but developers expect wall time (total request duration). A Worker that awaits a 500ms fetch still only uses <1ms CPU time. This is technically correct but deliberately confusing. Hitting the CPU limit causes silent failures, not clear errors.
JetBrains
Dev ToolsSubscription-only model + fallback license erosion
JetBrains IDEs moved to subscription-only. The 'perpetual fallback license' only covers the version available 12 months into your subscription — if you cancel after 11 months, you get nothing. The fallback version quickly becomes outdated and unsupported.
Elastic Cloud
Search/ObservabilityLicense change to block AWS
Elastic changed Elasticsearch from Apache 2.0 to SSPL license in 2021 specifically to prevent AWS from offering managed Elasticsearch. This forced self-hosting users to evaluate license implications. AWS forked it as OpenSearch. Users caught in the crossfire of a corporate rivalry.
LaunchDarkly
Feature FlagsOpaque enterprise pricing
LaunchDarkly shows no pricing on their website — just 'Contact Sales'. Community reports suggest $8-16 per seat/month for Pro, scaling to $400+/mo quickly. For feature flags. PostHog and Unleash offer the same functionality for free or fraction of the cost.
Confluence
Knowledge BaseSearch quality as upgrade incentive
Confluence's built-in search is notoriously poor — finding your own documents requires exact keyword matches. Premium tier adds 'AI-powered search' and analytics. The base product's search is so bad it feels deliberately degraded to push upgrades.
Cursor
AI CodingFast request quota ambiguity
Pro plan advertises '500 fast requests/mo' but the definition of 'fast' vs 'slow' is opaque. Requests silently downgrade to slower models once quota is exhausted. Users don't know which requests counted as 'fast' until they run out.
Webflow
No-CodePer-site pricing lock-in
Each Webflow site requires its own hosting plan ($14-39/mo). Agencies with 20 client sites pay $280-780/mo in hosting alone. Exporting clean code is limited — you're paying rent, not owning.
Airtable
No-CodeRecord limit paywall
Free tier limited to 1,000 records per base. At 1,001 records, you need the $20/seat/mo Team plan. The limit is low enough that any real project hits it within weeks. No warning before the cutoff — inserts silently fail.
Segment
CDPSource-based pricing obscurity
Segment charges per MTU (monthly tracked user) with pricing that starts at $120/mo for Team. But each 'source' (web, iOS, Android, server) multiplies costs in non-obvious ways. A simple mobile+web app can cost $500+/mo unexpectedly.
Amplitude
AnalyticsEvent volume opacity
Amplitude Growth plan charges per event volume but doesn't show cost-per-event on the pricing page. Autocapture can generate 10x more events than expected. Teams regularly get surprise invoices 3-4x higher than anticipated.
Netlify
HostingBandwidth overage surprise
Netlify Pro includes 1TB bandwidth. Overages cost $55/100GB — not shown prominently on pricing page. A single DDoS or HN front page can generate a $500+ bill overnight with no automatic protection or cap.
Vercel
HostingFunction duration hidden costs
Serverless Function execution is billed per GB-second beyond included amounts. Long-running API routes (database queries, LLM calls) burn through allowances fast. The billing model favors static sites but penalizes dynamic apps.
Wix
Website BuilderDomain lock-in on cancellation
Domains registered through Wix can't be transferred out for 60 days after purchase. If you cancel your Wix plan, your domain is held hostage. The transfer-out process requires multiple support tickets.
Notion
ProductivityExport quality degradation
Markdown export loses formatting, database views, relations, and embedded content. The more you use Notion-specific features, the harder it becomes to leave with your data intact.
Cloudflare
CDNFree tier as gateway drug
Generous free tier includes DDoS protection and CDN. But WAF rules, bot management, and advanced security are $20-200/mo per feature. Once traffic is routed through Cloudflare, switching CDN is painful.
Render
HostingFree tier auto-sleep
Free tier services auto-sleep after 15 minutes of inactivity. First request after sleep takes 30-60 seconds. This isn't clearly stated on the pricing page — only in docs.
Linear
Project ManagementNo data export for free tier
Linear's free tier doesn't include CSV/JSON export of issues. If you want to leave, you either pay for one month to export or scrape via API. Not egregious, but deliberate friction on the exit path.
Anthropic
AI APIRate limit opacity
Rate limits are documented but the actual limits you get depend on spend history, account age, and undisclosed factors. Two accounts on the same paid tier can have very different rate limits. No dashboard shows your current limits vs usage in real-time.
GitHub Copilot
AI ToolsBundled upsell to Enterprise
GitHub Copilot Individual works fine, but key features (workspace context, custom models, admin controls) are locked to Copilot Business ($19/user/mo) or Enterprise ($39/user/mo). The free/individual version gets you hooked; the features you actually need require the org to upgrade.
Railway
HostingTrial credit expiry pressure
Railway gives $5 free trial credits that expire monthly. The dashboard shows a countdown timer and sends emails as credits deplete. Not malicious, but the urgency nudges you to upgrade before you've properly evaluated the platform.
Fly.io
HostingCredit card required for free tier
Fly.io requires a credit card to use the free tier. Their free allowance is generous, but the card requirement is a friction barrier. If you forget to set spend limits and a machine auto-scales, you get a surprise bill.
Neon
DatabaseCompute hour limits confusion
Neon's free tier includes 'compute hours' but the relationship between active time, compute size, and hour consumption isn't intuitive. A always-on database on the smallest compute exhausts free hours in ~5 days. The pricing page doesn't make this obvious.
Supabase
BaaSPause after inactivity
Free tier projects auto-pause after 7 days of inactivity. Resuming takes 1-2 minutes. Not clearly communicated during onboarding — devs discover it when their staging DB goes dark mid-demo.
Stripe
PaymentsRadar default opt-in
Stripe Radar (fraud detection) is enabled by default at $0.05/screened transaction. At 10K transactions/mo that's $500/mo for a feature many merchants don't know they're paying for. Disabling requires navigating deep into dashboard settings.
GitHub
Dev PlatformActions minutes consumption
GitHub Actions bills minutes at different rates per OS — macOS minutes cost 10x Linux minutes. A CI pipeline that takes 5 minutes on macOS consumes 50 minutes of quota. This multiplier is documented but not shown in the Actions UI.