2024.10.10
将来は卵1パックの価格が2倍に? 多くの日本人が知らない世界の新潮流、「動物福祉」とは
リンクをコピー
記事をブックマーク
新田智啓氏:次に技術的負債ですね。「技術的負債とは」というところですが、ウォード・カニンガムという、外国のエンジニアの方が作ったメタファーになります。システムは粗雑なものが蓄積しやすくて、内部品質に欠陥が出ます。開発時に必要なかった追加の労力が必要になるところが、借金の利息に似ていて、エンジニアの感覚にフィットしたことで技術的負債(という言葉)がすごく流行った。
あとはマーティン・ファウラーですね。マーティン・ファウラーも技術的負債について語っていて、「意図的な借金であるか、無意識的な借金であるか。それが賢明なのか、無謀であるか」というところを軸にして、技術的負債の属性みたいなものを整理したりしていました。
そしてフィリップ・クルクテンですね。その価値が見えるかどうか。見えない部分か、見える部分か。そして価値がプラスかマイナスかというところで分類しました。そして「価値の見えない部分でマイナス部分が技術的負債なんじゃないか」と語っています。
(スライドを示して)プラスがアーキテクチャ、機能の特徴、マイナスがTechnical Debt、技術的負債とあります。技術的負債の中にアーキテクチャとか機能の特徴も含まれるのはちょっとモヤモヤした気持ちになったんですが、どちらにしろ内部の品質、見えない品質が大事ではあります。
その品質は何なのか? というところで、外部の品質・見える品質と、内部品質。あるいは機能要件と非機能要件みたいなものがあるのかなと。
もうちょっとだけ品質の話をすると、品質ってどの品質ですか? と。「品質が良い」とか「悪い」とかがよく語られて。「バグがある」とか「ない」と言われるんですが、解消したい時に“品質”みたいなふわっとした言葉で解消しようとすると、みんなの方向がなかなか揃わないと思うんですね。なので、「品質」ということでどこを改善したいのか。どこが問題なのかを、もうちょっと解像度を高めて理解する必要があるかと思います。
あとは非機能要件ですね。機能要件はたぶんエンジニアじゃない人とかも含めていろいろ決めてくれるんですが、非機能要件の部分はエンジニアが決めなければいけない要件だと思います。
なので、パフォーマンスとかスケーラビリティだったり、アベイラビリティだったり、あまり気にせずに機能開発をしてしまうと負債が溜まりやすいのかなと思います。こういう、見えないところの機能要件に対しての非機能要件だったり内部品質だったりの解像度を高めて向き合う必要があるかと思います。
技術的負債の話に戻ります。技術的負債という言葉がいろいろ流行った中で、「技術的負債」という言葉を生み出したウォード・カニンガムが、以下のように言っています。「技術的負債の比喩の中で、あとできれいなコードにするつもりで雑なコードを書くことも技術的負債の主な原因であるという考えが、他の原因と混同しています」と。これに私は賛同しません。
(スライドを示して)いっぱい文字が書いてあるんですが、まとめると、コードを書く時にはベストを尽くせ、と。雑に書くのは技術的負債ではなくて、ただの怠慢である。時間をかけろという話じゃなくて……。たぶん時間的な制限はあると思うんですね。その制限の中でベストを尽くすとか、あるいは自分の能力も限界があると思うので、能力の中での最高を出す努力が大事なのかなと。
あとは、実際にコードを書いてリファクタリングをする時に、「こういうふうになったらいいな」とか、「こういう助けになったらいいな」ということのベストを尽くすというところで、今だけじゃなくて未来を見ながらしっかり書くことが大事かと思います。
こうやって設計とかを重要視すると、動くものとかがなかなか出ず、「プログラマーの自己満足なんじゃないか」みたいなことが他の職種から見えたりするのでマーティン・ファウラーが(次に紹介する言葉のように)言及しているんですけど。
「それは自己満足のためじゃなくて、設計というのは技術的負債の発生を抑えることができるので、しっかりやっていくべきだ」という話があります。中長期的に見たペイオフラインというものがあって、それにはちゃんと向き合うべきだと。
あとは『A Philosophy of Software Design』というものがあって、この中の表現で対応方法みたいなものがすごくいっぱいあるんですが、最初のほうで「コードの複雑さというのはある日突然現れるんじゃなくて、塵が積もって山となるように徐々に出てきます」と(いう話があります)。いきなり出てくるわけではない。
突然出てくるものではないとなると、どういうふうになると技術的負債と呼ばれて、自分たちの技術的負債のリストに載せられるんだろうか。塵の状態だったらまだ気がついていないわけですよね。どうやったら技術的負債みたいなリストに載せられるのかというと、私の解釈ですが、エンジニアがやりづらいと感じた瞬間。ものすごく感覚値的なもの。気がついた時みたいな。
あとは、コードとかの構造を見て「もっとこうしたらいいのにな」みたいなアイデアが浮かんだ時。そういう「もっと良くしたい」みたいなことが思い浮かんだ時。それは負債というものを認知して、ある意味、次の価値を反映させたい気持ちなのかなと思っています。
なので、現在のシステムから満足できないところの差分が技術的負債と感じるところ。欲しい開発者体験、DXみたいなところの差分が技術的負債なんじゃないかなと思っています。
「開発者体験」という言葉はCTO協会の定義では、「開発者体験とは、開発者が高速な仮説検証を行うための企業における環境や習慣、文化のことを指します」と。開発者体験は開発者、エンジニアが働きやすいだけの環境みたいに捉えられたり、「こうすると気持ちいいよね」と感じたりするかもしれませんが、そうではない。生産性を高めるための高速な仮説検証ができる状況ということですね。
生産性は何かというと、Wikipediaでは「生産性 = 産出量 / 投入量」(生産性 = アウトプット / インプット)と書かれています。インパクトチェーンみたいなものがあるんですが、投入したもののリソースと組織活動、チーム活動とかエンジニアの動きがアウトプットになります。
そして、エンジニアだったらシステムだったりをユーザーに使ってもらって、価値を感じてもらってアウトカムになる。それがムーブメントというか、社会的な動きになるとインパクトになるという流れになるのかなと解釈しています。
スタートアップが目指すのはたぶんインパクトのところだと思うので、アウトプットの量がたくさんあればいいというわけではなくて、その価値だったりインパクトがどういうふうに起こるのかを考える必要があって、その価値貢献のスピードが生産性に求められることだと思っています。なので量ではない。
そういったところで今回扱う技術的負債というのが何かを整理します。「負債」というと、触らなくても古い、例えばCOBOLとかの言語で作った20年前のシステムとかがあるかもしれませんが、それが順調に動いていて、お金が稼げていればそれは問題ないと思うんですよね。
ただそれに、なにか変更を加えたいとか、機能を加えたいと思った時にどうしようもなくなると思うので、その状態になると負債ですが、変更を加えたい状態がなければ、技術的にはもしかしたら直したいと思うかもしれませんが、そのままでいいと思います。
今困っているところで、それを直すと価値になるところの負債が解消すべき負債で、それを解消すると価値につながる。この解消することで価値につながる負債を今回扱う技術的負債として話したいかなと思っています。
というところで、技術的負債のまとめとしては、理想環境と現状のシステムとか環境の差分みたいなものが技術的負債。エンジニアの生産性を妨げて、追加の金利的な工数がかかるもの。システム内部の課題。雑なコードを書いたものではなくて、ベストを尽くして作ったもの。コードの複雑さは突然現れるものではなくて、塵のように積もって出てくる。そして今回は、技術的負債の解消によって価値が発揮されるものを“負債”として考えようと思っています。
ちょっと急がないといけないそうです。スタートアップで起こる変化のことを話していきたいと思います。ここまでが前提です。
(次回に続く)
関連タグ:
2024.11.13
週3日働いて年収2,000万稼ぐ元印刷屋のおじさん 好きなことだけして楽に稼ぐ3つのパターン
2024.11.11
自分の「本質的な才能」が見つかる一番簡単な質問 他者から「すごい」と思われても意外と気づかないのが才能
2024.11.11
気づいたら借金、倒産して身ぐるみを剥がされる経営者 起業に「立派な動機」を求められる恐ろしさ
2024.11.11
「退職代行」を使われた管理職の本音と葛藤 メディアで話題、利用者が右肩上がり…企業が置かれている現状とは
2024.11.12
自分の人生にプラスに働く「イライラ」は才能 自分の強みや才能につながる“良いイライラ”を見分けるポイント
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
2024.11.13
“退職者が出た時の会社の対応”を従業員は見ている 離職防止策の前に見つめ直したい、部下との向き合い方
2024.11.12
マネーゲームの「手駒」にされる起業家たち 経営学者が指摘するエコシステムの落とし穴
2024.11.12
先週まで元気だったのに、突然辞める「びっくり退職」 退職代行サービスの影響も?上司と部下の“すれ違い”が起きる原因
2024.11.08
仕事の成果につながる「自分の才能」を言語化するヒント 今は「自分らしさ」を求められるけど、誰からも教わっていない…