Gain control of your code and have the confidence to change it with refactoring.
Join Emily Bache in mastering refactoring techniques that help you design cleaner software, avoid bugs, and build your confidence in the face of complex code.
You open a file, ready to make a small change and suddenly you’re staring at hundreds of lines of code that you can’t make much sense of...
This course will help you move from those feelings of anxiety and confusion in front of legacy code to feeling confident, capable, and in control of your work.
You’ll learn how to look at complicated code and actually understand it. Spotting opportunities for improvement, knowing what to change, and how to do it safely. Instead of feeling blocked by the systems you’re working on, you’ll gain the tools and mindset to turn them into something you can work with confidently and even be proud of.
Refactoring will no longer feel mysterious. You’ll know exactly what it looks like, why it matters, and how to apply it with powerful tools you may not have used before. Along the way, you’ll develop design instincts that guard against poor practices and help you to improve your code so that it becomes “a more habitable space”, creating more room in your work for creativity and enhancing productivity. What we are all really here for.
By the end of the course, you won’t just understand refactoring, you’ll see it as a superpower. Work faster, with fewer errors, and with the confidence that you can improve even the most complex systems without fear of breaking everything.
Refactoring can and will unlock a new level of independence, skill, and pride in the work you produce as a developer.
This course is designed for developers who want to feel more in control of their code, especially when faced with complexity or with legacy systems. Whether you’re early in your career or building confidence with unfamiliar projects, this training will give you the tools to tackle code safely and effectively.
You’ll benefit most if you are:
- A junior or mid-level developer who wants to strengthen your refactoring skills and stand out on your team.
- Daunted by complex or legacy code and unsure how to change it without breaking things.
- Working in a startup or a new job, needing to deliver features quickly while dealing with unfamiliar codebases.
- Someone with limited exposure to refactoring, who wants to finally see it demonstrated properly and apply it hands-on.
- A developer looking to expand your toolkit and improve your ability to read, understand, and safely transform code.
- A manager looking to invest in your team’s growth, seeking practical, confidence-building training that helps engineers work faster with fewer bugs.
If you’ve ever opened a piece of code and thought “where do I even start?”. This course is built for you.
This course comprises a series of short video lessons by Emily, guiding you through demonstartions and examples, in Java, showing you the techniques you can apply to tackle the challenges you face. The exercises are manageable but powerful, giving you the opportunity to practice real techniques while seeing how an expert approaches the same problems.
You’ll not only learn what to do when confronted with complicated code, but also why these techniques work, helping you build lasting confidence in your development process.
What’s included in the course:
Learn directly from Emily’s list of code katas and see how an experienced developer trainer tackles real refactoring challenges.
Access to all sample code on GitHub, so you can try techniques for yourself, hands-on.
Practical skills for dealing with unfamiliar or complex code: what to do when you don’t know where to start.
Techniques for extracting methods to improve readability and increasing maintainability.
Safe transformations to handle complex conditionals and simplify design.
Guidance on moving from procedural to object-oriented design.
Workflows to help you spot opportunities, apply changes incrementally, and feel confident and in control of the legacy code you’re faced with.
Course Introduction
FREE PREVIEWIntelliJ access code - free offer from JetBrains
Turning off your AI Assistant in IntelliJ
Making Sense of Conditional Logic
Initial 'scan' of Gilded Rose Code
Practicalities: Getting the Code
Code Reading: Folding
Ensuring Adequate Test Coverage
Initial Simplifications
Manipulating Conditionals Safely
Lift Up Conditional
Lift Up Conditional on Gilded Rose
Strategy So Far and Next Steps
Alternative Option: Incremental Rewrite
Gilded Rose Refactoring Quiz
Gilded Rose Solution Summary
Exercise: Conditionals Refactoring Practice
Exercise: Gilded Rose Refactoring Kata
Separate Intention from Implementation
Scanning Tennis
Code Reading with IDE Tools
Extract Method on TennisGame6
When and why to Extract Method
Extract Method on TennisGame1
Strategy Overview for Improving Unfamiliar Code
Analysis of TennisGame2
Improving TennisGame3
Analysis of TennisGame4
Improving TennisGame5
Tennis Refactoring Quiz
Chapter Summary
Exercise: Tennis Refactoring Kata
Replace Conditional with Object Oriented Design
Initial Design Ideas
Repeated Switches Design Smell
Target Design: Polymorphism
Replace Constructor with Factory Method
Refactoring without Tools
Create Subclasses
Push Down Method
Handling the Type field
Refused Bequest Code Smell
Lazy Element Code Smell
Parrot Refactoring Quiz
Chapter Summary
Exercise: Parrot Refactoring Kata
Separating Concerns
Identifying Code Smells
Divergent Change
Creating Structural Separation
Split Loop and Extract Method
Split Phase: Introduce StatementData
Split Phase: Move Logic
Replace Loop with Pipeline
Repeated Switches
Theatrical Players Quiz
Chapter Summary
Exercise: Theatrical Players Refactoring Kata
CONGRATULATIONS!!
Find Emily on Social Media