DEV Community

Cover image for Dirty Code: Simple Rules to Avoid It
Kaan Kaya
Kaan Kaya

Posted on

Dirty Code: Simple Rules to Avoid It

Every developer has faced it: dirty code—the kind of code that looks like it’s been written in a hurry, sprinkled with magic numbers, duplicated blocks, and cryptic variable names. It works... barely. But maintaining it? That’s a nightmare.

If you've ever muttered under your breath while refactoring someone else's code (or even your own), this article is for you. Here are some simple rules to keep your code clean, readable, and future-proof.

What is Dirty Code?
Dirty code is code that:

  • Is hard to read or understand.
  • Lacks structure and consistency.
  • Is difficult to modify or debug without breaking something else.

This often happens when developers:

  1. Work under tight deadlines.
  2. Skip code reviews.
  3. Don’t follow best practices or standards.

Why is Dirty Code a Problem?

  • Hard to Debug: Fixing one bug can introduce five others.
  • Expensive to Maintain: Poorly written code takes longer to improve.
  • Team Confusion: New developers spend extra hours just trying to understand what’s happening. Dirty code may get the job done today, but it’s a ticking time bomb for your team and future self.

Simple Rules to Avoid Dirty Code

1. Follow the Single Responsibility Principle (SRP)
Each function, method, or class should do only one thing. If you find yourself writing methods with too many responsibilities, break them into smaller units.

❌ Bad Example:

def process_user_data(user):
    user['age'] = user['age'] + 1  
    db.save(user)  
    print(f"User {user['name']} updated")  

Enter fullscreen mode Exit fullscreen mode

✅ Good Example:

def update_user_age(user):
    user['age'] += 1  

def save_user_to_db(user):
    db.save(user)  

def log_user_update(user):
    print(f"User {user['name']} updated")  

Enter fullscreen mode Exit fullscreen mode

Each function now has one clear job, making the code easier to test and modify.

2. Avoid Magic Numbers and Strings
Hard-coded values (“magic numbers”) make code unreadable and hard to maintain. Use constants instead.

❌ Bad Example:

if (statusCode === 404) {  
    console.log("Not Found");  
}

Enter fullscreen mode Exit fullscreen mode

✅ Good Example:

const NOT_FOUND = 404;

if (statusCode === NOT_FOUND) {  
    console.log("Not Found");  
}

Enter fullscreen mode Exit fullscreen mode

The constant NOT_FOUND is self-explanatory, making your code easier to read.

3. Write Descriptive Variable and Function Names
Your variable names should reflect what they represent. Avoid abbreviations and cryptic names.

❌ Bad Example:

int a = 5;  
String s = "John";  

Enter fullscreen mode Exit fullscreen mode

✅ Good Example:

int userAge = 5;  
String userName = "John";  

Enter fullscreen mode Exit fullscreen mode

The same applies to functions. Avoid vague names like doStuff() or process(). Be specific.

4. DRY (Don’t Repeat Yourself)
If you’re copying and pasting code, you’re doing it wrong. Duplicated code makes bug fixing a nightmare. Abstract repetitive logic into functions or classes.

❌ Bad Example:

print("Welcome, John")  
print("Welcome, Mary")  

Enter fullscreen mode Exit fullscreen mode

✅ Good Example:

def greet_user(name):
    print(f"Welcome, {name}")  

greet_user("John")  
greet_user("Mary")  

Enter fullscreen mode Exit fullscreen mode

5. Keep Your Functions Short
If your function is longer than 20-30 lines, it’s doing too much. Break it down into smaller, reusable functions.

Long functions make it harder to understand and test specific behavior.

6. Use Comments Sparingly
Write code that explains itself. Use comments only when necessary to clarify complex logic. Avoid comments that state the obvious.

❌ Bad Example:

// Increment the counter by 1  
counter = counter + 1;  

Enter fullscreen mode Exit fullscreen mode

✅ Good Example:
If your code is clear, no comment is needed:

counter += 1;  

Enter fullscreen mode Exit fullscreen mode

Use comments for things like clarifying why a certain decision was made, not what the code is doing.

7. Format and Organize Your Code

  • Follow a consistent coding style guide (e.g., PEP8 for Python, ESLint for JavaScript).
  • Use proper indentation.
  • Group related code together. Good formatting makes code clean and readable without any extra effort.

The Developer’s Mindset: Write Code for Humans
Code isn’t just written for machines; it’s written for humans too—your teammates, future maintainers, or even yourself six months down the line. When you write clean code:

  • You reduce mental load for others.
  • You make it easier to debug, extend, and improve.
  • You look like a professional developer who values quality.

Final Thoughts
Avoiding dirty code isn’t hard—it just takes discipline. Follow these simple rules:

  1. Stick to the Single Responsibility Principle.
  2. Avoid magic numbers.
  3. Use clear, descriptive names.
  4. DRY out repetitive code.
  5. Keep functions short.
  6. Use comments wisely.
  7. Format your code consistently.

Clean code isn’t about perfection; it’s about making your work maintainable and understandable. Your future self—and your team—will thank you.

Now go and refactor that messy code you’ve been ignoring! 🚀

Top comments (0)