はじめに
ソフトウェアエンジニアのたけしです。お久しぶりです。最近仕事のよくわからんイベントで先週まで多忙を極めていたのと、それが終わるとプライベートで予定が連続していてまともにブログを書けてなかった。
ところでみなさんアウトプットしてますか。ブログ書いてるぐらいならしてますよね。
僕は今もう一歩進んで、あとからまとめて書くのではなく、仕事をしながら書く、ドキュメント駆動仕事(?)をしています。
なぜドキュメントを書くのか
僕は業務変更が多いという背景から、「引継ぎ」と呼ばれるものがしぬほど嫌いです。なぜなら引継ぎでは引き継がれず、後で苦労することになるから。
引継ぎで知りたいのはその人が普段どうやって問題を解決していたのか、そのプロセスです。しかしそれは後からまとめなおそうとしてもなかなか思い出せない。であれば常に残すようにすればいいのでは?と考えました。
それに加えて、チーム内でのナレッジマネジメントも関係があります。有識者に負荷が集中し、他が育たないという状況はよくありますが、それもノウハウを形式知として広げればいいものの、なかなか別途それを作成する時間がないという現実があります。その解決にも一役買うわけです。
どうやって書くのか
仕事をはじめるときにはディレクトリを作成し、README.mdを作成します。おそらく慣れてくれば項目が既に記載されたREADME.mdが入ったsampleディレクトリを作っておき、それをコピーすることになるでしょう。
仕事という単位はひとや上司によると思います。なかなか案件という風には分けられない仕事をしているひともいるかもしれません。私は障害対応が今は多いので障害1件。またある障害に対して修正が必要であればそのリサーチのために作成したりします。ここは結構自由でいいです。
私はディレクトリに日付を入れてます。ソートされれば何でもいいんですが、こうすれば整理することを考えなくて良いので楽です。
take |__160914_VM作成できない | |__README.md |__160915_capistranoの使い方調査 |__|__README.md |__README.md
そしてREADMEに概要、必要な情報をトップに書いた上で、あとはひたすら「思考」「行動」「結果」を書いていきます。もっとも大事なのは思考です。「全然わからん。」「???なぜ???」「こっち見てみるか」などももらさず書きます。この思考が暗黙知になります。
行動と結果はどのコマンド叩いてどういう結果が出たとか、どのソースコード見てどう読んだとかそういうものですね。こうやって仕事をしながら書いていくことで一日の終わりにはその日やったことがドキュメントとして残ってしまいます。
どうやってオープン化するのか
上のディレクトリ構成とREADME.mdで分かったと思いますが、現在これをgitlabでチーム内に共有・公開しています。
別にgitlabじゃなくても普段の業務と同様な形式であれば何でもいいです。別にファイルサーバでもいいです。redmineでもいいです。redmineだとブラウザベースになるので消えるのがちょっと怖いなぁって思いますけど。
gitlabの良い点はローカルで作業したあとコミットだけすればいいということと、README.mdがブラウザで見れるという点です。
過去の自分が残したメモをmarkdownで見られるの、結構見やすいんですよね。
効果
相談しやすい
つまったときって、状況をイチから口頭で説明して、アドバイスもらいますが、この方法を実践しておくとリンクだけ送って「ここまで調べたんですけどー」っていって見せながら説明できる。人間、耳から聞き取る情報より目から受け取る情報のほうが圧倒的に多い。相談する側、される側双方にメリットがある。
あとからtipsをまとめられる
例えば構築時に詰まった点とか、チーム内特有のノウハウ、tipsってありますよね。あれを出してねといっても後回しになっちゃって忘れちゃうわけです。でもこの方法でやったこと全てが残っていればあとで(最悪第三者であっても)ノウハウとしてまとめ直すことができます。元の種がなければ何もできません。
他人のやり方を学ぶことができる
チームで取り組むと、チームメンバーの仕事の仕方から学ぶことができます。トラブル調査方法でこういう順番でログを見るんだ〜とかmysqlそんな使い方できたん!?とか。オープンにしておくことの1番の狙いはこれです。きれいにまとまってなくたって、十分価値を発揮できます。
引継ぎ不要
もちろん、やったことが全部残ってるので引継ぎは不要になります。
おわりに
この業務スタイル、なかなか定着してきました。チームメンバーに進めたところ半数ぐらいが取り組んでくれていて、いい感じです。各個人のフォルダ直下のREADME.mdが作業状況を書いたりして日報代わりになったりと、タスク管理にも役に立ちます。
ソフトウェアの世界で仕事をしているひと、是非やってみてください!