Our system is big and complex; it’s not feasible to write automated tests for it. Often developers shy away from writing automated tests due to their fear of breaking existing functionality. While most teams agree that the only way to break out of this loop is by making the system easy to test, the fear of breaking it, will stop most teams from even trying. In this day we will learn on how to approach and deal exactly with this challenge. We will learn and practice techniques that allow us to write automated tests in those complex scenarios, we will focus on many of the common issues that make legacy code hard and we will examine how slowly in time those issues can be removed while improving our system testability and maintainability.