---
title: Avoid needless metaprogramming
impact: MEDIUM
impactDescription: Maintain code clarity and debuggability.
tags: ruby, metaprogramming, readability, simplicity
---

## Avoid needless metaprogramming

Maintain code clarity and debuggability. Avoid using metaprogramming (`define_method`, `method_missing`, `class_eval`) unless absolutely necessary. Metaprogramming makes code harder to understand, debug, and maintain.

**Incorrect (Over-engineered):**

```ruby
class User
  [:name, :email, :phone].each do |attr|
    define_method("display_#{attr}") do
      send(attr) || "N/A"
    end
  end
end
```

**Correct (Explicit):**

```ruby
class User
  def display_name
    name || "N/A"
  end
  
  def display_email
    email || "N/A"
  end
  
  # ...
end
```

**Tools:** RuboCop (`Style/MethodMissingSuper`)
