Are You Gold-Plating Your Product?
How much should you code to obtain a true MVP? Today, we look at the difference between functionality and gold-plating.
Everyone has their side-projects.
When you begin to write code, there is a moment when you feel like you can create anything.
I'm currently working on two side-projects while running a business and helping three clients with their business needs along with a full-time job.
So, my time is at a premium.
One of the projects I'm building with my business partner is an idea he's had in his head for a very long time and wants to get it out there as soon as possible.
However, the effort it takes to get this particular idea out there requires the software to have a certain level of functionality to actually work.
But how far do you take the development to where it's considered gold-plating as opposed to functionality?
Breaking It Down
When a developer is given requirements, they need to write the software to adhere to these requirements.
These requirements, by design, are realistically the minimal amount of code to get something working. For this software to work, these requirements must be met.
This can also be called the MVP, the Minimum Viable Product.
If everything was designed according to the requirements, you should have a complete product.
Of course, as developers, we understand these requirements don't include everything and usually don't work out the way we expect.
Once we realize we need additional requirements, these features push the date out further because they'll take longer to code.
We all know this as scope creep. It's something every developer understands and what most business users (in my experience) don't realize they are doing until it's too late.
At this point, you need to ask yourself (or the business user) this question: Are these [additional] requirements absolutely essential for this product to function properly or is it a nice-to-have or bell-or-whistle we can add at a later date?
If it's the former, it's Scope Creep. This would require a "come to Jesus" discussion where the stakeholders would decide whether these features are absolutely necessary for this MVP or can wait until version 2.
If it's the latter, this process is called Gold-Plating.
Gold-plating is the process of adding new features to a project that aren't part of the initial requirements.
When developers find something cool or intuitive to incorporate, they may use a current project to start implementing it.
Most developers could look at this as "marketing hotness/coolness." It's a neat enhancement to add, but may not benefit the business user.
While gold-plating could be a time-waster, I've heard some developers consider refactoring as gold-plating.
If you are refactoring existing code, you aren't adding a new feature. You're cleaning up an existing feature or functionality.
Well, OK, maybe you aren't adding a new feature, but this feature is under the covers. It's a feature to the developer and strictly in the code. Your customer will never see this, but you are performing a service to the next developer ahead of you.
You're writing cleaner and better code. Hardly something I would call gold-plating.
Nowadays, software products should almost follow the Single Responsibility Principle and execute one general function as expected, no matter how small its purpose.
Their sole purpose could be described in an Elevator Pitch. The point is it should find it's one purpose and execute it flawlessly.
The functional aspect should be the first achievable goal of your software product.
Once the core functionality (or purpose) is unit tested and user-accepted, it's time to push the product out to the public.
Once you have the metrics in place to gauge what the user likes and doesn't like, then you can start building on the core functionality by adding features and gold-plating.
I know this post may be a rehash for some, but this post was written specifically for business users new to this particular concept.
Developers experience this every. single. day.
Do you have a different definition of gold-plating? How do you handle scope creep? Post your comments below and let's discuss.