Recently I was approached by a former employer about doing a small task for them. While working there, I was paid $X/hr. For this task, I said I would need to charge roughly $2X/hr. He came back saying it was way out of his budget.
I was fine with not having the work because I obeyed the first rule of freelance work - always quote your rate so you are satisfied no matter if you get the work or not. This is a great rule which hasn’t failed me yet when freelancing. It helps keep my rates fair.
This guy is not technical and doesn’t know programming. This situation identifies the single biggest problem programmers have working for non-technical people - they can’t extract value from a rate.
It is well known amongst programmers that there is a 10x difference in productivity between the best and worst programmer. I’m definitely not the best, but I consider myself fairly competent. To toot my own horn, one time I was trying to solve a bug with the help of another colleague. While I was showing him the bug, I identified another bug and fixed it up within minutes. Later he told me that the bug I quickly fixed had been assigned to a senior developer who had been trying to solve it for nearly two days!
Unfortunately, non-technical managers do not understand programmer productivity. My 2X rate as a freelancer actually works out to X as an employee. Let me explain.
As an employee, there is a lot of inefficiency in going to work at an office for 8 hours per day. In fact, out of an 8 hour day, I think most people only get about 4 hours of productive work done by the time meetings, interruptions, tiredness and breaks are factored in. Charging 2X as a freelancer actually works out to the same deal, if not better. As a freelancer, I have control over my work environment and would be working only when I felt like working which makes me more productive. I can work when and how I want rather than being constricted by a set time and space. If I am tired, I stop work, take a nap and then start again afterwards feeling refreshed.
Some programmers are simply just better as a result of their effort and experience. For example, a friend of mine has paid someone $100/hr for some tasks. He tells me he pays this because the guy gets things done much quicker than somebody else. If he were to hire someone at $15/hr, the guy might take 15-20 hours to do what this guy can do in one hour. The savings justify the high rate. Expensive is cheaper.
To non-programmers, it is really tough to believe that someone could be that much more productive but it’s true. A bad programmer can actually be negatively productive and push back progress. If you were building a house, a bad programmer would be the equivalent of someone coming in and knocking down a few walls when the house was almost complete. Bad programmers will introduce bugs and write hard-to-read code that will force someone else to spend time correcting it.
I don’t blame non-technical managers for not knowing this stuff. They haven’t programmed before so the only way they could know this is by reading about managing programmers, which not many seem to do. However, if a manager was that ambitious, they would probably have already picked up a little programming knowledge.
To all non-technical managers: learn about how software is produced and what makes a good programmer productive. The effort you put in will make good programmers want to work for you and it will help save you time, money and frustration.