チームがスキルアップするために取り組んだ3つのこと ~ 心理学的観点を添えて ~

この記事は GRIPHONE Advent Calendar 2021 25日目の記事です。

こんにちは、サーバーサイドエンジニアの鑓水です。
現在私はサーバーサイドエンジニアチームのリーダーを務めています。
今回はここ最近チームのスキルアップを目指して取り組んだ内容を心理学のエッセンスを交えて紹介したいと思います。
実際に実施した取り組みの内容だけ知りたい方は「社会的構成主義に基づいた取り組み」の項目から読んでください。

スキルアップとは?

そもそもスキルアップするということはどういうことでしょうか。
新しい知識を手に入れること。普段の作業が一段と早くできるようになること。
考えてみるといくつか出てくると思いますが、はっきりとした定義かと言われると難しい気もします。
ここでは教育心理学の観点を交えて考察します。

教育心理学とは

「教育」という事象を理論的・実証的に明らかにし、教育の改善に資するための学問のこと。
教育心理学の主な研究分野は

  • 発達
  • 学習
  • パーソナリティ・適応
  • 測定・評価

の4つです。
この中でも学習し発達するという部分において教育心理学の考えはスキルアップの参考になりそうです。

上達の種類

教育心理学の中では物事の上達を以下の2種類と定義する考えがあります

  • 定型的熟達
  • 適応的熟達

定型的熟達とは決まった作業を繰り返しこなして、素早く、正確に実践できるようになることです。
料理において、レシピ通りに素早く上手に作れるようになっていくことを指します。
エンジニアリングにおいては過去に似た機能を同じ仕組みで素早く作ることにあたります。(コピペもここに該当します)

一方適応的熟達とは状況に応じて知識や技を柔軟に組み替えたり、新たな手順や方法を発明できることをいいます。
作業工程など、なぜその工程や手順が必要なのかを理解している必要があります。
エンジニアリングにおいては未知のバグを踏んでも、使用しているライブラリの理解やエンジンの処理の流れを理解していればすぐに当てがついて解決できるといったことを指します。

スキルアップに関しては上記2つの熟達の方向性があることを理解する必要がありそうです。

必要とされる熟達はどちら?

では、定型的熟達と適応的熟達のどちらの熟達が大事なのでしょうか?
それは各プロジェクトの要件によります。
製造業のような繰り返し作業の多い現場では定型的熟達の方が大事な場合が多くなるかもしれませんし、3Dモデルなどアセットの大量生産期にも定型的熟達が求められそうです。
私のプロジェクトでは運用と開発を同じチームで行なっているため、同じような施策を繰り返し行うこともあれば、全く新しい機能を実装したり未知のバグに対して対応する必要があります。
そのためどちらの熟達も用途に応じて極めていく必要があります。
私がいるサーバーチームにおいては現状のチームメンバーの状態を加味し、適応的熟達の方に重きを置き、適応的熟達者になるべくチーム内施策を考えることにしました。
また、これは私の私見ですが、VUCAと呼ばれるこの時代においては未知の状況に対応できる力が求められていると思います。
そういう意味では適応的熟達者の方が求められることが多くなると考えられるため、訓練という意味で適応的熟達の方に力を入れていきたいという思いもあります。

どうすれば適応的熟達者になれるのか

では、どうすれば適応的な熟達者になれるのでしょうか?
ヒントは前述した「作業工程など、なぜその工程や手順が必要なのかを理解している」にあると考えます。
つまり物事の理解度を上げることが重要ということです。
では物事の理解度を上げるにはどうすれば良いでしょうか?
ここでは認知心理学の考えを用いて考察していきます。

認知心理学とは

知覚・理解・記憶・思考・学習・推論・問題解決など、人間の高次認知機能を研究対象とする学問です。

認知心理学的学習の循環プロセス

認知心理学の学習プロセスは大まかに以下のように考えられています。

経験から新しい知を獲得し(知の探索)、その知識を深ぼって(知の深化)、記憶に定着させる。そして定着した知識をもとにまた新たな知識を獲得していくというループになっています。
今回はその中でも理解度を上げることに関係する「知の深化」についてもう少し考えてみましょう。

協調的な理解進化過程

人は他人と会話をする中で新しい見方や気づきを得ることがあります。
このように対話の中で知識や理解が深まる考え方を「社会的構成主義」と言います。
この考えがどのようなものかというと、複数の参加者がいる一つの協調的学習環境では、多様な視点からさまざまな表現が発言、身振り、図といった形で提供され、これらの多様な表現に対して参加者自身が内省をし、お互いの共通理解が深まりより高度なレベルでの理解が可能になるということです。
今回はこの社会的構成主義に基づいてチーム内で実際に行った施策を紹介したいと思います。

社会的構成主義に基づいた取り組み

いよいよ本記事の本題に入ります。難しく書いていますが、要は対話を重視した学びの場を用意しようということです。
その前に、私のチームにおけるスキルアップの目的を整理したいと思います。
私のチームでのスキルアップの目的は主にチーム内のスキルのベースを上げることです。
背景としてはチームメンバーの入れ替えによりチームとしてスキルセットで失われるものが出てきたり、俗人化しているものが顕著になったため、全員がある程度共通理解を持ってタスクを遂行できる状態を目指す必要があったことがあります。
実際に行った施策が以下になります。

  • 雑談タイム
  • モブプログラミング
  • モニタリングタイム

それぞれについて説明していきます。

雑談タイム

まずは対話をする場を設けることにしました。
これには対話をもとに物事を深ぼる訓練をする狙いがあります。
やり方としては毎回なんでもいいのでテーマを決めてそれに関して30分間話し合うというシンプルなものです。
テーマはメンバーから都度募集しました。

雑談会のテーマ一覧

テーマは仕事に関することでもいいですが、個人の趣味の話であったりなんでもいいと思います。
コツはわからないことを質問したり調べたりすることです。
最近盛り上がっているのはphp8のバージョンアップ内容をRFCと一緒に見ていくことです。(3回以上続いています)
バージョンアップ内容を見ながら実際自分たちのプロジェクトに何を導入するべきかを議論しています。
頻度としては週一回で初開催していましたが、好評につき毎日朝30分やることになりました。

モブプログラミング

モブプログラミングは以前から私のチームで導入していましたが、こちらも少しやり方を変えることにしました。
モブプログラミングではドライバーとナビゲーターという2つの役割がありますが、今回ナビゲーターのうち1人が「あえて突っ込んだ質問をする」というあたらしい役を設けることにしました。この人がそもそも論的な問いを投げることによって議論が発生し理解が深まるということを意図しています。今までの風習やナリで設計や実装している部分を突っ込まれると、「確かに今はその実装である必要ないよね」というような新しい気づきが得られることも多いです。
頻度に関してはフルタイムでモブプログラミングを実施しています。

モニタリングタイム

こちらはサービスのパフォーマンスやログなどをチェックするの習慣化してメトリクスを読み解く感覚を身につけたりすることを目的として開催している会です。サーバーのパフォーマンスの意識は以前は前リーダーの感覚値レベルに引き上げられていましたが、新体制ではその感覚やノウハウを引き継げるようにチームとして学ぶ必要がありました。こちらは毎日朝会のタイミングでメトリクスやログを見ながら対策などを議論しています。

やってみてどうだったか

実際やってみた結果、定性的な評価ではありますがチームメンバーの底力は上がった気がします。
〇〇は誰々さんしかできないというように俗人化した作業やこの部分は最初の設計者しかわからないというようなブラックボックス化している設計などを紐解く場ができたことで解消できたものも多いです。
スキルセットを栄養価のグラフのように可視化するとすると、メンバー全員のグラフが歪な状態からコーンフレーク(牛乳含む)のように全体的にカバーできている状態に近づいていっている感覚です。
また、副次的な効果ですが、現在のリモートワーク環境下において、対話をする場があるということでコミュニケーションが活発になったり、ある種ストレス発散の場にもなっている感じもあります。

最後に

いかがでしたでしょうか。
何か参考になるものがあれば幸いです。
ことIT現場において世の中には色々はチームビルディング的なプラクティスが紹介されていると思います。
そこにさまざまな学問の観点を加味してブラッシュアップするとより効果的になる可能性があると思います。
これからも学んで実践したものを紹介していこうと思います。