{"id":46,"date":"2013-05-01T04:30:41","date_gmt":"2013-05-01T04:30:41","guid":{"rendered":"http:\/\/96.126.106.214\/?p=46"},"modified":"2023-11-26T01:03:09","modified_gmt":"2023-11-26T01:03:09","slug":"be-extra-cautious-of-early-decisions-in-your-development-cycle","status":"publish","type":"post","link":"https:\/\/codingismycraft.blog\/index.php\/2013\/05\/01\/be-extra-cautious-of-early-decisions-in-your-development-cycle\/","title":{"rendered":"Be extra cautious of early decisions in your development cycle"},"content":{"rendered":"<p>I do not see how can anyone disagree with <a href=\"https:\/\/medium.com\/what-i-learned-building\/9216e1c9da7d\">The McDonald Theory<\/a> which states that initiating a process is more important than finding the ultimate solution at once.<\/p>\n<p>In deed this is how science and technology are progressing and naturally the same principle applies to any human activity which can tolerate a trial and error sequence of experiments. This theory is especially truth software development which is still in its infancy having a lot of room for further evolution and standardization.<\/p>\n<p><strong>Trivial Initial Decisions Can Eventually Become Serious Limitations<\/strong><\/p>\n<p>Experience teaches us that early decisions taken under the assumption that it will be easy to change in later stages as our project will be maturing usually stay with it for the rest of its life span.<\/p>\n<p>Any developer has stories to say about a quick and dirty class he wrote under the pressure to present a case study, that despite his intention to replace it with something more strategic during the later stages of his development, it quickly became such a vital point of the platform so the cost of re factoring it is so large so he is preferring to just accept it as it is an leave with it even if it hurts the elegance and functionality of his solution.<\/p>\n<p>Having several of this type of early code components that cannot be eliminated are most of the times the reason why eventually a platform is reaching the end of its lifespan and a rewrite is required.<\/p>\n<p><strong>The adaptability of a system dictates its success<\/strong><\/p>\n<p>As a system matures and extends its significance as a component of the whole ecosystem, it needs to satisfy additional requirements that most of them were not part of the original specification.<\/p>\n<p>The ability of the system to serve such a need, is the challenge that will prove it successful and well designed. At this point it becomes obvious how important early decisions are becoming and how easily a seemingly nave design concept that became impossible to replace can gradually covert a system to obsolete.<\/p>\n<p><strong>The two extremes<\/strong><\/p>\n<p>In real world these directions can range between the two extremes of cowboy coding to literate programming.<\/p>\n<p>The former referring to the heroic programmer who shooting from his belt, does not hesitate to hack around crafting his solution on the go, starting coding with little to no planning, while the latter is a term coined by Don Knuth as a method requiring a complete description of a program in a hard copy form (like a notebook) before a single line of code is written!<\/p>\n<p>None of these styles should become a religious belief restricting the flexibility of the developer to select what he thinks is the best approach for the specific problem. Nothing can substitute the judgment call of the developer who needs to have to necessary blend of experience, talent and knowledge to successfully select the optimal approach based in the nature of the system he is trying to develop.<\/p>\n<p><strong>The design iterations<\/strong><\/p>\n<p>Designing a software system starts from a domain challenge which describes the problem to be solved.<\/p>\n<p>The developer does not need to be an expert on the domain but he needs to be able to estimate the required depth of its understanding.<\/p>\n<p>He should be capable to switch from a telescopic to a microscopic view while collecting requirements and more than this help his business experts to understand better what exactly they are doing and what they need.<\/p>\n<p>Once the developer thinks he has reached a sufficient level of domain logic the next step should be to process all the available data and concepts expressing a possible solution which always must be accompanied by a list of the unknowns.<\/p>\n<p>This process should be repeated until both the quality of the solution is acceptable and the unknowns are minimal and their possible source defined. Understanding the unknowns is extremely critical for the success of an implementation and most of the times this step is completely ignored.<\/p>\n<p>Note that we should try to maximize the quality of the application, minimize the unknowns and minimize the estimated cost of its development.<\/p>\n<p><strong>It Drills down to Talent and Experience <\/strong><\/p>\n<p>Based in his experience, the developer will categorize the problem as either a standard or substandard one. This means that if he has gone through something similar before his task is simplified something that is is not true if he is facing a completely new problem than whatever he has resolved in the past.<\/p>\n<p>At this point, I think that it is obvious that arriving to the optimal decisions relies more to the experience and talent of the developer and it is less of an engineering task that can be answered scientifically.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I do not see how can anyone disagree with The McDonald Theory which states that initiating a process is more important than finding the ultimate&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-46","post","type-post","status-publish","format-standard","hentry","category-programming"],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","jetpack-related-posts":[{"id":68,"url":"https:\/\/codingismycraft.blog\/index.php\/2016\/05\/25\/falsifiability-and-unit-testing\/","url_meta":{"origin":46,"position":0},"title":"Falsifiability and Unit Testing","author":"john","date":"May 25, 2016","format":false,"excerpt":"Without a doubt, Test Driven Development (TDD) lies in the core of my software development approach. \u00a0I have been a very early adapter of automated testings since my C++ and C# days and always felt very enthusiastic about their impact on the quality of the software. I have to admit\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":42,"url":"https:\/\/codingismycraft.blog\/index.php\/2013\/03\/11\/technological-directions\/","url_meta":{"origin":46,"position":1},"title":"Technological Directions","author":"john","date":"March 11, 2013","format":false,"excerpt":"Starting a new project involves several decisions, the most important of which is the selection of the technologies to be used. The technologies used can be scaled from very generic as the operating system, programming platform and data base to more specific, such as the specific widget toolkit or the\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":337,"url":"https:\/\/codingismycraft.blog\/index.php\/2024\/11\/06\/unveiling-the-traits-of-a-master-programmer\/","url_meta":{"origin":46,"position":2},"title":"Unveiling the Traits of a Master Programmer","author":"john","date":"November 6, 2024","format":false,"excerpt":"Programming is a craft honed through both theoretical knowledge and practical application. This skill, cultivated through countless hours of coding and problem-solving, is essential for delivering high-quality software. To achieve mastery, programmers must possess not only a strong foundation in technical knowledge but also a wealth of practical experience. This\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":66,"url":"https:\/\/codingismycraft.blog\/index.php\/2016\/03\/10\/the-three-dimensions-of-a-programmer\/","url_meta":{"origin":46,"position":3},"title":"The three dimensions of a programmer.","author":"john","date":"March 10, 2016","format":false,"excerpt":"\u00a0 It is my impression that the vast majority of new developers, tend to underestimate the importance of design and implementation details as they struggle to prove that they can deliver a solution very quickly and please their managers with very tight deadlines. A developer eager to prove his abilities,\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":279,"url":"https:\/\/codingismycraft.blog\/index.php\/2024\/10\/03\/the-challenges-of-python-migration-lessons-from-c-and-beyond\/","url_meta":{"origin":46,"position":4},"title":"The Challenges of Python Migration: Lessons from C++ and Beyond","author":"john","date":"October 3, 2024","format":false,"excerpt":"One project that confirmed the need for caution and conservatism when estimating deadlines involved migrating a massive codebase of over 4,000 Python files and 250+ open-source libraries from Python 3.6 to 3.10. What was initially seen as a straightforward task, expected to take just a few weeks, ended up consuming\u2026","rel":"","context":"Similar post","block_context":{"text":"Similar post","link":""},"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":46,"position":5},"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":[]}],"_links":{"self":[{"href":"https:\/\/codingismycraft.blog\/index.php\/wp-json\/wp\/v2\/posts\/46","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=46"}],"version-history":[{"count":2,"href":"https:\/\/codingismycraft.blog\/index.php\/wp-json\/wp\/v2\/posts\/46\/revisions"}],"predecessor-version":[{"id":48,"href":"https:\/\/codingismycraft.blog\/index.php\/wp-json\/wp\/v2\/posts\/46\/revisions\/48"}],"wp:attachment":[{"href":"https:\/\/codingismycraft.blog\/index.php\/wp-json\/wp\/v2\/media?parent=46"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/codingismycraft.blog\/index.php\/wp-json\/wp\/v2\/categories?post=46"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/codingismycraft.blog\/index.php\/wp-json\/wp\/v2\/tags?post=46"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}