I present an approach to software engineering based on refactoring (behaviour-preserving program changes). In this approach the majority of coding effort for a new feature goes not into changing behaviour but into design alterations that make the feature easy to drop in. The talk will illustrate this metholology in Python, using tests to check that the system behaviour is only changing when we want it to.