

Lessons from a rewrite - ChrisArchitect
http://blog.rebeccamurphey.com/lessons-from-a-rewrite-9179

======
kenjackson
It's hard to completely tell from the article, but this almost sounds like
they built a new product, not really a rewrite. The new product subsumed the
old system, but really could be described as a different product (in the way
that Word is not just a refactored version of Notepad). Nevertheless, great
read.

One thing to also note is that Fred Brooks has stated that his "Throw one
away" idea was wrong. He now says, "I would now recommend this for bad teams
only. Now, I suggest you make schedules on previous experience of your team.
My new approach: INCREMENTAL SE, i.e. build a small functionally limited but
working system and then expand it."

------
gruseom
It isn't clear from the article whether the new system is in production and
the old system has been thrown away. Those are the two most important
questions.

If the company is maintaining the old system to support existing users, that's
a bad sign for the rewrite. If there is a separate team for the old system,
that's a really bad sign for the rewrite (not to mention for the company).

Doing this is harder than it sounds. Technical success may be a necessary
condition but it isn't a sufficient one.

~~~
rmurphey3
The old system has been entirely decommissioned, and the team works entirely
on the new system now.

~~~
mgkimsal
How long was the transition period? A single day? What size userbase was
migrated (if you can say)?

Also, thanks for writing this up - lots of good writing as usual. Having gone
through a rewrite recently, and being asked to consult on another, you've
identified a lot of good issues for me to revisit.

~~~
rmurphey3
Since this was a rewrite of a system that just consumed the output of the CMS,
the migration was not awful. One day, we just started exporting the new data
format and using the new system to create apps. Users continued to use the
same CMS to build their applications -- the CMS was the target of many
improvements, but didn't get replaced wholesale. Thus the rollout of the new
system wasn't really impacted by the number of users of the CMS. Though the
Dojo/PhoneGap system in reality exists pretty independently from the CMS, you
might think of it as the presentation layer of the CMS, so this rewrite really
targeted a (significant) piece of a larger system.

~~~
mgkimsal
nice - sounds like just about the best case scenario for a rewrite, excepting
a total scrap and start over of the whole company :)

------
agentultra
Interesting read; not a lot of universal truths about re-writing. Which is
actually a good thing because there are none. The decision to re-write is
highly dependent on the context in which it is being made.

For example, a large legacy application in operation for over a decade with a
huge volume of customer data is completely different monster from a smart
phone app. Re-writing it in another language is a pain in the ass and if
you're really, really successful nobody will notice the effort you put in. It
won't make you any money or friends.

Still, there are times when it's just necessary. Even large legacy
applications can be replaced given the right parameters. You can write an
interface layer to the old code and extend it in a new language. Write an
exhaustive amount of unit tests and acceptance tests against the legacy
wrapper API and slowly replace the legacy code behind it with new code that is
better written, faster, and more reliable (or what have you).

I think the most salient point of this article is to _know_ what you're re-
writing. Good acceptance tests and functional tests will help A LOT in making
this decision.

------
jcromartie
I wonder exactly how old the "old" codebase was at the time of the rewrite? It
seems like it couldn't have been too old, with PhoneGap and Moustache playing
a prominent part in the original system.

------
stdbrouw
"I pored over our existing code, seeing the word node on what felt like every
other line. As an experiment, I changed that word node to baseObj in a few
high-level files, and suddenly a whole world of solutions opened up to me —
the name of a thing had limiting my thinking."

Really? Wow. :-)

