Cyberagent Developers Blog
登場人物MEMBER
- 柳 耕太
- 2017年新卒入社のWebフロントエンドエンジニア。
- 佐々木 慶也
- 2021年新卒入社のWebフロントエンドエンジニア。
目次INDEX
Amebaの技術的負債
Amebaにはどのくらい負債があるのでしょうか。
Amebaにどのくらい負債があるかは定量的に表現するのは難しいですが、アメブロは18年目を迎えており、その中で大規模改修が行えている部分と行えていない部分があります。
ブログ閲覧面では、2016 年に大規模刷新があって、大規模刷新の中でその頃モダンだった構成に置き換えてそこから 5 年くらい経過しています。
技術的負債とは時代の流れとともに古くなってしまった技術が残っていたり、ソフトウェアの設計がドメインについて深く考慮されずに作られてしまったために、機能追加や修正のコストが高くなってしまうことに対して使われます。
技術的負債は必ずしも悪い物ではないですが、長期的にみると問題を複雑にしていきます。
1 回負債を解消したから負債は 0 になるのかというとそうではなくて、日々大きくなるサービスなので当初の設計では問題なかった部分も歪みが生まれ始めている状況になっています。
どのような負債があるのかというと、コードが古い部分であったり、当初設計されていなかった機能を追加したことによる歪みが生じているといった部分が多いです。
当初設計されていなかった機能への対処はどのようにしているのでしょうか。
理想はそれに適した設計に書き換えることですが、それをすると一つ一つの施策に対して大規模な工数がかかってしまうので、基本的には拡張という形で作られているものが多いです。できるだけ影響がないように拡張して作っています。
例えば iframe のようなものを埋め込んでモジュールとして独立させるようにして解決しています。
拡張後に残ってしまった負債はいつどのように解消するのでしょうか。
2016年にはアメブロの閲覧面におけるいくつかの問題点を0→1での大規模刷新という形で行い、負債を一気に返済していました。
今後も大規模刷新の予定はあるのでしょうか。
返すタイミングが遅くなって負債が溜まれば溜まるほど返し辛くなっていくので、今後は大規模刷新をし続けるというよりは、小さく返し続けられる環境を作っていこうとしています。
小さく返していくために具体的に行なっていることをお聞きしたいです。
ボトルネックの計測などを主にやっています。Google が提唱している For Keys というデプロイ頻度や変更のリードタイム、変更障害率、サービスが復活するまでの時間などの指標を計測することによって、悪い兆候が見えてきたタイミングで負債と向き合えるようにしていくという動きを作ろうとしています。
技術的負債が溜まっているプロダクトにありがちなのはデプロイの頻度が極端に低かったり、変更後の本番反映があまりにも遅かったりということがあります。
For Keys の指標が悪いものに対して具体的なアプローチなどをお聞きしたいです。
具体的に、あまり触られていないから積極的に改善しするといったことはまだできていないですが、Amebaの中でデプロイ頻度とリードタイムをとるための仕組みを各リポジトリに入れるところまではできていて、計測できる準備はできつつあります。
Amebaの負債返済術
Amebaではどのように負債を返済しているのでしょうか。
経営ボードの中にエンジニアがいるので、その方が技術戦略のようなものを考えていたり、Amebaの技術的課題や開発者体験に向き合う組織があり、そこで根本的に改善し大きく返すような動きを行っています。
他には能動的にエンジニアが動いて解消するというケースもあります。例えば IE11 を例にあげると、Google Analytics をみて利用率も徐々に減ってきていたり、エッジの方が今は多いのでそろそろ外しても良いのではないのでしょうかという話をボトムアップで上げていって、その結果決済が取れて無事外すことができたというケースがあったりします。
IE11 を外す時に経営陣の方はすぐに受け入れてくれたのでしょうか。
すぐにというよりは、あまり影響が出ない方法を模索して提案しました。実際のプロダクトに与える影響が最小限になるよう、意識しながら提案しました。
IE11 を外すことでどのくらい負債を減らすことができたのでしょうか。
IE11 のためにコードをメンテナンスすることが負債になっていたと思っています。これまではバグの報告として IE11 が目立っていましたが、IE11 を外すことでメンテナンスコストが無くなったというのがとても大きいです。
エンジニアから主体的に経営層に提案したものが他にあれば教えていただきたいです。
「Yatteiki」という活動が近いかなと思います。「Yatteiki」というのはパフォーマンス・アクセシビリティ・プロダクティビティの 3 つの改善すべき領域に対してメンバーを募って品質を改善している活動です。
品質を改善した方が良いという話がエンジニア発信で経営層に話が進んでいきました。
「Yatteiki」という活動はどのように実現したのでしょうか。
技術的負債の返済というと各々が時間を捻出して向き合っていた部分に対して、それでは良くないという話が上がりました。そこで明確に部署として向き合うべき課題として定義してコンセンサスを取ることでシステム課題へのコミットと成果への責任を持てるような環境を作るという意味を込めて「Yatteiki」を行っています。
「Yatteiki」ではどのように活動しているのでしょうか。
パフォーマンス・アクセシビリティ・プロダクティビティのそれぞれのチームで負債を返済するためのリーダーを立てて、それぞれの方々がどういうアウトプットを出すか計画を立てながら進めています。
アクセシビリティの例になりますが、「Yatteiki」のアクセシビリティチームに所属している新卒の方が取り組みについて紹介しています。
Amebaの技術的負債を解消する文化
組織としてどのような文化があれば負債を継続的に改善できるのでしょうか。
まずはエンジニアの方からなぜそれが必要なのか説明をすることが重要だと思っています。技術的負債があるということが非エンジニアの人には想像しづらいことなので、技術的負債の何が良くないのかを伝える必要があります。
経営陣は敵ではなくAmebaを一緒に良くしていく仲間なので、エンジニアリングの事をわかってくれない。と壁を作るのではなく一緒に議論出来るような心理的安全性の高い関係を築くのが大切だと思っています。
負債を解消するためには経営陣とエンジニアが建設的に議論できる場が必要だと思っていて、それがAmebaにはあると考えています。
このような部分に対してエンジニアの方が経営ボードに入って説明していただいているのも理解してもらいやすい要因の一つなのかなと思います。
最後に
Amebaでは大規模なサービスをいくつも運営していますが、技術的負債を解消する文化が根付いており、日々試行錯誤を重ねています。
今回お聞きした話以外にもSpindleなどのデザインシステムを通して品質の統一を図っていたりなどいろいろな活動を行っています。
Amebaでは私たちとサービスをよりよくしていくメンバーを募集しています。