最近結構大きめなチームで開発しているのだけれど、そこで気をつけていることをちょっと書いてみる。
チームを開発していると
- 自分がメインで開発している機能
- 自分以外がメインで開発している機能
の二つが必然的にできてくる。チームがある程度大きくなってくると、自分がメインで開発している機能は自分が一番詳しくなるし、自分以外がメインで開発している機能に関しては自分がいちばん詳しいわけではなくなる。
そこでこの二つについて自分が心がけていることを書いてみる。
自分がメインで開発している機能
この時考えているのは、
- 自分一人だけの知見では見逃すことも多いので、出来るだけ早めに意見を集める
- 他の人の意見に左右され過ぎない
- 動くものが必要な場合は最小工数で作る
- それは全て捨てる気持ちで作る
これらを考えて、僕は自身では以下の様なプロセスで機能開発をしていっている。
- その開発に関する調査をする
- その機能に関する方向性やUIをざっくり考えられるところまで
- 機能に関するある程度の方向性を考える
- 機能について知見のあるチーム内の人にインタビューする
- 自分一人では考えつかないことを知る、これまでの背景を知るなどを目的に
- エンジニアだけでなく、知見のある人全体に聞くほうがよい
- インタビューから得たことからもう一度方向性を考える
- この時、先のインタビューで得たことを絶対視しすぎない。あくまでも参考意見として自分の開発に取り入れる。
- 方向性が決まってくるので、どうやって開発するか考える
- 技術的にどうするか、わからないことがあったら他の開発者にレビューなどしてもらう
- 開発しながら、現在の状況はチーム内が見れるところに置いておいて、意見があったら随時募集する
- この時に言われたことも、全て参考意見として聞く。重要なことは取り入れるし、そうでないと思うことは取り入れない。
- 色々終わったらリリース
ざっくり流れを書いてみた。
僕は何か機能を作ろうという話になった時は、とりあえず手を動かせばよいというのは反対に思っている。それは、昔の知見とか、そもそもそれを作るかどうか定かでない時などに、とりあえず手を動かしてしまうと、全然別なものが作られてしまったり、無駄になってしまったりするからである。
それだったらある程度早めにその辺りの背景知識などは、詳しい人に聞いて詰めておいたほうがよい。よくわからないけど作ってみましたは良くないと思う。
どこまで詰めておくかというのは難しい問題だ。僕の場合はその機能の方向性(誰のためになぜ作るのか。何を一番重要視するのか)を決めるくらいにしている。
しかし、じゃあ手を動かすのはダメだとは言っていない。UIに関することであれば、ある程度動くものが出来ないと議論にすらならないということになるし、そういうものに関しては多少手を動かすべきである。ただ、その時は動くものは最小工数で作るべきだと思う。絵で済むならそうしたほうが良いし、jsでアニメーションするだけでよいなら機能がなくてもそういうふうにすれば良い。管理画面を作ろうという話になって、単なるリンク集でも良いならそこから始めれば良いと思う。
あとチーム内からいろいろ言われるだろうけど、それは参考意見として扱うべきだと思う。機能自身は自分が一番考えているのだから、言われた意見を全てそのままやっていると、変な機能が出来上がってしまうと思う。このあたりの意見の取り入れ方は、ユーザ向けのプロダクトを作っている時のユーザからの意見をどう取り入れるかという話にも似ている。
自分以外がメインで開発している機能
自分以外がメインの場合は以下の様なことを考えている。
- 開発者の背景はまったく気にせずに、気づいたことはとにかく言う
- この人は今大変そうだから言わないでおこうとか、もしかしたらもう検討終わってるかもしれないから言わないでおこうとかはしない
- 意見を言うときは出来るだけ断定的に言わないようにする(したい)
意見というのはとにかく言うことが重要だと思っている。思いやりを考えすぎて、みんな良くないと思っていたのに、なぜかリリースされてしまったみたいな状況は最悪だと思う。なので僕自身はとにかく細かいことでも気づいたことは言うようにしている。
ただ、意見をいう時に断定的な物言いをしてしまって、相手に必ずそれをしなければならないと思わせてはいけないなと思っている。自分の性格もあって、断定的な言い方をしてしまうことが多いのだけれど、それはできるだけやめておきたい。単なる意見ですよということを明示的にしておきたい。
そのため最近は出来るだけ、意見をいう時もコードレビューの時も、最初は質問形式から始めるようにしている。質問から始めたら、とりあえずコミュニケーションの溝は少し狭まるし、断定的な物言いでなくなる気がする。
まとめ
http://hitode909.hatenablog.com/entry/2013/02/09/233735 を見て、なんとなくチームで開発している時に自分はどういうふうに考えているかということを書きたくなり、勢いで書いた。
個人で開発しているプロダクトとチームで開発するプロダクトはまるで勝手が違うのだが、個人的にはチームで開発している方が自分の考えにチームの考えが上乗せされて楽しいと感じている。もちろん、面倒なことも多いというのはあるが。
チームマネジメント、アジャイル、ペアプロ、コードレビューなどいろいろ難しいこともあるが、今後も自分自身で良い方法を模索していきたい。