According to Steve McConnell, Gold-plating "comes from developers who want to explore a technically challenging new area..." Jeff Atwood, in his blog, says that "In the purest sense, all refactoring is gold-plating. That is, it consumes extra project time and results in no material benefit for the users. But without periodic and aggressive refactoring, we can't produce sane, maintainable code."
While I agree with Jeff's conclusion, I would not go as far as he does in equating refactoring with gold-plating. Having maintainable code does have a direct benefit to the customer or client (the person paying for the development). Ultimately, it's a cost/benefit matter. When the cost outweighs the benefit, then it's not worth refactoring. Plus, at some point (I hesitate at saying this), the code just works and no further development/refactoring is needed regardless of the code being ugly. Furthermore, when it comes to gold-plating, there is an ill-motive even though it may be subtle.
I should probably note that when I use the term "developer" I may be referring to a development consulting organization, an independent consultant or a developer (at any level) within a development team. In all cases, this is a person who can influence the tools and technologies employed in a development effort.
That said, I find that an extensive amount of gold-plating occurs at a much earlier phase of development (such as the proposal phase) which is why I prefer the term "Technology gold-plating" over "Developer gold-plating". This goes right in line with McConnell's definition.
I divide Technology Gold-Plating into two categories.
- New Technologies (Bleeding Edge)
- Preferred Technologies
New Technology Gold-plating
New technology gold-plating is exactly what the name implies. The developer wants an opportunity to delve into the latest technology. This is extremely dangerous for the client who may be investing his/her money to the effort. In essence what is going on here is development research and education at the client's expense. It works like this. The vendor comes out with a new bleeding edge technology. The vendor pushes it on its partners (who want to play with it). The partners push it on to their clients. Their clients get blood splattered all over them - not good and frankly, quite messy.
Preferred Technology Gold-plating
Preferred technology gold-plating is the use of technologies with which the developer is most familiar or favors for whatever reason. For instance, a developer may use a pre-designed architectural model from the latest popular book on software architecture. Or he may use some pre-fabricated framework. I am by no means saying these are bad. They are excellent if they actually meet the client's technology and business needs. Yet, it happens too frequently that a company ends up with an over-architected monolith of a system when all they needed was an html page and a few lines of java script.
So, how does one prevent this from happening to their project? Stay tuned, I'll be covering this and more in future posts.