プロジェクトの成否はレガシーコードの発生率で判断する

レガシーコード、その定義はいろいろあると思います。
ここでは、メンテナビリティが低いコード、と定義したいと思います。
メンテナビリティの低いコードは、

何故そうなっているのか、コードの意図(目的)がわからない
あまりに大きすぎるメソッドで変更できない(しづらい)
メソッド、変数の使用状況が確認できない(しづらい)

などの性質をもっています。
こうしたレガシーコードは、開発現場の余裕の無さ、から生まれます。
そして、余裕の無さは、開発者への過剰なプレッシャーが原因で生まれます。

ウォーターフォール開発にせよ、アジャイル開発にせよ、納期は定められます。
開発者は、時間というプレッシャーから逃れることはできません。
また、お金の心配もあるかもしれません。
常に会社の経営が安定しない場合、開発者はお金で頭を悩ませることになります。
こうなると開発に集中できません。

時間やお金のプレッシャーをすべて取り除くことはできません。
ただ、開発者がかかえるこうしたプレッシャーを理解していないと、開発者に過剰なプレッシャーをかけてしまうことになります。
特に納期のプレッシャーは、開発者にかかりやすいのではないかと思います。
私も経験があります。笑

とりあえず動かすためにこのコードで書こう
同じような処理だからコピペしてしまおう

時間が無いなかでこのように考えて書いたコードが、そのまま納品され、動いている、こうした経験は誰にでも(?)あるのではないでしょうか。
そして、こうしたコードが、メンテナビリティの低い、レガシーコードになります。

レガシーコードは、開発チームのベロシティの低下につながります。
それは、メンテナビリティの低いコードの保守や機能追加による改修には、多くの時間と労力が取られるからです。

そして、開発チームのベロシティの低下は、会社、という組織の運営に大きな影響を与えます。
というのは、単純に言ってしまうと、受託開発という仕事では、いくつのプロジェクトをこなすことができるか、が会社の売り上げにつながるからです。
チームの生産性の低下は、プロジェクトを完了する数の低下を招き、結果、会社の売り上げの低下につながります。
こうしたことから、レガシーコードは開発者にとっても、会社にとってもプラスはありません。

しかしながら、レガシーコードは作られます。

それは、

会社がもっと大きな売り上げを立てたいため
顧客が前倒しで機能を追加したいため

という理由により、無理な納期、過剰な機能の追加により開発者に納期というプレッシャーをかけてしまうことから作られます。
また、

技術者のスキルが低いため

という単純に開発者の怠慢によっても作られます。開発者の視点からは、この点が結構、抜け落ちることも多いようですね。
こうした事情から作られるレガシーコードは、その時点ではプラスに働くように見えるだけの、利益の前借、もしくは負債の先送りに過ぎません。

ですので、あるプロジェクトが成功したか否かについては、納期が守られた、バグの検知率や修正率が計画どおりだった、ということだけでなく、

レガシーコードが埋め込まれていない

という点にも注目すべきでしょう。

ただし問題は、

レガシーコードの発生率をどのように量るか

という点です。

具体的な方法がちょっと思い浮かびません。
おそらく現時点では、ツールもないでしょう。

コスト、品質、納期の3つでプロジェクトの成功をはかろう、という視点において、品質は、開発中とリリース後のバグの発生率ではかられることが多いです。
しかしながら、レガシーコードの発生率が低い、という視点もプロジェクトの成功を判断する1つの視点として加わるべきだと思います。
レガシーコードは将来のバグの発生率を高め、生産性の低下を招きます。それは、品質とは無関係ではありません。
品質を担保するには、開発者はもちろん、経営層、顧客にも、レガシーコードの発生率、というあらたな基準をもってもらう必要があるでしょう。

ちなみにこの話は、CSM研修で講師バズさんや参加者の方から聞いたお話をまとめたものです。
が、個人的にメモした内容から書きおこしたものですので、内容の不備や間違いは、すべて私の責任です。

ランキング参加中。気に入ったら一押しお願いします!
人気ブログランキングへ

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中


%d人のブロガーが「いいね」をつけました。