Gold Plating Software Products
By: Hesham Meneisi
Tags: Engineering, Software, Project Management, Software Development, Software Architecture

Exit psychic abilities and enter research

Simply adding a washing machine won’t cut it, so it seems. You might have just opened pandora’s box of requests and complaints. More customer satisfaction they said, it will cost almost nothing they said.

An argument can be made here that some people would have been turned off by the lack of a washing machine and would rather rent somewhere else. Exit psychic abilities and enter research. The decision to buy a washing machine should have been inspired by solid market analysis. How many people actually asked for one? How many of them decided to rent regardless? How many free condos do you have on average? Can you increase the price for condos with a washing machine? What’s the recommended percentage of condos to put a washing machine in? How long do washing-machine-loving customers rent on average and how does that compare to others?

Additionally, if your decision was based on thorough analysis, it would necessitate its own project or sprint. It won’t be part of your MVP or an add-on to a completely different scope. Just as a thought exercise, try to think of reasons why or why not to buy a microwave and share your thoughts in a comment.

Software Analogy

I’m sure most readers have already picked up on what I’m trying to say with the washing machine example but, after all, this is a software-focused article. So how exactly does this apply to software projects?

A project manager or a software engineer thinks it’s a super-awesome idea to add feature X. They go on to develop this feature and after the deadline getting pushed back a week or two, they finally finish thinking it was worth it.

So here are a few different things that can come out of pandora’s box, that is, if the client notices the feature at all!

It’s broken! Looks like you didn’t cover all the corner cases and urgent unasked-for maintenance is now due.

Ok that’s a decent feature but can you do Y on top of/instead of X? Y will take you a sprint to do. Do you say no or ask for extra payment and upset the client? Maybe just swallow the cost? Either way, you lose. Looks like you forgot to propose your idea first.

your idea first. Actually, this feature is confusing my team and they might misuse it, can you disable it? They are the smartest I can afford to hire, sorry about subverting your expectations, I guess…

Upgrading the application, exciting times huh? Except remember that useless feature you added a few months earlier? It’s proving a bit problematic. So you can feel free to omit it and upset the 5% of your users utilizing it (or the client, by proxy) or spend a week or two trying to get it to work in the new version. Such a fun decision to make!

Oh btw, a few useless features down the line and it looks like bugs have been getting a longer and longer lifespan and we have a bunch of angry users. We need urgent maintenance. Do we pause other projects and potentially miss on opportunities? Or maybe we can hire more developers, increase our maintenance costs, and introduce a bit of newcomer’s chaos into the team! Or perhaps we can just ask everyone to commit to deadlines and work unpaid overtime and risk them suddenly disappearing to work somewhere else that is more organized and less stressful. What can go wrong with constant recruitment costs and team chaos?

W hat do we do about it?

It’s your job to have a proper conversation with the client/users to help them understand and convey to you what they really want.

Make a plan and stick to it! You might think that this is easier said than done but, let’s think about it. You do want to impress the client, maybe you are worried they will go for another provider if they don’t like the product and you don’t want to scare them off with too much commitment. Maybe you think you will lure in more users with nice features. You want to impress them by giving them “extra value” or “special features”. So far so good but the moment you decide you know what they want, things go south.

The best way to design a wonderful product is to do your homework beforehand. Do research, write user stories, have conversations, and most importantly don’t assume you know what the user wants! In fact, do you think they even fully know what they want? It’s your job to have a proper conversation with the client/users to help them understand and convey to you what they really want.

Take a look at this popular GIF, with a little twist

You should also realize that everything has a cost. The immediate cost might seem plausible but how about future costs? Software is not too different from a washing machine. You will need to maintain it and upgrade it. Every time you upgrade the frameworks you are using or move to new technologies, that feature is going to be a task “make sure it still works”. Every time a user finds a scenario that breaks it or an OS/Platform update renders the way it’s implemented obsolete, you will have to maintain it. So, think ahead!

So, before adding a new feature, think about the following points: