# When to Rewrite from Scratch - Autopsy of a Failed Software

DevFeed: [When to Rewrite from Scratch - Autopsy of a Failed Software](<https://devfeed.tech/articles/when-to-rewrite-from-scratch-autopsy-of-a-failed-software-24935.md>)

Original publisher: [Read original article](<https://codeahoy.com/2016/04/21/when-to-rewrite-from-scratch-autopsy-of-a-failed-software/>)

Author: umer

Published: 2016-04-21T00:00:00Z

Content type: opinion

Language: en

Sources: [Code Ahoy - Articles](<https://devfeed.tech/sources/code-ahoy-articles.md>)

Topics: [Software](<https://devfeed.tech/topics/software.md>), [Development](<https://devfeed.tech/topics/development.md>), [Code](<https://devfeed.tech/topics/code.md>), [Agile](<https://devfeed.tech/topics/agile.md>), [Apache Cassandra](<https://devfeed.tech/topics/cassandra.md>), [virtualization](<https://devfeed.tech/topics/virtualization.md>), [Mobile](<https://devfeed.tech/topics/mobile.md>)

Tags: [agile](<https://devfeed.tech/tags/agile.md>), [architecture](<https://devfeed.tech/tags/architecture.md>), [cassandra](<https://devfeed.tech/tags/cassandra.md>), [code](<https://devfeed.tech/tags/code.md>), [development](<https://devfeed.tech/tags/development.md>), [incremental](<https://devfeed.tech/tags/incremental.md>), [mobile](<https://devfeed.tech/tags/mobile.md>), [software](<https://devfeed.tech/tags/software.md>), [virtualization](<https://devfeed.tech/tags/virtualization.md>)

## AI overview

A software manager recounts how a startup decided to rewrite a working system from scratch after incurring technical debt and anticipating future scaling needs. The decision was also driven by interest in newer technologies, including Apache Cassandra, virtualization, binary protocols, and service-oriented architecture.

## Source excerpt

It was winter of 2012. I was working as a software developer in a small team at a start-up. We had just released the first version of our software to a real corporate customer. The development finished right on schedule. When we launched, I was over the the moon and very proud. It was extremely satisfying to watch the system process couple of million of unique users a day and send out tens of millions of SMS messages. By summer, the company had real revenue. I got promoted to software manager. We hired new guys. The company was poised for growth. Life was great. And then we made a huge blunder and decided to rewrite the software. From scratch. Why We Felt That Rewrite from Scratch Was Needed? We had written the original system with a gun to our heads. We had to race to the finish line and incurred technical debt. We weren't having long design discussions or review meetings - we didn't have time for such things. We would finish a feature as quickly as we can, get it tested and release it to the customer. We had a shared office (from TRTech) and I remember new software developers at other companies getting into lengthy design and recurring architecture debates over design patterns, something we couldn't afford to do. Despite agile-on-steroids design, the original system wasn't badly written and generally was well structured. There was some spaghetti code that carried over from company's previous proof of concept attempts that we left untouched because it was working and we had no time. But instead of thinking about incremental improvements, we convinced ourselves that we need to rewrite from scratch because: the old code was bad and hard to maintain. the "monolith java architecture" was inadequate for our future need of supporting a very large operator with 60 million mobile users and multi-site deployments. I wanted to try out new, shinny technologies like Apache Cassandra, Virtualization, Binary Protocols, Service Oriented Architecture, etc. We convinced the entire