Flippant Pixel
February 1, 2009

Empathy is one of the most important aspects of maintaining a good relationship with a customer. It is also one of the most difficult and emotionally exhausting. Last week, one of my customers sent me this email:

Adam, WE GOT THIS ERROR IN OUR PROD ENV

I rescheduled appointments and spent more than six hours over the next two days investigating. The fault, in the end, lay with the DBA, who mistook one of his servers for another. What’s more important, however is that we acted as though the problem was our own. We advised them on how to mitigate the crisis, find the cause, and ensure that our integration fails more gracefully should it fail again.

On an unrelated note, January was a decent month for me. I helped close a $75k deal with a Fortune 500 company. I’m looking forward to deploying our solution with them over the next month.

December 1, 2008

Woe is last month. Numbers go up and down, but this time, they went down about 70%. I’m not about to blame that on the economy. I’ve done some hard thinking and I have some ideas about what happened.

The first half of my problem was that I gambled a bit too much on the pre-sales side. I focused my efforts on risky opportunities that didn’t pan out. It’s not like I didn’t see it coming, either. Most of the account managers at my company are realists and will let me know when they forsee insurmountable obstacles. For example, when our legal department said this number of servers require licensing and the customer’s legal department said a different number, the whole thing blew up and we lost. The account manager gave me a month’s warning on that.

But that’s what sales is all about. You take a gamble. You win some. You lose some. Some of my accounts were bad picks, but some were good investments in relationships with account managers I’d never worked with before. Regardless of whether their deals came in, they will remember me the next time around. That’s especially important now that there’s a lot of new, emerging talent at my company.

What really hurt was the area that was supposed to be safe: integration consulting. I had a slew of terrible customers lately, and I didn’t expect that at all. I do my best to help them, but if we could call a time-out and pretend for a second that I was some kind of sage oracle, this is what I’d say:

  1. Don’t ambush us. If you wait until your renewal is due to get started on the integration only to voice concerns about expected vs observed behavior as leverage for a discount, you’re putting the emphasis of our conversations on bargaining rather than fixing problems. My company bargains hard. You’ll lose and I won’t get to mark you live until the next renewal date comes around when you pull the same stunt again.
  2. Read the contract. For example, if our data provider forbids you from hosting our software in a foreign country and that’s what you’re trying to do, it’s going to be really hard for us to go live.
  3. Get a project manager. Our software isn’t actually very complicated. It’s usually administrative issues or a general lack of momentum that keeps a project from going live. Having a dedicated project manager on either end who will make everyone’s lives miserable increases the chance of going live by about 50%. Having project managers on both ends virtually guarantees success. I do a little bit of project management as a consultant, but it’s hard for one person to play both good and bad cop.
  4. Take a hard look at your developer. Is this person competent? Again, our software isn’t very complicated, but if the answer is no, you’d save a lot of time and money by paying for professional services. Incompetence is especially abundant amongst .NET developers who never worked outside of Visual Studio. One just sent me a link to their localhost today.

My numbers affect my bonus, but that’s not what bothers me. The bonus is a pittance anyway, even when I max it out. My numbers reflect on how well I’m doing my job. I’ll need to turn this next month around in a big way. If I can’t, I’ll need to figure out a way to cut back on the time I give to bad customers.

In other news, I got another demo system up and running on Monday. I used jQuery to do it, too. Yay, jQuery!

November 22, 2008

The last twelve months drew a scant five visitors a day to Flippant Pixel—remarkable considering the number of posts I’ve made over that time (zero) but pathetic in the blogging world. Nevertheless, I will make some attempt to redouble my efforts, starting with an explaination of how I went from being a web application developer doing client work and blogging about web services taking over the world to an overworked sales engineer who, until now, had no time for blogging.

About the time of my last post I moved from one side of the country to the other. My last boss and I maintained a good working relationship and he graciously paid me to continue working remotely while I got settled in my new environment and looked for a new job.

As soon as I landed, I was inundated with recruiters. That may not be unusual for this town, but bear in mind that looking for a job in my hometown had been a gruelling process. Recruiters there heavily favored the employer over recruits. Only after multiple interviews and testing at their offices was I allowed near their clients, only to learn at the end that they would take their cut from my wages.

By contrast, this new market was mind-bogglingly skewed in the opposite direction. Even a year after removing my résumé from Monster, I’m still getting about two calls a week asking if I’m happy with my job. So, after surveying the market and batting away hungry recruiters for about a month, I had a handful of decent leads falling into roughly three categories:

  1. Uninspired corporations developing painfully slow Java applications for government contracts, shady pharmaceutical operations, etc.
  2. Barefooted open source shops doing the familiar client work thing.
  3. A single multinational corporation interested in purchasing my soul in exchange for the opportunity to do software sales engineering and project management.

For better or for worse, I opted for door number three. I was immediately catapulted into a sales office where the coffee is for closers. In the old world: $40,000 summer-long client projects. In the new world: $250,000 per quarter in new sales and integration consulting.

The coachman from Pinocchio

A bad day at the office

As of a week ago, I’m conducting an experiment in time management wherein I leave the office by six o’clock. I have a few extra moments to reflect a bit more on the world of web services and the last year of sales engineering, so stay tuned.

On a completely unrelated note: I switched my doohicky from Blogspot to Tumblr. It took me about five minutes, four of which were spent remembering my password. I don’t understand why anyone would ever go to the trouble of maintaining their own blog software. But I repeat myself.

jQuery makes life worth living. By comparison, YUI’s AJAX tools are frustratingly neolithic. Here’s how you write an AJAX call with jQuery:

$.ajax({
type: "GET",
url: "gimme.php",
data: "gift=some_sugar&giver=baby"
dataType: "script"
})

In this example, the results of gimme.php are evaluated as javascript. jQuery’s ajax method is much more sophisticated than this example demonstrates, but it only gets as complicated as it absolutely has to be.

Overall, jQuery is not as thorough as Prototype, but it’s much much lighter. jQuery weighs in at 20kb to Prototype’s 93kb. That doesn’t affect download speed much, but it does affect browser performance. And while jQuery has no indexOf function, it’s clever enough to come with an iterator for both arrays and objects. Awesome!

JavaScript doesn’t have an array search function, so I write my own:

function arraySearch(needle, haystack)
{
for( var i = 0; i {
if( haystack[i] == needle )
{
return i;
}
}
return -1;
}

I don’t like to write the same function twice. No coder should. I would use Prototype’s indexOf function, but the project I’m working on is built on YUI. I am not happy.