プリアンブル/tl;dr:私は最近、 The Lloyd Braun Principle of Agilityを発表しましたが、これは主に、典型的なとなりのサインフェルドのセリフ「今は平静、後は狂気」がどのようにアジャイルに関係しているかについてのばかげた、しかし真実の観察です。後で来る「狂気」にどのように備える必要があるかについての声明で、その投稿を締めくくりました.それを念頭に置いて、生産的なチームを構築するための私のアプローチを紹介します。システム負債を返済することです。
現代の技術チームは壊れています。私たちはシニアに頼りすぎて、ジュニアを活用していません。
私は昨年、複数のチームを「ニューノーマル」に適応させてきたので、この問題について何度も考えてきました。数か月前、採用担当者は後輩を採用すべきだという主張を支持する記事を書き始めました。効果的な議論を行うには、共通の懸念事項に対処する必要があることを知っていました。
あなたが管理に慣れていない場合、これは管理に関する私の「論文」です。これは、非常に効果的で生産的なチームを構築する方法に関するものであり、10 年以上にわたって複数の大規模なチームをうまく管理してきたことに基づいています。
以下は長い読み物です - したがって、 tl;dr は次のとおりです。
#TechnicalDebt についてよく話しますが、Technical Debt は、私がSystems Debt と呼んでいるより大きな問題の兆候です。
レシピは簡単です:
1) シニアにシステムの負債を返済するように指示し、仕事を楽にします。
2) 雇う。ジュニア。
3) 消耗戦をやめる。ジュニアは平均18~24ヶ月滞在します。彼らはさまざまな経験を望んでいます。彼らは他の仕事を探すでしょう。技術コミュニティとして、私たちはジュニアが年功序列への道でより多くの経験を積むことを望んでいます。それは彼らをより良くし、私たちをより良くします。それでは、消耗を受け入れましょう。彼らがこの 18 か月を最大限に活用できるようにすることに重点を置き、次のステップで彼らをサポートしましょう。
優れたデリバリー チームは、ユーザビリティを重視します。ユーザビリティを推進する原則は、パレートの原則、 おばあちゃんテスト、十分の原則など、さまざまな形で現れます。そして、彼らは皆、非常に人間的なことを考えています。これは必要以上に難しいことでしょうか?
使いやすさを優先し、明確なビジョンに重点を置いたミニマリストのデザイン。他のすべては気を散らすものであり、膨満感です。
リーダーシップ、マネジメント、ワーク/ライフ バランス、リモート/対面での仕事について話している人はたくさんいます。すべてが再評価されています - そして何ヶ月も私の心に残っている質問は、単に「仕事は必要以上に大変ですか?」ということでした。これは決して新しい問題ではありませんが、私のキャリアのほとんどを通して織り成されてきた糸です。私はコードを書いたり、製品を作ったりするのが大好きですが、全体的な見方をすると、より多くのコードが必ずしも答えではないことがわかります。コードが増えるということは、トレーニングとメンテナンスのコストが増えることを意味します。
あなたが新しいマネージャーである場合、この質問を心に留めておくことは非常に価値があります.マネージャーには多くの責任があります。あなたは各個人を支援し、成果物と個人の目標を達成します。あなたはチームの結束と方向性に責任があります。多くの場合、プロセスとポリシーを確立する責任があります。次に、リソースの割り当てと計画、および有給休暇スケジュールの調整があります。しかし、これらすべての指針となるのは同じ質問です。これは必要以上に難しいのでしょうか?
最後に内部メカニズムを評価したのはいつですか?配送チームを製品と考えた場合、消費者 (ビジネス/運用チーム) が目標を達成するのはどれほど簡単ですか?また、ビジネス全体を製品として考えた場合、顧客が自分のビジネスを達成するのはどれほど簡単ですか?
人々に注目すると、同じ質問が当てはまります。あなたのチームが仕事をするのはどれくらい大変ですか?どのような構造、フレームワーク、不自然なプロセス、ヒエラルキーが存在し、あなたのおばあちゃんがあなたが物事をどれだけ複雑にしているかに首を横に振りますか?
内部プロセスを批判的に評価するこの一連の思考は、実際、見過ごされがちなアジャイル哲学の一部です。チームは、完全にアジャイルである、または「アジャイル ハイブリッド」であると主張していますが、詳しく見てみると、彼らが意味することは、ずさんな製品をより速く提供するために、単に不便なコーナーをカットしているだけであることがわかります。ソフトウェアに関しては、ベテランの開発者なら誰でも、これが増え続ける技術的負債のレシピになることを正確に知っています。コーダーの間で流行っている冗談は、最後の人が間違ったことをしたというものです。これは、怠惰や能力不足によるものではありません。グリーンフィールド作業は、すべての技術的負債がなくなるため簡単ですが、同じ悪いプロセスを放置すると、再び成長するだけです.
技術的負債は症状であり、積極的に返済することに長けている場合でも、症状を治療しているだけです。この症状は、アジャイルとは単にソフトウェアを提供することだと考える誤りから来ています。
技術的負債の適切な定義は、「リファクタリングが必要な作業の蓄積」です。前述のように、配信に集中するときに近道をすることから発生します。積極的に返済しない限り、急速に成長します。技術的負債が多すぎると、脆弱性と不安定性が生じます。
最良の場合、技術的負債は意図的な決定です。後で返済することを意図して、何かを信用に置くことです。そのような場合、技術的負債は悪くありません - 負債を返済することに熱心であれば。技術的負債のより悪質な化身は、意図せずに負債を増やしたり、さらに悪いことに、追加したことに気付いていない場合です。
技術的負債はテクノロジーを扱いますが、プロセス負債には同様の概念があります。古いプロセスは古くなり、機能が低下し、摩擦が生じ、チーム間のダイナミクスに影響を与え、役割が変更されたために適用されなくなる可能性があります。 Process Debt は、非技術的な運用上の欠陥をカバーします。
デリバリーに影響を与える他の形式の負債はまだあります: 設計の負債、アーキテクチャの負債。
もちろん、借金は本質的に悪ではありません。健全な額の金銭的負債を戦略的に負うことができるのと同じように、これらの形態の負債を引き受けることは戦略的な決定です。車に 20,000 ドルを一度に支払う代わりに、自動車ローンを組んで、支払いを 10 年に分割します。同様に、使用するテクノロジー スタック、チームのスキルセットを構築する方法、それらの役割の年功序列、ビジネスを推進するプロセスは、一定期間にわたって返済される負債の形をとります。
ただ - 時々私たちはそれを払いません。さらに悪いことに、私たちは借金を返済していると思っていますが、実際にはさらに増えています.
私がシステム負債と呼ぶ概念を紹介したいと思います(システム理論におけるシステムと同じです。システム理論の詳細については、Donnella Meadow の素晴らしいThinking in Systems をお読みください)。
システムの負債は、ビジネス、技術、アーキテクチャ、またはプロセスの決定によるものであるかどうかにかかわらず、配信を妨げたり、悪影響を与えたりする下流の形式の負債の全体的かつ根本的な原因です。それは、ビジネスで計算された近道を取り、仕事を信用に置いた結果です。システムの負債は、その構造設計を通じてシステムの機能を妨げます。
Thinking in Systems で Meadows は、システムの簡単な例であるバスタブを提供しています。システムへの入力は蛇口で、出力は排水口です。 Meadows は、さまざまな要因によって浴槽が満タンにならない、水平に保たれない、またはオーバーフローしない原因について説明しています。最適なシステムは、水の残りのレベルです - 入口 (蛇口) と出口 (排水) が同じ速度で流れます。システムの負債は、システムを構成するときに近道をした結果です。浴槽の例えを広げると、蛇口の取り付けが不十分で、最終的に水が漏れる可能性があります。排水口の場所によっては、特定の領域に水が溜まり、浴槽が完全に排水されない可能性があります。多分私たちの水は軟化する必要があり、石灰が蓄積する原因になります.
これらの場合、すぐに影響はなく、最適なシステムを作成することは可能ですが、システムに負担をかけている負債の蓄積が隠されています。漏れを補うために蛇口をより速く流す必要があるか、蛇口の流れを遅くし、浴槽がいっぱいになるまでに時間がかかります。
Meadows の本に精通している場合、彼女の例の多くは現実に根ざしており、モデルは一般に静的なビジョンを提供します。システムは時間の経過とともに変化しません。彼女の目的にはぴったりですが、個人、チーム、運営、ビジネスに関して言えば、今日の私たちは明日の私たちではありません.
システム負債を少し異なる方法で定義するには、次のようにします。
ソフトウェア チームでは、システムの負債のマニフェストをいくつかの方法で確認できます。
プロダクト & オペレーション チームでは、システムの負債を同様の方法で見ています。
繰り返しますが、すべての形態の負債は、後で修正するつもりで、今すぐ近道をすることを選択した場合です。技術的負債は、コードでこれを行う場合です。プロセスの負債とは、正式なプロセスでこれを行う場合です。システム負債は、これを組織レベルで行う場合です。私はそれを「組織の負債」ではなく「システムの負債」と見なすことを好みます。なぜなら、組織をシステムと考えると、技術、プロセス、設計の負債はすべてシステムの負債によって直接引き起こされることを意味するからです。私たちが技術的負債を負うようになった要因は、最終的にはシステムの負債に関連しています。 (「川で溺れている人を救えるのは、川の上流に目を向けて、なぜ彼らが転落し続けるのかを判断する前に限られます。」)
例:開発チームは、適切に計画され、コストが設定された新機能をリリースしています。チームは順調に進んでいますが、最終段階で恐ろしい問題に直面することになります。問題に適切に対処してリリースを遅らせるか、最小限の修正を行ってから次のイテレーションで適切に解決するか?彼らは技術的負債を引き受けることを選択します。「次の反復でそれを取得します。」
これが、システム負債が方程式に入り始めるところです。チームは本当にそれに対処できるでしょうか?チームはリファクタリングに十分なスキルを持っていますか?ビジネスは「それで十分です。先に進む必要があります」と応答しますか?将来のコスト計算で、正しい方法を実行するにはコストがかかりすぎることが明らかになるでしょうか?優先順位の変更や緊急の問題の急増によって、修正が突然、別の繰り返しで遅れることはありますか?それから別の繰り返し、そして別の...
さらに、上流に目を向けると、問題が発生するまでになぜそんなに時間がかかったのですか?どのような悪い仮定がなされましたか?それらは悪い仮定でしたか?ゲームの後半になるまで判断できない問題は常にありますが、なぜそれがリリースを遅らせる問題になったのでしょうか?約束が早すぎた?もっと大きなバッファがあったはずですか? Aさん(上流の営業担当者)がFさん(下流の開発者)にもっと短い連鎖で話しかけていたら解決したのでしょうか?
もう 1 つの非常によく知られている例は、ビジネスが 3 ~ 5 年でどのように拡大するかという仮定に基づいて、早い段階で自分自身を固定するインフラストラクチャ、アーキテクチャ、およびホスティング モデルに関するものです。小規模なチームは、最高の DevOps 原則に従うよりも、迅速なデリバリーを優先して、早い段階でインフラストラクチャとアーキテクチャの負債を負うことを選択する場合があります。
もちろん、詳細がなくてもこのようなシナリオを描くのは簡単ですが、詳細やその詳細の言い訳に関係なく、システムの負債が発生します。それは避けられません。それは問題ありません - 常に注意を払う必要があり、維持可能なレベルまで下げることに集中するだけです。
私たちは、近道として、システムであろうとなかろうと、負債を引き受けます。システム負債とその返済方法について深く掘り下げる前に、まず一歩下がって、近道を選ぶ理由を考えてみましょう。ショートカットは、負債と同様に、本質的に悪いものではありませんが、詳細に分析する必要があります。
物理的な近道について考えることは、始めるのに最適な方法です。歩行者や自転車に乗ったことのある人なら、物事が最初に車両用に設計され、次に歩行者用に設計されていることに気付いたことでしょう。歩くと、多くの「近道」を取り、道をたどらないことになりますが、もちろん、これらは近道ではありません。これらの近道は、車が通れない場所に行ける歩行者にとって最適な経路です。実際、歩行者が多い地域で主に車用のルートを構築することは、[別の形](別の形)のシステム負債です。
ビジネスの世界では、時間の不足、予算の不足、リソースの不足、説明責任の欠如、広い視野の欠如などを補うために近道をします。時間、予算、リソースのすべてにスポットライトが当てられますが、説明責任と広い視野がまさに私の最初の質問の核心です。人が川で溺れるのを防いでいるとき、それは上流に目を向けること(広い視野)と、人を押し続けている人(説明責任)を指し示すことです。
言い換えれば、システム負債について真剣に話し合う場合は、全員が会話に参加する必要があります。ローカライズされた取り組みはこれまでのところしかありません。
先ほどの質問に戻りましょう:デリバリー チームにとって、デリバリーはどれくらい簡単ですか?この質問について考えたことがない場合は、いくつかの指標を取得する時が来ました!これらの指標から必ずしも答えが得られるわけではありませんが、出発点としては重要です。 KPI に関して私がこれまでに受けた最高のアドバイスは、個々の KPI は悪くも良くもないということでした。客観的には単なる数値、値です。それはあなたの通常のビジネスです-そして、あなたはその数を上下に調整したいかどうかを決定します. OKR システムや SMART 目標のファンなら、これは素晴らしいことです。KPI を知ることで、簡単に定量化できるより良い OKR を作成できるからです。
それでは、いくつかの基本から始めて、雑草に取り掛かりましょう。以下は包括的なリストではなく、あなたのグループに適したより良い質問があるかもしれません.このリストは、より良い質問をするための出発点と考えてください。
これらの質問は、チームのパフォーマンスを追跡する人にはなじみがあるように思えるかもしれませんが、組織レベルでこれらを尋ねることを忘れないでください.開発者のリード タイムは、チケットが作成された時点から始まっている可能性があります。
何かが開始されてから利用可能になるまでにかかる時間を簡単に把握することは、特にそれが顧客の問題である場合、非常に啓発的です。
上記の指標を改善するのに役立つリソースは多数ありますが、これらすべての背後にある重要な哲学は、1) 測定、2) 分析、3) 解決、4) 反復です。 Tier 3 が Tier 2 にオフロードできる問題が多いほど、Tier 2 が Tier 1 にオフロードできる問題が増え、Tier 1 が顧客が独立して解決できる問題が増えるほど、全員の生産性が向上します。
参考までに、Etsy は効率性の良い例であり、優れたベンチマークになります。 Etsy は、開発者が 初日に本番環境にデプロイできるようにします。
上記のすべての数値と指標を考慮して、これらの数値のいずれかが通常のビジネスを表していることを繰り返します.それらは本質的に悪いものでも良いものでもありませんが、システム負債により、これらの数値を長期的に維持することが難しくなります。一部の数字は驚くべきものであり、そのような債務がすでに影響を及ぼしている可能性がある分野を明らかにしている.
次のステップは、成熟し、成熟し続けるにつれて、これらの指標が時間の経過とともにどのように変化するかを検討することです。例として、コア製品を構築したエンジニアは、スケーラビリティの限界に近づいているアーキテクチャにあなたを閉じ込めました。このような場合、チームは技術的負債をどのように返済できるかを検討しますが、システム負債はどうでしょうか?リソースが限られており、減少のリスクが高まり、ビジネスが成熟している場合、技術的負債を返済しながら配信 KPI を維持するにはどうすればよいでしょうか?
これらは、1 つの見出しに大胆なステートメントをまとめたものです。要点は次のとおりです。プロセスをショートカットするのに「役立つ」ことは危険な場合があります。 「測定されるものは実行される」という考えに同意する場合、役立つことの問題は、測定されないことが多いことです。
移動が速すぎてポータルのレコードを誤って削除してしまったという顧客からの電話を想像してみてください。彼らは時間がなく、記録を復元するプロセスを経ることができません。彼らが電話をかけてくると、カスタマー サポートの従業員は、役に立ちたいと思ってすぐにデータベース エンジニアにエスカレートし、データベース エンジニアは役に立ちたいと思って、すぐにレコードを復元します。お客様はわくわくし、NPS スコアが上がります。すべてが素晴らしいですよね?
誰かが実稼働データベースを更新することの明らかなリスクを一瞬無視すると、役立つ情報が失われてしまう貴重な情報がたくさんあります。
はっきりさせておきますが、私の見出しは太字です。しかし、私は顧客を支援することを否定しているわけではありませんが、そのような行動には根本原因の分析が必要だと思います.過度に正式なものはありませんが、将来同様の問題を回避するためのものです。
ある組織では、プレイブックを実装するだけで、開発チームの生産性が 50% 向上しました。お客様から電話があり、解決に向けて明確なワークフローに従うカスタマー サポート担当者が丁寧に対応します。彼らがそれを解決できない場合は、問題を 1 回だけエスカレートできるように、フィードバック ループがあります。その結果、カスタマー サポート チームの能力とスキルが向上し、開発チームの中断が少なくなり、全体的なストレスが軽減されました。そして、重要なことに、顧客は満足していました。
要点は、有用な作業が影で発生すると、根本原因を修正できないということです。
スキルの低いチームを補うためにあまりにも多くの仕事と責任を負っている Rock Star の開発者にも同じ問題が見られます。彼らは不満を募らせ、燃え尽きて、離れていきます (壊滅的なコストになる可能性があります)。 Will Larson の素晴らしい本 - an Elegant Puzzle - は、あなたの「ロックスター」の扱い方について素晴らしい仕事をしています。
高齢者は、組織と製品の成功にとって重要ですが、同様に最大のリスクの 1 つでもあります。
たとえば、上級開発者はコードベースを徹底的に知っています。彼らは、何が文書化され、何が文書化されていないかを知っています。彼らは、それがどこでうまくスケールし、どこでバラバラになるかを知るでしょう.彼らは骸骨がどこに埋められているかを知るでしょう。機能の構築と設計、ソリューションの設計、最も厄介なバグの解決を支援するために、私たちは頻繁に彼らに頼っています。彼らはどんな質問にも答えることができる知識の達人です。彼らは若手スタッフのトレーニングと指導を行い、ソリューションを開発する際に相談を受けます。
とは言え、先輩社員からの依頼は多い。彼らの経験と、おそらく組織の成功に対する既得権益を考えると、それは明白な声明です。ただし、これが最もシステムの負債を負う場所であると断言します。
成果物を進めるシニア スタッフ メンバーは、システム負債を発生させる近道です。
誤解されやすいので繰り返します。上級チーム メンバーに成果物を作成してもらうことはできますが、その際に発生する負債を返済する計画を立てる必要があります。
成果物をシニアに依存することは、壊れたモデルです。特に、多くのジュニアおよびスキルの初級レベルの候補者が存在する今日の世界では、中級者から上級者の減少のリスクが高く、コストがかかります。
リモートの仮想労働力により、上級スタッフの離職の影響を減らしながら、下級/中級チームを昇格させることが組織にとってより重要になっています。これはシニアスタッフを削減するという意味ではありませんが、アプローチの構造的な違いを意味します。
一般化すると、今日の上級チームは、システムの背後にある複雑さに大きく責任を負っています。彼らの経験と専門知識は成熟したシステムを生み出し、より小さなタスクベースのコンポーネントはより若いチーム メンバーによって実装されます。
これはまさに、上級チーム メンバーが退職した場合に問題となるモデルであり、システム負債が発生する構造でもあります。このような状況では、上級者が複雑な問題に責任を持ち、下級チームが成果を上げられないときに介入して支援することができます (例として、「ロックスター」開発者)。
この問題は、現在のスタッフの離職率によってさらに悪化しています。たとえば、ジュニア開発者は全国的に 18 ~ 24 か月(大企業ではより長く) 職務にとどまります。言い換えれば、ジュニアがより重要な貢献をし始めることができるポイントに到達するまでに、彼らは退場している.
組織は、シニア スタッフを維持するために戦い、ジュニア スタッフを維持するために (ある程度) 戦います。そして、常に知識の流出に悩まされています。最終的には、これは負け戦です。たとえスタッフが維持されたとしても、新しいチーム メンバーが加わったとしても、彼らは多額のシステム負債を返済しなければならない立場にあります。
ミシュランの星を獲得した小さなレストランを想像してみてください。料理長はプレートの製造に深く関わっており、料理は複雑すぎて料理人チームに分配することはできません。この場合、シェフはレストランです。
これを、より広範なフランチャイズ レストランと比較してください。あなたは会社に戻り、顧客が消費する料理を作らないという責任を負っている料理長を持っています。代わりに、彼らの目標は再現可能な料理を作ることです。簡単に再現できる料理(おいしさをそのままに)。学習曲線が最小限になるように最適化された料理 - 新しい料理人が料理を作るように簡単にトレーニングでき、最終的に離れてしまうことによる影響が少なくなります。また、料理長は効率化の専門家と協力して、フランチャイズ加盟店のキッチンを配達用に最適化する方法を検討しています。
これは、現代のチームを考えるときに使用すべきモデルです。上級チームの責任は、製品の複雑さであってはなりません。トレーニングと立ち上げ、セットアップ時間、ビルド時間を簡素化し、リードタイムとサイクルタイムを合理化する (販売/製品ソリューションからイテレーション計画、リリースに至るまで) など、提供を簡素化することに完全に焦点を当てる必要があります。
従業員を 18 か月しか維持できないことがわかっている場合、どのように物事を構成しますか?実際、18 か月の契約を結び、最後に強制終了するとしたら、どのように構成しますか?ランプアップはできるだけ速く、短くする必要があります。専門家のチームは、新規採用者が数週間で増強できるようにして、効果を最大化できるようにする必要があります。専門家のチームが、効率を最大化する回転式ドアを維持し、支援に介入しないようにする必要があります (負債を構築するリスクがあるため)。
短期間の雇用を受け入れて活用できる、より適応性の高いシステムを構築することで、シニアチームメンバーを失った場合の影響を軽減できます。知識は人ではなく過程で不滅になるからです。
鬼ごっこは誰に教わったの?世界のどこにいても、他の子供たちからこのゲームをプレイすることを学んだことでしょう。大人は子供たちに鬼ごっこを教える必要はありません。
私たちはミームを面白いイメージと考えていますが、ミームの本来の定義は、模倣やその他の非遺伝的手段によってある個人から別の個人に受け継がれる文化または行動システムの要素です。
タグはミームです。誰もルールを所有していません。ゲームを改善する責任は誰にもありません。実際、ルールはシンプルでありながら、Freeze Tag のようなバリアントもサポートしています。さらに、さまざまな環境に適応することができます。それは、最終的にクールすぎるティーンエイジャーに変わる子供たちの回転ドアのために設計されています.
Tag のようなゲームのシステム負債はほとんどありません。 Tag を、より多くのプレーヤーやより多くの機器を必要とする他の遊び場ゲームと比較してください... British Bulldog、Dodgeball、Duck Duck Goose、Cops 'n Robbers、Red Rover。これらのゲームをプレイしたことがあるかもしれませんし、プレイしていないかもしれません。これらのゲームには、システム負債がわずかに多くなります。より多くのルール、より多くの機器、またはより多くのプレーヤーは、より多くのファシリテーターが必要であることを意味します。
上げ潮はすべての船を持ち上げます。高齢者は、ボートではなく、潮であるべきです。
私のキャリアを通じての指針は、問題が生産性にどのように影響するかを理解することでした。より効率的なチームを作ることではなく、より影響力のあるチームを作ることです。プロダクト マネージャーには、アウトプットではなくアウトカムを測定するというマントラがあります。自分が何をしているかを理解している場合、効率は重要であり、それをより速く実行する必要があります。衝突は、不定形で、定義が不十分な、移動するターゲットです。適応が必要です。アジャイルの原則、OKR、リーン、カンバンが正しく使用されると非常に強力になるのはそのためです。
システム全体の成果に焦点を当て、システムの負債を返済することで、さまざまな方法で影響力を発揮する機会が得られました。
先に、ローカライズされた取り組みには限界があると書きましたが、私はそれを支持します。組織全体がより効率的になる方法を批判的に検討するとき、そこに真の改善が見られます。局所化された取り組みは、これまでのところしか達成できませんが、実際に達成され、達成されると、影響力の資本がもたらされます。
これらの最終原則で締めくくります。
それで全部です! (彼は、彼の最長の記事を書いたことの完全な皮肉を認めて書いた。)