I've been speaking, blogging, and talking about the business of software development, consulting, and professionalism over the past couple of months. One of the issues that comes up is that of expectations. I've kinda danced around it, but have now decided to discuss it a little more. All to often, I have found that there are unrealistic expectations. These can be either the client or the developers. Many times clients think that creating
software is easy, simple, and cheap (as the blog post shows). They have
an unrealistic view of cost, time, level of effort. Let me bring up an
example that I have had happen several times. Here is a scenario that I have seen several times:
I want a mobile app. It needs to integrate with my sales
infrastructure, share data with my cms, allow users to work on the same
thing regardless if they are using web or mobile, and several other
items. I need to know how much this will cost, because it all has to be cheap, cheap, cheap.
Me: Ok, let's talk about your infrastructure. Do you have the infrastructure to support this?
Client: Who cares about infrastructure? I want a mobile app, I don't care about this other stuff.
Me: Without infrastructure, you won't be able to do all of the things that you want.
Client: <Pulls out phone and points to it's smallness, Implies that small means cheap> This just fits in my pocket. I want a simple, easy app that runs on this.
We need to have the mobile infrastructure that allows you to share data
between your existing users. There is no magic here. There has
to be a software layer that allows us to bridge from between the mobile
app and the web users. Plus, we have to have this layer anyway because
you must put your mobile user data somewhere. Users want to make sure that their data is stored and can be easily retrieved if they get a new phone.
Client: This is sounding way more expensive than I thought it would be. I'm only expecting this to cost about $4-5k.
Me: Applications like this cost a significant amount of money. The amount of requirements gathering that we must do will be more than $4-5k. We have to sit down with end users, gather requirements, document what their desires are, figure out what will bring the most value to the business.......
Client: Stop, what are you babbling about? We just want a mobile app. I don't know what you think, but we are only going to spend $4-5k and you will have to do this all for us.
Me: I am trying to explain the development process. Development is more than just writing code. We have to do a lot of work before we write the first line of code. Doing this results in the best application for your end users.
Client: Stop, you are just trying to soak us for money. This meeting is over. Get out!
While this may sound unrealistic, I've actually sat through a meeting that went just like this. Obviously, this was an extreme example, but it also had some one very realistic item, the client's expectations. No matter how I tried to explain it, the client expectations were set before the meeting. Some of the causes of this can be along with my thoughts are:
- "I hear that applications can be built over a weekend by kids in their basements." - While I am sure that someone can create a demo in a few days/weeks/months, the time required to create an application that your users want to use is significantly more than you are thinking. Rome was not built in a day, and neither was Facebook, Google, Yahoo!, Twitter, or anyone else that you are thinking about. For example, Twitter went through a number of years where their product was not reliable under a moderate load, let alone a high load.
- "We've looked at this app, and we believe that a junior level develop can do what we need." - I can appreciate the fact that you don't have a lot of money, however, I can guarantee that a beginning/junior level developer won't be able to produce a product that will scale to the level that you need. The scale that you are trying to reach is well beyond a junior level developer.
- "We want to use a provider that is really hungry for this and wants to grow with us." Ok, so what you really said is that cost is more important than anything else without really saying it. By picking someone based on the amount of discount you get, you aren't setting yourself up for success. I would recommend deciding based on who has the highest probability of success. There are plenty of failures out there. You really need to sit down and thinking about who has your highest probability of success, not who is giving you the biggest discount to get the work.
- "So, the way you guy work is that we get things for free and you sell whatever is developed to other clients. No, we want a cut of your future sales." - There isn't much that you can do with this type of client. Any type of software that is delivered for a specific client is typically optimized for that client. Thinking that it can be repackaged is the wrong thing for a consulting company to think it can easily do. Overall, this is a really hard issue to resolve. A variation on this is that I had a business partner that thought that we could write an application for one client, bill the client for all the work, and then bill the next client for the same amount, thus making a 50% profit on the product. I'm sorry, but this kind of stuff just does not work in the consulting world unless you can satisfy a number of requirements. Since most of us can't satisfy these requirements, call this a bad idea, and let's just move on.
Just to be clear, I'm not saying that it is only clients that are unrealistic. I've dealt with other consulting companies and their sales people. I've found some to be realistic, and some to be completely unrealistic. I'll never forget sitting in a meeting where one of the account managers for a much larger consulting company was fairly open about fleecing the client. This ws an unrealistic expectation regarding the client. The expectation from this client was that there was an endless supply of money. This is a mistake that I have seen a number of times. It is unrealistic to believe that money for a project will last forever.
Ok, so how so we resolve these unrealistic expectations on both sides? There are two options that I have found that work. Which way you go depends on the situation. Here are a few situations that
- If you have a good relationship with the client, have a realistic conversation with them. You would be amazed what a realistic conversation will do. I've had a realistic conversation with a client, discussed what is involved, what I think that they are looking for, and an honest discussion regarding what their needs are.
- Sometimes, no matter what the situation is, the client has unrealistic expectations. You can have a discussion with them. If the discussion doesn't work out, then yes, you might need to walk away. Let me be clear that walking away should be a choice of last resort. It is a last choice, but a choice none the less. You should never try so hard as to put yourself in a bad situation just for the desire "to win." Saying no and walking away is an option that I often do not see in the technology field. It is a realistic option when the client has too many unrealistic expectations.