The customer is always right
I'm back. Took a bit of a break over the Christmas season and enjoyed not
working on software, programming and business for a few days. I did have a few
interviews, which is always stressful, so I tried a bit harder to actually
enjoy the downtime that I did have.
During one of the interviews
a comment was made in passing about programmers not wanting to talk to
clients. This is a popular topic for developers to joke about, but I had
always treated that as a joke. When it came down to the business of doing
business, well, talking to your clients is just to be expected. Ultimately,
they are the reason you have a job, so there is something very serious to be
said for treating your clients with respect.
This particular
ramble is going to go down a couple of paths, I'm going for breadth more than
depth here.
Generally a software developer is writing code for
one of two different reasons. You are writing software for a new product that
may or may not have clients yet, you may be trying to carve a niche into an
existing market or creating a new one. The second and by far the most common
reason is that you are contracted to write software that accomplishes some
task for another person/organization/demographic/etc.
So what
does that make our job as developers? Our clients or employers have problems
that they have decided for whatever reason are best solved by computers. We
are to analyze that problem and develop a solution. Hopefully that solution
makes our clients more money or saves them money by making existing processes
more efficient. If the post-mortem shows that the cost/benefit ratio is less
than 1, then we have failed. It really is that simple.
Solving a
client's problem is our job. One of the aspects that makes software
development so much fun is that many times our client does not know exactly
what they want. This may be a source of entertainment for us, but is a very
important thing to keep in mind. The world of programming is one of absolutes,
the computer does exactly what we tell it to in a nice and ordered fashion.
(Defects being the times when we tell the computer to do the wrong thing) The
real world is much less black and white. What this means is that we have to
listen to our clients and understand what they are trying to accomplish. If
the request is vague, we have to figure this out by asking the proper
questions to build a better picture of their business.
This is
challenging.
Worse, they may know exactly what they want, but are
wrong. I have personally been asked to implement things with very little more
than a vague bit of hand waving and comments to the effect of "We think having
something that does x would be nice." In this particular case,
x was fairly obviously, to a developer of the system who had detailed
usage statistics, not what our users needed. They actually needed y.
Through some discussion with our clients, our team was able to make the
case that x would only help less than 1% of our users, and a
particular subset of users who did not and would not spend any money.
That probably helped our case somewhat. We ended up implementing a modified
y and our customer service requests for a certain class of problem
dropped significantly.
What was interesting to me from a personal
standpoint was that the same people who were arguing to just implement
x were the same ones who did not want to talk to the client. Now, I
should clarify, I don't mean, the grudging, "Oh no, small talk and meetings
with people I don't know", the typical introvert
response where you know that you will come out of the meeting drained, though
hopefully with the problem solved. In this case I mean attempting to make the
case that it was not our job to talk to the client to figure out what they
needed.
This did not sit well with me. There is a reason that the
principles of the Agile Manifesto have several points which specifically
reference and talk about dealing with the customer. These points all touch on
dealing with the customer with respect and understanding as they are the
experts in their own business. We are experts in software development.
As software developers, our job is to learn from our clients to build
systems that improve their business. To do that, we will always need to
interact with our clients to determine their needs and meet them.