Friday, July 17, 2009

Refactoring @ Scale

In my previous post, Refactoring for Agility, I posted an outline and some thoughts for Part I of an Overview on Refactoring. Now I'm ready to post on Part II which is about refactoring @ scale. By "at scale" I mean in the larger context of other agile practices, as well as for large projects.

PART II - REFACTORING @ SCALE

1. Scaling-Up

To scale refactoring for larger projects, some additional techniques & issues must be added to the mix.

Note that this is “in addition to” (not “instead of”)

Refactoring In-the-Small

Refactoring @ Scale

Small, Fast & Frequent Refactorings

Larger, Periodic & Planned Restructurings

Emergent Design

Incremental Design & Evolutionary Architecture

Deferred Refactoring

Restructuring & Technical Debt

Code Smells

Architecture Smells

Design Principles & Patterns

Software Modifiability Tactics

Simple/Clean Code

Supple/Domain-Driven Design

2. Emergent Design

Emergent Design is a fancy name for the resulting design that “emerges” from the synergy of combining Refactoring together with TDD, Continuous Integration and Automated Testing.