I work for a consulting firm, and as projects progress from planning to implementation, whether in an iterative or an old-fashioned waterfall process, I often wonder about “gold plating.” Gold plating is often referenced in relation to cool features in the user interface. But can we gold plate in other aspects of our projects, as well?
Let’s take architecture, for example. When architecting a solution, there are many roads I could take. I could spend 5 minutes on the architecture and hop right into the code. I could spend weeks on the architecture, fashioning a framework made of steel, a framework where I have abstracted every piece that may be shared, a framework where I have carefully planned the separation of the data layer from my domain layer so my customers could use XML, Oracle, or SQL Server as the data store by just changing a setting, and a framework where my domain layer never relies on a configuration file that is specific to a web front end. The more flexible my framework is, the more time that must be spent planning and executing.
The time spent planning a flexible architecture should pay for itself in the long run, when it comes to time spent maintaining and extending the solution. But what if my customer never wants to change data stores? What if my customer only wants to deploy a web solution? How do we determine when the payoffs from planning flexibility are no longer worth it? Can we plan so much that we are gold plating our architecture?