2023/05/19 Findy開発生産性Meetupで登壇した際の資料です。 https://findy.connpass.com/event/281567/
取締役CTO 丹羽健【開発生産性 Meetup #2】6 deploys / dayを実現するフルサイクルエンジニア組織の文化と仕組み
View Slide
自己紹介2
アセンド株式会社3アセンドが対象とする物流・運送業界の課題
44
5運行管理SaaSロジックス5多機能プロダクトだけでなく各機能がデータ連携で繋がる複雑性にも対応
アセンドが求める開発生産性ユーザへの検証数がプロダクト価値の積み上げに相関関係がある。この目的で 6deploys/day ができるプロダクト開発組織を設計アセンドが求める生産性はプロダクト的な価値をどれだけ産み出す事ができるか● ユーザビリティの高いUX● ユーザの業務課題を解決する機能リーンマネジメントの考えでユーザに開発機能を小さく当て検証による失敗と改善を積み重ねる66プロダクト的価値 PRマージ数・デプロイ=検証回数追い求めているのはプロダクト的価値の生産性相関のある検証回数=deploys/dayをKPIとして設定毎日デプロイ頻度をSlack Botでチーム内に共有
7フルサイクルエンジニアでの開発71エンジニアでもソフトウェアのライフサイクル全てにオーナーシップを持ち開発できるよう開発環境を設計・投資ユーザ課題を中心として機能検証の開発サイクルを高速に進められるユーザ課題を中心として開発フルサイクルを支えるため多くの技術的投資と仕組み的な資産を積み重ねています
8フルサイクルエンジニアでの開発81エンジニアでもソフトウェアのライフサイクル全てにオーナーシップを持ち開発できるよう開発環境を設計・投資ユーザ課題を中心として機能検証の開発サイクルを高速に進められるユーザ課題を中心として開発フルサイクルを支えるため多くの技術的投資と仕組み的な資産を積み重ねています生産性の高い環境と仕組みは整備したが、生産性を高めた最終的な鍵は「数時間毎デプロイのメンタルモデルへのUnlearn」(フルサイクル開発の仕組みの詳細に興味がある方は懇親会の時にお声がけください)
週次・月次の頻度でのリリースをしていた転職メンバーの中には失敗を過度に恐れるあまりパフォーマンスが安定しない課題があった。週次リリースと数時間毎デプロイはパラダイムが異なることを認識し、メンバーへUnlearn (脱学習) を働きかける必要があった9数時間毎デプロイに対する恐れ9Unlearn 心理的安全性 仕組み的安全性「小さく失敗し、高速に価値を積み上げる」メンタルモデルへUnlearnさせる
週次リリースと数時間毎デプロイはパラダイムが異なることを前提として、過去の成功・経験に対して疑う視点を与えるベストプラクティスに対してベストである前提条件を与えることで論理的に脱学習に導くことができる勇気が必要なUnlearnができる安全な環境を提供する10Unlearn(脱学習)10脱学習Unlearn再学習RelearnブレークスルーBreakthroughUnlearn のサイクルUnlearn: Let Go of Past Success to Achieve Extraordinary ResultsBarry O'Reilly (2018)最近、翻訳版が出たので組織マネジメントに興味がある方はぜひ。過去の成功・システムの前提条件を問う
11数時間毎デプロイの為の心理的安全性11オーナーシップオンボーディング正社員・副業問わず初日に文言変更レベルのリリースを体験させ初日からパラダイムの違う世界にあることを認識してもらう。最初の数週間は簡単なタスクを中心に進め、小さくデプロイすることの成功体験を積み重ねられるようオンボーディングを設計する。フルサイクルに開発することで仕様・設計・FE/BEのレベルでブラックボックスが比較的少ない状態での開発が可能となる。デプロイ作業を含め運用も自身の管轄でできるため、切り戻しも自身の手で可能な状況にある。Customer Success との関係性障害といった失敗があった場合に顧客対応を取るのがCustomer Success。失敗した時に自身の手で救いきれない以上、協力者と適切に関係性を築いていることがベースの安全性に寄与する。「物流業界の価値最大化」のミッションドリブンな会社であることが所以。ポストモーテム失敗を受け止められる組織を作る為に最も有効な施策障害の発生後に失敗原因を環境や仕組みの観点で振り返る。コトを責めてヒトを責めない。ポストモーテム導入初期でのカルチャー形成は難しく3回は実施すること。小さい成功体験と信頼を積み重ねるサイクルを歩み、小さい失敗に対する心理的安全性を築くSRE Next 2022でのポストモーテムに関する登壇資料 →
12失敗の体積を小さくコントロール12ユーザ数発生時間深刻度失敗を単一の事象として見るのではなく、失敗を複数軸による掛け算=体積で見る。失敗を体積の大きさで見ることで、発生させてはいけない失敗の大きさが分かり小さな失敗を許容可能と見ることができる。失敗の軸を分解することでメンバーでも失敗の大きさをコントロール可能となる● ユーザ数● 発生時間● 深刻度失敗を体積で見る
13数時間毎デプロイの為の仕組み的安全性13FeatureFlag型安全な Full TypeScriptフロントエンドとバックエンドをTypeScriptで共通化型を最大限に活用し、一部定義を変更すると関連するコードがビルドエラーとなるよう壊れやすいコードの書き方をする。早期に失敗することで本番での失敗を減らす開発途中・検証中の機能をFeatureFlagで利用制限し、失敗をした場合でも影響を狭めることができる。環境・機能・ユーザ毎に開放する範囲を適切にコントロールすることで失敗の影響範囲をコントロールする小さいPR x Sentry (監視)PR分割し小さい単位でデプロイをすることで失敗をした際にも対象の特定が容易。またSentryを利用して即座にエラーが発生していることをSlackで検知できる状態にある。十数秒でのロールバックGitOpsを利用し、またArgoCDを利用してGUIベースでリリースのロールバック作業が可能。失敗が発生したとしても最短十数秒でロールバックが可能であるため、失敗を小さくすることができる「小さく失敗し、高速に価値を積み上げる」にメンタルモデルに Unlearnさせることができれば成功Feature Flagに関するアセンドのテックブログ記事→
社会課題解決に一緒に取り組む仲間を募集中です!オフラインミートアップも企画しております。ご興味を持たれた方はぜひお話しましょう!Message14CTO丹羽のTwitter(@niwa_takeru)もしよろしければフォローお願いいたします。