Tuesday, December 3, 2013

Rewrite your Product, and live to tell about it

In every organisation life, there comes a time when its product is due to a big overhaul.
From dated GUI to dying Database, a Business Logic layer that's filled with patches, or even personal changes ('The only girl that knew that code has left...').
So now the company gives you, her beloved manager, a clean slate to rewrite the product.

Supposedly a dream come true, right?
In a past post, I've discussed the new system dilemma, a situation where you're already knee deep inside the rewrite, and pressure is rising.

This post should help you avoid that terrible situation.

The most important rule when writing a product from scratch is deciding what it's NOT going to do in phase one (See time frame in the second rule). Trying to match all the features the old system supports (Sometimes while it's still being developed by tier 4) will result in an endless effort.
Focus, and be transparent with what you'll deliver and what you won't. Put an emphasis on what your rewrite brings to the table that the old stack doesn't.

The second most important rule is DON'T LINGER. 3 months. Show something (Even a playable mockup) after 1 month. Show progress every week.
Three months is a long time, and mind that things can change, but it's a short enough time frame that things won't turn completely around.

When phase one is near the end, you can "Let the company in" and plan the next stages.

Focus and Agility bring results. Go for it!



3 comments:

  1. After working in places that do every project at least twice (usually the developers 'recommend' to redevelop) and places that aren't afraid of legacy code but spend a lot of effort in unit/system tests. I must say the 2nd option is better by far. laziness, fear from legacy code and unprofessional work lead to rewrites .

    ReplyDelete
  2. http://www.goodreads.com/book/show/44919.Working_Effectively_with_Legacy_Code

    ReplyDelete
  3. Thanks for the comment Eran - Sometimes there are cases you HAVE to rewrite, like FLEX to HTML5 for example :)

    ReplyDelete