Improving the design of existing code without changing its observable behavior.