{"id":1159,"date":"2026-03-26T16:00:00","date_gmt":"2026-03-26T16:00:00","guid":{"rendered":"https:\/\/wade.one\/blog\/?p=1159"},"modified":"2026-03-26T16:00:00","modified_gmt":"2026-03-26T16:00:00","slug":"why-most-software-projects-do-not-need-a-rewrite","status":"publish","type":"post","link":"https:\/\/wade.one\/blog\/2026\/03\/26\/why-most-software-projects-do-not-need-a-rewrite\/","title":{"rendered":"Why Most Software Projects Do Not Need a Rewrite"},"content":{"rendered":"<p>Most software projects do not need a rewrite.<\/p>\n<p>They need clearer ownership, fewer bad assumptions, better boundaries, better deployment discipline, and someone willing to untangle the ugly parts without pretending the past never happened.<\/p>\n<p>I say this because rewrite conversations nearly always sound exciting at the start and expensive later. They create the feeling of progress long before they create any actual value. Everyone gets to imagine a cleaner system, a better stack, and a fresh start. Then reality shows up.<\/p>\n<h2>Why rewrites are so attractive<\/h2>\n<p>Rewrites are attractive because legacy systems are annoying.<\/p>\n<p>The code is messy. The naming is inconsistent. There are old dependencies nobody likes. Nobody fully trusts the tests. A few important behaviors only exist because some production bug happened six years ago and somebody patched around it at 2 a.m.<\/p>\n<p>So people look at the mess and think the problem is the codebase itself.<\/p>\n<p>Usually it is not.<\/p>\n<p>Usually the real problems are weaker than that and more awkward to admit: unclear product decisions, poor technical leadership, slow feedback loops, missing observability, weak release processes, or too much business logic living in the heads of a few people.<\/p>\n<p>A rewrite does not magically fix any of those.<\/p>\n<h2>What usually happens with rewrites<\/h2>\n<p>The old system already contains thousands of small decisions the business depends on, whether anyone documented them or not.<\/p>\n<p>That is why rewrites so often miss edge cases, break workflows, or take far longer than expected. The new system is clean partly because it has not earned the same scar tissue yet.<\/p>\n<p>This is the part people underestimate. The mess in a mature system is often evidence of contact with reality.<\/p>\n<p>If you replace that system all at once, you are not just replacing code. You are replacing years of discovered behavior, half-understood exceptions, workarounds for external systems, and business rules nobody wrote down properly.<\/p>\n<p>That is a risky thing to do in one move.<\/p>\n<h2>What I would usually recommend instead<\/h2>\n<p>Most of the time, I would rather see a system improved in place or replaced in slices.<\/p>\n<p>That can mean:<\/p>\n<ul>\n<li>carving out one bounded area at a time<\/li>\n<li>introducing cleaner APIs around ugly internals<\/li>\n<li>moving the worst parts behind a more stable boundary<\/li>\n<li>replacing one workflow or subsystem first instead of the whole platform<\/li>\n<li>paying down operational pain before touching everything else<\/li>\n<\/ul>\n<p>That is less dramatic than a rewrite announcement, but it is normally the safer and more honest engineering choice.<\/p>\n<p>Patterns like incremental replacement and the strangler fig approach keep showing up for a reason. They let you modernise without pretending the business can stop while engineering chases elegance.<\/p>\n<h2>When a rewrite can make sense<\/h2>\n<p>I am not saying never.<\/p>\n<p>Sometimes the platform really is boxed in. Sometimes the runtime is dead, the deployment model is indefensible, the security posture is unacceptable, or the architecture is so tightly coupled that meaningful change is harder than replacement.<\/p>\n<p>But even then, I would treat a rewrite as a last resort, not a default sign of ambition.<\/p>\n<p>If a team wants a rewrite, I want to know:<\/p>\n<ul>\n<li>what business problem it solves that incremental change cannot<\/li>\n<li>what parts of the current system are genuinely beyond repair<\/li>\n<li>how the team will preserve critical behavior during the transition<\/li>\n<li>how they will stop the new system becoming the same mess two years later<\/li>\n<\/ul>\n<p>If those answers are weak, the rewrite case is weak too.<\/p>\n<h2>My view<\/h2>\n<p>Most rewrite proposals are really frustration proposals.<\/p>\n<p>The team is tired of the current system, and a rewrite feels cleaner than doing the slower work of understanding it, stabilising it, and improving it piece by piece.<\/p>\n<p>I get the appeal. I really do.<\/p>\n<p>But if I am advising on risk, cost, delivery, and long-term maintainability, I will usually back incremental change over a full rebuild.<\/p>\n<p>Most software projects do not need a rewrite.<\/p>\n<p>They need disciplined engineering and fewer excuses.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Most rewrite discussions are really a sign that the team is frustrated, not that a full rebuild is the smartest technical decision. In most cases, incremental change is the better call.<\/p>\n","protected":false},"author":0,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[13,25],"tags":[43,45,47,46],"class_list":["post-1159","post","type-post","status-publish","format-standard","hentry","category-programming","category-software-engineer","tag-consulting","tag-legacy-systems","tag-rewrites","tag-software-architecture"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Why Most Software Projects Do Not Need a Rewrite - wade.one<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/wade.one\/blog\/2026\/03\/26\/why-most-software-projects-do-not-need-a-rewrite\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Why Most Software Projects Do Not Need a Rewrite - wade.one\" \/>\n<meta property=\"og:description\" content=\"Most rewrite discussions are really a sign that the team is frustrated, not that a full rebuild is the smartest technical decision. In most cases, incremental change is the better call.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/wade.one\/blog\/2026\/03\/26\/why-most-software-projects-do-not-need-a-rewrite\/\" \/>\n<meta property=\"og:site_name\" content=\"wade.one\" \/>\n<meta property=\"article:published_time\" content=\"2026-03-26T16:00:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/wade.one\/blog\/wp-content\/uploads\/2015\/02\/Wade-Logo-cropped.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1518\" \/>\n\t<meta property=\"og:image:height\" content=\"1506\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@wadewomersley\" \/>\n<meta name=\"twitter:site\" content=\"@wadewomersley\" \/>\n<meta name=\"twitter:label1\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/2026\\\/03\\\/26\\\/why-most-software-projects-do-not-need-a-rewrite\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/2026\\\/03\\\/26\\\/why-most-software-projects-do-not-need-a-rewrite\\\/\"},\"author\":{\"name\":\"\",\"@id\":\"\"},\"headline\":\"Why Most Software Projects Do Not Need a Rewrite\",\"datePublished\":\"2026-03-26T16:00:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/2026\\\/03\\\/26\\\/why-most-software-projects-do-not-need-a-rewrite\\\/\"},\"wordCount\":658,\"publisher\":{\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/#\\\/schema\\\/person\\\/8b4739f8f8bb2cff5d792d4b8779fcc3\"},\"keywords\":[\"consulting\",\"legacy-systems\",\"rewrites\",\"software-architecture\"],\"articleSection\":[\"Programming\",\"Software Engineer\"],\"inLanguage\":\"en-GB\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/2026\\\/03\\\/26\\\/why-most-software-projects-do-not-need-a-rewrite\\\/\",\"url\":\"https:\\\/\\\/wade.one\\\/blog\\\/2026\\\/03\\\/26\\\/why-most-software-projects-do-not-need-a-rewrite\\\/\",\"name\":\"Why Most Software Projects Do Not Need a Rewrite - wade.one\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/#website\"},\"datePublished\":\"2026-03-26T16:00:00+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/2026\\\/03\\\/26\\\/why-most-software-projects-do-not-need-a-rewrite\\\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/wade.one\\\/blog\\\/2026\\\/03\\\/26\\\/why-most-software-projects-do-not-need-a-rewrite\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/2026\\\/03\\\/26\\\/why-most-software-projects-do-not-need-a-rewrite\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/wade.one\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Why Most Software Projects Do Not Need a Rewrite\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/wade.one\\\/blog\\\/\",\"name\":\"wade.one\",\"description\":\"wade womersley - york based software engineer\",\"publisher\":{\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/#\\\/schema\\\/person\\\/8b4739f8f8bb2cff5d792d4b8779fcc3\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/wade.one\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/#\\\/schema\\\/person\\\/8b4739f8f8bb2cff5d792d4b8779fcc3\",\"name\":\"Wade Womersley\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/wp-content\\\/uploads\\\/2015\\\/02\\\/200px.png\",\"url\":\"https:\\\/\\\/wade.one\\\/blog\\\/wp-content\\\/uploads\\\/2015\\\/02\\\/200px.png\",\"contentUrl\":\"https:\\\/\\\/wade.one\\\/blog\\\/wp-content\\\/uploads\\\/2015\\\/02\\\/200px.png\",\"width\":202,\"height\":200,\"caption\":\"Wade Womersley\"},\"logo\":{\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/wp-content\\\/uploads\\\/2015\\\/02\\\/200px.png\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Why Most Software Projects Do Not Need a Rewrite - wade.one","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/wade.one\/blog\/2026\/03\/26\/why-most-software-projects-do-not-need-a-rewrite\/","og_locale":"en_GB","og_type":"article","og_title":"Why Most Software Projects Do Not Need a Rewrite - wade.one","og_description":"Most rewrite discussions are really a sign that the team is frustrated, not that a full rebuild is the smartest technical decision. In most cases, incremental change is the better call.","og_url":"https:\/\/wade.one\/blog\/2026\/03\/26\/why-most-software-projects-do-not-need-a-rewrite\/","og_site_name":"wade.one","article_published_time":"2026-03-26T16:00:00+00:00","og_image":[{"width":1518,"height":1506,"url":"https:\/\/wade.one\/blog\/wp-content\/uploads\/2015\/02\/Wade-Logo-cropped.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_creator":"@wadewomersley","twitter_site":"@wadewomersley","twitter_misc":{"Estimated reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/wade.one\/blog\/2026\/03\/26\/why-most-software-projects-do-not-need-a-rewrite\/#article","isPartOf":{"@id":"https:\/\/wade.one\/blog\/2026\/03\/26\/why-most-software-projects-do-not-need-a-rewrite\/"},"author":{"name":"","@id":""},"headline":"Why Most Software Projects Do Not Need a Rewrite","datePublished":"2026-03-26T16:00:00+00:00","mainEntityOfPage":{"@id":"https:\/\/wade.one\/blog\/2026\/03\/26\/why-most-software-projects-do-not-need-a-rewrite\/"},"wordCount":658,"publisher":{"@id":"https:\/\/wade.one\/blog\/#\/schema\/person\/8b4739f8f8bb2cff5d792d4b8779fcc3"},"keywords":["consulting","legacy-systems","rewrites","software-architecture"],"articleSection":["Programming","Software Engineer"],"inLanguage":"en-GB"},{"@type":"WebPage","@id":"https:\/\/wade.one\/blog\/2026\/03\/26\/why-most-software-projects-do-not-need-a-rewrite\/","url":"https:\/\/wade.one\/blog\/2026\/03\/26\/why-most-software-projects-do-not-need-a-rewrite\/","name":"Why Most Software Projects Do Not Need a Rewrite - wade.one","isPartOf":{"@id":"https:\/\/wade.one\/blog\/#website"},"datePublished":"2026-03-26T16:00:00+00:00","breadcrumb":{"@id":"https:\/\/wade.one\/blog\/2026\/03\/26\/why-most-software-projects-do-not-need-a-rewrite\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/wade.one\/blog\/2026\/03\/26\/why-most-software-projects-do-not-need-a-rewrite\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/wade.one\/blog\/2026\/03\/26\/why-most-software-projects-do-not-need-a-rewrite\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/wade.one\/blog\/"},{"@type":"ListItem","position":2,"name":"Why Most Software Projects Do Not Need a Rewrite"}]},{"@type":"WebSite","@id":"https:\/\/wade.one\/blog\/#website","url":"https:\/\/wade.one\/blog\/","name":"wade.one","description":"wade womersley - york based software engineer","publisher":{"@id":"https:\/\/wade.one\/blog\/#\/schema\/person\/8b4739f8f8bb2cff5d792d4b8779fcc3"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/wade.one\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":["Person","Organization"],"@id":"https:\/\/wade.one\/blog\/#\/schema\/person\/8b4739f8f8bb2cff5d792d4b8779fcc3","name":"Wade Womersley","image":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/wade.one\/blog\/wp-content\/uploads\/2015\/02\/200px.png","url":"https:\/\/wade.one\/blog\/wp-content\/uploads\/2015\/02\/200px.png","contentUrl":"https:\/\/wade.one\/blog\/wp-content\/uploads\/2015\/02\/200px.png","width":202,"height":200,"caption":"Wade Womersley"},"logo":{"@id":"https:\/\/wade.one\/blog\/wp-content\/uploads\/2015\/02\/200px.png"}}]}},"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack-related-posts":[{"id":1163,"url":"https:\/\/wade.one\/blog\/2026\/03\/30\/what-clients-actually-need-from-a-software-consultant\/","url_meta":{"origin":1159,"position":0},"title":"What Clients Actually Need From a Software Consultant","author":"","date":"March 30, 2026","format":false,"excerpt":"Clients do not really need a consultant who just says clever technical things. They need someone who can reduce risk, create clarity, and help them make better decisions.","rel":"","context":"In &quot;Software Engineer&quot;","block_context":{"text":"Software Engineer","link":"https:\/\/wade.one\/blog\/category\/software-engineer\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1155,"url":"https:\/\/wade.one\/blog\/2026\/03\/26\/ai-is-not-a-bubble-denial-is-the-real-problem\/","url_meta":{"origin":1159,"position":1},"title":"AI Is Not a Bubble. Denial Is the Real Problem","author":"","date":"March 26, 2026","format":false,"excerpt":"AI tooling is not going away. What a lot of people are calling a bubble looks more like denial in the face of tools that are already becoming normal developer infrastructure.","rel":"","context":"In &quot;AI&quot;","block_context":{"text":"AI","link":"https:\/\/wade.one\/blog\/category\/ai\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1160,"url":"https:\/\/wade.one\/blog\/2026\/03\/27\/what-makes-a-legacy-system-dangerous\/","url_meta":{"origin":1159,"position":2},"title":"What Makes a Legacy System Dangerous","author":"","date":"March 27, 2026","format":false,"excerpt":"A legacy system is not dangerous just because it is old. It becomes dangerous when nobody can change it safely, nobody can see what it is doing, and the business depends on it anyway.","rel":"","context":"In &quot;Programming&quot;","block_context":{"text":"Programming","link":"https:\/\/wade.one\/blog\/category\/programming\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1178,"url":"https:\/\/wade.one\/blog\/2026\/04\/10\/what-actually-slows-software-delivery-down\/","url_meta":{"origin":1159,"position":3},"title":"What Actually Slows Software Delivery Down","author":"","date":"April 10, 2026","format":false,"excerpt":"Software delivery usually slows down because of decisions, handoffs, fear, and bad environments, not because developers are typing too slowly.","rel":"","context":"In &quot;Software Engineer&quot;","block_context":{"text":"Software Engineer","link":"https:\/\/wade.one\/blog\/category\/software-engineer\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1176,"url":"https:\/\/wade.one\/blog\/2026\/04\/08\/why-build-pipelines-become-part-of-the-product\/","url_meta":{"origin":1159,"position":4},"title":"Why Build Pipelines Become Part of the Product","author":"","date":"April 8, 2026","format":false,"excerpt":"Build pipelines stop being \"just internal tooling\" the moment they start deciding how fast you can ship, how often you break things, and how painful releases feel.","rel":"","context":"In &quot;Software Engineer&quot;","block_context":{"text":"Software Engineer","link":"https:\/\/wade.one\/blog\/category\/software-engineer\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1100,"url":"https:\/\/wade.one\/blog\/2023\/03\/26\/years-later-starting-to-blog\/","url_meta":{"origin":1159,"position":5},"title":"Years later, starting to blog","author":"Wade","date":"March 26, 2023","format":false,"excerpt":"So time to start blogging again, years of not doing it, I'll slowly work up again so it will probably be a slow ramp up. I've had a rather comfortable life the last few years so let myself slip, as most of us are experiencing now, that is no longer\u2026","rel":"","context":"In &quot;Software Engineer&quot;","block_context":{"text":"Software Engineer","link":"https:\/\/wade.one\/blog\/category\/software-engineer\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"_links":{"self":[{"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/posts\/1159","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/types\/post"}],"replies":[{"embeddable":true,"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/comments?post=1159"}],"version-history":[{"count":1,"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/posts\/1159\/revisions"}],"predecessor-version":[{"id":1164,"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/posts\/1159\/revisions\/1164"}],"wp:attachment":[{"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/media?parent=1159"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/categories?post=1159"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/tags?post=1159"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}