Why should we tolerate bad programmers?. Probably that is the worst decision to make while you are working for something called “good company”. How many times you find yourself doing monkey patching because there is a sold product that must be delivered at time, but the scheduled time was wasted by a bad programmer that was introducing bugs, or simply writing code that should be honoured with a submission to “The Daily WTF”. Seems that bad programmers are everywhere, and they have two options I think, they learn and continue their career as programmers, or they simply fully leave all programming tasks to real programmers and people who really enjoy programming.
I cannot think that the complete responsibility is on the hands of those bad programmers. Usually the environment is truncating any inspiration to follow a programming career properly. We clearly can see some problems related to software development present in other areas, and seems that are ignored because it fits the convenience, rather than contributing to build a better team. The lack of responsibility when those mistakes are committed, usually is placed aside of developers instead of its origin.
Sales- Sales made cheaper than they really are, with minimum schedules. Just to sold another product and you have an account manager that is selling that short schedule just to get bonus which means that sale, rather than doing a good job. This means that your programmers must double work extending their workday to complete the schedule. A good account manager or sales agent can sell a product on its real schedule, not less than it because he must compete with cheaper prices.
Analysis- The analyst [CMMI] or the product owner [Agile] it not doing the correct interpretation of requirements, misunderstanding the customer interviews and delivering wrong specifications, that are making your programmers to double work. This also means that your programmers must double work to complete the requirements twice. A good analyst should be able to understand and communicate specifications.
Project Management- Managers that have no idea about how to deal with programmers, exerting a heavy authority instead of leading developers to the proper solutions. They are not able to assign problems properly because they cannot detect the skills of their developers. They do not know their people. A good project manager can identify the skills of their programmers and assign their tasks properly.
Management- People that do not understand how important is the environment for their programmers, comfortable chairs, clean offices, a good library with good programming books, and open environment — not with cubicles that brings the sensation to be placed on a barn like an animal. A good manager understand all points above and apply that knowledge.
All those factors and more can truncate your hope a good programming job, making your programmers to get tired of their job. The philosophy of “getting more for less” cannot be applied with programmers. You will pay the cost of stressing your programmers sooner or later, and they will seek another job or better horizons in other place, and then you must be assuming your position. A bad programmer, or people that have lost their interest on programming, usually will try to get another position in the company, like project manager and they quickly forget how hard is programming. I am not interested to work in those companies where you work with that kind of managers.
People that is tired and bored of their job probably will introduce more bugs than motivated people. Money is a motivation, but having a nice job with good programmers is better than well paid jobs. There is no business in earning 1000 and losing 500 in medications, therapists and massages because your job is a stressing job. Smart people know that, and are able to handle other jobs quickly. So, is not difficult to try another job. But probably another problem is the fact that programming is not a good goal for many people, everyone wants to be the CEO that have made his company one of the best companies on the globe. But just to make you remember that all of them have worked once as programmers…
The lack of interest is more dangerous than other factors. If you are not interested, you will never try to improve, you will never ask, and you will stay in your old fashioned philosophy of the wrong economics of paying less for more, because services are offered by persons which are not subject of that kind of measurement. So, pay well, make a good job, and start doing well done software. Do not hire pseudo-geeks that have not idea about what is an object in OOP, and why functions are called first class citizens or first class inhabitants in functional programming. And mainly those pseudo-geeks which are not able to handle abstraction concepts, which are in fact the core of many used technologies. Double working produces that lack of interest, and no time to improve programming skills.