108.4K Views
April 27, 22
スライド概要
Engineering Manager Meetup #10 での発表資料です。
https://engineering-manager-meetup.connpass.com/event/239203/
30代後半から発信活動を始めて人生が楽しくなりました。 主にC#/設計技法/マネジメント/チームビルディングの情報を発信します。 デブサミ2020関西ベストスピーカー賞1位。 Microsoft Build 2022 スピーカー。 ITエンジニア向けの月刊誌「Software Design」2022年4月号より連載記事を執筆中。 デンソークリエイト所属。発言は個人の見解。
主体性を失わせるアンチパターンを やってしまっていた話 2022/4/27 Engineering Manager Meetup #10 小島 優介 Developers Summit 2020 KANSAI / 2020-8-27 / Yusuke Kojima © DENSO CORPORATION All Rights Reserved. /65
自己紹介 名前:小島 優介 Twitter:@kojimadev 社内業務: 2005年から15年以上ツール開発業務を担当 現在は、開発チームのエンジニアリングマネージャーで 毎日メンバーと一緒にプログラミング 社外活動: Developers Summit 2020 KANSAI ベストスピーカー賞1位 ITエンジニア向け月刊誌「Software Design」で連載執筆中 Qiita/Zenn/Note/Youtubeで合算1万いいねの情報を発信 Developers Summit 2020 KANSAI / 2020-8-27 / Yusuke Kojima © DENSO CORPORATION All Rights Reserved. 2 /65
当初(3年前)の開発チーム 全員、技術記事の投稿も社外イベント参加も無し 開発知識は、業務で教えてもらったことしか知らない 中堅の私以外は、自分のタスクの事しか考えない 中堅 3年目 2年目 配属予定の新人 プログラム未経験で入社 Developers Summit 2020 KANSAI / 2020-8-27 / Yusuke Kojima © DENSO CORPORATION All Rights Reserved. 3 /65
現在(3年後)は、主体的に継続成長するチーム 毎年新人が入ってくるがその新人も含めて以下の状態 • 全員が技術記事を毎月投稿、全員が社外イベントで発表 • 毎月新しい技術・ツール・プラクティスを皆が提案 • 各自が自分のタスクの事だけでなく チームのための提案を積極的に行う 主体性を発揮しやすい環境を作るプラクティスを実施(以下参照) 「1年以上かけて生産性倍増+成長し続けるチームになった施策を全部公開」 https://qiita.com/kojimadev/items/4b28f801863cf4e8f0da Developers Summit 2020 KANSAI / 2020-8-27 / Yusuke Kojima © DENSO CORPORATION All Rights Reserved. 4 /65
それ以前の私は・・・ 主体性を発揮しやすい環境を作る過程において 過去の自分の行動を振り返った時、私はそれまで 主体性を失わせる行動を繰り返していた事に気付く ① ② ③ ④ 報連相が遅い原因をメンバーのせいにする 常に期限達成を強制する レビュー指摘が多い原因をレビューイのせいにする 問題に対して即座に答えを提示する これを「主体性を失わせる4つのアンチパターン」として 私がやってしまっていた反省点と、どうすれば良かったかを紹介 Developers Summit 2020 KANSAI / 2020-8-27 / Yusuke Kojima © DENSO CORPORATION All Rights Reserved. 5 /65
主体性を失わせる4つのアンチパターン① 報連相が遅い原因を メンバーのせいにする Developers Summit 2020 KANSAI / 2020-8-27 / Yusuke Kojima © DENSO CORPORATION All Rights Reserved. 6 /65
アンチパターン①の概要 報告 連絡 相談(以下、報連相)は「仕事の進め方」そのもの 報連相に問題があると、無駄な手戻りが頻発して、生産性が下がる 報連相は、チーム開発において重要 過去の私は報連相が遅くて手戻りが発生した際に、 そのメンバーに「言うのが遅い!」と怒っていた あと進捗遅れなどの悪い報告されると怒っていた 怒られるので主体的に報告しようとしなくなる悪循環 当時の私は、報連相が遅い原因がそのメンバーにある と思っていたが、振り返ってみると、原因は私だった Developers Summit 2020 KANSAI / 2020-8-27 / Yusuke Kojima © DENSO CORPORATION All Rights Reserved. 7 /65
適切なタイミングで報連相してもらうためには 報連相のタイミングの良し悪しを 毎回フィードバックすること あと悪い報告でも報告しれてくれた事に感謝すること 当時の私は遅い時には「遅い!」と怒っていたが 適切なタイミングの時には何も伝えていなかった それではメンバーは何が適切なのか分からない 適切なタイミングであれば、以下のようにフィードバックが必要 「このタイミングで相談してくれたおかげで手戻りせずに済みました ありがとうございます」 悪い報告の時でも感謝を伝えて「報告」=「感謝される」 と感じてもらうようにする Developers Summit 2020 KANSAI / 2020-8-27 / Yusuke Kojima © DENSO CORPORATION All Rights Reserved. 8 /65
成功体験を積み上げるために仕込む 報連相してくれた時にフィードバックや感謝をしようとしても 新人は、主体的な報連相が全くできない場合がある だから、適切なタイミングで報告しやすい機会を 仕込む (例) テスト実施を依頼した朝に以下のように依頼 「定時までに完了できないと分かった時点で報告すること」 そうすれば、定時前にだいたい報告してくれる その時に、ポジティブフィードバックで成功体験積む これを繰り返すことで、「主体的に報連相を行う=成功体験」 というイメージが定着し、適切なタイミングで報連相するようになる Developers Summit 2020 KANSAI / 2020-8-27 / Yusuke Kojima © DENSO CORPORATION All Rights Reserved. 9 /65
主体性を失わせる4つのアンチパターン② 常に期限達成を強制する Developers Summit 2020 KANSAI / 2020-8-27 / Yusuke Kojima © DENSO CORPORATION All Rights Reserved. 10 /65
アンチパターン②の概要 過去の私は「スクラム」というアジャイルの開発手法のチームの マネージャーだった そのチームでは、開発中に想定外の技術課題が見つかることが多く 「スプリント」という数週間の区切られた期間の中で 進捗が遅れることが多かった しかし、それでも、スプリントの計画レビュー時に合意したバックログを 期限までに達成することを強制した その結果、 チームは主体性や情熱が低下 Developers Summit 2020 KANSAI / 2020-8-27 / Yusuke Kojima © DENSO CORPORATION All Rights Reserved. 11 /65
主体性を失うアルゴリズム チームが主体性を失うアルゴリズムは以下の通り 1. 遅れを挽回するため、メンバー全員が大量に残業する 2. 表面的な完了を得るためにドキュメントやテストやリファクタリング等の 見えにくい箇所を省き、技術的負債が生まれる 3. その技術的負債がステークホルダーに共有されることはなく チームは透明性をなくす 4. 技術的負債を生んだ上に残業で完了させたベロシティが基準になると 次も技術的負債を生みながら残業が続く 5. 技術的負債により生産性は低下していき、残業が続くことで 6. チームが主体的な提案を行う余裕がなくなる その結果、チームの主体性や製品に対する情熱が 無くなる Developers Summit 2020 KANSAI / 2020-8-27 / Yusuke Kojima © DENSO CORPORATION All Rights Reserved. 12 /65
現在は、不確実性を許容している だから、想定外が起きた際は、スプリントでコミットしたバックログが 達成できないことを許容する&してもらう スクラムの創始者の1人、ジェフ・サザーランドさんの スプリントのコミットにおける見解は以下 スプリントプランニングで決定した内容をスプリント期間中に 「全て終わらせる」ことをコミットするのでなく、そのスプリントにおいて、 チームが「全力で選択したプロダクトバックログ項目を完了させようとする」 ことをコミットする 参考資料 https://www.ryuzee.com/contents/blog/3567 https://simplearchitect.hatenablog.com/entry/2016/07/07/080250 Developers Summit 2020 KANSAI / 2020-8-27 / Yusuke Kojima © DENSO CORPORATION All Rights Reserved. 13 /65
主体性を失わせる4つのアンチパターン③ レビュー指摘が多い原因を レビューイのせいにする Developers Summit 2020 KANSAI / 2020-8-27 / Yusuke Kojima © DENSO CORPORATION All Rights Reserved. 14 /65
アンチパターン③の概要 過去の私はレビューで大量の指摘をすることが何度かあった 大量の指摘修正をしてもらう事は、手戻りであり、進捗遅れになる 恥ずかしい話、当時の私は、レビューで大量の指摘で 手戻る原因がレビューイにあると思っていた しかし、今、振り返ってみると、 手戻りの原因はレビューアの私だった 詳細は以下の記事参照 「レビューで大量の指摘をして大きな手戻りを発生させた原因は レビューアの私にあった」 https://qiita.com/kojimadev/items/e12784e6764f1b60e73c Developers Summit 2020 KANSAI / 2020-8-27 / Yusuke Kojima © DENSO CORPORATION All Rights Reserved. 15 /65
主体性を失わせる4つのアンチパターン④ 問題に対して 即座に答えを提示する Developers Summit 2020 KANSAI / 2020-8-27 / Yusuke Kojima © DENSO CORPORATION All Rights Reserved. 16 /65
アンチパターン④の概要 過去の私は、メンバーが担当しているタスクで相談された場合に 即座にその対応方針を提示し その対応を間違えないように具体的な手順も説明した しかし、答えを教えられただけでは、応用を効かせて対応できない 常にこれを行うという事は メンバーの成長機会を奪い、成長を妨げていた 自分で主体的に考えなくなってしまう Developers Summit 2020 KANSAI / 2020-8-27 / Yusuke Kojima © DENSO CORPORATION All Rights Reserved. 17 /65
どうすれば良かったか 問題解決能力を高めるためには、自分で問題を解決するための 思考を繰り返して訓練する必要がある つまり、ヒントを出しながら、自分なりに考えてもらう 現在はこの手法を「コーチングプログラミング」と名付けて実施している 次ページで、クラス名を決める際の 私とプログラム初心者Mさんの会話の例を掲載 私 Mさん Developers Summit 2020 KANSAI / 2020-8-27 / Yusuke Kojima © DENSO CORPORATION All Rights Reserved. 18 /65
M「なるほど分かりました!新しくpublicなクラスをつくって、 そのクラスの中で、さっきの処理を隠蔽すればいいんですね!」 私「その通り。では、そのクラスのクラス名は何になりますか?」 M「うーん、分からないです」 私「では、そのクラスの責務を考えましょう。そのクラスの責務は何です?」 M「うーん、分からないです」 私「では、そのクラスで行う、さっきの処理がなんだったのか、 もう1回教えてもらっていいですか?」 M「えーと、LocatorクラスにFactoryのインスタンスを設定します」 私「その通り。では、このクラスの名前は何になりますか?」 M「LocaterにFactoryを設定するから、LocaterSetterとか?」 私「・・・なるほど。では、Locator に Factory を設定する必要性を 考えてみましょう。もしその設定をしなかったら、どうなるんでしたか?」 M「その後に Locator を使う処理で失敗します」 19 /65 Developers Summit 2020 KANSAI / 2020-8-27 / Yusuke Kojima © DENSO CORPORATION All Rights Reserved.
私「そうですね。つまり、単に『何かを設定する処理』という意味でなく、 『必ず最初にやっておかないといけない処理』ということですね。 ということでクラス名は?」 M「うーん・・・わからないです」 私「『必ず最初にやっておかないといけない処理』というのが、 今まで設計したクラスにもありましたね。それを参考にしましょう」 M「あ、前に設計したクラスは、『必ず最初にやっておかないといけない処理』 として、Initializeメソッドで初期化をしていました」 私「その通り。では、今回作るクラスの責務は、何になりますか?」 M「Locatorを初期化することです」 私「では、そのクラス名は?」 M「LocatorInitializerです」 私「その通り。全部自分で考えて設計できましたね!」 M「はい、どういう考え方で、設計をしていくのか分かりました!」 20 /65 Developers Summit 2020 KANSAI / 2020-8-27 / Yusuke Kojima © DENSO CORPORATION All Rights Reserved.
主体性を失わせる4つのアンチパターンまとめ 以下の主体性を失わせる行動を繰り返していたので改めた ① ② ③ ④ 報連相が遅い原因をメンバーのせいにする 常に期限達成を強制する レビュー指摘が多い原因をレビューイのせいにする 問題に対して即座に答えを提示する Developers Summit 2020 KANSAI / 2020-8-27 / Yusuke Kojima © DENSO CORPORATION All Rights Reserved. 21 /65
まとめ Developers Summit 2020 KANSAI / 2020-8-27 / Yusuke Kojima © DENSO CORPORATION All Rights Reserved. 22 /65
まとめ 今回紹介したのは、あくまで私のチームにおけるアンチパターンです チームによってはアンチパターンでない場合もあると思います 私の反省点を公開することで 同じ失敗を回避してくれる人が一人でもいれば幸いです 発表資料は @kojimadev のTwitterで公開します Developers Summit 2020 KANSAI / 2020-8-27 / Yusuke Kojima © DENSO CORPORATION All Rights Reserved. 23 /65