6.1K Views
November 08, 24
スライド概要
2024-11-09 オープンセミナー2024@広島 https://osh.connpass.com/event/324736/
サイボウズの開発組織の中に、「生産性向上チーム」という変わった名前のチームがあります。
2015年に生産性向上チームが設立されてから10年ほど経過し、その間に様々な取り組みを行ってきました。
その取り組みはどれも、開発者の生産性を上げる目的で行っています。
本セッションでは、生産性向上チームの紹介とこれまでの取り組みから得た学びをお伝えします。
長く開発生産性に取り組む中で見えてきた変わっていくもの、変わらないもの、そしてこれからの話をします。
座右の銘は「an infinite iterator has no upper bound」
2024-11-09 オープンセミナー広島 開発組織を横断して支える 生産性向上チームの取り組み 生産性向上チーム 谷 昌典 1
目次 • 自己紹介 • 今日の発表のゴール • 生産性向上チームの紹介 • 2つの活動軸の歴史 • チーム横断の開発基盤 • 開発チームの支援 • 活動を支える文化 • “生産性向上”とは何か? 開発組織を横断して支える生産性向上チームの取り組み 2
目次 • 自己紹介 • 今日の発表のゴール 前置きっぽい話 • 生産性向上チームの紹介 • 2つの活動軸の歴史 • チーム横断の開発基盤 生産性向上チームの活動 • 開発チームの支援 • 活動を支える文化 • “生産性向上”とは何か? 活動の過程で見えた「生産性向上」 開発組織を横断して支える生産性向上チームの取り組み 3
自己紹介 ©️ Cybozu, Inc. 4
自己紹介 谷 昌典 (@uta8a) サイボウズ株式会社 生産性向上チーム #経歴 2023/03 広島大学情報科学部 卒業 2023/04 サイボウズ入社 #好きな食べ物 尾道ラーメン 魚: レンコダイ #社内でやってきたこと GitHub Actions セルフホストランナー基盤 Four Keys基盤 #個人的に好きなお店 塩そば まえだ (三原) 焼肉ふるさと (広島駅前店) #扱える技術 Terraform/AWS/GCP/GitHub Actions/ TypeScript #趣味 音楽(ダンスミュージック) 写真を撮る 開発組織を横断して支える生産性向上チームの取り組み 5
自己紹介 ←寄稿したSoftware Designが駅前の福屋 のジュンク堂で売られ ていた (店員さんに確認して 撮った) 焼肉ふるさと→ 瀬戸内海の写真→ ↓ 開発組織を横断して支える生産性向上チームの取り組み 6
今日の発表のゴール ©️ Cybozu, Inc. 7
1. 開発チームを「支える」チームは必要か? を判断する材料を持ち帰る 開発組織を横断して支える生産性向上チームの取り組み 8
2. 「上手く支える」にはどうすればいいか? 生産性向上チームでの例を知って自分たちの組織に役立てる 開発組織を横断して支える生産性向上チームの取り組み 9
目次 • 自己紹介 • 今日の発表のゴール • 生産性向上チームの紹介 ← 今からここ • 2つの活動軸の歴史 • チーム横断の開発基盤 • 開発チームの支援 • 活動を支える文化 • “生産性向上”とは何か? 開発組織を横断して支える生産性向上チームの取り組み 10
生産性向上チームの紹介 ©️ Cybozu, Inc. 11
生産性向上チームの紹介 サイボウズの開発組織 • サイボウズは複数の製品を提供している 参考:開発本部採用ピッチ 開発組織を横断して支える生産性向上チームの取り組み 12
生産性向上チームの紹介 製品チームを支える • 生産性向上チームは組織横断型 参考:生産性向上チーム採用ピッチ 開発組織を横断して支える生産性向上チームの取り組み 13
生産性向上チームの紹介 どのように支えているのか? • 基盤と支援 開発基盤の整備 改善活動の支援 • AWSへSSOでログインする仕組み • 短期間他チーム参加 • GitHub Actionsセルフホストラン • Garoon CI/CD支援 ナー基盤 • Four Keys基盤 • リリースに関わる仕組み 開発組織を横断して支える生産性向上チームの取り組み 14
生産性向上チームの紹介 生産性向上チームの紹介まとめ • サイボウズの開発組織は製品チームごとに分かれている • 生産性向上チームは製品チームを横断して支えている • 支える手段は「基盤」と「支援」 • 支えることで、開発者が「つらい」と思う部分を「最高」にしていく 開発組織を横断して支える生産性向上チームの取り組み 15
生産性向上チームの2つの活動軸の歴史 ©️ Cybozu, Inc. 16
生産性向上チームの2つの活動軸の歴史 生産性向上チームの歴史の概略 生産性向上チームが組織 として正式にできた 2015/08 ブラウザテスト高速化 Docker Private Registry Jenkins運用改善 開発向けDNS, HTTPS化の仕組み リリース改善 2019/02 2人目ジョイン 2020/06 初の新卒 x5 AWS SSOの仕組み 検証用のGoogle Workspace ・MS365アカウント管理 AWS アカウント管理 CircleCI Enterprise Garoon支援 ReportPortal GitHub Actions セルフホストランナー 2024/07 2024/11 x10 x6 2024年卒の人がジョインして最大規模に Four Keys基盤 AWS SSOの仕組み刷新 他チーム異動により減少(加えて2人が別チームへ短期間参加) 開発組織を横断して支える生産性向上チームの取り組み 17
生産性向上チームの2つの活動軸の歴史 設立の経緯(2015年頃) 開発の片手間での 改善はつらい 横断で知見を 共有しづらい #野良Jenkins問題 複数チームが相乗りしてるので、あるチームがスク リプト変更すると、他チームのCIも壊れる #自動ブラウザテスト基盤 Seleniumを動かすマシンの管理を各チームが個別に 行なっており、メンテコストが高い #改善が後回しになる 開発をしながら片手間での改善だと、思い切った改 善はしづらいし、どうしても後回しになりがち #他チームの改善事例を横に展開しづらい あるチームでの自動化・改善を他チームに取り入れ るのが難しく、別々に似たような改善をしている 開発組織を横断して支える生産性向上チームの取り組み 18
生産性向上チームの2つの活動軸の歴史 チーム横断の開発基盤 ©️ Cybozu, Inc. 19
チーム横断の開発基盤 最初の数ヶ月でできた開発基盤(2015年8月 ~ 2015年12月) • Selenium Grid改善 → ブラウザテスト自動化の基盤 • Jenkins運用改善 → CIの基盤 • 社内DNS/HTTPS化の仕組み → 社内からアクセスできる開発環境向けのProxy • Docker Private Registry運用 → 社内用のDocker Image置き場 開発組織を横断して支える生産性向上チームの取り組み 20
チーム横断の開発基盤 最初の数ヶ月でできた開発基盤(2015年8月 ~ 2015年12月) • Selenium Grid改善 ←仕組みは現役! • Jenkins運用改善 • 社内DNS/HTTPS化の仕組み ←現役!(現在刷新中) • Docker Private Registry運用 最初の方で作った開発基盤が、現在も使われている 作った基盤は思ったより長期間使われ続ける 開発組織を横断して支える生産性向上チームの取り組み 21
チーム横断の開発基盤 初期の開発基盤など(2016年 ~ 2019年1月) • CIツールの調査、Jenkins運用改善 → まずはJenkins, 次第にCircleCIへ • ブラウザテスト基盤整備 → マシン調達が大変だったのをGCP利用で解決、並列化 • 社内DNS/HTTPS化の仕組み → ローカル開発でHTTPSを使えるように • 開発環境の改善や探求 → Wiki, Slack, github.com, codecov, VersionEye • クラウド利用支援 → AWSやgithub.comを検証 • リリース改善 → 2017年頃から、リリース軽量化の取り組み 1人の時代: 最初期の課題への取り組みと改善 開発組織を横断して支える生産性向上チームの取り組み 22
チーム横断の開発基盤 中期の開発基盤など(2019年2月 ~ 2021年) • CI → CircleCI, GitHub Actions • リリース改善 → リリース回数/年の増加 • AWS SSOの仕組み → AWS+Azure ADによるSingle Sign-Onの仕組み • Transit Gatewayを用いた仕組み → 社内とAWSのネットワークを繋げる仕組み • ReportPortal → テスト分析フレームワーク • 検証用のGoogle Workspace → アカウント発行、退職者管理の仕組み /MS365アカウント管理 成長期: 基盤も人もスケール、AWS利用本格化 開発組織を横断して支える生産性向上チームの取り組み 23
チーム横断の開発基盤 ここ数年の開発基盤など(2021年 ~ 2024年) • CI → GitHub Actionsセルフホストランナー基盤 • リリース改善 → 引き続き改善 • AWS SSOの仕組みの刷新 → IAM Identity Centerへの移行完了 • Four Keys基盤 → 開発生産性指標の測定基盤 • 社内DNS/HTTPS化の仕組み刷新 → AWSを用いた構成に刷新中 刷新期: 基盤が古くなってきたので基盤の改善 開発組織を横断して支える生産性向上チームの取り組み 24
チーム横断の開発基盤 現在の開発基盤(2024年11月) • 社内DNS/HTTPS化の仕組み マスコットキャラクター セイサンシャインくん • Selenium Grid基盤 • オンプレRenovate基盤 • リリース周りの仕組み • GitHub Actionsセルフホストランナー基盤 • 検証用Google Workspace/MS365アカウント管理 • Four Keys基盤 \ \ 基盤がたくさん / / • IAM Identity Centerを使ったAWS SSOの仕組み 開発組織を横断して支える生産性向上チームの取り組み 25
多くの基盤を運用し続けるためには? 開発組織を横断して支える生産性向上チームの取り組み 26
チーム横断の開発基盤 多くの基盤を運用し続けるためには? マネージドサービス を使おう #なるべくメンテコストを減らす クラウドサービス、マネージドサービスの活用をま ず考えて、自分たちの管理する部分を極力減らす #開発基盤は思ったより長く使われる 時代によってツールは変わっても、提供する価値は あまり変化しない。移行、刷新は必要になってくる 移行・刷新・クローズ は必須 改善を止めない #時には基盤のクローズも必要 基盤をたくさん抱えていると新しいことができない。 利用されているかのモニタリング、利用者の声の収 集が大切。 #基盤を与えられたものと思わず、積極的に関わる 基盤は作った人のものではなく、積極的に関わりに いくと良い。もっといい状態がないか改善し続けて いく心、改善できないか現状を疑う心が大切 開発組織を横断して支える生産性向上チームの取り組み 27
チーム横断の開発基盤 チーム横断の開発基盤まとめ • 10年前に作られた基盤が今も使われている • 生産性向上チームは時代に応じて開発基盤を作り、大規模化に対応し、刷新してきた • 多くの基盤を運用し続けるためには、以下の3つが大切 • マネージドサービスを使おう • 移行・刷新・クローズは必須 • 改善を止めない 開発組織を横断して支える生産性向上チームの取り組み 28
生産性向上チームの2つの活動軸の歴史 開発チームの支援 ©️ Cybozu, Inc. 29
開発チームの支援 開発チームの支援とは • 支援を行う期間に応じた分類 単発の支援 中長期の支援 テキストコミュニケーション、単発ミーティング 実際にチームに入ったり、伴走して支援する 外部サービス(GitHub, AWS)の質問や相談 他チームへ短期間ジョインする 社内基盤の質問や相談 他チームから生産性向上チームに短期間ジョイン 窓口からの依頼から始まることが多い CI/CD改善やテスト自動化、開発環境改善など 開発組織を横断して支える生産性向上チームの取り組み 30
開発チームの支援 初期の開発チームの支援(2015年 ~ 2020年) • 他チームへの短期間ジョイン • TE: テスト専門チーム • Yakumo: US向けkintoneの基盤運用チーム • 初期はヒアリングや短期間ジョインを数多く行う • 開発チームとの距離が近い 開発組織を横断して支える生産性向上チームの取り組み 31
開発チームの支援 中期の開発チームの支援(2021年 ~ 2022年) • Garoon CI/CD改善支援 • 開発環境整備: Dockerイメージ化支援 • 社内向けStorybookホスティング支援 • Selenium試験自動化支援 • 中期は開発チーム支援黄金期 • 兼任している人がいた時期は大きな成果 • 人手も増えて、ヒアリングの成果もあって仕事増 開発組織を横断して支える生産性向上チームの取り組み 32
開発チームの支援 最近の開発チームの支援(2023年 ~ 2024年) • 他チームへの短期間ジョイン • kintone • Garoon CI/CD, Terraform改善 • 詳しくは E2Eテストワークフローを高速化・安定化させる取り組み を参照 • 最近は支援は冬の時代 • 新しくジョインした人が多く、開発チームとの距離 開発組織を横断して支える生産性向上チームの取り組み 33
開発チームの支援をうまく続けるには? 開発組織を横断して支える生産性向上チームの取り組み 34
開発チームの支援 開発チームの支援をうまく続けるには? 顧客が本当に 欲しいものを作る すべてに対応しようと しない 支援先にオーナーシッ プを持ってもらう #根本の課題を把握する 頼まれたことをそのままやる前に、課題や背景を把 握し、本当に必要な支援を考える #助けを求める 全てを自分たちで解決しようとせず、適切な部署に 助けを求めて協力してもらう #無理をしない チームが忙しい時期もあるし、人手が足りないこと もある。キャパシティを見て引き受ける #オーナーシップはあくまで支援先 支援先から離れても、そのチーム自身がメンテナン スを続けられるようにする 開発組織を横断して支える生産性向上チームの取り組み 35
開発チームの支援をやって得られるもの 開発組織を横断して支える生産性向上チームの取り組み 36
開発チームの支援 開発チームの支援をやって得られるもの 支援先のチームの役に立つ、以外の効果がある • 交流: 支える先の開発チームがどういう業務内容で、どういう課題があるか分かる • 生産性向上ネタの収集: こういう基盤があるといいのではないか、勉強会のアイデア もちろん支援先のチームの役に立つと嬉しい • 感謝されると嬉しい • そもそも、開発者の生産性を上げること自体が楽しい 開発組織を横断して支える生産性向上チームの取り組み 37
開発チームの支援「冬の時代」を乗り切るには 開発組織を横断して支える生産性向上チームの取り組み 38
開発チームの支援 開発チームの支援「冬の時代」を乗り切るには そもそも「冬の時代」は悪いことなのか?支援なしに回っているならいいことなのでは? →現在の状態は「開発チームに生産性向上が解くべき課題があるのかどうかも分かっていない」状態 (それはまずい • 基本に立ち返ってヒアリング → 現在多くのチームにヒアリングに行っている • 他チームへの短期間ジョインを増やす → 2名が現在短期間他チームへジョイン、来年も複数名予定 • 開発チームとの距離を近く保つ工夫を模索 • チームに入ってみないと分からないので、短期間ジョインする 開発組織を横断して支える生産性向上チームの取り組み 39
開発チームの支援 開発チームの支援まとめ • 開発チームの支援は単発のものと中長期に渡るものがあり、現在は中長期に渡るものは少なく なっている状態 • 打開するためにヒアリングや他チームへの短期間ジョインを行っていく • 支援は以下のことに気をつけている • 顧客が本当に欲しいものを作る • すべてに対応しようとしない • 支援先にオーナーシップを持ってもらう • 支援によって、交流による他チーム理解、生産性向上に繋がるネタを集められる 開発組織を横断して支える生産性向上チームの取り組み 40
生産性向上チームの活動を支える文化 ©️ Cybozu, Inc. 41
生産性向上チームの活動を支える文化 文化に関わってそうな制度 • モブプログラミング • 13:30 ~ 17:00 はずっとZoomを繋 いでモブプログラミング • 生産性向上チームらしさを互いに共有できる • 作業記録をその場で取る • すぐ改善できるドキュメントなどの改善はやる • 25分の働き・5分の休憩のサイクル • 週の振り返り・KPT • 振り返りで一人時間にやったこと 共有 • KPTで改善したいことやGood だった点を話す • 朝会 • チームメンバーの状況把握、タス クのトリアージ • 雑務タスクは持ち回り • サブチームでお問い合わせ対応など雑務に取り組み、後 回しにしない。 • 改善ネタを見つけて議論する場がある • やるだけの改善はタスクにして次の週に取り組む • チームの状況に興味を持っている • 朝会では全てのタスクをみんなが眺める • メンバーの興味を休憩や朝会、振り返りで把握 開発組織を横断して支える生産性向上チームの取り組み 42
生産性向上チームの活動を支える文化 生産性向上チーム自身 が生産性を向上させる 文化を作るのは 長い年月と人 理想を思い描く #改善の種がないか常に疑い続けるのは苦しい なんかつらくても、そのうち慣れる。常に改善の余 地を疑い続けるのは負荷が高い。でも改善し続けて、 今よりもっと良くなると思うことが大事 #やっていきの文化 とりあえずやってみて、ダメなら改善していこうと いう姿勢。始める前は情報が少ないので、あれこれ 考えても仕方ない。 #今この状況よりハッピーな状況を思い描く 現状の不満に対して、理想を思い描くことが大事。 また、他社事例や流行を見て、もっとよい状態をイ ンプットし続ける。 #互いの理想を突き合わせて、次の行動に繋げる どうなったらもっとハッピーかを話してみる。 改善案はまた今度ではなく、行動に繋げて実践す る。 開発組織を横断して支える生産性向上チームの取り組み 43
生産性向上チームの活動を支える文化 生産性向上チームの活動を支える文化まとめ • モブプログラミングなど、様々な制度を通じてチームメンバー同士の交流があり、それが文化の 醸成につながっているのかもしれない • 特に振り返りで改善のために議論する機会がある • 文化は明文化されていないが、いくつか個人的に感じているものは以下の通り • 生産性向上チーム自身が生産性を向上させていくぞという気概 • やっていきの文化 • つらい、面倒、という状態からどうなったらいい感じになるかを考えてみる 開発組織を横断して支える生産性向上チームの取り組み 44
“生産性向上”とは何か? ©️ Cybozu, Inc. 45
ぶっちゃけわからん... 考えていることを話します ©️ Cybozu, Inc. 46
“生産性向上”とは何か? 生産性向上チームのミッション 開発組織を横断して支える生産性向上チームの取り組み 47
“生産性向上”とは何か? 生産性向上チームのミッション 開発チームのために チーム横断で役に立つ 基盤と、それを活用した支援 開発組織を横断して支える生産性向上チームの取り組み 48
“生産性向上”とは何か? 生産性向上チームがこれまでやってきたこと 抽象的に言えば、生産性向上チームは「Enabling」と「Platform」の役割を果たしてきたと言える Enabling: [支援] CI/CD, AWS等のスペシャリストとして Platform: [基盤] 開発者向けサービス提供者として 生産性向上 参考: チームトポロジー 価値あるソフトウェアをすばやく届ける適応型組織設計 開発組織を横断して支える生産性向上チームの取り組み 49
“生産性向上”とは何か? 価値観 新しい体験を重要視する 数値として生産性が上がった!早くなった!も大切。 一方で、新しい取り組みによって開発体験が変わるような新しい価値を生み出す部 分も重要視してきた。 将来的には定性的・定量的な視点双方を活かしていきたい 開発者がずっと「なんかつらい」と思っている状態が長く続く のは、健全ではない 開発者はつらいと思いながら開発を続けたくはないが、改善のコストを開発の片手 間で払うのは難しい。 開発者が本来集中すべき部分に時間を割けるように生産性を向上させていく 開発組織を横断して支える生産性向上チームの取り組み 50
これからも生産性を向上させていきます! まだまだ発展途上なので... 開発組織を横断して支える生産性向上チームの取り組み 51
というわけでお決まりの... We are hiring! 募集要項はこちら 開発組織を横断して支える生産性向上チームの取り組み 52
まとめ • 1. 開発チームを「支える」チームは必要か? • 多くのチームで似たようなことをしているなら、基盤となる下支えするチームがあってもいいかも • 開発者が本来集中すべきドメイン以外で時間を消費しているなら、検討してみる価値はある • 2. 「上手く支える」にはどうすればいいか? • 基盤は形を変えて似たような価値を提供し続ける。利用価値と運用コストのバランスを見つつ継続していく • 基盤を改善し続ける • 支援先のチームとのコミュニケーション、根本課題を把握する 何か参考になれば嬉しいです。ありがとうございました! 開発組織を横断して支える生産性向上チームの取り組み 53