複数のスクラムチームによるコードの所有権


10

2つのスクラムチームが同じソフトウェアコンポーネントを使用する場合、そのコンポーネントの明確なアーキテクチャビジョンを提供し、コードベースの進化に合わせてこのビジョンを維持/開発する責任を持つのは誰ですか?スクラムでは、共同でコードを所有することになっているので、チームAが行った開発がチームBが行った開発に干渉しないようにする方法を教えてください。

回答:


10

私はスクラムの専門家ではありませんが、AFAIKの「集団的コード所有権」は、チームごとおよび製品ごとのものです(そして、あなたの質問はスクラムに固有ではなく、「共有コード」開発プロセスに適用できると思います)。

2つのチームA、B、2つの製品A、B、および共有コンポーネントCがある場合、考えられるシナリオは異なります。おそらく、共有コンポーネントは主に製品Aに属しています(そして、製品Bのチームによって再利用されていますが、進化していません)。この状況では、チームAは明らかにアーキテクチャのビジョンに責任があります。あるいはその逆:それは明らかに製品Bに属します-したがって、責任があります。チームAが責任を負う場合、チームBはコンポーネントのフォークを使用して緊急のバグ修正を許可する可能性があります(Cのメインラインに再統合する方法もあるはずです)が、Bはコンポーネントのより大きな進化を行わないようにする必要があります。

ただし、製品AとBの両方にCに対する多くの「駆動要件」がある場合は、Cを完全に別個の製品として管理し、独自のバージョン管理、リリース管理、変更管理、単体テストなどと、そのコンポーネントの責任。そのチームは、チームA、B、またはその両方の別々の開発者で構成される単なる「仮想チーム」である可能性があります。このチームには、Cの「共有コードの所有権」と「アーキテクチャビジョン」の責任があります。Cがサードパーティベンダーから提供されたコンポーネントであると考えてください。


「共有コンポーネントは製品Aに属しています」または...?
Joe Z. 14

6

スクラムやアジャイルには、「明確な建築ビジョン」という概念はありません。

私は長い間建築家でしたが、建築のビジョンを持つためには、将来の要件を明確に把握する必要があることは明らかです。ほとんどの場合、要件はまったく明確ではないため、固定されたビジョンを持つことは意味がありません。

必要なのは、変化する要件に十分に適応できるアーキテクチャを持つことです。言い換えれば、物事が変わり、アーキテクチャが変わる-私は、再構成可能な「ソフト」アーキテクチャを主張しているのではない。私が今日持っているアーキテクチャはすぐに時代遅れになり、変更する必要があることを受け入れることについて話しているので、だれもそれと「やりとりする」べきではありません。

集合的なコードの所有権とは、誰もが-理論的には-何でも変更できる必要があることを意味します。これは「サイロの反対」として理解する必要があります。言い換えれば、スキルバリアが存在する可能性がありますが、これは正常で予期されることです-誰もがSQLクエリを微調整して、例を示すことができる経験豊富なDBAであるとは限りません-しかしこれからは、DBAだけが実行できるとは限りませんクエリを手で最適化します。他の人々が熟練するのを助けることができる「機能ドメイン専門家」がいますが、タスクはまだ誰にでも落ちるはずです。

たとえば、私が機能 "A"のドメインエキスパートである場合でも、他の誰かが機能 "A"で作業することを期待していますが、大きな変更が必要な場合や人々の助けが必要な場合は、相談を受ける可能性があります。機能「A」は確かに私の機能ではありません。それは私がよく知っている特徴でしょう。もっと多くの機能を知ることは私の興味であり、この機能を知ることは他の人の興味です。

合成では、要件が出現して変化するにつれて、開発者はアーキテクチャを何度も設計および再設計します。誰もが自分のスキルに応じて必要な変更を行い、いつ助けを求めるべきかを知っていることが期待されています。私たちは人々信頼し、要件を信頼していないため、アーキテクチャに関する長期的なビジョンはありません


しかし、これは私の質問に直接答えるものではありません。複数のチームが使用するコンポーネントをどうするか?現在のアーキテクチャが適切であることを誰が確認していますか?アーキテクチャの「ビジョン」が次の1〜2枚のスプリント用である場合でも、ビジョンは必要です。すべてのチームおよびアーキテクチャ全体に対する変更の影響を理解せずに、さまざまなスクラムチームの開発者がコンポーネントを変更することは望ましくありません。
ユージーン

1
それはあなたの質問に答えます...私が「全員」と言うとき、私は「チーム全体」を意味します。誰もが共有コンポーネントを変更できるようにすることはそれを壊すことに私は同意しません-開発者はリスクを認識し、それが正しく行われると信頼されるべきです。
Sklivvz 2014

したがって、共有コンポーネントを変更したい人は、このコンポーネントに最も精通している開発者とのミーティングを開催し、一緒にコンポーネントの設計を新しい要件に適合させると思います。それはあなたがあなたの組織で働いている方法ですか?
ユージーン

@Eugeneそれは私が言ったことではありません:誰もが委員会の許可なしにものを変えることができます。私たちは、人々がそれを必要とする場合は助けを求め、彼らがそれを台無しにした場合は問題を解決することを信頼しています。
Sklivvz 2014

わかります。これが正式で義務的なプロセスだと言っているのではありません。多くの場合、変更を加えたい人は、変更の影響の可能性を理解するために会議をスケジュールすることを望んでいると思います。
ユージーン

4

たとえば、spotifyは「システム所有者」という名前のロールを使用して、ドキュメントから直接問題を解決します。

技術的には、誰でも任意のシステムを編集できます。チームは実質的に機能チームであるため、通常、新しい機能を実稼働させるには、複数のシステムを更新する必要があります。このモデルのリスクは、システム全体の整合性に誰も焦点を当てないと、システムのアーキテクチャがめちゃくちゃになることです。

このリスクを軽減するために、「システム所有者」と呼ばれる役割があります。すべてのシステムには、システム所有者またはシステム所有者のペアがいます(ペアリングをお勧めします)。運用上重要なシステムの場合、システム所有者はDev-Opsペアです。つまり、開発者の視点を持つ1人と運用の視点を持つ1人です。

システム所有者は、そのシステムに関連する技術的またはアーキテクチャ上の問題の「後任者」です。彼はコーディネーターであり、そのシステムでコーディングする人々がお互いにつまずかないように指導します。彼は、品質、ドキュメント、技術的負債、安定性、スケーラビリティ、リリースプロセスなどに焦点を当てています。

システム所有者は、ボトルネックや象牙の塔の建築家ではありません。彼は個人的にすべての決定をしたり、すべてのコードを書いたり、すべてのリリースを行う必要はありません。彼は通常、チームのメンバーまたはチャプターリーダーであり、システムの所有権に加えて、他の日常的な責任も持っています。ただし、時々彼は「システム所有者の日」をとり、そのシステムのハウスキーピング作業を行います。通常、私たちはこのシステムの所有権を1人の時間の10分の1未満に維持しようとしますが、システムによって大きく異なります。

私はこのアイデアが本当に好きで、会社レベル(チームレベルだけでなく)でメリットやコードの所有権を共有していますが、このシステムの所有者はアーキテクチャの整合性を確保しようとしています。

完全なドキュメントへのリンク:https : //dl.dropboxusercontent.com/u/1018963/Articles/SpotifyScaling.pdf、これはアジャイルのスケーリングに関する実際の経験に基づいた、短くて非常に興味深いドキュメントです。


かなりクールな組織、およびシステム所有者に関する興味深いアイデア
ユージーン

テキストのブロックを太字にして斜体にして引用であることを知らせる代わりに、エディターは「引用されたテキスト」機能/スタイルを提供します。テキストのブロックを選択し、エディターの上部にある二重引用符アイコンを使用するだけです。これを使用すると、引用されたテキストをサイト全体で一貫した認識可能なスタイルに保つことができます。
Marjan Venema 2014

2

これは解決するのが難しい問題であり、開発方法論ではなくプロジェクト管理方法論であるスクラムでは確かに解決されません。

私が見つけた最も効果的なソリューションは、優れたパッケージ管理(nuget / gem / etc)とバージョン管理です。他のチームが変更を使用する準備ができるまで、変更を強制しないでください。新しいビルドに移行する間、古いビルドを使い続けさせます。

どの変更が壊れているか、どの変更が拡張であるかを明確にするバージョン管理戦略があることを確認してください。

また、変更を加える場合は、コードレビューを各チームの誰かにプッシュします。彼らがそれを消費するように強制されるずっと前に、彼らが彼らに影響を与える可能性があることを彼らに見てもらいましょう。

そして、物事が本当に乱雑になると、あるチームが変更を行う必要があり、別の変更を簡単に利用できない場合(これは本当にまれなケースです)、コードを分岐し、まったく別のパッケージにしますが、できるだけ早く共通のコードに戻ることを優先します許可します。


1

常に明確であるとは限らない答えは、特定のコンポーネントをどのように共有するかをチームに決定させることです。

たとえば、私のチームは最近、長い間類似の製品を開発してきた他の2つのチームと多くのコードを共有する新しい製品ラインの開発を始めました。当社の製品はいくつかの点で異なります。そのため、共通のコードにカスタマイズポイントを追加する方法を見つける必要がある場合があります。

そのコードについていくつかの衝突があり、共通の所有権を扱ういくつかの異なるアドホックな方法を試しました。次に、大きな新機能が登場したため、すべてのチームをまとめて同じページを表示する必要があると判断しました。その結果、詳細を検討している各チームのカップルメンバーで構成される小さなグループができました。

私たちのチームが考え出したソリューションは、別の状況では機能しない可能性があります。もっとシンプルなもの、またはもっとフォーマルなものが必要かもしれません。重要なのは、あなたは集団的所有権を取り、自分にとって何がうまくいくかを理解することです。


「決定しました」とは、コンセンサス決定という意味ですか。または、これらの場合の最終決定は、建築家/技術リーダーに属しますか?
ユージーン

合意の決定。スクラムマスターによっていくらか進められたが、指示されなかった。
カールビーレフェルト

1

私は自由に仮定します:

  • 受け入れテストは自動化されています。
  • コンポーネントは、適切なOOP原則を採用しています:低結合と高結合。

上記の仮定が正しければ、2つのチームが互いに干渉することはまれにしかありません。彼らは次の方法を使用してそれを解決できます:

  • 他のチームの受け入れテストが失敗したらすぐに、彼らと話し合って、共有コンポーネントの使用法が正しいか、またはあなたのものかを理解してください。両方の使用法に問題がない場合は、その使用法の共通部分が共通の基本コンポーネントにプッシュアップ(リファクタリング)されているかどうかを確認します。使用法の差異は、子クラスを使用して管理されているか、構成によって管理されている可能性があります。
  • コンポーネントがアクティブに開発されている間は、コンポーネントの責任者を1人にしてください。チーム間の共有リソースとして行動する必要があります。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.