DEV Community

Skyler Kruger
Skyler Kruger

Posted on

The Dark Patterns I Refuse to Build: A Developer's Lexicon

DEV.TO DEBUT POST

Title: A Lexicon of Dark Patterns I Won't Build

Tags: webdev, programming, ux, ethics


I keep a list.

Not a to-do list. The opposite, really. A list of interface patterns I've decided not to use, no matter how effective they might be at driving metrics.

I call it the Dark Pattern Lexicon. It started as a personal reference — a way to catch myself reaching for manipulative solutions when I'm tired or under pressure. But I've found it useful enough that I published it, and I thought it might be useful to share here too.

This isn't about shaming anyone. We've all built things we're not proud of. We've all inherited codebases with dark patterns baked in. The industry trained us to optimize for engagement, retention, and conversion without always asking what we were optimizing away.

The lexicon is just a vocabulary. Once you can name something, you can choose whether to build it.


Attention Exploitation

Patterns designed to capture and hold attention beyond user intent.

Infinite Scroll
Content that loads endlessly, removing natural stopping points. The user intended to check something quickly; thirty minutes later, they're still scrolling. The absence of an ending is not a neutral design choice.

Autoplay
Media that begins without user action. Every autoplay is a small theft of agency — the assumption that your content is more important than whatever the user was doing.

Notification Bombardment
Interruptions calibrated for maximum pull-back, not user value. The red badge exists because it works on your nervous system, not because you need to know.

Time Obscuring
Interfaces that hide clocks or session duration. If showing users how long they've been here would make them leave, that's information about your product.


Social Manipulation

Patterns that exploit social instincts and relationships.

Social Comparison Engines
Metrics that invite unfavorable comparison — follower counts, likes, streaks. These features don't emerge from user needs. They emerge from engagement targets.

Read Receipts & Presence Indicators
Signaling when someone has seen a message or is online creates social obligation. The anxiety you feel when you've "seen" a message but haven't responded? That's the feature working as intended.

Engagement Bait
Algorithmic amplification of divisive or emotionally provocative content. Outrage is engaging. Engagement is monetizable. The math is simple and the damage is diffuse.


Dark Defaults

Patterns that exploit default settings and user inattention.

Privacy-Invasive Defaults
Settings configured against user interest, relying on the fact that most people don't explore settings menus. If you have to opt out of sharing, the system is designed against you.

Pre-Checked Consent
Checkboxes that arrive already ticked. The user's signature on an agreement they never read because reading was made difficult by design.

Buried Settings
Important controls hidden deep in navigation hierarchies. If a setting benefits users but costs the company, watch how hard it becomes to find.


Psychological Exploitation

Patterns that weaponize cognitive biases and psychological vulnerabilities.

Variable Reward Schedules
Unpredictable rewards that trigger dopamine responses — the same mechanism that makes slot machines addictive. Pull-to-refresh exists because intermittent reinforcement is more compelling than consistent reinforcement.

Artificial Scarcity
"Only 2 left!" when inventory is not actually constrained. Urgency manufactured to short-circuit deliberation.

Guilt Copy
Language designed to make users feel bad for their choices. "No thanks, I don't want to save money." This is called confirmshaming, and it works because shame is a powerful motivator.

Confirmshaming
Modal dialogs where the decline option is worded to make users feel foolish or irresponsible. The quiet cruelty of "No, I prefer to stay uninformed."


Data Extraction

Patterns designed to harvest personal information beyond stated purposes.

Dark Data Collection
Gathering information users didn't knowingly provide and wouldn't consent to if asked clearly. The gap between what users think they're sharing and what they're actually sharing is not an accident.

Shadow Profiles
Building dossiers on people who never signed up, assembled from the contact lists and behaviors of people who did. You can be profiled by a service you've never used.

Behavioral Prediction Markets
Selling not just data, but predictions about future behavior. The product isn't advertising. The product is the ability to modify what you'll do next.


Exit Prevention

Patterns designed to prevent users from leaving.

Roach Motel
Easy to sign up, difficult to cancel. The friction is intentional. Every additional step in the cancellation flow is a bet that you'll give up.

Data Hostage
Making it difficult or impossible to export your own data. Years of content, connections, history — held ransom against your departure.

Zombie Resurrection
Accounts that reactivate with minimal action after deletion, or deletion processes that don't actually delete. The user said goodbye. The system pretended not to hear.


Why I Keep This List

I'm a solo developer building tools for other developers. The business model depends on people finding value and choosing to pay. There's pressure — always — to optimize for conversion, to reduce churn, to maximize engagement.

The lexicon is how I check myself.

When I'm designing a flow, it forces me to think in new innovative ways about how to still make a product valuable without submitting to dark patters. It reminds me that exploitative design is a choice and one that we do not have to make. It is my belief that in designing for user wellbeing and homeostasis instead, we can gradually shift the perception of technology being often inherently harmful and actually repair our relationship with it and each other within it.

There is no shame or judgement from me on the matter. I simply and truly believe that it is either a choice we will continue to make or we won't.


The Alternative

This isn't a call to abandon metrics or ignore business reality. It's a recognition that there are multiple ways to build sustainable software, and some of them don't require treating users as resources to be extracted.

Natural endings instead of infinite scroll. Asynchronous respect instead of read receipts. Privacy by default instead of privacy-invasive defaults. Neutral language instead of guilt copy. Dignified departure instead of roach motels.

These choices might cost some conversion percentage points. I'm willing to find out.


The Full Lexicon

The complete version lives at veridiantools.dev/lexicon, released under Creative Commons (CC BY 4.0). Use it, share it, adapt it.

If you've got patterns I missed, I'd like to hear about them. The goal isn't to be comprehensive — it's to build a vocabulary that makes these techniques visible.

Once you can name something, you can choose whether to build it.


I'm Sky. I build developer tools at VERIDIAN. If you're working on software that respects users, I'd like to know about it.

Top comments (0)