Sunday, April 14, 2013

Just code it as I want!

One of the hardest thing in the professional life of a programmer is to explain to a customer why the requested feature won't be implemented.

It can be a technical limitation of the language, a lack of resource available or simply a feature that is so specific that it will require to apply major modifications to the existing code.

From the user perspective, just adding a new button may seem an easy task, but the impact can be disastrous on the delivery date of the next version.

The worst approach to justify the major delay or simply why that new "must-have" feature won't be implemented is to describe in great details all the technical issues that may occur. Too much detail is just too confusing for the non-programmer. And they actually and honestly don't care, that's YOUR problem...

The second worst approach is considering that the client is using the wrong method to solve his problem and should use "our" method based on some "best practices" written by some "specialist". In theory, you may be right but the reality is that real life will prove you wrong. Often, some odd requirements are based on other requirements related to internal policies, accepted methodology from a professional association or simply because it's been like this for the last 50 years.

A third worst approach to deny that "amazing" requested new feature is simply stating that's it is impossible to do. To the non-programmer, if mankind was able to go to the moon, mankind is able to create a piece of software that will guess the user's mind. However impossible to achieve, a bit of explanation is required anyway.

How do the programmer can successfully explain and describe the issue without looking stubborn, stupid or lazy?

1 - Make sure that you perfectly understood the customer requirements. Often, the user is asking for a workaround to solve another issue. Maybe you can easily fix the triggering issue instead of creating a fully automated workaround.
2 - Some users may not realized that they are using the wrong tool to do their work. Is the software meant to do what the user is anticipating.
3 - Can the requested featured be implemented gradually? Resources are not unlimited and you have to deal with what you have: a small team of programmers, limited hardware availability, lack of funding or simply not enough time to execute the required technical research.
4 - Is your software scalable? Maybe it's time to rebuild from scratch so new features can be added easily.

Make sure that the issue preventing the implementation is not triggered by your own implementation of the solution. If that's the case, it's time to do your homework and plan a new major version. It will then be easy to explain that you (as a team) are in a process of rebuilding the software and that the requested feature will be evaluated and implemented in the next major release.

It is also possible that this new feature is not in your roadmap. Better lose a single customer than all of them by trying to please everyone. When a piece of code is meant to do everything, it will eventually do nothing...

A lack of resource or budget is not what companies want to talk about. It's even worse when some layoffs occurred or a some administration changes happened. Better put the focus on the roadmap of the project or the internal procedures that your team has to comply with. Make it look like your team is well structured and dedicated to keep a high quality product so that adding a new feature must be evaluated first and it can take some time before it can be implemented.

Facing an "impossible" feature is better explained by listing required technologies to achieve that goal and most importantly, the cost of such a mandatory modification. Money talks, everywhere, anywhere and anytime. Just provide the honest cost of what is being asked and the client will change his mind on a dime. In the event that money is not problem, it's time for you and your team to take the opportunity to move that next better and improved version...

Convert any technical modification into time, resource and cost. This will gave you the most understood argument in mankind: Money!

With enough funding, mankind could land on the moon again and broadcast in full HD this time...

Patrick Balleux