Refactoring, TDD and Solutions Spikes are most known engineering practices that are fundamental for an Agile process.
Refactoring - "…is a disciplined technique for restructuring an existing body of code, altering its internal structure without changing its external behavior." AND "Refactoring is a controlled technique for improving the design of an existing code base." (Martin Fowler)
Question 1 - Why we need Refactoring in Agile Development?
... and for the ones that have the answer to the first question
Question 2 - It is enough to refactor in order to enable agility? What other practices could help? (other then TDD and solutions spikes)