技術選定に関する私の考え

こんにちは、エンジニアリングマネージャーの山口です。

​今週と来週で技術選定に関して私の考えを書きます。(初の連載記事!)
今週は、技術選定を【誰が】【どのように】やるのかを書いていきます。


【誰が】技術選定はプロダクト開発チームで

プロダクト開発チームで技術選定を行うことが望ましいと考えています。
そう考える3つの理由があります。

1. 自分たちで選んだからこそ導入モチベーションが上がる

自分たちで選ぶという行為は自律性(もしくは、自己決定性)をもたらします。
この自律性は、モチベーションを上げる3つの欲求のうちの一つです。
詳しくは以下の記事をご覧ください。

2. 自分たちで選んだからこそ学べることが増える

自分たちで選ぶことによって、仮説から組み立てることができます。
実際に導入を経験することで立てた仮説を検証し次に活かすことができます。
仮説から立てているからこそ解像度が高いインプットになり、学びの質も高くなると考えています。

3. プロダクト開発チームの不確実性を下げるきっかけとなる

技術選定及び、導入までの道筋の中で、プロダクト責任者や事業責任者が懸念点を抱くことはよくあることだと思います。
エンジニアからすると、この懸念点を解消し導入までこぎつけることはストレスがかかることですし、できれば避けたいことだと思います​。
ですが、私はこの懸念点を解消することが情報不確実性を下げるきっかけとなると考えているので、エンジニアには頑張ってほしいと考えています。

【どのように】プロダクトや事業の持つ不確実性とチームの生み出す不確実性を踏まえて技術選定を

​ 開発チームの向き合う不確実性は大きく2つある印象です。 「プロダクト・事業の持つ不確実性」と「チームの生み出す不確実性」です。
「プロダクト・事業の持つ不確実性」とはプロダクト・事業が生み出したものが、実際に市場に受け入れられるかです。
「チームの生み出す不確実性」とはチームのケイパビリティに依存して発生するものになります。
この不確実性が生み出す具体的な事象としては、安定しない見積もり、手戻りの発生、残業時間の増加などになります。

プロダクトや事業の持つ不確実性とチームの生み出す不確実性の相互作用によってベターな技術は変わる

それぞれの不確実性によって以下のような観点で技術選定を行うと良いのではないかと考えています。

f:id:AdwaysEngineerBlog:20190809182643j:plain

積極的なチャレンジ

双方の不確実性が低いので、「チームの生み出す不確実性」を上げるような積極的なチャレンジを行いチームの持つケイパビリティを上げる・増やすことを狙うとよいと考えています。

このチャレンジによって増えた不確実性は一時的なものになり、導入した技術にこなれてくることによって低くなっていくはずです。
そして、チャレンジを終え不確実性を減らすことができたチームは更に強い状態となっているはずです。
また、組織的な観点でチャレンジすることもできます。

たとえば、他のチーム・プロダクトでも導入を考えている技術がある場合、それを率先して導入することで他のチーム・プロダクトで導入するときに生まれる不確実性を減らすことができます。

スクラップ&ビルドのしやすさ

「プロダクト・事業の持つ不確実性」が高いので作ったものを捨て、作り直すといったことが起きうる可能性が高いと考えます。

どのような技術が捨てやすく、作りやすいかはチームの知見によって変わります。

知見のあるもの

チームの課題が多い・大きい可能性が高い状態ですので、チームメンバーに知見がある技術を選定すると良いと考えます。
他にもやっていることを見直す・辞める技術選定(?)をすることも考えていいかもしれません。
たとえば、大きすぎるチャレンジを見直すといったことです。

トップダウン

双方の不確実性が高い状態です。
この状態に限っては、プロダクト開発チームではなくトップダウンで技術選定することを考えてもよいと思います。
技術選定の方向性としては「チームの生み出す不確実性」を削減するようなものになります。


次回予告

来週はこの方針のもと、技術選定の【自由度】と【組織が技術選定する対象】について書こうと考えています。
ご期待ください。
それでは、また来週。


おまけ

記事の背景

プロダクトを1つのプロダクト開発チームで開発する体制が多いため、この状態に合わせた考えになっています 。

単語の認識合わせ

技術

この記事中のの技術の意味合いは広く以下の全般を指します。
言語、フレームワーク、ミドルウェア、SaaS、PaaS、IaaS、開発プロセス(スクラム、XP、WFなど)

技術選定

どのような技術を採用するか決めることです。

ケイパビリティ

能力、才能、素質、手腕

プロダクト開発チーム

この記事中では、エンジニアだけではなく、デザイナー、プロダクト責任者も含みます。