Serving Your Customer
I've been lacking on this issue lately so I'd thought I would blog about it in order to remind my self of important principles .. so here goes ...
Here are the things that I thinjk are important in order to properly serve your customer (in no particular order):
1. Answer emails and voicemails promptly. Nothing stirs up frustration with an application you've written more than post-deployment bugs. And nothing frustrates a customer more than not being able to get ahold of you when problems arise and their boss is breathing down their necks.
2. Notify customers and other interested parties immediately when you discover a problem on your own. The business of software development rides on integrity. You get bonus points when you notify customers of problems and keep them informed as the issue progresses. I've found that by doing this, you can screw almost anything up and not get fired .. just as long as you keep the lines of communication open ... and as much as possible initiated by YOU.
3. Listen to what your customer wants and give them everything except the total absurd. As software developers our first instinct is to deny our customers in the hopes that by doing so we will limit the amount of work to be performed and thus limit our risk by reducing our exposure in the project. What we don't admit - even to ourselves sometimes - is that most of what the customer ever asks for is trivial to implement and support. After all, what harm is it in providing another sorting field in a report, or adding another field on a form. Sure you may have to go through your code starting from the UI and going right through to the database, but these sorts of things really don't require much time or effort.
4. Attempt to provide more than what the customer is asking. Let's face it, most customers in the corporate world don't have much faith in us. Rightly so. Our applications are ugly, uninspired, and just plain buggy. Because of this, we are often asked to implement only the very, very basic set of business functionality (at least that's usually my experience). If you want to grow as a developer, be willing to dig into the issues that a customer is faced with, then use your creativity to come up with a solution that EXCEEDS expectations! And while your at it, put some effort into making the UI look decent.
5. Don't give into time preasure. I know this one is tough since we live in an instant gratification world, but stay with me. Software developement - like it or not - is an iterive process, meaning you are going to keep doing the same thing over and over again until you get it right. Don't believe me? Ever fix the same bug twice? Ever missed a deadline? I have - on both counts. Believe me you customers will keep hammering on you until you get it right. By giving into unrealistic deadlines you are simply pacifying them - temporarily. I say don't give in by a month, a day or and hour. And don't feel bad if you miss a deadline that was forced on you. And don't feel as if you have to appologize for such a failure .. because the failure won't be yours. However in order to keep the failure from being yours you must 1.) state the reasons for an unrealistic deadline and provide proof, 2.) raise issue immediately when they might impact the timeline, and 3.) give the project an honest effort in terms of your time.
And in the immortal words of Forest Gump:
"That's all I have to say about that"