何かの取り組みを始める時、たいていまずは"過去の経緯"をざっと調べると思う。そうしないと過去に起きた問題を踏んでしまったり再発明をしてしまったりするからである。
皆当たり前にやっているように見えて、この過去の経緯の調べ方には意外とスキルのバラつきがある。自分も常にうまくできているわけではないので、思考整理のために雑に書き出してみる。
たとえば一例として、「Androidの自動テストの方針」を決めようとしているとしよう。背景にある課題は適当に想定してほしい。次のようなステップで過去の経緯を調査していく。
1. 調査期間を決める
- 調査はダラダラとやってしまいがちなので自分で期限を決める
- 内容にもよるが、自分は半日~1日に設定することが多い。社外の方とのスケジュール調整が入る場合には1週間くらいかかることもある
- 例で言うと、自分ならいったん1日で設定してガッと集中して調べてキャッチアップすると思う
2. キーワードを探す
- まずは社内外の情報を検索するキーワードを洗い出す。
Android 自動テスト
、Android UIテスト
、Android リグレッションテスト
、Android VRT
、DroidKaigi テスト戦略
などがあるかもしれない - それらのキーワードで過去の先人の足跡を探していくことになる
- このキーワードは一気に洗い出さなくてもよい。以降のステップと反復しながら増えたり減ったりしていく
3. 調査用ドキュメントを作る
- これは人によってやり方が違うと思うが、調査したことをメモベースでもいいので書いていく場所を作ったほうがいい
- Slack の times チャネルにスレッド形式で書いていってもいいし、Google docs に内容やリンクをメモしていくだけでもいい
- 記録していくことで体系的に整理しやすくなるし、他の人に説明するときにも役に立つ
- このドキュメントを調査の最終アウトプットと定義して肉付けしていく
4. 社内のドキュメントを検索する
- ある程度のドキュメンテーション文化がある場合、過去に検討/トライしてきたことがまとまっている
- ドキュメントサービス上かもしれないし、開発であれば GitHub の Issue や Discussion に Architecture Decision Record として記載されているかもしれない
- Slack などチャットサービス内のやりとりの検索もとても有用。
from:
や日時指定など、各サービスの検索Tipsを使いこなせるようにしておくとよい - 2のキーワードで検索し、社内の過去の経緯を調べて 3 のドキュメントに記載していく
- 例で言えば、RobolectricによるUIテストを導入したこと、その後廃止したこと、PaaSを利用しようとしたがコスト観点で断念したことなどがヒットするかもしれない
5. 社内の有識者に聞く
- 有識者がいれば、過去の経緯を直接聞いてしまうのがいい
- 4 をやっていると登場人物がわかってくるので並行して直接聞くようにする
- すでに退職されている場合でも、必要だと判断すれば連絡をとって聞きに行く。良好な関係なのであればという前提ではあるが、わりと連絡を取れて協力してくれる
- 直接聞いてみると、「あの時はRobolectricで実装する判断したけど、今なら設計を変えてユニットテストで担保する指針にする」とか、「今は PaaS も進化しているしもう一度検討してみると思う。ただし、トライアル期間の交渉はする」みたいな踏み込んだ話が聞けるかもしれない
6. Webを検索する
- さまざまなエンジニアリングの知見がインターネッツにあふれている。ありがたいことである
- 2 のキーワードもだいぶ肉付けされていると思うので、調べてめぼしい記事やスライドは全部読む
- 例で言うと、DeNAの SWET の方々のスライドや記事が出てくるかもしれない。また、GitHub を検索してスターの多い関連ライブラリを上から見ていくのもよいと思う
- それらを全部読んでいくと、世の中の過去の経緯の全体像が見えてくる
7. 世の有識者に聞く
- 6 で素晴らしい記事や資料、コードを公開してくれている有識者に直接コンタクトをとって相談しに行く
- 内容によってはそこまでやらなくてもいいかもしれないが、これができるようになると幅が広がる
- 事前に準備することとしては、解決したい課題/やりたいことの整理、聞きたいことのリストアップ、相談に対するリターンの提案あたり
- 相談できることになったら、「これまでやってきた類似事案の反省」と、「これから自分たちがやるとしたらどうすべきか」を聞く
- 例に似た話で言うと、だいぶ昔にはなるが DroidKaigi でUIのテストのナレッジを共有していた DeNA のエンジニア @sumio_tym さんに連絡して色々教えてもらったことがある ref。先人のレールを高速列車で走った感覚で非常にありがたかった
8. 最終アウトプットとしてドキュメントを整理する
- 適宜見出しを作って整理しながら調べていっているとは思うので、最後にちょっと整えるイメージ
- 整理の仕方としては、大きく分けて トピック別、時系列 の2つがある。例で言うと、おそらく過去に試してきたトピック別でまとめるのがいいと思う
- ここで過去の経緯の調査の最終アウトプットとしてドキュメントを固めて調査自体は終了とする
例の「Androidの自動テストの方針」の過去の経緯を探るのであれば、たぶん 1 ~ 4 を3時間くらいでやって、5 の有識者ヒアリングをチェックポイントとして予定をおさえておいて話をして、そこで得た知識をもって残りの半日で 6 ~ 8 をやって、必要なら 7 の有識者にDMを送るって感じで進めると思う。1日やってみてもう少し必要であれば調整するが、長くても3日以上はかけない気はする。
もちろん進めようとしている内容や自身のスキルセットによって変わりはする。過去の経緯を調べるのはあくまで最初のステップのひとつでしかないので、あまり時間をかけずに集中してやりきるのがいいと思う。その方がテンションも保てるというか、あんまり長いと疲れちゃうしね。
技術的なこと以外でも、たとえば人事制度の改善などでも同じ。調べるステップは変わらないけれど、自分はそういう類の調査には時間がかなりかかってしまう。あと最近はガッと集中する時間を取れていないという反省もある。慣れもあるだろうけれど、もっといいやり方があると思うので他の人のやり方もいろいろ聞いてみたい。