The 'T' in TDD stands for design. :) The name of it has always hurt the concept I think.
In my experience TDD uptake and understanding suffers because a lot of developers are in a context of using an existing framework, and that framework sort of fights against the TDD concepts sometimes. Getting around that with things like dependency injections, reversals etc then gets into the weeds and all sorts of 'Why am I doing this' pain.
Put another way, a lot of commercial development isn't the nice green-field coding katas freedom, it's spelunking through 'Why did ActiveRecord give me that?' or 'Why isn't the DOM refreshing now?'. Any friction then gets interpreted as something wrong about TDD and the flow gets stopped.
In my experience TDD uptake and understanding suffers because a lot of developers are in a context of using an existing framework, and that framework sort of fights against the TDD concepts sometimes. Getting around that with things like dependency injections, reversals etc then gets into the weeds and all sorts of 'Why am I doing this' pain.
Put another way, a lot of commercial development isn't the nice green-field coding katas freedom, it's spelunking through 'Why did ActiveRecord give me that?' or 'Why isn't the DOM refreshing now?'. Any friction then gets interpreted as something wrong about TDD and the flow gets stopped.