見出し画像

welldayで2022年に実施した技術的投資

Slack分析から従業員課題を発見し解決までワンストップでサポートする「wellday」を開発をしている河野です!

ソフトウェアは何もしていないと壊れる。
日々機能開発に取り組む中ですが、一方で進化する技術へのキャッチアップや作った当時とは状況が変わったことによる技術的な課題への対処など、いわゆる技術的投資をどれだけ行えるかがプロダクトの寿命を決めます。
もちろんスタートアップではPMFまではなるべくコードを書かず、書いたとしても書き直す前提で機能の提供を優先すべきだと思いますが、技術的投資の回収期間は想像よりもずっと短く、

  • 複数名で開発するかつ同じ箇所を触ることがある

  • コードの寿命が半年を超える

のであれば積極的に投資することがむしろ機能開発の速度も向上するというのが体感です。
今回はwelldayで今年実施した技術的投資の内容を紹介します!

GitLabからGitHubへの移行

創業以来GitLabを利用してきましたが、GitLabのフリープランの終了やGitHubのエコシステムに乗ることのメリットなどを考え、GitHubへ移行しました。
GitLab CIからGitHub Actionsへのコンバートが必要でしたが、他の部分では特に詰まることなくスムーズに移行することができました。
また、このタイミングで利用しなくなったリポジトリのアーカイブやリポジトリ名の変更なども実施でき、会社のコード資産の見通しもかなり良くなったと思います。

Four Keysの導入

などで有名なソフトウェア開発チームのパフォーマンスを計測するためのFour Keysを導入しました。
構築は https://github.com/GoogleCloudPlatform/fourkeys  を利用し、自前で運用しています。
開発速度がwelldayの強みの一つであるという自負があったのですが、客観的指標を通じてもエリートの水準にあるということが確認できました。一方でその中でも順調にいっている週と停滞してしまっている週の波があるので、毎週チームで指標を確認し、振り返りを実施するというサイクルになっています。

アプリケーションの切り出し

アンケートの送信や回答結果を受け取る機能が以前までは機械学習基盤側にありました。
実装はpythonで他の機能と同居しており、パフォーマンスや開発生産性、安全性の面で難があったため、独立したアプリケーションとして切り出し、Node.js(TypeScript)で再実装しました。
型による安心感やテストしやすい設計など多くの改善が見られ、その後の機能要求にもより柔軟に対応することができるようになったのでタイミングも含めかなりいい判断だったなと思います。

ライブラリ/runtimeのアップデート

  • Node.js: 16->18

  • MySQL: 5.7 -> 8.0

  • React: 17.0 -> 18.2

など利用するライブラリはGitLab時代はrenovate、GitHub移行後はdependabotを利用して継続的にアップデートしています。
セキュリティ的な観点はもちろん、今まで利用できなかった機能が利用できたり単純にパフォーマンスが良くなったりするので可能な限り最新に追いつくようにしています。
経験上こまめに実施しないと茹でガエル状態になってアップデート不能になるため、ここには常に一定コストを払うべきところかなと判断しています。

APIスキーマの見直し

openapiを利用したスキーマ定義を実施してAPIを設計しているのですが、
フロントエンドのユースケースに引っ張られ過ぎてしまったり、以前は存在しなかったEntityの登場によりかなり苦しい状況となったため、API全体を見直し、あらためてリソースベースにRESTfulなAPIとなるように定義し直しました。また、それまではユニットテスト中心でしたがこのタイミングでエンドポイントに対するテストも充実させ、より堅牢な形を目指しています。

フロントエンドのディレクトリ構成の見直し(脱アトミックデザイン)

それまでアトミックデザインを採用したフォルダ構成をとっていましたが、
ファイルの肥大化や依存関係のわかりにくさなどから構成を見直しました。

以前の構成
現在の構成

汎用的なコンポーネントなのか特定のページでのみ利用するのかなどがわかりやすくなり、書くときにも読むときにも迷いが減ったのでかなりおすすめの構成になっています。

ワークフローエンジンとしてprefectの導入

MLOpsのワークフローエンジンとして以前はArgoを採用していましたが、

へ移行しました。
ワークフローをPythonベースで組めるので自由度が高く、ダッシュボードもかなり洗練されている印象です。

denoの試験導入

攻めの投資という意味で、もともとNode.jsで動いていた小さなシステムをdenoへ置き換えました。
置き換えの効果を特別実感できたわけではありませんが、スタンスとしてこういった新しい技術を実運用にも投入していくという前例が作れたことはポジティブかなと思います。


振り返ると様々な取り組み実施できた2022年ですが、ほとんどの施策は私がやったわけではなく、チームのみんなが調査から運用に乗せるところまでリードしてくれたので感謝しかありません。
来年も引き続き機能と技術的投資を両立、循環させるべくガンガン進めていきます!やっていくぞ!

この記事は

の12/24担当となっています。

この記事が気に入ったらサポートをしてみませんか?