One of my first great managers at AMS tought me the Keep it Simple Stupid (KISS) principle. This is a lesson software engineers often forget. Often those that consider themselves experts fall into the trap of not following the KISS principle.
For example, 2 of us spend 3 hours troubleshooting an issue with one of our applications last night. Both of us have 17+ years epxerience in software development. The application we were working on was built by a "Ruby on Rails" expert. This expert is a very good developer and writes very good code and maintained a good suite of tests. One mistake the expert made was not following the KISS principle.
The rails application he built is a fairly simple application built over a 6 month time period. This application makes use of 37 gems and 12 plugins. Now that the code and gems are aging things are becoming very difficult to maintain. For example one gem he used made it so javascript was packaged up nicely and minimized. This gem for those unfamiliar to it uses javascript comments to include other javascript files (not obvious to those that dont understand the gem). The idea of packaging and shrinking is great, but when things go wrong with javascript, its very hard to debug. There didnt seem to be any simple switch to turn this off (seems like it should automatically be off in development). Another gem he used for notification of errors used to have a free version (or free trial), ths version expired, so now the gem doesnt report errors, and it makes error messages ugly and hard to read (it wraps exceptions). We tried to add a new page to the application and every form had 2 labels, some gem somewhere was auto generating fields. Another gem he used for generating the oembed tags for video and flash containers depended on a jquery plugin. This jquery plugin worked great in jquery 1.4.2 but when we upgraded to 1.4.3 it stopped working in a very ambigous way.
So in the end we found the problem and fixed it, but it took probably 10x longer because of the complexity of the application.
Just because there is a gem for everything doesnt mean you should use it. Try to keep your applications as simple as possible, make sure you really need a gem before using it. If its doing something to modify the way things normally work, then document it throughly. Think about the developers that will be maintaing your application for the next 10 years. Will they find your code simple and straight forward? How will your code hold up to version changes and dependency changes?
Dont forget to KISS!
Comments