All programs require user documentation, otherwise they are not understandable.
For some programs, configuration may be necessary (or helpful) too; it really depends what program. (However, compile time configuration is sometimes better than run time configuration, depending on the specific details, probably.)
I do believe object-oriented programming is overused (although it is sometimes helpful, often it isn't).
Programs should be versatile, but this can be done without too much complexity; often just being able to combine with other programs that can do the other things, can be helpful, like UNIX systems with many programs can use pipes together, etc.
For some programs, configuration may be necessary (or helpful) too; it really depends what program. (However, compile time configuration is sometimes better than run time configuration, depending on the specific details, probably.)
I do believe object-oriented programming is overused (although it is sometimes helpful, often it isn't).
Programs should be versatile, but this can be done without too much complexity; often just being able to combine with other programs that can do the other things, can be helpful, like UNIX systems with many programs can use pipes together, etc.