DEV Community

Cover image for Deleting the “Nice” Anti-Pattern: A Personal Systems Refactor
Khali Sollis
Khali Sollis

Posted on Edited on

Deleting the “Nice” Anti-Pattern: A Personal Systems Refactor

How I removed a legacy behavior that optimized for likability—and paid for it with self-respect.

Context

I recently ran an audit on a behavioral pattern I had been running for years:

If (someone needs something)
→ respond immediately
→ say yes
→ be helpful

I thought this was a virtue.

In practice, it behaved like an anti-pattern:

It scaled poorly
It created hidden costs
It trained other people’s expectations in the wrong direction

So I treated it like deprecated code and started a refactor.

The Bug: Over-Availability as a Default State

The core issue wasn’t kindness.

It was this assumption:

My value = my availability

That assumption created predictable side effects:

No rate limiting on my time or energy
No validation of incoming requests
No distinction between urgent vs. convenient

Everything got processed.

Even when it shouldn’t have.

The Hidden Cost Model

Availability Tax
Every time I defaulted to “yes,” I paid in:

focus
energy
time I didn’t get back

The return?

Sometimes gratitude.
Occasional acknowledgment.

Nothing that actually replenished the system.

Emotional Subsidy
By stepping in too quickly, I removed friction from other people’s systems.

Which meant:

they didn’t need to solve their own problems
they didn’t need to improve
they didn’t experience consequences

I wasn’t helping.

I was preventing upgrades.

Compounding Drift
Over time, this created:

External reliability ↑
Internal alignment ↓

From the outside, I looked dependable.

Internally, I was offloading myself.

Root Cause

This pattern wasn’t random. It was trained.

Being “nice” = being valuable

So I optimized for:

responsiveness
agreeableness
low friction

At the cost of:

boundaries
priorities
self-respect
The Refactor

I didn’t try to “feel different.”

I changed the rules of the system.

Add a Boundary Layer Incoming request → evaluate → optional response
Not:

Incoming request → immediate compliance

Practical change:

I say no without over-explaining

Introduce Pattern Recognition
I stopped treating repeated behavior as isolated events.

If (pattern detected)
→ stop granting access

Practical change:

No more “one more chance” when the data is clear

Implement Rate Limiting
Not everything deserves an immediate response.

Response time ≠ self-worth

Practical change:

I don’t reply instantly just to be liked
Reframing “Kindness”

This was the critical shift.

Old model:

Kindness = availability + accommodation

New model:

Kindness = integrity + choice

And one hard truth:

The people who benefited from my “niceness” called it kindness.
I call it access they didn’t deserve.

What Happened After

When I removed default access:

Some relationships broke
Some dynamics disappeared
Some people pushed back

But:

My energy stabilized
My decisions got cleaner
My time started reflecting my priorities

The system didn’t fail.

Only the parts depending on bad logic did.

Takeaway

This isn’t about becoming cold or unhelpful.

It’s about not running outdated code that trades self-respect for approval.

If your default is always “yes,” you’re not being kind.

You’re running an unbounded process with no resource protection.

Status
Self-Erasure Protocol: deprecated
New system: in production
Rollback: not planned

Series: Behavioral Anti-Patterns
Next: Boundaries
“Missing Boundary Checks: Why ‘Nice’ Code Always Gets Exploited”

Top comments (4)

Collapse
 
niccamdc profile image
Nicca MDC

SO, SO TRUE!! >>> This isn’t about becoming cold or unhelpful.

It’s about not running outdated code that trades self-respect for approval.

If your default is always “yes,” you’re not being kind.

Collapse
 
usernameinvalid profile image
Larry Z.

What stands out here is the distinction between kindness and unlimited access. The “deprecated code” metaphor makes a familiar behavioral pattern much easier to see and debug.

A few highlights that really landed:

  • “My value = my availability” is the real root bug. When usefulness becomes the measure of worth, every request starts feeling like a test of whether we’re valuable.
  • The hidden availability tax is easy to underestimate. Time, attention, emotional energy, and focus are finite resources, even when we rarely account for them explicitly.
  • The idea of “emotional subsidy” is particularly insightful. Helping too quickly can unintentionally remove the friction that would otherwise force someone to learn, adapt, or take responsibility.
  • The shift from isolated events to pattern recognition is powerful. Boundaries become much clearer when we evaluate repeated behavior instead of constantly resetting the clock with “one more chance.”
  • “Response time ≠ self-worth” is a useful distinction. Being immediately reachable can be a habit of conditioning rather than evidence of care, competence, or character.
  • The reframing of kindness from “availability + accommodation” to “integrity + choice” is probably the most important part of the piece. A freely chosen yes has very different meaning from an automatic yes driven by fear of disappointing someone.
  • I also appreciate that the refactor isn’t presented as becoming cold. The goal is selective generosity: helping because you choose to, rather than because you feel obligated to remain perpetually accessible.

The deeper lesson is that boundaries aren’t necessarily barriers to healthy relationships. They’re mechanisms for protecting the resources that make meaningful participation possible.

Sometimes changing the system doesn’t mean becoming a different person. It means removing the rules that were quietly teaching everyone—including yourself—how little your time and energy were worth.

Collapse
 
mona_d_4222dda374567263b profile image
Mona D.

Appreciate you sharing this essay here with us thank you so much!

Collapse
 
dead2me profile image
Artchie W. J.

So deep and honest thank you so much for this beautiful writing Khali!