emahiro/b.log

日々の勉強の記録とか育児の記録とか。

『Tidy First?』を読んで考えたコードの"整頓"にかかる正味現在価値

Overview

年末に話題になっていた『Tidy First?』を読み、その中の第3部で「整頓」をいつ行うべきか?という話が金融の世界の話と絡めて説明されており、この言語化が今の自分には非常に示唆に富む内容だったので、読書ノートとして記録します。

Bluesky の方に自分の感想を簡単に書きましたが、具体的にどういう部分に響いたのかをこのエントリで詳しく説明します。

話題の『Tidy First?』、読んでみて序盤はまぁそうだよね〜みたいな内容の羅列で薄い本だしサクッと読めるものかと思っていたら、後半の金融絡めたオプション取引、正味現在価値をメタファーとして捉える話が面白かった。 「今日の1ドルは明日の1ドルより価値が高い」ということをソフトウェア開発に置き換えて、整頓(変更までのリファクタリング等の事前改善作業)を先にすることに対する経済的合理性の有無を考えてみるのは今までうまく言語化できてなかったところだったので個人的に刺さったポイント。

emahiro (@emahiro.bsky.social) 2024-12-29T02:40:37.400Z
bsky.app

※ 私は金融のプロではなく、あくまで書籍に書いてあったことを自分なりに解釈しているに過ぎません。そのため厳密な計算や投資判断にかかるような内容は含んでいませんし、仮に間違っていてもご容赦ください。

正味現在価値(Net Present Value: NPV)とは?

そもそも「正味現在価値(NPV)」とは何でしょうか?これはファイナンス用語であり、金融の世界の話で、私は専門外なので LLM(今回は Gemini)に聞いてみました。

--- 以下 LLM の会話

Q: 正味現在価値(NPV)とは何かを教えて下さい。

A:

正味現在価値とは

正味現在価値(NPV:Net Present Value)とは、投資の意思決定を行う際に用いられる指標の一つで、将来得られるキャッシュフロー(お金の流れ)を現在の価値に割り引いて計算し、そこから初期投資額を差し引いたものです。簡単に言うと、「この投資は今いくらの価値があるのか?」を数値で表したものです。

なぜ正味現在価値が重要なのか?

お金には時間価値という概念があります。例えば、1年後の100万円は、今の100万円と比べて価値が低いと考えられます。なぜなら、今の100万円は投資などに活用することで、1年後にはそれ以上の価値を生み出す可能性があるからです。正味現在価値は、この時間価値を考慮して、将来のお金の価値を現在の価値に換算することで、投資の収益性を正確に評価することを可能にします。

(計算方法等の話なので中略)

まとめ

正味現在価値は、投資の意思決定において非常に重要な指標です。時間価値を考慮して将来のキャッシュフローを現在価値に換算することで、投資の収益性を正確に評価することができます。ただし、割引率の設定や将来のキャッシュフローの予測など、注意すべき点もあります。

--- ここまで LLM の回答

NPV と "整頓(Tidy)" の関係

本書の中ではこの「整頓(Tidy)」を投資判断として扱っており、その記述は第3部「経済性:時間価値とオプショナリティ」以降にあります。
※ ここでいうオプションとは、「バイナリーオプション」や「ストックオプション」で利用される金融用語としての「オプション」を指します。

正味現在価値を表現することわざとして「今日の1ドルは明日の1ドルよりも価値が高い」というものがあります。これは、今日1ドルを得ることができれば(お金を稼ぐことができれば)、得た利益を元に活動して、1ドル以上の価値を創出できる可能性があるという点で、時間的な価値を付与すると明日得る1ドルよりも価値が高い、という意味です。

これを「整頓(Tidy)」の文脈で考えてみると、整頓するコストを掛けずにすぐに結果を得るためにプロダクトの振る舞いを変更する行為は、先に整頓してから振る舞いを変更するよりも、時間の価値を考えると経済的な合理性がある可能性がある と解釈できます。

もちろん、NPV の値は初期コスト(Tidy にかかるコスト)、割引率、金利、その他のリスクといった変数があるので、必ずしも Tidy せずにすぐに変更を受け入れる方が経済的合理性があるとは限りません。ただし、Tidy を先にするということは、お金を得るまでのリードタイムを伸ばし、後からお金を得ようとする行為となります。

私としては、Tidy 作業をするという意思決定をする際には、NPV の考え方、もしくはディスカウントキャッシュフローの考え方を持っておくと、単なるお気持ち的な改善作業や自助努力によらない「投資判断」としての合理性を説明できるようになると解釈しました。

"ディスカウントキャッシュフロー" と "オプション" から見るソフトウェアの経済的価値

本書において、ソフトウェアにおける「オプション」は「できるであろう振る舞いの変更」とされています。そして、振る舞いのもたらす変更のボラティリティ(不確実性)が高いほど、そもそもこの変更を採用するというオプションの価値が上がります。※ 不確実性が高いほど、上振れたときの利幅が大きくなるので、オプションそのものの価値が大きくなるため。

また、オプションの残存期間(行使期限)が長いほど、不確実性が高くなり、そのオプション自体の価値が大きくなります。つまり、振る舞いの変更を採用するまでの期間を長く取り(かつ期間内であればいつでも権利行使が可能)、行った方が変動幅が大きくなるのでオプションの価値は大きくなります。そして、期間内に変更の価値が下落(もしくはなくなる)としたら、オプションを破棄することもできます(= 流血を未然に防ぐことができます)。

正味現在価値もしくはディスカウントキャッシュフローの観点では、より早く変更を採用し、後から Tidy する方が合理的 で、オプションの観点では 変更を後回しにする(= Tidy など別の作業を先にする)方が合理的 になります。

この観点で考えると、経営をする上では原則ディスカウントキャッシュフローの考え方で意思決定される機会が多いと感じます。それに対して技術サイドからリファクタリングや改善作業が必要であると言うには、「初期コストを掛けたとしても NPV > 0 になる」ことを説明できないといけませんし、オプションとして「できるであろう振る舞いの変更」をより後回しにすることを説明する必要がありそうです。

Tidy First が合理的であるとき

単純に考えれば、Tidy するコスト + Tidy 後に変更するコスト < Tidy なしですぐに変更するコスト であれば、先に Tidy する合理性があります。ただ、こんなことが明確に言える機会はそう多くなく、多くの場合、Tidy First のケースでも Tidy After のケースもどちらにも合理性があると思われます(事実、仕事をしているとそういう場面が多くあります)。

こうなってくると完全に判断の領域になるので、Tidy First を説明できる材料を用意しておくというのが、現場のエンジニアとして望まれる振る舞いなのかなと考えました。

エンジニアとして Tidy First とどう付き合うべきか

ここからは個人的な考えですが、Tidy 作業(変更にかかる事前準備作業)は、ソフトウェアエンジニアとして働いていると必ずやりたくなるものだと思います。自分の書いたコードがクソコードと呼ばれたり、負債と呼ばれたりすることがあるとなおさら、そういう志向やインセンティブが働くものだと思います。私も何度か経験があります。

ただ、Tidy First というのは、ディスカウントキャッシュフローの観点からは経済的な合理性が相対的に小さく、また自分(もしくは自分の関わるプロジェクト)自身への経済的なインセンティブに逆行している、という認識は持っておく必要がありそうです。この観点は過去の私にはなかったので、この書籍で金融のメタファーを知って、考え方が明確になったところです。

私もあるプロジェクトの最中に、やった方がいいと思った大きな Tidy 作業で足が伸びてしまい、想定外の経済的なコストを組織に消費させてしまった経験があります。この書籍に書かれている考え方を用いるならば、

  • オプションとしては残存期間がかなり長かったのでオプションの価値は大きかった(ただ、マイナス方向に振れたために大きな損失を出した)。
  • ディスカウントキャッシュフローの観点で言えば、足の長い Tidy 作業になってしまったので、経済的な旨味はほぼなかった。
  • NPV の観点で言えば、初期コストが膨大で、かつ Tidy 後の変更にかかるコストの削減幅と比較してもマイナスだった。

もちろん、Tidy したことによる副次効果もあるにはありましたが、第一義として経済的なメリットはほぼなかったので、投資判断という文脈で言えば、良くない意思決定だったということになるでしょう。

まとめ

この書籍に書かれている考え方で全ての説明ができるというわけではないですし、投資判断という観点で言えばケースバイケースで考えられるべきものではありますが、ソフトウェアエンジニアの間でよく話される事前改善作業の合理性に関して、新たな視点を提供してくれる良い書籍でした。