{"id":34,"date":"2025-07-18T17:14:00","date_gmt":"2025-07-18T07:14:00","guid":{"rendered":"https:\/\/davidshoon.com\/?p=34"},"modified":"2026-10-20T09:50:14","modified_gmt":"2026-10-19T22:50:14","slug":"why-agile-development-sucks","status":"publish","type":"post","link":"https:\/\/davidshoon.com\/?p=34","title":{"rendered":"Why AGILE development sucks."},"content":{"rendered":"<h1 style=\"margin: 0px;text-align: left;text-indent: 0px\">Why AGILE development sucks.<\/h1>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\">For example, if I was given a ticket for a requirement, where I say y = x + 2.<\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\">Then the code I write:<\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\">&#8220;`<\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><span style=\"font-family: courier\"><br \/><\/span><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><span style=\"font-family: courier\">int func(int x)<\/span><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><span style=\"font-family: courier\">{<\/span><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><span style=\"font-family: courier\">\treturn x + 2;<\/span><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><span style=\"font-family: courier\">}<\/span><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\">&#8220;`<\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\">Now I&#8217;m given a new requirement, where it&#8217;s supposed to double the input, and chain that up with the original function.<\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\">&#8220;`<\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><span style=\"font-family: courier\"><br \/><\/span><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><span style=\"font-family: courier\">int func2(int x)<\/span><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><span style=\"font-family: courier\">{  <\/span><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><span style=\"font-family: courier\">\treturn 2 * func(x);<\/span><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><span style=\"font-family: courier\">}<\/span><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\">&#8220;`<\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\">Now I&#8217;m given a third requirement, which is to substract 4 from the input, and it&#8217;s supposed to chain up to func2.<\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\">&#8220;`<\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><span style=\"font-family: courier\"><br \/><\/span><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><span style=\"font-family: courier\">int func3(int x)  <\/span><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><span style=\"font-family: courier\">{  <\/span><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><span style=\"font-family: courier\">\treturn func2(x) &#8211; 4;<\/span><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><span style=\"font-family: courier\">}<\/span><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\">&#8220;`<\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\">Now I&#8217;m given a fourth requirement, which is to substract 2x of the input from the chained function.<\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\">&#8220;`<\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><span style=\"font-family: courier\"><br \/><\/span><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><span style=\"font-family: courier\">int func4(int x)  <\/span><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><span style=\"font-family: courier\">{  <\/span><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><span style=\"font-family: courier\">\treturn func3(x) &#8211; (2 * x);<\/span><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><span style=\"font-family: courier\">}<\/span><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\">&#8220;`<\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\">If I put all the code together, and run it:<\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\">&#8220;`<\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><span style=\"font-family: courier\"><br \/><\/span><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><span style=\"font-family: courier\">#include &lt;stdio.h&gt;<\/span><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><span style=\"font-family: courier\">#include &lt;stdlib.h&gt;<\/span><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><span style=\"font-family: courier\">#include &lt;string.h&gt;<\/span><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><span style=\"font-family: courier\"><br \/><\/span><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><span style=\"font-family: courier\">int func(int x)<\/span><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><span style=\"font-family: courier\">{<\/span><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><span style=\"font-family: courier\">\treturn x + 2;<\/span><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><span style=\"font-family: courier\">}<\/span><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><span style=\"font-family: courier\"><br \/><\/span><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><span style=\"font-family: courier\">int func2(int x)<\/span><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><span style=\"font-family: courier\">{<\/span><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><span style=\"font-family: courier\">\treturn 2 * func(x);<\/span><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><span style=\"font-family: courier\">}<\/span><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><span style=\"font-family: courier\"><br \/><\/span><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><span style=\"font-family: courier\">int func3(int x)<\/span><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><span style=\"font-family: courier\">{<\/span><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><span style=\"font-family: courier\">\treturn func2(x) &#8211; 4;<\/span><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><span style=\"font-family: courier\">}<\/span><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><span style=\"font-family: courier\"><br \/><\/span><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><span style=\"font-family: courier\">int func4(int x)<\/span><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><span style=\"font-family: courier\">{<\/span><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><span style=\"font-family: courier\">\treturn func3(x) &#8211; (2 * x);<\/span><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><span style=\"font-family: courier\">}<\/span><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><span style=\"font-family: courier\"><br \/><\/span><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><span style=\"font-family: courier\">int main()<\/span><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><span style=\"font-family: courier\">{<\/span><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><span style=\"font-family: courier\">\tint i;<\/span><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><span style=\"font-family: courier\"><br \/><\/span><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><span style=\"font-family: courier\">\tfor (i = 0; i &lt; 256; i++) {<\/span><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><span style=\"font-family: courier\">\t\tprintf(&#8220;%dn&#8221;, func4(i));<\/span><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><span style=\"font-family: courier\">\t}<\/span><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><span style=\"font-family: courier\"><br \/><\/span><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><span style=\"font-family: courier\">}<\/span><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\">&#8220;`<\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\">I will get all zeroes.<\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\">If I simply refactored the code, I would get:<\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\">&#8220;`<\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><span style=\"font-family: courier\"><br \/><\/span><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><span style=\"font-family: courier\">int refactored(int x)  <\/span><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><span style=\"font-family: courier\">{  <\/span><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><span style=\"font-family: courier\">\treturn 0; <\/span><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><span style=\"font-family: courier\">}<\/span><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\">&#8220;`<\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\">This is why AGILE development sucks, and never gives the simplest possible code to do a particular task, unless you refactor it constantly.<\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\">Because you will always get &#8220;new&#8221; requirements, and some of them are conflicting with each other, or cancel each other out, and if you don&#8217;t refactor to remove these conflicting requirements, they linger in code as bloat.<\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\">Strictly speaking, waterfall designers &#8220;know&#8221; what they want and would&#8217;ve gone straight towards &#8220;refactored(int x)&#8221;, if they have enough insight (and deep knowledge of the task). This is why they still can&#8217;t be beaten, when it comes to designing good software or hardware.<\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\">AGILE development is for babies who don&#8217;t know what they&#8217;re doing, and they&#8217;re guessing every step of the way.<\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\"><\/p>\n<p style=\"margin-bottom: 0px;margin-left: 0px;margin-right: 0px;margin-top: 0px;text-indent: 0px\">\n<p>p, li { white-space: pre-wrap; }<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Why AGILE development sucks. For example, if I was given a ticket for a requirement, where I say y = x + 2. Then the code I write: &#8220;` int func(int x) { return x + 2; } &#8220;` Now I&#8217;m given a new requirement, where it&#8217;s supposed to double the input, and chain that [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-34","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/davidshoon.com\/index.php?rest_route=\/wp\/v2\/posts\/34","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/davidshoon.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/davidshoon.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/davidshoon.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/davidshoon.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=34"}],"version-history":[{"count":1,"href":"https:\/\/davidshoon.com\/index.php?rest_route=\/wp\/v2\/posts\/34\/revisions"}],"predecessor-version":[{"id":35,"href":"https:\/\/davidshoon.com\/index.php?rest_route=\/wp\/v2\/posts\/34\/revisions\/35"}],"wp:attachment":[{"href":"https:\/\/davidshoon.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=34"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/davidshoon.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=34"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/davidshoon.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=34"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}