We were recently contracted to assist a development team in employing some Best Practices. Specifically, they were interested in learning Agile.
We began by speaking with the developers and managers to try to determine what would benefit them the most. We were only given three weeks to teach/guide/coach, and we knew that we could easily overwhelm them and thus provide no value.
After the initial exploration, we decided to focus these ideas:
- TDD\BDD
- O\R M
- MVC/MVP (they have a focus on Web development)
- Iterations, User Stories, Planning Game, etc.
We were also sprinkling bits of Domain-Driven Design through-out.
What surprised me about this experience is that fact that I could not teach these concepts without discussing the supporting tools. Maybe this seem strikingly obvious, but it did not occur to me until we were outlining the agenda for our daily training sessions. It went something like this:
Ayende already hit on this idea, but I guess that it did not sink in for me. I love these tools, but I just wish that they were not so conspicuous in what I consider to be a better way of doing software development.
...
It occurred to me later that some future generation of developers will very rarely think about all of this, in the same way that I so infrequently think about memory management and garbage collection. I believe we are in a transition (and maybe it's always in transit). Best Practices are always trickling their way down lower and lower into the stack, as Software Development moves from combing letters into words towards writing poetry.