The conundrum for a company like ours is though - we're too honest. During the sales process we tell people how much it will really cost to do exactly what they want and the next thing you know they've moved on to others who promise to do it for less. Do those "others" typically deliver it for less? No. We've followed up with some of these potential clients only to discover that they paid as much or more than we originally estimated, or ended up with a product that was less than what they wanted. That's a sales process though that's doomed to failure - they've already spent more than they wanted to, exhausted their budget, and have soured on the whole "external development" concept. "I told you so" may feel nice but it doesn't deliver successful products.
Now, with our ongoing clients we typically have an entirely different discussion. Our clients tend to tell us up front - here is my budget, what can we do for that. It's a different mindset - we KNOW we have more work than they can afford to do, but we want to get the best bang for the buck we have.
Now I promised in the title to talk about why development isn't cheap so let me give you a few anecdotes:
- For one client we're working with who has an existing codebase that's been worked on with 3 different programmers in the past, we've spent over 20 hours just getting a replica of their production environment working for doing testing. This cost has to be built into the project even though it doesn't directly result in a product improvement
- For another client they want us to give them an estimate on changing a shopping cart. But they don't have the source code for the compiled shopping cart module they're now using and can't understand why we can't just tell them how much a simple change will be. We don't know because we can't see the code, or even tell exactly how the current shopping cart works. Even if we had the code it would take at least 1/2 day just to digest the workflow and get the source code understandable - if the original programmer did a good job.
- Each of my programmers needs ongoing training, certification updates and time to research new solutions, fix old problems. None of that is typically directly billable to a client.
- We need to pay for software and infrastructure for each programmer - test servers, source control systems, development licenses, backups, licenses, professional memberships - all paid for out of our pockets.
- Our programmers are salaried workers with benefits - so every hour they are here - and all the hours on vacation, regardless of whether they bill that hour, is a cost to the company.
- Our offices need power, lights, phone, mobile phone, fast internet service, etc. Again - a cost that is built into the cost of our labor.
- The company pays their unemployment, disability, federal taxes, a portion of their medical coverage, etc. All these add to the burdened rate
- Tech toys - you might think, why does that programmer need the latest iPhone? Why do we have to have android, wp7, iphones and blackberries in our mobile phone stable? Well the answer is - we have to test apps and mobile websites in these platforms to be sure they work. All costly.