Bruce Eckel writes about his experience with ANT a build system in JAVA, which turned out to be a much more complex and much less useful tool than their developers intended it to be. A lot of problems of it are there because its developers tried to solve a much more general problem than they were required to solve, Bruce warns against that because general problem can turn out to be a lot harder than a specific one and you might never solve it given the time and resources. Bruce also warns against having excessive frills in your software.
I agree with his second advice and kinda agree with the first one not fully, I'm from mathematics and mathematicians love to generalize and often their generalizations leads much more simpler and elegant and powerful solution than the one you would have got if you worked on a specific part of it. In short term they building general solutions can be very costly, in long term they can pay very well.