Writing computer programs is not a particularly difficult thing to do. The level of difficulty can depend upon where the programmer sits within the organisation. If he or she is a code cutter then the job is to produce the code according to the specifications.
Cutting code is not difficult. It is a technical skill which can be acquired by any reasonably intelligent person, although it helps if they have a mindset attuned to logical thinking. This is in no way meant to denigrate those who write code. But writing computer code is a skill, a highly technical skill, but once learned it is then applied to the problem at hand. And, of course, some computer languages are harder to learn than others, and a lot of programmers these days need to be proficient in a number of languages.
Specifying the application is somewhat more difficult. Although in many places the analyst and the programmer are one and the same person. They just need to remember which hat to wear at any particular time.
Systems analysis is still, however, a skill which can be learned. At times there may be a bit more art than science. But that may be because it is sometimes difficult to articulate why we so something a certain way. Experience tells us that this is the best way to go and so what appears to be an art, or some inate ability is really the culmination of years of experience.
And somewhere within any IT shop there is somebody who calculates what they are going to charge the client to get the job done. Sometimes a number of people work on calculating this figure. Business analysts, systems analysts, project managers, to name a few. But at some stage a figure is arrived at and presented to the client.
I once worked for a large IT shop where one of the project managers would ask every person who would be involved in the project to provide an estimate of the time it would take them. He then arranged each of these tasks into a time line and at every step he added a contingency factor of 40% to the cost up to that stage. These 40% would accumulate, so by the end there was an enormous contingency and every project came in under budget.
In this case all the work was done for an internal client, another department or associated company, and he was able to get away with it. Not only get away with it but because every project was under budget he was considered an enormous success and was promoted.
I work for myself, and mostly by myself. And I cannot keep adding contingency factors to my quotes. I do include a contingency factor, and I spell it out quite clearly to the prospective client what it is and why it is there.
But I still have to come up with a reasonable accurate estimate for the whole job. And here I fail miserably. Invariably I underestimate. In the short term that is good for the client. But in the long term it helps no one. It certainly doesn’t help me. And, in reality, it hurts the client because it leaves them with an unrealistic expectation that a similar job will cost a similar amount. They could be in for a very rude shock.
My main concern, however, is that underestimating hurts everyone in the IT industry, it hurts me and it hurts my competitors. It hurts all of us because it devalues our work. Our fees need to reflect the fact that we are providing a professional service. Obviously there are a number of factors which come into play when setting our rates – market forces, the economy, especially the local economy in the region in which we operate, the quantity and quality of our competitors etc.
Should I worry about whether my shortcomings in estimating affect my competitors. I believe that I should. I work in an industry where no one can do it all. If I can’t do a job because I am not skilled to do it then I can say no to the client, which I don’t think is all that smart. Or I can find someone who can do the bits that I can’t. Similarly I have been contacted by other consultants who don’t have the same skill set that I have. And when there is a degree of co-operation then you need to get your estimating fairly accurate.
Because I am a programmer I am looking at a systems solution to my problem. I have done most of the analysis and a fair bit of the coding. How long will it take me to finish it? I hate to admit it, but I have no idea. Plus 40%, of course.