Monday, October 25, 2004

Gold Plating

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?

3 comments:

Anonymous said...

Great piece, Val! My thoughts here:

Gold-Plated Projects at ChristoperHawkins.com

Valerie Vogt said...

Gold plating testing?!? I hadn't even considered the possibility. Thanks for the great comment.

Anonymous said...

I much prefer Silver plating things... because gold is just too gaudy for my tastes...

As for you fully buzzword compliant post... ;-) I think that some people tend to get caught up in the design process and lose sight of the fact that the customer needs a job done. Sometimes the customer isn't smart enough to realize that they need extendability in your product -- so helping them out by doing the right thing in the long run may generate good will with them. But it may also bother them that it took you so long to get to the finish line that they don't contract with you again. And sometimes they just want a solution now simply because they need something to carry them for a year while they design "the real solution". So dumping a ton of time into an elegant design and implementation will be lost on them.

I guess in the long run it boils down to feeling out your customers. If they're the sort of people who you do a lot of repeat business with and they come to you for solutions then go ahead and spend more time on design. But if they seem like they just need something pounded out quick to save them, I wouldn't waste the energy. Just my two cents though!

~Aaron [http://ramblings.aaronballman.com]