Anyone who lacks the knowledge of how to build quality software, as well as the wisdom to know when code is good enough to ship, does not have the experiential background to have a valuable opinion on the code quality vs. getting things done debate.
In today’s world, we encourage everyone to have an opinion, and assume every opinion has value. This is not true. There are many situations when someone’s opinion is nothing more than an expression of their beliefs, but a belief is not necessarily a valuable opinion.
If someone has a strong opinion on how a doctor should treat their life-threatening illness they are free to express it, but in the majority of circumstances all they are sharing is their beliefs, not necessarily a valuable opinion. This is because they are ignorant of the knowledge and experience necessary to form a valuable opinion – unless they are a medical professional with a relevant specialty in treating their particular illness. For example, an oncologist with cancer sharing an opinion with their oncologist on how best to treat their cancer. In this situation, the knowledge and experience of both doctors is similar, which provides the potential for the patient sharing a valuable opinion with their doctor.
In the field of software development, the vast majority of people paid to produce software have neither the knowledge nor wisdom to provide a valuable opinion in the code quality vs. getting things done debate – yet they do. Beyond that, they are extremely vocal on their opinion, operate from the core belief that their opinion has value, and presume to advise others what they should or should not do based on nothing more than their anecdotal exposure to real-world situations.
If you are reading this, and you are offended by the mere suggestion that you may not have a valuable opinion on a given topic, that is truly sad. I ask you: would you casually express your opinion to your pilot on how best to land an airplane in which you are currently a passenger? Would you expect the pilot to take you opinion into account as they are making their descent? You would not. You would rely on the expertise of the pilot to identify that you are expressing your beliefs on how the plane should be landed, not providing a valuable opinion.
In the examples of the oncologist and the pilot, both of them are recognized experts in their field. This then brings us to another sticking point: is expertise something that exists anywhere? Is it a abstract concept, or a real world level of professional achievement? In other words, within a profession, can there be something called an expert, or is everyone just flailing around, trying to figure stuff out day-by-day as situations arise? Specifically, are there any experts in the field of software development? I believe experts do exist in our industry, and I believe that we do not seek out, nor do we value their opinions.
Why, then, do so many of us feel that we have valuable opinions on the code quality vs. getting things done debate? One reason is that we are tricked into thinking we are experts based on large compensation packages, our titles, and the roles we play on software projects. Surely, if you are paid well above the market rate, have the most senior title on your team, and play the role of the most knowledgeable person on software development at your company, you must therefore be an expert in the broader context of the software industry. The reality is that if we are honest with ourselves, we would realize that the companies we work for cannot determine experts vs. non-experts, and therefore our compensation, title, and role say nothing about our expertise. To say it another way, you may feel as if you are an expert in the context of your current employer, but still be a novice in the broader context of the software industry.
Should you express your beliefs on a topic upon which you are not an expert? Absolutely. In America this is called “Freedom of Speech” and it is an essential aspect of living in a free society. Indeed, citizens in free societies should be encouraged to engage in public debate regardless of their area of expertise. If you believe the right way to treat your cancer is with herbal remedies, or that landing plane is best done via autopilot, you are free to express your beliefs. The sticking point is when you confuse your believes with a valuable opinion. It may very well not be. If you fail to recognize this, I believe this to be a poor reflection on your intellectual maturity.
To the ostensible point of this post, what then is the answer? What is the appropriate balance between code quality and getting things done? My answer is this: find an expert, have them assess your situation, and do what they say. You may not have an expert currently on staff, so hire a consultant from a firm with a track record that indicates their expertise. You may be lucky enough to have an expert on staff, but you may not be listening to them. You may be able to elevate yourself to the level of an expert, but that will require a significant expenditure of time and intellectual effort on your part, and you will have very little evidence that you have reached that level once you have.
Everything I have expressed in this post are my beliefs. I cannot know if my beliefs should be taken as a valuable opinion as I have not been exposed to every software project in human history, nor everyone who has ever worked on a software project. Based on my personal anecdotal evidence I have formed my belief system about our industry. I would caution you against assuming that just because I purchased a domain name and started a blog, that my beliefs are valuable opinions. All I can say is that my beliefs are based on real-world experience, which should count for something. Deciding if those experiences are relevant or indicative of broader industry phenomenon such that they are applicable to your specific situation is entirely up to you.
This post was inspired by the HackerNews question of “In your company, how important is code quality vs. getting things done“