リファクタリングのコツ?

http://d.hatena.ne.jp/u_1roh/20090325

だから、何か機能追加や仕様変更があるたびに「もし最初からこの機能/仕様を知っていたらどう設計しただろうか」と自問自答するのが、うまいリファクタリングのコツになるんじゃないかと思う。

うーん、これはコツというよりは基本中の基本なのでは....
この作業をしていないのをそもそもリファクタリングと呼んでいけないと思う。

リファクタリングというのは現在得られている知識(頭の中、ドキュメント、ソースなど)から想定できる実装を全て並べた上でトレードオフを計りなおして、メリットが得られる見通しができたら実行することなので。

神様でも無い限りは完璧に全てのカード(実装)を並べることは不可能なので、どっちにしても手持ちのカードで勝負するしかない。そのときに最強のカードがどれなのかを見極めるのはそんなに難しいことじゃないです(ついでに最強のカードはたいがいコストが高い)。

むしろ、難しいのはコスト/メリットを見極めてトレードオフを計るところで、ここで読み間違える(特にコストを)と失敗する。トレードオフを計る前に最強のカードがわかってないとお話にならなくて、最強のカードがどれなのかを知っておくのは必須の作業です。なので最強のカードを知っておくこと自体がコツなんてことはちょっと有り得ないような...

リファクタリングのコツを挙げろと言われたら、
・できるだけメリットが高くてコストが低いモノから実行する。
・ベストを狙うのではなく、ベターを積み重ねてベストに近づけるようにする。
あたりですかね。