{"id":176,"date":"2017-09-27T05:00:41","date_gmt":"2017-09-27T05:00:41","guid":{"rendered":"http:\/\/96.126.106.214\/?p=176"},"modified":"2023-11-26T01:01:55","modified_gmt":"2023-11-26T01:01:55","slug":"shipping-buggy-code-the-most-critical-skill-for-a-programmer","status":"publish","type":"post","link":"https:\/\/codingismycraft.blog\/index.php\/2017\/09\/27\/shipping-buggy-code-the-most-critical-skill-for-a-programmer\/","title":{"rendered":"Shipping buggy code: The most critical skill for a programmer"},"content":{"rendered":"<p>NASA\u2019s Mars Climate Orbiter was launched on December 11 1998 with the ambitious mission of \u00a0studying Martian climate; the cost of the program was more than $300M and a good share of it was allocated to development of the necessary software. \u00a0Unfortunately, as the \u00a0Orbiter was approaching the red planet it vanished and it did not take long for the monitoring scientists to realize that it was gone forever!<\/p>\n<p><span style=\"font-weight: 400;\">The reason behind the failure of the orbiter was a very simple software glitch. Instead of calculating a specific metric in newtons the program was using pounds omitting a single call to a conversion function; a code bug that could have been fixed with a few characters of code were enough to destroy the space program and invalidate all the hard work of thousands of the most qualified scientists and engineers worldwide!<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Mars Climate Orbiter is just one of a very long list of projects that failed due to an extremely silly programming mistake; it can be used as another example that verifies the fact that proving any piece of software to be completely bug free and fully tested consists an impossible task.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Even the most extensive testing suite, represents an extremely limited subset of all the possible paths that any application is expected to have thus it is simply impossible to believe that in any way we can \u201cprove\u201d it error free with a guaranteed behavior complying to a specific set of rules!<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u00a0Given the fact that the verification process is asymmetrical to\u00a0its falsification, induction\u00a0cannot\u00a0\u201cprove\u201d anything; although a billion successful tests cannot prove the validity of an application, a single fail is enough to designate it as invalid! The problem lies in how to discover the failing conditions of course and nobody can be sure that they do not exist since it is impossible to test all the possible combinations of variables and execution paths.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Despite the huge record of failing applications caused by simple \u201cbugs\u201d, many software developers insist that they can deliver flawless and completely bug free applications!<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Whenever I hear something like this, I am sure that it represents the view of a junior and not very talented programme<\/span><span style=\"font-weight: 400;\">r<\/span><span style=\"font-weight: 400;\"> who sounds like a salesman trying to please the ears of his audience!<\/span><\/p>\n<p><span style=\"font-weight: 400;\">One of the most critical skills of a software developer lies in his ability to decide that the incompleteness and inefficiency of his code has reached a level that will be tolerated by its clients. Although this statement might sound provocative and strange, it also hides the secret of success behind any kind of software that can be developed! Software engineers, developers and project managers who claim that they are striving to deliver bug free and fully functional code are either lying or simply do not know what they are talking about.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">I have heard several developers and program managers bragging for the obvious (but also impossible) goal of fixing all known bugs as quickly as possible and never release the next version while all fixes are committed! This approach is nothing else than wishful thought or a marketing motto that might be used to convince some MBA manager who also knows very little about the creation of software.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Setting aside very trivial cases, the complexity of \u00a0any piece of software that exposes any level of useful functionality is such that even the larger quality assurance and testing teams can never verify its validity to its full extend. \u00a0The responsibility of the senior programmer is to make a successful\u00a0 judgment call,\u00a0 deciding that\u00a0the solution has reached a level that can be deployed to its users with reasonable completeness and robustness! There is little doubt that users\u00a0 will later discover some of its bugs and feature shortcomings and some of them will become the\u00a0fixes\u00a0of the next release; great software relies on periodic piecemeal releases which are fixing existing bugs and add new features based on user feedback.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Shooting for perfection delays dramatically code delivery and in many cases make it impossible. \u00a0One of the main reasons behind failing projects has to be attributed to inexperienced program managers who fail to understand that software development is neither an exact science nor a logical structure that can be validated using some kind of a mathematical procedure. Software development instead, involves a great deal of talent and intuition, resulting to a mix of science and art with the artistic component playing the major role in most of the decisions to be made. \u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">I need to clarify that by no means I consider an advocate of sloppy releases or have the intention to convert end users to beta testers. \u00a0The point I am trying to make is that no matter how mission critical the software can be and how important the problem it tries to solve, it has to become crystal clear that it is simply impossible to reach a level of guarantee bug free solution. Regardless of whether it is an automated trading system, a nuclear reactor protection system or an android game, at some point somebody has to decide that the software is ready to be shipped to its users! \u00a0\u00a0Deciding that the software has reached an accepted level of completeness and its bugs are tolerable is one of the most critical judgment calls that a developer is asked to make.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">It is up to the understanding of the senior developer to decide whether his program is ready for delivery and this is the skill that will separate him from the crowd more than anything else.<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>NASA\u2019s Mars Climate Orbiter was launched on December 11 1998 with the ambitious mission of \u00a0studying Martian climate; the cost of the program was more&hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"advanced_seo_description":"","jetpack_seo_html_title":"","jetpack_seo_noindex":false,"footnotes":""},"categories":[6],"tags":[],"class_list":["post-176","post","type-post","status-publish","format-standard","hentry","category-programming"],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","jetpack-related-posts":[{"id":18,"url":"https:\/\/codingismycraft.blog\/index.php\/2023\/11\/24\/codingismycraft-a-few-words-about-the-title-of-the-blog\/","url_meta":{"origin":176,"position":0},"title":"CodingIsMyCraft: A few words about the title of the blog","author":"john","date":"November 24, 2023","format":false,"excerpt":"A few words about the title of the blog The term 'Software Engineer' has widely been used in the last decades to describe those who program computers. I am skeptic about this and personaly I wouldn't categorize programming strictly as engineering or science. If I were to describe it, I\u2026","rel":"","context":"In &quot;Programming&quot;","block_context":{"text":"Programming","link":"https:\/\/codingismycraft.blog\/index.php\/category\/programming\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":394,"url":"https:\/\/codingismycraft.blog\/index.php\/2026\/01\/23\/the-ai-revolution-in-coding-why-im-ignoring-the-prophets-of-doom\/","url_meta":{"origin":176,"position":1},"title":"The AI Revolution in Coding: Why I\u2019m Ignoring the Prophets of Doom","author":"john","date":"January 23, 2026","format":false,"excerpt":"The AI Revolution in Coding: Why I\u2019m Ignoring the Prophets of Doom Every day, we are bombarded with headlines about how Artificial Intelligence (AI) is \"disrupting\" every industry in its path. Software development is at the epicenter of this hype. With the rise of sophisticated AI-powered tools, the same question\u2026","rel":"","context":"Similar post","block_context":{"text":"Similar post","link":""},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":365,"url":"https:\/\/codingismycraft.blog\/index.php\/2025\/05\/20\/resisting-the-rush-why-careful-planning-beats-quick-coding-in-software-design\/","url_meta":{"origin":176,"position":2},"title":"Resisting the Rush: Why Careful Planning Beats Quick Coding","author":"john","date":"May 20, 2025","format":false,"excerpt":"Quality Software is not developed in a rush In the fast-paced world of tech startups and software companies, there\u2019s a persistent pressure to deliver products rapidly. Teams are often celebrated for shipping features quickly, and managers may reward short time-to-market above all else. This culture, focused on \u201cmoving fast and\u2026","rel":"","context":"Similar post","block_context":{"text":"Similar post","link":""},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":354,"url":"https:\/\/codingismycraft.blog\/index.php\/2025\/04\/03\/ai-an-essential-tool-for-software-development-not-a-replacement\/","url_meta":{"origin":176,"position":3},"title":"AI: An Essential Tool for Software Development, Not a Replacement","author":"john","date":"April 3, 2025","format":false,"excerpt":"Many software developers have seen how AI can generate code, create documentation, and run tests automatically allowing us to build simple interfaces, write SQL queries, and develop basic algorithms faster. It saves time, lets us focus on tougher challenges, and boosts our overall productivity. However, one clear consensus is that\u2026","rel":"","context":"In &quot;AI&quot;","block_context":{"text":"AI","link":"https:\/\/codingismycraft.blog\/index.php\/category\/ai\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":219,"url":"https:\/\/codingismycraft.blog\/index.php\/2014\/05\/23\/python-decorators-basics\/","url_meta":{"origin":176,"position":4},"title":"Python Decorators Basics","author":"john","date":"May 23, 2014","format":false,"excerpt":"Introduction to decorators Decorators introduce a programming paradigm that is not found in statically linked languages, like C++ or Java. Taking advantage of closures and the fact that functions are first class citizens of python, we can easily change the behaviour of them adding a single line of code. If\u2026","rel":"","context":"In &quot;Programming&quot;","block_context":{"text":"Programming","link":"https:\/\/codingismycraft.blog\/index.php\/category\/programming\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":49,"url":"https:\/\/codingismycraft.blog\/index.php\/2014\/05\/20\/thoughts-about-software-quality\/","url_meta":{"origin":176,"position":5},"title":"Thoughts About Software Quality&#8230;","author":"john","date":"May 20, 2014","format":false,"excerpt":"This might sound a bit axiomatic but it has to be true: software that remains alive while still expanding the number of it users as time goes on, is the epitome of good software; anything else that can possibly be used as quality metric is more of an implementation detail\u2026","rel":"","context":"In &quot;Programming&quot;","block_context":{"text":"Programming","link":"https:\/\/codingismycraft.blog\/index.php\/category\/programming\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"_links":{"self":[{"href":"https:\/\/codingismycraft.blog\/index.php\/wp-json\/wp\/v2\/posts\/176","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/codingismycraft.blog\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/codingismycraft.blog\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/codingismycraft.blog\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/codingismycraft.blog\/index.php\/wp-json\/wp\/v2\/comments?post=176"}],"version-history":[{"count":1,"href":"https:\/\/codingismycraft.blog\/index.php\/wp-json\/wp\/v2\/posts\/176\/revisions"}],"predecessor-version":[{"id":177,"href":"https:\/\/codingismycraft.blog\/index.php\/wp-json\/wp\/v2\/posts\/176\/revisions\/177"}],"wp:attachment":[{"href":"https:\/\/codingismycraft.blog\/index.php\/wp-json\/wp\/v2\/media?parent=176"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/codingismycraft.blog\/index.php\/wp-json\/wp\/v2\/categories?post=176"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/codingismycraft.blog\/index.php\/wp-json\/wp\/v2\/tags?post=176"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}