I work for a medium company that has around 250 developers. Unfortunately, lots of them are stuck in a procedural way of thinking and some teams constantly deliver big Transactional Script applications, when in fact the application contains rich logic. They also fail to manage the design dependencies, and end up with services which depend on another large number of services (a clean example of Big Ball of Mud).
My question is: Can you suggest how to spread this type of knowledge?
I know that the surface of the problem is that these applications have a poor architecture and design. Another issue is that there are some developers who are against writing any kind of test.
A few things I'm doing to change this (but I'm either failing or the change is too small are)
Running presentations about design principles (SOLID, clean code, etc).
Workshops about TDD and BDD.
Coaching teams (this includes using sonar, findbugs, jdepend and other tools).
IDE & Refactoring talks.
A few things I'm thinking to do in the future (but I'm concern that they might not be good)
Form a team of OO evangelists, who disseminate an OO way of thinking in differet teams (these people would need to change teams every few months).
Running design review sessions, to criticise the design and suggest improvements (even if the improvements are not done because of time constraints, I think this might be useful)
.
Something I found with the teams I coach, is that as soon as I leave them, they revert back to the old practices. I know I don't spend a lot of time with them, usually just one month. So whatever I'm doing, it doesn't stick.
I'm sorry this question is spattered with frustration, but the alterative to write this was to hit my head on the wall until I pass out.