Refactor, Rebuild, Restructure.

There is a product development philosophy that I strongly believe in, especially for the Software-As-Service world (a.k.a. Extranet).  I call that philosophy the “Pendulum”.  The pendulum oscillates between features and quality in a product.  A feature is a new thing that the product should do.  Quality is a catch-all for improving the performance, removing bugs, and getting rid of crusty, dead code.

ALl too often the pendulum is stuck all the way on the features side.  This leads to more buttons (Yahoo), more tabs (Salesforce), more advanced actions and modals (Windows).  Elegance and simplicity, like many of Apple’s products, often come from throwing away everything and building from scratch.  The problem is that once you do that, when should you tear it down again?

I believe that every product should rebuild itself from scratch periodically.  The approach I usually take is component-based.   The UI could be rebuilt using the same back-end.  The database could be rebuilt using the same UI.  The framework could be swapped out.  These are not simple tasks.  They are MAJOR projects.  However, the benefit is always enormous.

Code gets laden with crap over time.  People are in a rush.  They write code with the symbol //TODO all over the place.  Those items never get addressed.  Additionally, people start using the product and you learn through that experience.  Real use cases are better than imagined ones.  So when you rebuild, you know what you are aiming for.  You build a system that is flexible and maintainable.

No management team I have ever met was happy with these projects.  However, it makes your product live longer.  Much longer.  It makes creating new features much faster.  It makes performance faster, bug testing easier.  It makes your product nimble and changeable.

The benefits far outweigh the time it takes in investment.

Many engineers know this intuitively.   They wish they had the time to do this work.  They know the benefits.  Fight the goodfight.  Push that pendulum to the quality side whenever you can.  Help your boss to be a better manager.  Help your company succeed.  Fight the good fight.

Whatya think?