DEV Community

Shashank Trivedi
Shashank Trivedi

Posted on

Code Anti-Patterns and Best Practices Guide

Code Anti-Patterns and Best Practices Guide (Conceptual Edition)

This document intentionally uses masked / pseudo-code.
The goal is to explain design ideas, not provide copy-paste implementations.


1. Switch / If-Else Ladders

❌ Anti-Pattern

function handle(type) {
  if (type === 'A') return ResultA;
  else if (type === 'B') return ResultB;
  else if (type === 'C') return ResultC;
  // keeps growing...
  else return DefaultResult;
}
Enter fullscreen mode Exit fullscreen mode

Problems

  • Hard to extend
  • Violates Open/Closed Principle
  • Increasing cognitive load

✅ Better Pattern: Lookup Strategy

const TYPE_MAP = {
  A: ResultA,
  B: ResultB,
  C: ResultC,
};

function handle(type) {
  return TYPE_MAP[type] ?? DefaultResult;
}
Enter fullscreen mode Exit fullscreen mode

2. Magic Numbers and Strings

❌ Anti-Pattern

if (value > 52428800) {
  throw Error('Too large');
}
Enter fullscreen mode Exit fullscreen mode

✅ Better Pattern

const LIMITS = {
  MAX_SIZE: /* 50 MB */,
};

if (value > LIMITS.MAX_SIZE) {
  throw Error('Too large');
}
Enter fullscreen mode Exit fullscreen mode

3. Code Duplication

❌ Anti-Pattern

function actionFromScreenA() {
  /* same logic */
}

function actionFromScreenB() {
  /* same logic again */
}
Enter fullscreen mode Exit fullscreen mode

✅ Better Pattern

function sharedAction(input, callbacks) {
  /* common logic */
}
Enter fullscreen mode Exit fullscreen mode

4. Redundant State

❌ Anti-Pattern

state = {
  data,
  filteredData,
  count,
  hasData,
};
Enter fullscreen mode Exit fullscreen mode

✅ Better Pattern

state = {
  data,
  filter,
};

// filteredData, count derived when needed
Enter fullscreen mode Exit fullscreen mode

5. Long Parameter Lists

❌ Anti-Pattern

createReport(a, b, c, d, e, f, g);
Enter fullscreen mode Exit fullscreen mode

✅ Better Pattern

createReport({
  title,
  range,
  format,
  metadata,
});
Enter fullscreen mode Exit fullscreen mode

6. Inline Styles Everywhere

❌ Anti-Pattern

<div style={{ /* many inline values */ }} />
Enter fullscreen mode Exit fullscreen mode

✅ Better Pattern

<div className="card" />
Enter fullscreen mode Exit fullscreen mode

7. Scattered Filter Logic

❌ Anti-Pattern

// repeated in many places
data.filter(/* custom logic */);
Enter fullscreen mode Exit fullscreen mode

✅ Better Pattern

applyFilters(data, filters);
Enter fullscreen mode Exit fullscreen mode

8. any Type Abuse

❌ Anti-Pattern

function process(data: any): any {}
Enter fullscreen mode Exit fullscreen mode

✅ Better Pattern

function process(data: KnownType): ResultType {}
Enter fullscreen mode Exit fullscreen mode

9. Prop Drilling

❌ Anti-Pattern

<ComponentA prop={x}>
  <ComponentB prop={x}>
    <ComponentC prop={x} />
  </ComponentB>
</ComponentA>
Enter fullscreen mode Exit fullscreen mode

✅ Better Pattern

// shared context / store
useSharedValue();
Enter fullscreen mode Exit fullscreen mode

10. God Components

❌ Anti-Pattern

// 1000-line component
// state + API + logic + UI mixed
Enter fullscreen mode Exit fullscreen mode

✅ Better Pattern

// small components
// hooks for logic
// composition at top level
Enter fullscreen mode Exit fullscreen mode

11. Premature Optimization

❌ Anti-Pattern

// caching, memoization, virtualization everywhere
Enter fullscreen mode Exit fullscreen mode

✅ Better Pattern

// simple code first
// optimize after measuring
Enter fullscreen mode Exit fullscreen mode

12. Poor Error Handling

❌ Anti-Pattern

catch (e) {
  console.log(e);
}
Enter fullscreen mode Exit fullscreen mode

✅ Better Pattern

showErrorToUser();
logErrorWithContext();
allowRetry();
Enter fullscreen mode Exit fullscreen mode

Summary Checklist

  • Prefer clarity over cleverness
  • Centralize logic
  • Derive state instead of storing it
  • Optimize only after measuring
  • Write code for humans first

Last updated: February 2026

Top comments (0)