web-dev-qa-db-ja.com

Sprint Planning 2で語るべき技術的な詳細

私はスクラムチームで働いています。バックログを技術的なタスクに分解するためのSprint Planning 2があります。

チームは約12人の開発者で構成されています。分割できないため、管理できません。

すでにアーキテクチャは設計されていますが、コードベースは進化し続けているため、すべてをカバーしているわけではありません。

そして、プルリクエストになると、多くのプルリクエストが予期しないデザインでショックを受けます。

私たちは、チームが作業を開始する前に、どの程度の技術的詳細について話し合ったり、提供したりするのかと苦労しています。

細かいところまで行き過ぎると、議論が不正確になる可能性があり、実際に実装して実装する際に設計の変更が見られます。

私たちがより自律的に進んだ場合、人々に彼らの解決策を考えさせてください、人々はそれがどうあるべきかと比較して非常に異なるアプローチを考え出します。

だから問題は、

これを改善するために、Sprint Planning 2でどの程度詳細に話すべきですか?

そして、この問題を解決するための要因と方法はありますか?

3
b.ben

あなたとチームにいなければ、確かなことを言うことはできませんが、すべてが解決され、私の経験では頻繁に起こることはないので、Sprint Planningから出てくることを期待しているようです。私はいつもスプリントの仕事を始めるために必要な会話をする必要があるというマイク・コーンの答えが好きでした。同様に、開始するには、技術的な詳細レベルに入る必要があります。私の経験では、データが存在する可能性のあるシステムやシステムの冗長性に関する要件について話し合うことは珍しくありませんが、実際にSprint Planningで実装を設計している場合は、役立つよりもさらに進んでいることでしょう。

スクラムは、実装全体を通じてチームメンバー間で頻繁に話し合うことで、高度にコラボレーションすることを目的としています。建築ビジョンの範囲を超えたデザインは、後からのサプライズとは言えません。これを助ける多くの良い習慣がありますが、私が遭遇する大きなもののいくつかは:

ペアプログラミング(またはmobプログラミング):私は自分の時間でかなりの量のペアプログラミングを実行しましたが、欠点とフラストレーションを知っていますが、チーム全体を獲得するのに苦労している場合コードまたはアーキテクチャ標準の同じページで、このアプローチは、合意されたアーキテクチャを離れてから別の人が0秒をキャッチするまでの時間が0秒であることを意味し、これに勝るものはありません。

Architectural Reviews:プログラミングであろうとその他の情報であろうと、人々が情報を利用できるようになっているので、彼らはそれを知っているという奇妙な仮定があります。アーキテクチャー設計(またはコード標準、UX標準、またはチームが従うことが期待されるその他の何か)を持っている場合、彼らがそれを理解していると想定しないでください。まだ時間がない場合は、時間をかけて一緒に検討してください。そして、彼らが合意された基準を残したプルリクエストを提出した場合、それは彼らがそれを理解しなかったことを意味するかもしれません。コーチや教師のようにそれに取り組み、違いを埋めるのを助けます。

Throw It Out:誰かが標準(アーキテクチャ、品質など)を満たさない作業を行った場合は、マージしないでください。企業は常に「無駄」な仕事を恐れています。しかし、標準を満たさないコードを受け入れる場合は、標準がそれほど重要ではないことを明示的に表明しています。

チームコードレビュー:多くの組織はコードレビューをチェックオフとして扱っており、一部の組織にとってはそれで問題ない場合があります。しかし、それは知識と期待を共有する機会でもあります。あなたの状況では、いくつかの完全なチームコードレビューを行うと、スプリントが本当に役立つ場合があります。

私はこれらのほとんどが人々の時間に対して「非効率的」であることを認めたいと思います。これは意図的なものです。スクラムは最初に効果的であるとしています。チームが効果的になると、効率性を心配します。チームのコードレビューなどに負けた時間は、アーキテクチャのビジョンを満たすために機能の再設計や再設計に費やさない時間までに支払う必要があります。

3
Daniel

まず、2011年版のスクラムガイド以降、Sprint Planning 2はないということです。

WHAT(Sprint Planning 1)とHOW(Sprint Planning 2)は、2013年版のスクラムガイドの1つのスプリント計画会議のみに統合されました(スクラムの実装には latest ガイドを使用する必要があります)。新しいバージョンは学んだ教訓から古いバージョンを改善するので)。ほとんどの場合、2つを分離できないため、これらはマージされました。 HOWはWHATに影響を与える可能性があります。そして、それらを分離しようとすると、すべてのスクラムチームメンバー間に存在するはずのコラボレーションが確実に減少します(たとえば、Sprint Planning 2ミーティングでは、プロダクトオーナーはオプションですが、HOWについて話し合うとき、それはそれほど素晴らしいアイデアではありません。開発者はまだ質問を抱えている可能性があり、プロダクトオーナーのみが回答を提供できる決定を行う必要があります)。

そうは言っても、建築設計の決定は、スプリント計画で実際に議論するものであってはなりません。あなたの問題は、これが計画会議の入力として実施する必要があるものであるときに、計画会議の出力として設計を実施しようとしていることです。

誰もが均質な設計とアーキテクチャに貢献する必要があります。そうでない場合は、その理由を説明する必要があります。次の回顧会議でこの問題を提起し、チームがそれを改善する方法を見つけ出す。スクラムの使用方法を改善することは、プロセスに取り組むだけでなく、技術的な実践にも取り組むことになります。他の人が指摘したように、たとえばコードレビューを使用してそれを行うことができます。デザインがアーキテクチャと一致しない場合は、ストーリーが「完了」しないようにします。コードレビューの合格を「完了の定義」の一部にします。ストーリーがコードレビューに合格しない場合、それは「完了」ではないことを意味します。

アーキテクチャのミーティングを行い、コードレビューのための適切なルールを選択し、必要に応じてトレーニングを行うことで、誰もがアーキテクチャを理解し、設計上同じページにいるようにします。そうすれば、スプリント計画で話す必要がある技術的な詳細について心配する必要はありません。 WHATとHOWについて十分な自信を得て、スプリントの目標を達成するのに十分な作業を予測するのに十分なだけ話します。

2
Bogdan

「機能xについて合意された設計を作成する」などのスプリントアイテムを追加するだけです。これはポイントを与えられ、誰かがタスクを引き受け、デザインを作成し、他の人が同意するようにします。次のスプリントは「デザインに応じてxを実装する」です。

2
gnasher729

スプリント計画は、技術的な実装のためのフォーラムではありません。

通常、タスクは実装の詳細には入りません。

例(ストーリーのサンプルタスク):

  • 開発の実装
  • 開発ユニットテスト
  • 開発コードレビュー

技術的な実装に問題がある場合は、別の会議をスケジュールしてください。それをテクニカルストーリープランニングと呼びます。開発者のみを招待してください。各ストーリーを読み、それがどのように実装されるかについて話し合います。実装の詳細を追加したい場合は、開発実装タスクの下のアイテムとして自由にストーリーに追加してください。詳細コードは、メモ、Word/pdfドキュメント、または正式なアーキテクチャドキュメントです。

1
Jon Raynor

スクラムガイドでは「スプリント計画2」について言及していませんが、質問に基づいて、チームがスプリントの目標を決定して選択した後のスプリント計画の部分を参照していると想定します。適切な製品バックログ項目。スプリント計画イベントのこの部分では、チームは、作業がどのように行われ、目標が達成されるかについての計画に取り組みます。

残念ながら、現時点でのチームの計画とSprint Backlogの詳細については、誰も答えはありません。スプリントゴールの達成に向けて彼らを導く可能性が高い計画をチームが持っているという十分な自信をチームに与えるには十分であるはずです。 「十分」、「十分な自信」、「可能性が高い」という意味は、組織によって異なります。一部のチームや組織は、変更やリスクに対してより寛容であり、より少ない計画を実行できます。他の組織はリスクに対する許容度が低く、計画はより詳細になる可能性があります。唯一のルールは、スプリント計画イベントのタイムボックス(8時間)です。タイムボックスはスプリントの長さに関係なく保持されますが、期間が1か月未満のスプリントは8時間未満で完了する傾向があります。

スプリント計画と計画における技術的詳細のレベルが問題であると私は確信していません。問題は、チームが行った作業がアーキテクチャのビジョンに沿っていないことである場合、それはSprint Planningで対処する必要のあるものではありません。それは、建築のビジョンが何であるかについての適切なコミュニケーションの確保から、すべての個人からの賛同を得ることから、より多くのペアと暴徒の設計と実装に至るまで、他の方法で取り組むことができます。これらを使用して、建築ビジョンを開発、教育、および実施し、ビジョンが現実と一致しない場合に対応することができます。

事前に行う設計の量を検討する代わりに、スプリント全体に設計をプッシュし、アーキテクチャの決定が行われている間、チーム全体が継続的な改良と合意に関与する方法を推奨します。

1
Thomas Owens

そして、プルリクエストになると、多くのプルリクエストが予期しないデザインでショックを受けます。

私たちがより自律的に進んだ場合、人々に彼らの解決策を考えさせてください、人々はそれがどうあるべきかと比較して非常に異なるアプローチを考え出します。

あなたの発言は、スプリントの計画中に明示的に議論されなかったすべてに対して開発者が完全な自律性を持っているという期待を示唆しているようです。それは本当にそうであってはなりません。

  • 細かいところまで行き過ぎると、議論が不正確になる可能性があり、実際に実装して実装する際に設計の変更が見られます。
  • 私たちがより自律的に進んだ場合、人々に彼らの解決策を考えさせてください、人々はそれがどうあるべきかと比較して非常に異なるアプローチを考え出します。

作業を始める前にすべての設計上の決定を公証することは、マイクロマネージメントです。しかし、開発者に完全な個人の自律性を任せることは、管理の絶対的な欠如です。健全な管理は両極端の中間にあり、ここでバランスを取る必要があります。

whatに焦点を当てたスプリント計画では、取り組む必要があります。 方法実装する必要があるのは、まったく別の議論です。問題に取り掛かる前に(つまり、スプリント自体の間に)問題を解決する(つまり、正確な実装を決定する)ことは意味がありません。

全体像-スプリント計画の前

公平を期すために、ここにはいくつかの重複があります。より大きなタスクの場合、それを個別のタスクに分割するには、多くの場合、少なくともアーキテクチャの全体像を理解する必要があります。全体像のアーキテクチャに関する決定は、(a)開発者だけが自律的に決定するのではなく、(b)スプリント計画の前(たとえば、新機能)またはスプリント計画中の一部の場合(たとえば、既存のバックログからタスクを導出するとき)に行う必要があります。 )。

時間を節約するために、他の開発者が関与する前に、アーキテクト/上級開発者/主任開発者が自分の時間で事前に全体像の決定に対応できるようにする方が効率的です。

全体像の決定に欠陥があり、スプリントの最後にのみこれに気づいた場合、より大きな魚を揚げることができます。最高の人材を確実に任せること以外に、悪いアーキテクチャにつながる可能性のあるすべての問題に対して、万能のソリューションはありません。

小さな絵-スプリント計画後

スプリントの計画が完了すると、開発者はタスクの選択を開始します。必要な変更を実装する方法について、低レベルの設計決定を行う必要があります。

ただし、それは低レベルの設計がワイルドウェストであることを意味するものではありません。開発者は、実際に適用可能なアプローチを順守し、良い慣行を適用し、既存のコードベースに適合して常識を使用する必要があります。

これは、開発者が(意図せずに)迷うことを不可能にするわけではありませんが、これを早期にキャッチするためのシステムがいくつかあるはずです。コードレビューは、設計上の不適切な決定に対する最後の防御線です。ただし、指摘しているように、これらはスプリントの最後に発生し、初期段階で問題が発生した場合、多くの再作業につながる可能性があります。

したがって、チームはスプリント中に発生する以下のようなチェックとバランスに依存する必要があります。

  • 開発者は、適切な自己評価を適用して、複雑な実装を他のチームメンバーと調整する必要があります。これは、リード開発者、メンター、またはピアであってもかまいません。これは単純なものにすることができます "タスクYにXを使用するつもりです"は、非常に価値のある健全性チェックになります。私は開発者が間違いを犯していることを知っているべきだと言っているわけではありません(間違いは間違いであることに気づかずに行われるためです)が、開発者はある種の spidey sense を持つことができるはずです彼らが正気にする必要があるときのために彼らがしている決定をチェックしてください。
  • 毎日のスタンドアップは、開発者に定期的にタスクを要約させることにより、同様の健全性チェックを実施します。上級開発者や主任開発者は、要約が設計上の誤った決定または設計に関する全体的な不確実性のいずれかを示唆している開発者に注意する必要があります。
  • ジュニア開発者または歴史的に珍しい設計の道を歩むことが知られている開発者は、少なくとも機能構築(バグ修正ではなく)タスクに取り組むときは、より綿密にフォローアップする必要があります。
  • ペアプログラミングは(たとえパートタイムであっても)設計上の誤った決定を減らすのに役立ちますが、2人のジュニア(または歴史的に珍しいデザインの道を歩むことが知られているジュニア)を見落とさないように注意してください。
  • 場合によっては、途中でコードを確認することが重要です。最初にデザインをセットアップし、次にそれを実装するためにある程度の時間を費やすタスクを処理するとき、私はしばしばこれらを行います。デザインをセットアップしたとき、コードインプリメンテーションのためにこれを開いて、次のインプリメンテーションに取り組みます。したがって、設計上の誤った決定は、早期にキャッチすることができます(もちろん誰かが実際にレビューするとします)。

すべてのチェックとバランスが失敗しても、「予期しないデザインでショックを受ける」というプルリクエストが発生する場合は、retrospectivesを使用して問題の原因を突き止める必要があります。 、そしてそれが再発しないようにする方法。
ここには厳密で迅速な解決策はありません-遡及は、問題を認め、それらが再発しないように調整された解決策を見つけることを特に目的としています。考えられる解決策は次のとおりです。

  • 特定の開発者には特定の知識が不足していることを認識し、学習および成長するための適切なリソースを提供する
  • チェックとバランスを修正して、次回この問題が発生したときに、この問題を早期にキャッチする
  • チームがコミュニケーションの失敗を話し合い、そこから学ぶことで十分な場合もありますが、必ずしも管理者のアクションが必要なわけではありません。

これは完全なリストではありません-特定の問題に対する解決策を調整する必要があります。

1
Flater