Friday, April 20, 2012

Sanity Check

I am curious if I am crazy, or if I missed something. I just had an unpleasant exchange with a customer, who refuses to pay for services rendered.

Last fall we had a meeting with this customer and they showed interest in using Office 365. So I drafted an offer, clearly stating that we will provide consulting services to set up and configure O365 for them.  I clearly made a distinction between our fees and that of Microsoft. MS offers a trial for 30 days with per month costs after that, we charge X for the setup. I even gave them a good price thinking we might get some more business down the road.

After some time, the guy who was assigned as my contact person emails me back that the customer is interested in pursuing the trial of O365, and when can we proceed. So I assign the work to my employee, and he spends the next week working with the contact person to understand what they need, and in setting up O365 for them. They reach a point where all is ready, and my guy gives them time to try things out.

A week or two pass, and my guy can't get a hold of customer contact person. We know the service is good for 30 days so we want to follow up, etc. No response. I then step into the picture and try to get a hold of the guy. No response. I then send an email to the company catchall hoping someone else will see it and reply. No response. By this time, the trial has expired. Eventually I get sick of being ignored, and send an invoice to the customer.

Time passes, and I get an email from one of the owners. "The guy you worked with is no longer at the company. You have no agreement, and it is unprofessional that you just send an invoice". Hmm, ok. So I send this guy the email correspondence as well as my offer that I drafted as to indicate that I did have an agreement with his ex-employee. It's unfortunate that something happened in their organization, but I can't be held responsible for that. We did the work, as agreed.

This results in a phone conversation where I am told that I am unprofessional, that "the world doesn't work like this" and that I can forget about being paid.

I understand the guy is upset that he has no value and an invoice on his desk. But the critical thing in my eyes is that I am not the one who is at fault here. We delivered as agreed. They didn't do anything with it, too bad. I mean, I still pay my gym membership even if I don't go.

I am curious if I am missing something here, or if my logic is sound. I want to warn other small businesses against working with this customer, but I first want to sanity check this.

Thanks!

Tuesday, April 17, 2012

Nasty error when writing data to SharePoint List

I am working on a SharePoint console app that needs to import data from an XML file into a SharePoint list. All was going well, and then suddenly I get the following error:


Attempted to use an object that has ceased to exist. (Exception from HRESULT: 0x80030102 (STG_E_REVERTED))

It happened at the SaveChanges call, and for Googlers at:

Microsoft.SharePoint.Linq.DataContext.SaveChanges()

No, I was not disposing the current SPContext (the most likely cause of this problem) since I was in a console app. So what else could it be? This post on stack overflow helped me figure it out.

One of the fields I have in the SharePoint list is a Yes/No field. SPMetal created a nullable bool form this, and so I figured I could safely ignore it if I chose to. Not the case. Once I started providing a value to that nullable bool, all was well again. The field definition for that Yes/No field does have a default value defined in CAML, but if this is the cause of the problem is not clear and I don't have time to test at the moment.

Moral of the story, if you are updating a list and see the error above, check that you are providing values to any bool fields. Likely the same story for choice fields and who knows what else.

Monday, April 02, 2012

Orange Tasks

Picture this scenario: your boss gives you a task to do. You are not quite sure how to do that task, but you know you will eventually have to figure it out. For now, it goes on the todo list. Time passes and you have been busy. That tasks still sits there, and you haven't gotten to it. You have in the meantime done other tasks that have come along after, but those were just easy to take care of. You have also escalated other tasks in that time, because these were clearly not things that you could/should do.

I would argue that everyone can relate to this scenario. It is something very common, and what I would like to call the 'Orange Task'. First however I need to explain green and red tasks. Note that my examples are general, and won't apply to everyone since people are all different.

Green tasks: You are asked to do something that is perfectly clear to you, and you are comfortable performing.
For example: Your asks you to get some milk from the store. You might not be in the mood to do this, but it's pretty clear to you how you need to get off the couch, walk/drive to the store, trade €2 for some milk and bring it home. The feeling you get here is: Ok, I know what needs to be done, just needs doing.

Red task: You are asked to do something that you are not able to do, and are comfortable in saying so. It is an unreasonable expectation that you should be able to do this, and you are not at all hesitant to reject this task.
For example: Go climb Mt Everest - today! The feeling you get is (most of us that is): Yeah right, whatever, I'm not going to do that....

Now, Orange task: You are asked to do something that you don't exactly know how to do or are not quite able to do. You feel however that you should be able to perform this task. Or in any case, you don't feel comfortable in rejecting this task. You also don't feel comfortable in performing this task. The easiest thing to do is to put this task out of your mind for now, and hope you can deal with it tomorrow.
For example: Remember when you were a teenager with a crush on someone and thought: "I will ask them out". Tomorrow was a better day to do it than today.  The feeling you get is: I should do this, it is valuable, but .....

I hope you now have some picture of what I mean by Orange tasks. So why am I writing abou this on my (mostly) SharePoint blog? Because I believe that Orange tasks are extremely dangerous to business, to projects in general and thus also to SharePoint projects.

Keeping an eye out for orange tasks should be a significant part of any project governance. Green tasks get done, Red tasks get escalated but Orange tasks sit there and fester. The longer they fester, the worse the impact. I have seen entire teams take the 'we'll cross that bridge when we get to it' approach when they damn well knew that particular issue needed to get solved ASAP and would cause big problems in the future. This is the 'ostrich head in the sand' approach or 'elephant in the room' phenomenon.

So what can you do? Hunt down the Orange tasks with a vengeance. Turn them into Reds or Greens as soon as possible. Make it team / company culture to do so. Ensure everyone knows what an Orange taks is, and foster a culture where identifying Orange tasks is viewed as a good thing to do. It will be hard, it requires a change in thinking, it requires open communication, it requires admitting to each other that we are not perfect. But it is worth it. Try it right now, look in your todo list, find an orange task. Can you ask someone for help? Can you figure out how to solve it? Can you tell your boss, etc that you need more clarification? Any of these are means of making that task Green or Red.

Good hunting. :)