Some comments on your code: * Maximum line length: 80-100 is ok, more is unreadable. * `self[:active] == false` -> `!self[:active]` * Checks should be terser, this is done by creating methods that abstract code. At least, the code within `if self.template` should be abstracted. * `return true`: a `return` at the end of a code block is neither needed nor idiomatic. * Subjective: I usually prefer full-fledge conditionals to guards, indentation helps a lot to see what's going on, IMO. I'd write: def active? case when (!self[:active] && !ignore_column) || suspended || completed_at false when failed_attempts >= MAX_FAILED_ATTEMPTS if suppress_error_emails false end message = "Too many failed attempts for task execution. " + "#{failed_attempts}/#{MAX_FAILED_ATTEMPTS} failed attempts for Task #{id}." SystemMailer.error(message: message) end # ... # more conditions here, you get the idea # ... when template && (status_opted_out? || con_mktg_opted_out? || user_mktg_opted_out?) false else true end end