あなたが説明するのは、少なくとも私の経験では、「アジャイルになろう」とするチームの非常に一般的な出現パターンです。これが実際にアジャイル自体の一部であるか、一般的な誤実装であるか、アジャイルのマニフェスト/原則またはその固有の結果に反するかなど、議論の余地があります。経験的な見地から、そして私自身の小さなサンプルの経験セット(そして私が話した人々)に基づいていますが、チームが機敏であれば、このパターンに遭遇する可能性は平均よりも高いようです。そのままにして、具体的な例に焦点を当てましょう。
説明する内容には、2つの異なる側面があります。
- 共通の理解/ビジョンがないため、効率的ではない
- 成功/進捗と総費用を測定する方法
間違った道を進むか、輪になって走る
私の経験では、これが起こる主な理由は、コードを迅速に作成するために、チームが既に知っている、または簡単に見つけることができるユースケースまたは要件を積極的に破棄することです。このように考えてみてください。10〜20年前、人々は巨大な仕様を書き、すべてを事前に考えようとして、しばしば失敗しました。時間がかかりすぎるか、何かを見落としていました。過去に学んだことの1つは、ソフトウェア開発にはあなたが知ることができず、物事は大きく変化することです。そのため、迅速に反復し、適切な出力を迅速に生成するという考えです。これは非常に良い原則です。しかし、今日、私たちは他の極端な状況にあります。「次のスプリントの一部であるため、私はこれを気にしません」または「そのバグを登録せず、再び発生したときに対処します」。
- 見つけることができるすべての高レベルのユースケース、要件、依存関係、および制限を収集します。すべての利害関係者と開発者がそれらを見ることができるように、いくつかのウィキに入れてください。何か新しいものが出てきたら追加してください。株主とユーザーに相談してください。開発中にこれをチェックリストとして使用して、最終製品に貢献しないもの、または1つの問題を解決するが3つの新しい問題を引き起こす回避策/ハックを実装しないようにします。
- 高度な概念を策定します。私はインターフェイスやクラスの設計について話しているのではなく、問題の領域を大まかにスケッチしています。最終的なソリューションの主な要素、メカニズム、および相互作用は何ですか?あなたの場合、中間ステップとしてjquery-workaroundヘルプを使用するとき、および追加作業のみを引き起こすとき、それは明らかにする必要があります。
- 収集したリストを使用して概念を検証します。明らかな問題はありますか?理にかなっていますか?長期にわたる技術的負債を引き起こすことなく、同じユーザー価値を達成するためのより効率的な方法はありますか?
無理をしないでください。チームの全員(非開発者を含む)がMVPへの最善の道が何であるかを共通理解できるように、何かが必要です。明らかな見落としがなく、実際に機能する可能性があることに全員が同意する必要があります。これは一般に行き止まりになったり、同じことを何度もやり直さなければならないことを防ぐのに役立ちます。アジャイルは、予期せぬことにうまく対処するのに役立ちます。既知のことを無視することは議論の余地がありません。
サンクコストの誤りに注意してください。1つのアーキテクチャまたはデータベースタイプから始める場合、ほとんどの人はプロジェクトの途中で変更することをためらいます。そのため、何かを実装する前に、「教育された最良の推測」を得るためにある程度の時間を費やすことをお勧めします。開発者は、コードをすばやく書きたい傾向があります。ただし、多くの場合、モック、ライブプロトタイプ、スクリーンショット、ワイヤフレームなどがいくつか用意されているため、コードを記述するよりもさらに高速な反復処理が可能です。記述されたコードのすべての行または単体テストでさえ、全体の概念を再度変更するのが難しくなることに注意してください。
成功の測定
完全に別の側面は、進捗状況を測定する方法です。あなたのプロジェクトの目標は、周りにあるものを使って高さ1mの塔を建設することだとしましょう。たとえば、安定性よりも市場投入までの時間が重要である場合、カードの家を建てることは完全に有効なソリューションになります。継続するものを構築することが目標である場合、レゴを使用する方が良いでしょう。要点は、ハックと見なされるものと、プロジェクトの成功がどのように測定されるかに完全に依存するエレガントなソリューションです。
「ロード」の例はかなり良いです。過去にこのようなことがありましたが、誰もが(セールス、PO、ユーザーを含む)それが迷惑であることに同意しました。しかし、それは製品の成功に影響を与えず、長期債務を引き起こしませんでした。そのため、dev-resourcesにはもっと価値のあることがあるため、削除しました。
私のアドバイスは次のとおりです。
- チケットシステムにチケットとして、すべて、小さなバグも含めて保管します。プロジェクトの範囲内にあるものとそうでないものを積極的に決定します。マイルストーンを作成するか、他の方法でバックログをフィルタリングして、まだ実行する必要があるすべての「完全な」リストを常に保持します。
- 重要な順序を厳しくし、プロジェクトを成功と見なすことができる明確なカットオフポイントを設定します。最終製品に実際に必要な安定性/コード品質/ドキュメントのレベルは?トップから選ぶことで、可能な限り最高の仕事をするようにしてください。1つのチケットで作業するときは、新しいチケットを導入せずに完全に解決するようにしてください(優先度が低いために延期することが理にかなっていない限り)。コミットするたびに、横向きや後ろ向きではなく、最終目標に向かって前進するはずです。しかし、もう一度強調します。後から追加の作業を行うハックが、プロジェクトにとってプラスになることもあります。
- PO /ユーザーを使用してユーザーの価値を把握し、開発者に技術コストを把握させます。通常、開発者以外は、実装コストだけでなく、真の長期コストを判断することはできません。沸騰カエルの問題に注意してください。時間の経過とともに、多くの小さな無関係な問題がチームをホールド状態に陥らせる可能性があります。チームがどれだけ効率的に作業できるかを定量化してください。
- 全体的な目標/コストに注目してください。スプリントからスプリントまで考えるのではなく、「プロジェクトの最後までチームとして必要なことをすべて実行できますか」という考え方を維持してください。スプリントは、物事を分解してチェックポイントを設定するための単なる方法です。
- 早く何かを見せたいのではなく、ユーザーに提供できる最小限の実行可能な製品への最速パスでコースを計画します。それでも、全体的な戦略では、間に検証可能な結果が得られるはずです。
そのため、誰かが最終的な実装目標に合わない何かをするとき、できればストーリーを考えないでください。ストーリーを閉じることが有益な場合(たとえば、顧客からフィードバックを得るため)、すぐに新しいストーリー/バグを開いて不足を解消します。ショートカットを使用してもコストは削減されず、単に非表示になるか遅延するだけであることを透明にしてください!
ここでの秘Theは、プロジェクトの総コストについて議論することです。たとえば、POが期限を設定するためにショートカットを取ることを求めた場合、プロジェクトが完了したと見なすために後で行う必要がある作業量を定量化します。
また、基準に基づく最適化にも注意してください。チームがスプリントレビューで表示できるストーリーの数で測定される場合、良い「スコア」を達成する最良の方法は、すべてのストーリーを10の小さなストーリーにカットすることです。記述された単体テストの数で測定される場合、多くの不要なテストを記述する傾向があります。ストーリーを数えるのではなく、むしろ、必要なユーザー機能がどれだけ機能するか、プロジェクトの範囲内で解決する技術的負債によるコストの大きさなどの尺度を持ちます。
概要
それを煮詰めるには:高速かつ最小限に抑えることは良いアプローチです。T 彼の問題は、「高速」と「最小」の解釈です。長期コストを常に考慮する必要があります(これが無関係なプロジェクトがある場合を除きます)。1日しかかからないが、出荷日から1か月の技術的負債を生むショートカットを使用すると、1週間かかったソリューションよりも会社のコストが高くなります。すぐにテストの記述を開始するのは速いように見えますが、概念に欠陥があり、間違ったアプローチを固めている場合はそうではありません。
そして、あなたの場合の「長期」の意味を覚えておいてください。すばらしいコードを書き込もうとして失敗して出荷が遅すぎた会社を複数知っています。企業の観点から見た場合、優れたアーキテクチャまたはクリーンなコードは、それを達成するためのコストがそれを持たないコストよりも低い場合にのみ価値があります。
お役に立てば幸いです!