PHPConf Asia 2018 Workshop by Junade Ali It’s no secret that software is often written poorly. In commercial environments, developers will regularly find themselves facing technical debt and find that the ability to refactor code is an essential skill to master. As Martin Fowler famously wrote: "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." Due to bad design in software, delivering value to the client can become ever more difficult and stressful until bad software design decisions are rectified. For developers working on badly designed projects, making repayments on technical debt, whilst also delivering value is a key skill – this session will explain how it is possible to square-the-circle and both deliver value whilst paying down technical debt. Unfortunately far too many developers consider refactoring as a risky task filled with code that’s ridden with var_dumps and debug breakpoints. This session seeks to teach attendees that refactoring can be a safe, everyday task during normal software development and that it is indeed healthy to refactor software mercilessly, especially when operating in an Agile environment with changing software requirements. This session will feature a hands-on demonstration of how to refactor a legacy app through a combination of automated testing, faster releases and merciless refactoring. Practical experience in automated software testing and continuous integration are vital learning outcomes and this session seeks to expose attendees to tools like Docker, PHPUnit, Selenium and PHP Mess Detector. Beyond testing, we’ll cover the Code Smells that help developers weed out where the problematic code is. Gaining a firm grounding in Object-Oriented Programming when refactoring PHP is invaluable and as such, this session will take a deep-dive into Polymorphism, SOLID principles and anti-patterns. After nailing down Object-Orientation, we’ll discuss how we can move legacy software architecture to suitable Design Patterns. Extreme Programming practices will be presented as a key discussion point on how developers can help achieve these goals.