refactor

refactor

Code refactoring best practices based on Martin Fowler's catalog and Clean Code principles (formerly refactoring). This skill should be used when refactoring existing code, improving code structure, reducing complexity, eliminating code smells, or reviewing code for maintainability. Triggers on tasks involving extract method, rename, decompose conditional, reduce coupling, or improve readability.

5stars
0forks
Updated 1/24/2026
SKILL.md
readonlyread-only
name
refactor
description

Code refactoring best practices based on Martin Fowler's catalog and Clean Code principles (formerly refactoring). This skill should be used when refactoring existing code, improving code structure, reducing complexity, eliminating code smells, or reviewing code for maintainability. Triggers on tasks involving extract method, rename, decompose conditional, reduce coupling, or improve readability.

Fowler/Martin Code Refactoring Best Practices

Comprehensive code refactoring guide based on Martin Fowler's catalog and Clean Code principles, designed for AI agents and LLMs. Contains 43 rules across 8 categories, prioritized by impact to guide automated refactoring and code generation.

When to Apply

Reference these guidelines when:

  • Refactoring existing code to improve maintainability
  • Decomposing long methods or large classes
  • Reducing coupling between components
  • Simplifying complex conditional logic
  • Reviewing code for code smells and anti-patterns

Rule Categories by Priority

Priority Category Impact Prefix
1 Structure & Decomposition CRITICAL struct-
2 Coupling & Dependencies CRITICAL couple-
3 Naming & Clarity HIGH name-
4 Conditional Logic HIGH cond-
5 Abstraction & Patterns MEDIUM-HIGH pattern-
6 Data Organization MEDIUM data-
7 Error Handling MEDIUM error-
8 Micro-Refactoring LOW micro-

Quick Reference

1. Structure & Decomposition (CRITICAL)

  • struct-extract-method - Extract Method for Long Functions
  • struct-single-responsibility - Apply Single Responsibility Principle
  • struct-extract-class - Extract Class from Large Class
  • struct-compose-method - Compose Method for Readable Flow
  • struct-function-length - Keep Functions Under 20 Lines
  • struct-replace-method-with-object - Replace Method with Method Object
  • struct-parameter-object - Introduce Parameter Object

2. Coupling & Dependencies (CRITICAL)

  • couple-dependency-injection - Use Dependency Injection
  • couple-hide-delegate - Hide Delegate to Reduce Coupling
  • couple-remove-middle-man - Remove Middle Man When Excessive
  • couple-feature-envy - Fix Feature Envy by Moving Methods
  • couple-interface-segregation - Apply Interface Segregation Principle
  • couple-preserve-whole-object - Preserve Whole Object Instead of Fields

3. Naming & Clarity (HIGH)

  • name-intention-revealing - Use Intention-Revealing Names
  • name-avoid-abbreviations - Avoid Abbreviations and Acronyms
  • name-consistent-vocabulary - Use Consistent Vocabulary
  • name-searchable-names - Use Searchable Names
  • name-avoid-encodings - Avoid Type Encodings in Names

4. Conditional Logic (HIGH)

  • cond-guard-clauses - Replace Nested Conditionals with Guard Clauses
  • cond-polymorphism - Replace Conditional with Polymorphism
  • cond-decompose - Decompose Complex Conditionals
  • cond-consolidate - Consolidate Duplicate Conditional Fragments
  • cond-special-case - Introduce Special Case Object
  • cond-lookup-table - Replace Conditional with Lookup Table

5. Abstraction & Patterns (MEDIUM-HIGH)

  • pattern-strategy - Extract Strategy for Algorithm Variants
  • pattern-template-method - Use Template Method for Shared Skeleton
  • pattern-factory - Use Factory for Complex Object Creation
  • pattern-open-closed - Apply Open-Closed Principle
  • pattern-composition-over-inheritance - Prefer Composition Over Inheritance
  • pattern-extract-superclass - Extract Superclass for Common Behavior

6. Data Organization (MEDIUM)

  • data-encapsulate-collection - Encapsulate Collection
  • data-replace-primitive - Replace Primitive with Object
  • data-encapsulate-record - Encapsulate Record into Class
  • data-split-variable - Split Variable with Multiple Assignments
  • data-replace-temp-with-query - Replace Temp with Query

7. Error Handling (MEDIUM)

  • error-exceptions-over-codes - Use Exceptions Instead of Error Codes
  • error-custom-exceptions - Create Domain-Specific Exception Types
  • error-fail-fast - Fail Fast with Preconditions
  • error-separate-concerns - Separate Error Handling from Business Logic

8. Micro-Refactoring (LOW)

  • micro-remove-dead-code - Remove Dead Code
  • micro-inline-variable - Inline Trivial Variables
  • micro-simplify-expressions - Simplify Boolean Expressions
  • micro-rename-for-clarity - Rename for Clarity

How to Use

Read individual reference files for detailed explanations and code examples:

Full Compiled Document

For the complete guide with all rules expanded: AGENTS.md

You Might Also Like

Related Skills

coding-agent

coding-agent

179Kdev-codegen

Run Codex CLI, Claude Code, OpenCode, or Pi Coding Agent via background process for programmatic control.

openclaw avataropenclaw
Get
add-uint-support

add-uint-support

97Kdev-codegen

Add unsigned integer (uint) type support to PyTorch operators by updating AT_DISPATCH macros. Use when adding support for uint16, uint32, uint64 types to operators, kernels, or when user mentions enabling unsigned types, barebones unsigned types, or uint support.

pytorch avatarpytorch
Get
at-dispatch-v2

at-dispatch-v2

97Kdev-codegen

Convert PyTorch AT_DISPATCH macros to AT_DISPATCH_V2 format in ATen C++ code. Use when porting AT_DISPATCH_ALL_TYPES_AND*, AT_DISPATCH_FLOATING_TYPES*, or other dispatch macros to the new v2 API. For ATen kernel files, CUDA kernels, and native operator implementations.

pytorch avatarpytorch
Get
skill-writer

skill-writer

97Kdev-codegen

Guide users through creating Agent Skills for Claude Code. Use when the user wants to create, write, author, or design a new Skill, or needs help with SKILL.md files, frontmatter, or skill structure.

pytorch avatarpytorch
Get

Implements JavaScript classes in C++ using JavaScriptCore. Use when creating new JS classes with C++ bindings, prototypes, or constructors.

oven-sh avataroven-sh
Get

Creates JavaScript classes using Bun's Zig bindings generator (.classes.ts). Use when implementing new JS APIs in Zig with JSC integration.

oven-sh avataroven-sh
Get