Developers like to rewrite apps from scratch - but should we?

The first version(s) of a successful application is focused, does what it needs to do and seems to have a killer feature its audience love; sometimes that killer feature was just an accident or maybe it was the plan the whole time. We developers, the creators, also know there are a few rough edges, maybe a few things that don’t perform as well as possible so, at some point, we just decide to rewrite the whole entire thing.

A lot of times there is a valid point behind that decision. Maybe there is some new technology that addresses that certain business problem much more efficiently or maybe the codebase just got too big, difficult to manage and most of it is useless anyway. Unfortunately a lot of times we just decide to rewrite from scratch because our nature as programmers got the better of the situation, we got a little lazy and our heads just got clouded with naive thoughts of brilliance; we do not like to improve incrementally, we believe we can just build something straight out better, no matter how long it took to build what is currently in production. We ignore geek history and lessons learned from the whole horror stories like Netscape’s. Do you remember how cool Netscape used to be? Now do you remember Netscape Communicator? Netscape 4? Netscape 5? Ugh. If you do not, get out of here and go ask your mommy to make your cereal! In more recent days,’s disaster comes to mind.

Fellow programers, yes programmers (I know that is not a cool term anymore but that’s what we are – we are not engineers, I can barely use a screwdriver), be aware of the “Second System Syndrome”, term first used by Fred Brooks.

It is easier to write code than to understand code that already exists and it is a lot cooler (who are we kidding). When we rewrite those applications we try to add every feature the first version(s) did no have because we think that we will do a better job, a sense of confidence that sounds more like a wish. So before you throw away years if hardwork and knowledge, try to really understand what you are leaving behind; and if it does make sense to rewrite from scratch, keep in mind what the priorities are and the core features that made the application a success in the first place.

By the way, I myself just proposed a partial rewrite of a 10-years system that is very successful. Did it make sense? Yes. But did my wild dreams of cool programming with Scala and hopefully some real-time Bayeux influence my decision? Hell yea!

(This is my first post from my new home/matchbox in NYC – goodbye sunshine state, we had a great run together).