Refactoring 1 helps developers keep code from decaying or becoming brittle by teaching safe, structured design transformations that work under any circumstances. Whether you’re trying to refurbish legacy code with no tests, or working with a full safety net of automation, this course can help you make design changes easier, lower risk, and smoother.
Refactoring 1
Hands-on refactoring skills to keep software from decaying or ossifying.
Live / Online
for Software Developers
· 3 days
· 1500 USD
· 24 seats
Live / Online
for Software Developers
3 days
· 1500 USD
· 24 seats
Leaning Objectives
- Make untestable code testable by introducing clear abstractions
- Distinguish true refactoring from risky redesign
- Apply the core rules of refactoring: small steps, separate design from behavior, and retry safely
- Execute common refactoring sequences to improve readability, reduce duplication, and strengthen brittle code
- Refactor safely even without tests or in highly coupled, fragile areas of a codebase
- Build confidence in continuous design improvement by recognizing decay early and practicing refactoring as a habit
Upcoming Sessions
There are currently no events scheduled.
Course Outline
- Introduction
- The rewrite cycle
- Why software gets harder to maintain over time
- Good/bad design as the overriding factor in software development
- Design
- All software work is actually design work
- Why designs become decrepit
- Failure to modify design as a source of risk rathe than safety
- Reasons why people don’t change design
- Refactoring theory
- Comparison with other professions
- Definition of refactoring
- Example refactoring operation
- Analysis of impact of true refactoring methodology
- The three rules of refactoring
- A brief definition of behavior
- Live demo
- Create meaningful method breakdown
- Replace magic numbers with enums
- Emerge class from algorithm
- Relationship between refactoring & tests
- Manipulating the structure of algorithms
- Programming by intention & retrofitting intention into design
- Introduce variable
- Introduce field
- Extract method
- Inline variable
- Inline field
- Inline method
- Logic transformation operations
- Basic IDE operations not enough
- Surround Selection
- Replace Literal with Expression
- Introduce If-True
- Introduce If-False
- Introduce Empty Else
- Split/Join Variable & Initialization
- Remove unreachable code/replace if with always-executed branch
- Invert If/Else
- Move Selection: up, down, in, out
- Convert Switch to If & vice versa
- Split Conditional
- Algebraic expression modification
- Critical aspect: good judgment
- Transforming logic into classes
- Missing abstractions as design killers
- Transform parameters
- Emerging classes
- Introduce data object
- Merging classes
- Pulling logic & members up
- Splitting classes
- Inverting dependencies
- The importance of dependency-inversion
- Impact on testing
- Extract Abstraction
- Closing
- Go over downloadable assets
- 3 types of refactoring
- Strategic thinking in refactoring
- 3rd-party resources
- Conclusion
- Big lab/bonus kata
Instructor

Max Guernsey, III has spent nearly three decades helping developers sharpen their skills in refactoring, design patterns, TDD, and BDD. He’s delivered business software at Microsoft, contributed to scientific software that flew on the Mars lander, and coached engineering teams across industries.
Max’s teaching style is hands-on and interactive. Instead of relying on slides, he opens an IDE, writes code, and works through problems live with participants.