It’s tempting to simply start anew.
When you take over an existing product, even a pretty young one, there’s plenty legacy: features with questionable usefulness in the changing context, flows which are showing signs of stress in the light of actual usage.
I was thinking through the direction for the product and found my mind wandering into many unanswered questions. Why was this built this way? Is it really necessary? It’s frustrating, because there are so many things you don’t know, which holds you back from building the full picture of the product. I worry that my focus is only on small kills like fixing performance and bugs – not in rethinking and building a better product. Sometimes I entertain thoughts of simply resetting the product – to build from scratch, cut away all the excess, fit it into my vision of how it should be – instead of trying to wrangle through a previous interpretation.
Joel from Fog Creek / Stack Overflow has a very good article on why you shouldn’t simply throw away code. I like this quote:
“It’s important to remember that when you start from scratch there is absolutely no reason to believe that you are going to do a better job than you did the first time.” – Joel Spolsky
It’s a reminder that a restart without due thought may not solve the problem, turning out to be an inefficient use of resources. I find this thinking is somewhat counter-intuitive: it’s always the startup or team that takes a step back, figures out the better way, and creates that better way from scratch, free of legacy.
But when you’re dealing with an existing product, perhaps it helps to ground yourself in the problem you’re building for (not that the problem shouldn’t be consistently re-evaluated):
“Is there an alternative? The consensus seems to be that the old Netscape code base was really bad. Well, it might have been bad, but, you know what? It worked pretty darn well on an awful lot of real world computer systems.” – Joel Spolsky
Does a restart really add value?
More to chew on – and more reason to think through the why my product exists, or will continue to exist for.