PoohSunny's blog

生きるために食べるのか、食べるために生きるのか。

技術負債解消はEconomicsで語ろう

技術負債の解消〜みたいな話がチームで出た時に、話のスタートラインに〜ってので何度か投下したのでとっかかりの議論をまとめました。

そもそも技術負債とは

生みの親のWard Cunninghamがその背景を説明してくれている動画を id:t-wada さんが紹介してくれていて、 その内容はよく言われているものとは結構違います。

t-wada.hatenablog.jp

こちらのブログのt-wadaさんによる解説を引用します。(レイアウトの都合で改行足してます)

Ward の言う負債の悪影響とは、開発と共に得られていく知識や理解と
目の前のシステムとの乖離が引き起こす生産性低下のことであり、
自分たちが書いているコードの保守性(あるいは、雑さ)のことではありません。
むしろコードを書くときには常にそのときのベストを尽くせと言っています。

Ward にとって負債の返済手段はリファクタリングであり、
リファクタリングの目的は自分たちのドメイン理解と現時点のプログラムの乖離の解消です。
つまりこのリファクタリングとはドメイン駆動設計(DDD)における
「より深い洞察へ向かうリファクタリング(Refactoring toward deeper insight)」
のようなものと言えるかもしれません。

これを読んだ上で自分的なポイントは、一口に技術負債と言っても、それによるイメージは多義的になってしまっているということです。 なので自分が「負債解消」って言った時に、どういう意味合いで言ってるのかは自分の中できちんと理解しておき、場合によっては別な言い回しができるようになっておきたいところです(対象の理解)。 以降の部分では、基本的に「自分たちが書いているコードの保守性(あるいは、雑さ)」と言ったイメージで負債解消を使います。

技術負債の解消どうする?

さて、対象が理解できたとして、次にその負債は解消すべきなのかどうかを考えます。代表的な負債解消の方法はリファクタリングかなと思うのですが、ここで自分が意識しているのは、Mertin Fowlerの「リファクタリングはEconomicsで正当化せよ」というものです。こちらのトーク動画(Agile Singaporeのクロージングキーノート)から見られます。

youtu.be

雑にまとめると、リファクタリングプログラマの嗜みや、正しい行いとして正当化してはいけない、リファクタリングはEconomicsで正当化せよ。というものです。

このトークは直接聞いていたのですが、衝撃を受けたのを覚えていて、以来意識するようにしています。

実践

正当化しなければならない(くらい大掛かりになってしまった)ケース

リファクタリングバックログに積みたくなった時点でもう負けが込んでる」って昔TDDBCでコメントもらった気がするのですがその通りで、もはやこれは厳しい、って場合はEconomicsで考えます。そしておそらくそのEconomicsは、少なくとも今起きている実害についてはある程度可視化できると思われるので、可能な限り可視化・数値化を頑張ります。その上でストーリー立てして、Economicsのまな板の上で議論して堂々とやりましょう。

例えば自分がやった取り組みとしては下記があります。

小規模なもの

先のt-wadaさんのブログにもあった通り、「むしろコードを書くときには常にそのときのベストを尽くせ」です。

同じ考え方はいろんなところで語られていて、例えばアジャイルサムライでは、「積極果敢なリファクタリング」って紹介されています。

アジャイルサムライ−達人開発者への道−

積極果敢なリファクタリングとは、イテレーションの終わりにまとめてリファクタリングすることじゃない。
一日を通じてたゆまず、継続的にリファクタリングするってことなんだ。
物事がうまく運んでいれば、リファクタリングはほとんど目につかない。
手順は少ないし、改善内容も細かい。
だから作業工程としてリファクタリングなのか、新機能の追加なのかを明確に区別することはできない。

Mertin Fowlerも、「リファクタリングはTDDのコンテキストで教えられる」と言っています。日々の活動の中でTDDが入っていれば、リファクタリングは日々の活動に溶け込んでいる基本のキと言った扱いになります。

martinfowler.com

この場合は、そもそも小さすぎて説明不能だし、ただ全力を尽くしているだけです。説明せずに果敢にやりましょう。 ただし時間のかけすぎや過設計には注意、負債になります。

まとめ

負債解消について、まずは日々全力を尽くし、細かい日々の活動に溶け込んだリファクタリングをしておき作り込まないこと。それでも発生してしまうので、(元々の意味では世の中が変化するので絶対に発生します)その時はちゃんとEconomicsで正当化して倒すこと、です。

「負債解消」って言った時に、そのスタートラインから結構考えたり知らなきゃいけないことがあるなぁ、という印象です。 でもだからと言って必要なリファクタリングをしないのは、結局問題を先送りにしているだけなので果敢に取り組むべきだと思っています。

自分が何を参考にソフトウェアテストの勉強したんだっけ

チームのメンバーの人から、「ソフトウェアのテストの書籍」についての話をすることがあって、 自分って何を参考にソフトウェアの本探ししたんだっけなー、という意味で備忘。

まずこれ読んで

kyon-mm.hatenablog.com

ここに書いてある書籍読み、コメントももらった記憶(感謝)

そしてこの辺を読んで焦燥感を得て勉強速度が上がりw

テストエンジニアの品格 #automatornight

↑の本とかで引用されてるような本を芋づる検索していて読んだんだったはず。そこからは濫読派ですね。

最近の状況はあんまりキャッチアップできてなくて、どうなんだろうなーと思ってたのだけど、開発者テストって文脈でこの辺は考え方近いなと思った。

zenn.dev

今回も新たな本を教えてもらったので、読み終わったらなんか書きます。

2021ふりかえり

2021ふりかえりです。個々に詳しく書きたいものもあるのだけど、それは来年に向けた宿題にすることにしてアウトプット中心に書いていきます。

妻の海外行き

今年初頭に、妻が仕事の都合で4月からアメリカに行くことが決定。それに向けて準備と、始まってからのいろんな対応がホットトピックでした。

やってみると大変だけれど案外楽しいこともあって、その辺のやりくりをScrum Fest Osaka 2021で話してきました。

これに続くネタも着々と積み重なってきているので、来年も何らかの形でアウトプットして楽しめたらと思います。

休暇を利用してアメリカに長期滞在

所属している会社で、最大28⽇(休⽇を含む)の休暇を取れる権利が残ってたので、コロナ禍ではあったもののこんなチャンス二度となかろうということで、その休暇を利用して子どもづれでアメリカに滞在してきました。隔離期間が2週間あったので、正味2週間程度しかいられなかったのだけれど、子どもにとっても自分にとってもいい機会でした。

んで、ひと月以上チームから離れてしまったのですが、戻ってきてみるとチームがとても順調に回っており、良くも悪くも自分の存在意義を見直すいい機会になりました。

見直してみたところ、自分はチームのみんなが頑張ってくれてることをまとめて、意味付けて、ストーリー化してそのさきのちょっと未来を考えることが大事だなという風に考えるようになりました。

アウトプット活動

Scrum Fest Sapporo 2021

上記のように意味づけること大事だなーって考えた話はScrum Fest Sapporo 2021でお話してきました。

XP祭り2021

そこで、ここ数年の取り組みをまとめ直して意味づけたものを、せっかくだから外部公開しようと思い、お話してきました。

まずWEBチームでの取り組みをXP祭り2021で。この発表では、自分がリーダーをやってたチームで、その後のチームリーダーを引き継いでチームがゴリゴリにレベルアップさせてくれたtaku100と共同登壇したのですが、数年前のXP祭りで当時のボスだった @i2key さんとそれぞれ登壇していたのを思い出して、一つ世代交代したというかバトンが渡った感じがしてとてもエモかったです。

Scrum Fest Mikawa 2021

そしてAPPチームの取り組みをScrum Fest Mikawa 2021で話してきました。考えてみると一連のスクフェスでたくさん新しい知り合いができたし、同窓会的な再会もできてとても楽しかったです。

Agile Japan 2021

そしてそして、ここ数年の取り組みを経て、今取り組んでいることをAgile Japan 2021で。こちらは個別に感想文書きました。 poohsunny.hatenablog.com

スライドはこちら。

ふりかえり

家事で忙しくなるかなと思ってたのですが、むしろエネルギーが満ち満ちていたのかもうヤケクソだったのか、外部へのアウトプットが例年より多くできてよかったなと思っています。ただまだまだやりたいこと、約束したけどやりきってないこと(ごめんなさい!!!)があるので、引き続き頑張りたいと思います。そして、こうやって外部にアウトプットする機会をくださったカンファレンス運営のみなさま、会社で関わっているみなさま、セッションを聞いてくださった皆様、本当にありがとうございます。来年も頑張りますのでよろしくお願いします。

結びに変えて、チームのみんなのアウトプット

最後に、今年は私だけではなく、チームのみんなもたくさんアウトプットしてくれた一年でした。感謝すると同時に、「あーこんなすげーメンバーに囲まれてるなら俺いなくても回るわけだわ」と妙に納得した次第です。嬉しかったので同じチームなんだなってのがほぼ自明なメンバーが関わったアウトプットこちらで紹介します。

WEBのシニアアーキテクト&パフォーマンス改善のヌシのやっていき


www.youtube.com

XP祭りで一緒に登壇したtaku100のCore Web Vitals改善の取り組み

アプリチームの切込隊長のやっていき

こっちは動画もあった


www.youtube.com

もはやエースとなってしまった2年生が1年目で爆速で取り組んだやっていきの話

来年も楽しみだな。みなさまどうぞよろしくお願いします。そして良いお年を。