技術資産を積み上げながら開発する

こんにちは、HQ でソフトウェアエンジニアをしている @rintaromasuda です。今回は「資産形成」についての話を書きたいと思います。資産形成と言ってもお金の話ではなく「技術資産」について、そしてそれをどう積み上げていくのかという話です。よろしくお願いします。

コンパウンド戦略

HQ では創業時より「コンパウンド戦略」を採用しています。CEO 坂本の note を引用しますと、コンパウンド戦略とは

「プロダクト同士を連携させながら、多数の新プロダクトを開発していく戦略」

という経営戦略です。そしてその戦略を技術面から支えているのが我々開発チームで、その技術戦略が CTO 髙橋による先日のブログ記事 コンパウンドスタートアップを支える技術戦略 にて説明されております。

そしてその経営戦略、技術戦略を遂行する上で重要なのが「技術資産を積み上げながら開発を進めていく」ということです。

技術資産を積み上げるとは

技術資産を積み上げていくとは、端的に申し上げますと開発効率がどんどん上がっていくということに尽きると思います。第 1 のプロダクトより第 2 のプロダクトの方が、第 2 のプロダクトより第 3 のプロダクトの方が開発効率が高い、 そのような状態が達成できていれば技術資産が積み上がっていると言えると思います。

例えば各種リリースにもありますように、先月 HQ は次世代福利厚生プラットフォーム「カフェテリアHQ」という 2 つ目のプロダクトをローンチしましたが、この「カフェテリアHQ」は 1 つ目のプロダクトである「リモートHQ」の開発時に積み上げた技術資産の上に作られています。よって「リモートHQ」より「カフェテリアHQ」の開発効率の方が圧倒的に高く、約半分の開発期間で、より完成度の高いリリースを行うことができました。

もちろん「カフェテリアHQ」 の開発時には更に技術資産が積み上がっていますので、第 3 のプロダクトの開発はより高い効率で行えるはずです。

以下では技術資産とは具体的にはどんなものがあるのか、ざっと眺めていきたいと思います。

共通のバックエンド

HQ のサービスは同じバックエンドサービスを使用しています。HQ 開発チームでは「ドメイン駆動設計」を採用して開発を進めていますが、そのドメイン知識をはじめ HQ のサービスにとって最も重要なコードが記述された、技術資産の代表と呼べる存在です。

自作のコンポーネントやライブラリ

技術資産として分かりやすい例のひとつが再利用できる形で記述されたライブラリーやコンポーネントだと思います。上述のバックエンド内でも多くの部品が共通化されていますし、HQ では UI のコンポーネント化も積極的に進められ、上述の「リモートHQ」と「カフェテリアHQ」のフロントエンドでも多くの部品が共用化されています。

テスト

開発を進めれば進めるほど実感するのがテストは技術資産だということです。HQ ではバックエンドサービスを中心に機能開発時にテストを書く文化、不具合修正時にリグレッションテストを書く文化が浸透しており、これらの積み重ねが新たな機能の開発やリファクタリングの作業を下支えしてくれます。

また、下述の開発環境の話にも通じますが、HQ ではテストの記述の容易さや実行速度にも積極的に投資しており、プロダクトの機能の充実と共に増えていくテストの記述方法や実行そのものに関してもこだわっています。

開発環境

HQ では主に Visual Studio Code と Dev Containers Extension を用いて開発を進めていますが、この開発環境も生産性を大きく左右する資産と言えると思います。作業を便利にする拡張機能やパッケージを積極的に採用するのはもちろんのこと、逆に拡張機能の導入によって開発環境に速度的な問題が起きてしまった場合などに、優先順位を高くして問題に対処しています。

クラウドやサードパーティーライブラリーに関する知識や経験

現代において各種クラウドやサードパーティーライブラリーを使用せずにサービスを作り上げることは不可能に近いと思います。こうしたインフラに関する知識や経験がチームに溜まっていくこと、それも資産だと呼べそうです。

HQ 開発チームではTech Stacksに書かれている技術スタックでサービスを開発していますが、これらに関する経験を積み上げているのはもちろんのこと、CTO の髙橋を中心に HQ にとってより良い技術がないかどうかの市場調査も定期的に行なっています。

開発プロセス

磨き上げられていく開発プロセスも資産と呼べると思います。HQ ではスクラムによって日々チーム内の状況が共有され、各エンジニアの知識範囲が広がっていきます。また、「3 回続いたものは自動化する」をモットーに、マニュアル作業の自動化にも順次取り組んでいます。

広義のドキュメント

いわゆるドキュメントはもちろんのこと、コード内に書かれたコメント、GitHub の Issue, Pull Request, Discussion 上の記述、Slack 上での議論なども資産と呼べるでしょう。HQ では What だけではなく、How や Why についても理解した上で作業者がタスクに取り組めるように、日々の議論や問題の背景についてしっかりと記述したり、関連情報をリンクしたりすることを心がけています。

エンジニアの暗黙知

最後になりますが、最も重要な技術資産、それはそれぞれのエンジニアの頭の中にある暗黙知ではないかと思います。頭の中の全てをドキュメント化なり共有化なりできれば理想かもしれませんが、残念ながらそれぞれのエンジニアのもつ膨大な知識と経験を記述しきることは不可能です。

エンジニアの暗黙知は重要な技術資産であるので、エンジニアが長く働きたいと思える職場環境を作ることは、技術資産の積み上げにも大きく影響することになります。HQ の開発チームはフルリモートで働くエンジニアリングチームですが、定期的にオフサイトイベントを開催するなど、より良いチーム作りにも積極的に投資しています。

まとめ

コンパウンド戦略にとって欠かせない、開発効率を飛躍させる為の技術資産の積み上げについて考えてみました。ソフトウェアというと資産とは逆の「負債」に着目が集まることも多いですが、資産にしっかりと目を向け、日々その積み上げを行いながら開発をしていきたいと思います。

ここまでお読みくださりありがとうございました。HQ の開発チームでは積極的に採用を行なっておりますので、興味のある方は以下の採用ページをぜひご覧になってください。