私は4人の開発者のプロジェクトチームに所属しています。単一の作業項目の過程で発生する余分な作業を処理する方法について、長い間議論してきました。
この余分な作業は通常、タスクにわずかに関連するものですが、アイテムの目標を達成するために必ずしも必要ではありません(それは意見かもしれません)。例には以下が含まれますが、これらに限定されません。
この余分な作業が少ない場合、私たちは気にしません。問題は、この余分な作業によって、元の特徴点推定を超えてアイテムが大幅に拡張される場合です。 5ポイントのアイテムは実際には13ポイントかかる場合があります。あるケースでは、振り返ってみると80ポイント以上であった13ポイントのアイテムがありました。
これを処理する方法については、2つのオプションがあります。
同じ作業項目で余分な作業を受け入れ、それを誤推定として帳消しにすることができます。これに対する議論は次のとおりです。
現在の作業項目に線を引き、追加の作業は別のチケットになると言います。引数は次のとおりです。
私たちの中には、追加のものが2 FP未満の場合は同じチケットに入れられ、それ以上の場合は新しいチケットにするなど、カットオフを決定する必要があると言っている人もいます。
アジャイルを使用してまだ数か月しか経っていないので、これをどのように処理するかについて、このあたりのベテランのアジャイルベテラン全員の意見は何ですか?
アジャイル計画とユーザーストーリーは、プロジェクトの利害関係者とソフトウェアのユーザーに価値と透明性を提供することに重点を置いています。これは良いことですが、優れたアーキテクチャガイドライン、デザインスチュワードシップ、優れた開発方法、および技術的負債の維持の重要性に取って代わったり、含めたり、降格したりすることはできません。
アジャイルは、これらの主に技術的な問題や問題への回答として意図されていなかったため、後者をうまく実行しません。
リファクタリングタスク、技術的な負債処理、および設計作業は、特定のスプリント内の個別のユーザーストーリーを考慮に入れるべきであることに私が強く同意しないことを知っている。これらは、開発者がそのスプリントのユーザーストーリーを満たすために行う可能性のあるタスクにすぎません。
タスクとは、アーキテクチャガイドラインの範囲内で特定のユーザーストーリーを完了に移行し、ソフトウェア全体の優れた設計と開発プラクティスを維持するのに役立つ割り当て可能な作業の任意の単位であることを忘れないでください。
このため、時間の見積もりはユーザーストーリーではなくタスクに基づいて行う必要があります。これは、複数のユーザーストーリーを完成させるためにいくつかのタスクが重要である理由でもあります。
赤、緑、リファクタリング。これが単一の作業項目の範囲です。変更の範囲をカバーする失敗したテストスイートを記述し、テストに合格するために必要な最小量をコーディングし、テストに合格している間にコーディング基準を満たすようにリファクタリングします。これらの3つのステップすべてが必要です。問題を定義するまでソリューションをコーディングすることはできません。コード行を記述しながらリファクタリングすると、必ずYAGNIに違反しますが、テストに合格した後に自分の後ろに来てリファクタリングしないと、定義上、技術的負債が発生します。あなたが最終的に返済しなければならないこと。
この定義とそれに従ったものを考えると、13ポインターであることが判明した5ポインターは誤推定でした。リファクタリング作業を検討するのは、おそらくリストラのようなものでした。新しい機能を理解しやすく保守しやすい方法で含めるには、コードベースのかなり重要な領域を再編成する必要がありました。これは通常、チームが開発の一般的な将来のパスを理解できず、最終的に非常に堅実である必要がある前の反復で非常に単純に何かが実装されることにつながることを示します。バックログでさらに下にあるものを知っているBAとPMの間のより良いコミュニケーションと、現在のスプリントに一般的に焦点を合わせている開発チームは、これを軽減できます。あるいは、この話は過去の開発で発生した大量の技術的負債を明らかにし、それは単にチームに追いついただけです。デザインパターンとプロジェクトの一般的な将来のパスに関するより良い概念的知識に加えて、より良いコードレビュープロセスは、そのような発生を減らすのに役立ちます。
覚えておくべきことの1つは、リファクタリングは「理想的ではない」作業であるということです。アジャイルスクラムでは、タスクは「理想的な時間」で見積もられます。つまり、存在しなかったまったく新しいコードを真っ向から書き、プロジェクトの機能ベースを促進するために費やした時間数です。 8時間の開発者の日は、現実的には5時間しか理想的ではないかもしれません。特にチームが本当にハミングしているプロジェクトの「ストレッチ」では、6を当てにすることができる場合があります。プロジェクトの機能に影響を与えないが、他の方法でコードベースを改善するリファクタリング、または戻って変更を加えることは、計画、設計、コミュニケーション、レビュー、中断、または技術的なダウンタイムと同様に、理想的ではありません。技術的なダウンタイム以外に、非理想的な作業は重要ですが、製品所有者の目には進歩しません。
したがって、リファクタリングによって実際に費やされた時間が2倍にならない場合、理想的な時間で見積もると、ある程度のリファクタリング作業が予想されます。たとえば、チームのポイントスケールがどのように調整されているのか正確にはわからないため、5ポインターは1週間の開発者の理想的な時間、つまり約25時間の理想的な時間に相当します。 13(同じスケールで2週間以上の開発者週)に変わったこの5は、複雑さが膨らんだ原因を振り返る原因になります。おそらく、コードベースは実際に行われたほどのリファクタリングを必要としなかったかもしれません。多分、新機能を機能させるために解決しなければならないチームに知られていない大量の技術的負債が積み上げられたか、あるいはこれは正直な誤推定でした必要な新しい作業の量(実際にはいくつかの新しいドメインクラスと関連するスキーマの変更が必要な場合でも、チームはドメインの既存の部分を拡張するだけで十分だと考えました)。
別の世界では、新しいコードと以前のビットを適切にパターン化するために10時間の追加のリファクタリングが必要だったため、理想的な時間で推定された5が実際の時間に基づいて7(〜35時間)になったと想像してみましょう。デザインアーキテクチャ。その場合、追加の時間は、ストーリーが想定されていた開発者の日数の理想的な時間と合計時間の間の「ギャップ」内にあります。したがって、プロジェクトマネージャーとして、私は7になった5を妥当な見積もりと呼び、次に進みます。
ストーリーポイントは、特定のユーザーストーリーの相対的な複雑さの推定です。ストーリーポイントを使用して、これにはX人の日/時間かかると言っているようです。代わりに、2つの目標を目指して努力してください
時間の経過とともに、これにより速度のベースラインが得られます。 5ポイントのストーリーごとに他のストーリーと同じ時間はかかりませんが、スプリントあたりの平均速度(チームが完了できるストーリーポイントの数)は一定になります。
特定のストーリーにかかる時間を心配することは逆効果です。見積もりは、ボリュームの一貫したサイズのストーリーで平均化されるだけです(つまり、1つの5ポインターはリファクタリングのために少し時間がかかる場合がありますが、関連するストーリーでその努力のメリットを享受できます)。
元のワークアイテム内の量と、他のワークアイテムの量の相対的なカットオフが必要です。ユーザーストーリーはディスカッションの開始点であり、したがって、ストーリーの作業中にスプリント中に釘付けになるあらゆる種類のスコープ要素が存在する可能性があります。
スプリント計画では、ユーザーが新しいフォームを必要とし、101がそのフォームに変更された場合に発生する可能性がある「スコープクリープ」を回避するために、ストーリーに追加の基準が追加される場合があります。 2週間のスプリントで時々完了する。
覚えておくべき裏返しは、この余分な作業からどれだけの価値が得られているかです。実行できる可能性のあるリファクタリングはたくさんあるかもしれませんが、そのすべての作業に対して誰にとってもどのくらいのメリットがありますか?これは、チームをうまく機能させるためにいくつかのガイドラインがなければならないが、コードを完璧にしようとすることに迷わないようにする必要がある場所です。