---
title: Use Custom Error Classes
impact: LOW
impactDescription: allows specific rescue blocks and better error hierarchy
tags: error-handling, architecture, quality
---

## Use Custom Error Classes

Define specific error classes for your application domain rather than relying on generic ones.

**Incorrect (generic errors):**

```ruby
def process(amount)
  raise "Invalid amount" if amount <= 0 # Generic RuntimeError
end
```

**Correct (custom errors):**

```ruby
class PaymentError < StandardError; end
class InvalidAmountError < PaymentError; end

def process(amount)
  raise InvalidAmountError, "Amount must be positive" if amount <= 0
end
```

**Tools:** PR review
---
