It feels like we’ve been living in a dystopia for the last decade or so, with apps (and the companies behind them) competing to be the shadiest of them all. Meta, Amazon, and Microsoft are some of the most common offenders when it comes to “dark patterns.”
What are the these dark patterns?
Dark patterns in UI design are manipulative techniques created to trick users into doing things they did not meant to do. These things can be buying extra items, sharing personal data, or getting tricked into recurring fees. This term was coined in 2010 by the UX designer Harry Brignull who still maintains a db of these patterns here: https://deceptive.design/
Let's see the top 10 most frequent patterns, who does it and how to avoid it in your own product.
- The Roach Motel pattern
A very common pattern, usually seen in the subscription based world. When it is very easy to sign up for a service, account, or subscription, but canceling requires an infinite amount of effort and three support calls.
Amazon Prime is the best example. In 2023, the US Federal Trade Commission sued Amazon, alleging that the company made Prime cancellation deliberately difficult through a multi-page flow full of confusing offers and misleading links. Legend has it that Amazon called this flow "Iliad," after Homer's epic about a long, grueling war, which is very fitting. Amazon settled the case in September 2025 for $2.5 billion, one of the largest consumer protection settlements in history.
How to avoid it in your app: Build a simple, one-click cancellation button. If it is easy to subscribe, it should be easy to undo that.
- Forced Continuity (Negative Option Billing)
A free trial automatically converts into a paid subscription, and the user is billed without a clear reminder, notification, or easy way out.
In April 2025, the FTC sued Uber over its Uber One membership program. The complaint alleged that Uber enrolled and billed users without their consent, charged them before free trials ended, and made cancellation hard.
How to avoid it in your app: Send a proactive email or push reminder 3 to 7 days before a free trial ends, outlining when and how much they will be billed. Also include links to cancel their free trial.
- Hidden Costs
Extra fees, service charges, or delivery costs are withheld until the very final step of the checkout process, after the user has already invested time OR even shared their information.
Ticketmaster is famous for hiding service fees, facility charges, and processing costs until the very last screen of the ticket purchasing funnel. That changed in May 2025, when the FTC's rule on unfair and deceptive fees took effect, requiring all-in pricing for live-event tickets in the US. Ticketmaster now shows the full price upfront, but in September 2025 the FTC sued Ticketmaster and its parent company, Live Nation, alleging deceptive pricing practices among other issues.
How to avoid it in your app: Implement Upfront Pricing. Display the total, all-inclusive price (including mandatory fees) on the very first page where the item or service is listed.
- Confirmshaming
The interface uses emotional blackmail or guilt-tripping language on opt-out buttons to make the user feel bad for declining an offer. (Example: A popup button that says, "No thanks, I hate saving money").
Believe it or not, this is a pattern used by Duolingo. Their owl mascot is famous for full on shaming people when you try to pause a streak. Similar emotional language appears in prompts or videos with their mascots urging users to upgrade to a paid subscriptions.
How to avoid it in your app: Keep your microcopy neutral, polite, and direct. Use objective button text like "No, thanks" or "Keep free version" instead of emotionally manipulative language.
- Misdirection
The design draws a user's visual attention toward one thing to distract them from another in purpose. (Example: Making a giant "Accept" button bright green while hiding "Reject" in a tiny gray link).
The king of dark patterns: Facebook. When prompting users to accept tracking, Facebook used a prominent, colorful "Accept All" button, while the options to reject tracking or customize cookie preferences were harder to reach. In January 2022, France's data protection regulator fined Facebook €60 million because refusing cookies took several clicks while accepting them took just one.
How to avoid it in your app: Provide equal visual weight to choices. Ensure your "Reject All" and "Accept All" buttons feature identical sizes, contrast ratios, and styling.
- Bait and Switch The user takes an action expecting a specific outcome, but a completely different, undesirable action happens instead.
Microsoft's 2016 Windows 10 upgrade campaign is the textbook case. For years, clicking the red "X" on a pop-up meant "close this window." Microsoft changed its upgrade prompt so that closing it with the "X" counted as agreeing to a scheduled upgrade. Many users woke up to find Windows 10 installed on machines they never meant to upgrade. After widespread backlash, Microsoft reversed the behaviour.
How to avoid it in your app: Make sure every control does what users expect it to. A close button should only close, and any action with consequences, like an install or a purchase, should require an explicit labeled confirmation.
- Nagging
The same persistent, non-refusable prompt repeatedly interrupts the user experience until they finally cave in to make it go away.
Youtube persistently interrupts users with banners and pop ups to sign up for Premium. Even after a user clicks "No Thanks" the app repeats the exact same prompt days, or sometimes just hours, later during subsequent viewing sessions.
When accessing Pinterest via a mobile web browser, the site continuously displays banners, overlays, and blockers demanding that the user download their native mobile app to view content seamlessly, disrupting standard mobile web browsing.
How to avoid it in your app: Respect user refusal.
- Preselection (Default Opt-Ins)
Checkboxes, add-ons, or paid options are pre-checked by default during a sign-up or checkout process, relying on users to miss them.
Budget airlines were once notorious for this. Carriers like Ryanair pre-added travel insurance and other extras to bookings, so customers had to spot and remove them to avoid paying more. The practice became so widespread that the EU banned pre-ticked boxes for additional payments under its Consumer Rights Directive, which took effect in 2014.
How to avoid it in your app: Keep independent products decoupled. If you are promoting a bundle, offer it as a clearly labeled, manual opt-in toggle that details exactly what is included and when billing begins.
- Disguised Ads
Advertisements or paid promotional links are styled to look like regular website content, navigation menus, or legitimate download buttons.
Instagram blends paid advertisements into the main user feed. These ads use the exact same layout, fonts, sizing, and interaction models (double-tap to like, swipe for a carousel) as posts.
How to avoid it in your app: Avoid masking promotional content as native user activity.
- Fake Urgency and Scarcity
False countdown timers, fake live stock counters, or fake purchase notifications are displayed to manufacture panic and force a rushed decision.
Booking.com was infamous for pressure-selling text like "Only 1 room left at this price!" In 2019, after an investigation by the UK's Competition and Markets Authority (CMA), Booking.com and several other hotel booking sites agreed to stop using misleading urgency claims and pressure-selling tactics.
How to avoid it in your app: Base all inventory counts on real-time data. If you display a scarcity indicator, ensure it reflects actual, immediate stock limits.
Honorable Mentions
These patterns didn't make the top 10, but they're common enough that everyone should recognize them.
Trick Questions: Confusing wording, often double negatives, makes users choose the opposite of what they intended. A checkbox that reads "Uncheck this box if you do not wish to not receive offers" is a classic example.
Sneak into Basket: An extra item, like a donation, warranty, or magazine subscription, is added to the user's cart during checkout.
Privacy Zuckering: Named after Facebook founder Mark Zuckerberg, this pattern tricks users into sharing more personal data than they meant to, usually through confusing privacy settings and defaults that favour sharing.
The good news is that the dystopia isn’t permanent: regulators are finally catching up, and every product team can choose to do better. The best apps don’t need to trick you to be their customer. Dark patterns might boost the numbers short-term but they cost the trust of the users.
Sooo, which is the dark pattern that annoys you the most in today's app ecosystem?


