Yesterday I read an interesting blog post:
… although I think the heading “best practices” is a misnomer. I tend to agree with him, given that I too came from a scientific/engineering “solve the problem, not all the universe’s problems” coding mentality.
Too often programmers choose to generalize their design to allow for all contingencies, including some that may never occur. The problem is that in addition to extending the development time, the final product can become top heavy and difficult to debug and maintain.
Although I learned much from agile design (and have since rejected much of the fluff that goes with it), one thing I’ve always done in my own design is “write the simplest thing that will work”. The trick, as they say, is is deciding just what “will work” really means in the context of the problem to be solved.