ソフトウェアエンジニアにおける議論することの重要性
現職に来て議論が活発に行われる環境に身を置くことになった。それまでの私は2人で1チーム(自分と上司)のような非常に小さな組織で働いており、しかも上司が超絶優しくてこちらの意見を非常に尊重してくれていたので、よほど的はずれでない限りこちらの提案を採用してくれていた(現職に意地悪な人がいるというわけではない)。
今回は現職に来て活発に議論していくことで学んだことをまとめようと思う。
議論とはなにか
ここでの 議論
の意味としては、 何らかのトピックについて意見を論じ合い、何らかの結論(落とし所)を見つける活動 みたいなニュアンスを指している。
例えばコードレビューでAという方法で書かれたコードに対して「A'という方法もあり、こちらは○○の点でメリットがあるが、どう思いますか?」のような感じだ。
上記のようなことを達成するためには主に以下のような事をすることになると思う。
- 自分の意見を相手に伝える(or 相手の意見を聞く)
- 相手の疑問に答える(or 自分のもつ疑問点や意見を相手に伝える)
- 相手と自分の間で何らかの着地地点を見つける
「議論」と聞くとなんだか会議や相手への批判の場のようなイメージを持ってしまうこともあるかもしれないが、要は「相手に自分の意見を伝えて、そこで出てきた疑問を解消すること」みたいな感じで思って頂ければいいと思う。
なぜ議論が大事なのか
1. 共通認識を構築できるから
相手との意見交換を通じて共通認識を築けるのが議論の良い点だと思う。スプリントのキックオフミーティングなどでも、PO(Product Owner)から言われたことをただそのままタスクに落とし込むのではなく、POの背景を知り、場合によってはこちらから提案などをすることでスプリントでやらなければならないことが明確化してくる。これに伴って期待値の調整なども出来るだろう。
疑問に思っていることや背景を確認しないまま仕事をすると思わぬ所で食い違ってきて、最終的なアウトプットが無駄になってしまうこともあるので、そういった差分を埋める意味でも議論というのは重要だと思っている。
2. 持論のロジックの穴に気づけるから
自分の見えている世界というのは実に限られている。「おれのかんがえたさいきょう○○」というのを考えついても、自分では見過ごしているロジックの穴が多々あるものだ。
議論を通して自分の見えていなかった考慮漏れなどを指摘してもらえることでより質のあ高いアウトプットにつながるだろう。
3. 自分がまったく見えていなかった視点に気づけるから
ロジックの穴とも繋がっているが「そもそも論として、自分が考えていた方法とは全く別の効率的な方法がある」という場合もある。ロジックの穴は塞げるが、そもそもロジックの土台を入れ替える必要がある場合では後戻りの手間が大きい。第三者からの意見があってこそ気付けることというのはある(○○つかうと××やらなくて済む、みたいな)。
議論を通して全く別の軸から見た知見が得られるかもしれない。
議論をするときのポイント
1. 心理的安全性に配慮する
そもそも相手と建設的に会話するためには心理的安全性が欠かせない。そこの土壌が整っていない環境で議論するのはなかなか難しいだろう。
2. 意見と感情は分ける
相手から指摘があった場合、それは自分の意見に穴がある(詰めきれていないロジックなど)から発生するのであって、こちらに対して攻撃しているわけではない。
私もアタマではそう言い聞かせようとしているが、特に文面でのやり取りになるとどうしてもこちらのメンタル状況によって責められている気分になることがあるので、その点は未だに慣れない。文面でやる際にはト音も抑揚も分からないので、できるだけ絵文字などつけると良いのではないかと思う(完全にその人のタイプによるとは思います)。
3. 完璧を求めつつも現実解を見据える
理論的に達成できる事柄があったとして、それを実際に行うだけのコストを支払えるかはまた別の話なので「理想としてはプランAだけど、今の状況から鑑みるにプランBを着地地点とする」という、理想と現実の落とし所の両方が考えられる必要があると思う。
理想論だけ語ってしまうと地に足が着いていなくて実現化が難しい一方で、現実解だけを語ってしまうと近視眼的になってしまい場当たり的なパッチ対応で済ましてしまう可能性もある。
そのため、本来あるべき姿を見据えつつ(その姿の共通認識をもちつつ)、現実としてはどうすべきかを考えるのは重要だと思う。理想の解を見据えつつ現実解を見つけることも出来るかもしれない。
4. 今決めないという決定もアリ
議論の内容によっては、どうしても今この場で決められないというケースも出てくるだろう。その場合には、「○○な理由により今決める必要はないと判断して、今は決めない(何もしない)」という決断もアリだと思う。
大切なのは関係者間での認識の共有なので、そこで全員が問題の規模や影響について理解できており、今はまだ対応する必要がないと判断するのであれば「今は決めない(やらない)」という決断は賢明だと思う。
Discussion