寒さから花粉へとダメージソースが移り変わったものの、相変わらず鼻炎のケアが欠かせない @hagioo です。
フルタイムのメンバーが 3 人になってから 9 ヶ月経ち、ありがたいことにリリースも間近になってきました。 リリース後、お客様からの改善要望や不具合修正などの対応が増えることが想定される中で、 中長期での機能追加やアーキテクチャの整備なども含めた、より中長期的な視点にたった開発チームとしての意思決定が必要になることは明白です。 しかし、levii は普段ほぼフルリモートで開発をしているため、目の前のタスクを処理していく体制はできているものの、 あまり中長期目線での視点を揃える機会が足りていませんでした。
そこで、目の前の開発の事は一旦置いて、目線を揃える場として湯河原温泉のおんやど恵さんに開発合宿に行ってきました。
湯河原へ
東京駅集合の予定が電車遅延のせいで途中駅からメンバーが合流、という波乱を予感させる幕開けになりました。
まずは行きの電車で「時間」「抽象度」の2軸で課題感をマッピングし、合宿でやることと優先順位を考えていきます。 以前はがっつりアジェンダを作り込んでから会議をするスタイルだったのですが、 メンバーの視点を混ぜ合わせて行くほうが課題の精度が高くなるのと、準備をがっつりしても無駄になるケースが多いことから、 その場でアジェンダを作る文化に移行しています。 ここでは言葉に注意して、課題感から逆算して「ある時点でこうなっていたいという状態」と「そこにどう向かうかという行動・戦略」を明確に分けるように注意しました。
湯河原に着いてからは 13:00 のチェックイン(会議室)まで、万葉公園を散策したり足湯(独歩の湯)に足を浸しながら色々と話をしました。 普段とは違った環境でリラックスできると、なかなか言いづらいことがいいやすくなるものですね。
独歩の湯は安め*1の値段設定ながら、かなり満足度が高かったです。
理想の言語化
一通り話をして昼ごはん*2を食べたら、おんやど恵の会議室にチェックインです。 広さも十分ですし、畳なので休憩時間にごろっとすることもできます。 Wifi はもちろん、ディスプレイ*3につなぐためのケーブル類も充実しており安心感があります。 お水やお湯も用意してあって無くなったら取り替えていただけるのも非常に助かりました。
目的が「中長期での目線を揃える」なので、まず最初に「ビジネス」と「チーム」という 2 つの側面から理想を言語化するためのワークをやります。 時間軸を決めて具体的なアクションまで落とし込むかどうかで迷ったのですが、 こういった言語化は今回が初回ということもあり、まずはあまり時間軸にとらわれずに自由に考えることにしました。
理想が実現できている状態をメンバー 1 人ずつ 5 分で付箋 10 枚以上書いていき、それらを共有してから抽象的な意味を考えつつグルーピングして、 最終的に 3 つずつの言葉に落としていきます。 「技術や考え方を生み出している」「関わる人全員がハッピーになる」「会社の名前がついたバス停ができる」など色々な言葉が出てたのが面白かったです。 長いことやっている仲間ということである程度視点が揃っていたおかげか、割とすんなり 3 つにまとまったので、 続いてそれらを会社を表す 1 つの言葉にまとめました*4。 ドット投票の結果「複雑さの中に価値と面白さを見つけよう」という元々の言葉に加えて、 「生物みたいに強い会社」という糸井重里のキャッチコピーみたいな言葉が選ばれました。
ここまで多少頭を使ったので早速温泉タイムです。 露天風呂がおしゃれで、完全に外ではないもののちらっと空が見える感じが逆にリラックスできました。 泉質のせいか、お風呂から出てもあたたかさが持続するので、うっかり寝そうになりますが夕食まで我慢してワークを続けます。
風呂上がり後はチームの理想をさらに深掘りしました*5。 3 つの言葉(=理想)それぞれについて、それらが実現できている状態をより具体的に(みんなで〇〇している etc)付箋に書き出していきます*6。 それらをグルーピングすることで、各メンバーがそれぞれの言葉に託していた思いが微妙にずれていることや、 メンバーによって視点に違いがあることが明らかになっていきます。
その後、「ここで出てきた理想が本当に自分たちの大事にしてきたものなのか?これからも大事にしたいものなのか?」をより深く知るために、 ホワイトボードを眺めながら、これまでの行動を具体的に振り返りながら理想を実現出来ている、出来ていないという話をしました。
日頃から「率直に言い合える」環境を作ろうと努力していたつもりだったのですが、 意外とそれが達成出来ていなかったことが分かったりと、この話し合いの時間はチームにとって非常に貴重なものになりました。
品質と全体感について
夕食に備えておやつを控えていたこともあり、既にお腹が減りすぎてやばい状態です。 そんな我々の期待に応えて、夕食は質・量ともに申し分なかったです。
夕食後は短期と中長期の両方で課題感のある品質について色々と議論をしました。 リリースに向けた短期での「当たり前品質」の担保はもちろんのこと、出てしまった不具合を素早く検知するためのエラートラッキングや そもそも品質を定義するための仕様をどう作っていくか、 それをどういうステークホルダーのために仕様書に落とし込んでメンテナンス可能なプロセスを構築するか、といった中長期での施策の話も色々とできました。
今のフェイズだと短期的に品質を上げるのも非常に大事だと思うのですが、 やはり中長期での視点も揃えておけると今後の活動がスムーズだなと改めて思いました。
ここまでで大分疲れが溜まってきたので、真面目な話は一旦切り上げて Web アプリケーションの発表会?に移しました。 Web アプリ開発初心者に「全体感」を持って開発を進めてもらえるように各メンバーが一から Web アプリケーションを作ってみるという試みです。 普段の開発では既に作り込まれたフレームワークや CI、開発プロセスに乗っからざるを得ないため、あまりゼロベースでそれらを考えることはありませんが、 こういった開発を通じて各メンバーが予め与えられた枠そのものを壊して考えられるようになりつつあることが感じられました。
私自身も DDD はもちろん Progressive Web Application や Typescript + InversifyJS などの新しい技術的な探求も兼ねてアプリケーションを作ってます。
フレームワークとプロセス
翌朝は 7 時から再開予定だったものの、朝風呂の誘惑にメンバー全員が負けて朝食後からのスタートになりました。
12:00 退出予定だったので、最後の枠としてこちらの記事を参考にアプリケーションのフレームワークとして直近で整備した方がいいところは無いか、 中長期的に入れるべきことはないかを検討していきました。
「視点を揃える」という目的に注意しつつ、やるやらないという話だけでなく、何故それが必要なのか・我々の理想にどうつながっていくのか、 といった点を議論することにも時間を使うようにしました。
- ロギングやエラーなどが各メンバーによって何となくで実装されてしまっており全体的な方針が無いため 0 ベースで見直す
- 依存関係が微妙な箇所があるので DI コンテナ相当のフレームワークを導入して IoC を実現できるようにする
といった直近でのフレームワークの話から、
- イベントキューを使ってサービスレベルで疎結合化、依存関係の逆転を進める
- サーキットブレーカーをちゃんと考えて導入する
といった中長期的な話もできました。
levii はアーキテクチャを綺麗に保ち続けることにかなりこだわりがあるので、それを実現するための要素としてのフレームワークについて 参考になる記事を元にメンバー同士の目線を合わせられたのは非常に良かったです。
帰りの電車や東京に帰ってからの打ち上げでも、開発プロセスや組織について色々と話をして盛り上がりました。
まとめ
あっという間の合宿でしたが全体として非常に学びが多かったです。 開発において設計やコーディングが占める割合は決して低くないですが、コードを書いている側の人間やチームについてみんながちゃんと考える時間を作ることも同じくらい重要ではないかと思います。 普段と違う環境を用意することで中長期の話をしてみたり、言いづらいことを言い合ったりして「チームの目線」を揃えてみるのはいかがでしょうか?