At my current place of employment, we had someone come in to talk about some Agile development processes. One of them was Test Driven Development. As an example, the presenter explained how scoring works in bowling and then asked the audience to create the code used to implement the scoring.
To make a long story short, both he and the audience started with a brief design phase(!) to design something to do something as simple as keeping score. I thought this was very interesting, even when hearing some of the other developers as they started to design a multi-level hierarchical design for KEEPING SCORE!
I was reminded of an older idea/post that I had regarding the problems when you combine too much formal education with too little practical experience and throw the resulting person into a production-level software project. Just like when you give a small child a hammer, everything looks like a nail. When you give a lesser-experienced developer the task of designing something, you are more likely to get an over-design of something that does not reflect reality and tries to attain perfection instead of practicality.
(That post can be found here:
http://www.jrtwine.com/blog/?m=200407.)
What scares me is that some of the developers that were helping along this heavyweight, over-engineered design may now be responsible for new development efforts. I have always thought that you need to be a coder before you are a developer. That you need to understand how and why things work in order to make better use of them. As such, I shudder at the thought of having a group of lesser-experienced developers hitting everything they see with the same design hammer. Especially having seen first hand what they are capable of with something as simple as a scoring system!
And people wonder why I believe that managed environments contribute to the dumbing-down of the modern software developer…