Some companies such as HubSpot or Google have developed techniques that allow small teams to create, test and deploy a continuous stream of releases. These companies are able to harness highly distributed Agile teams and scale to very large projects, while avoiding the tyranny of long meetings, conference calls, detailed estimates and sticky notes.
Technical Debt has become an Agile catch-all phrase for any code that needs to be re-worked. Much like Refactoring has become a catch-all phrase for any activity that involves changing code. These fundamental misunderstandings and comfortable yet mis-applied metaphors have resulted in a plethora of poor decisions.
In this blog post, Ralf Westphal explains how functional design and test-driven development (TDD) are the techniques that allows to bridge the gap between requirement and code in Agile.