web-dev-qa-db-ja.com

スクラムの意思決定と保守性および開発時間の違いは?

この質問が物議を醸すかもしれないことを感謝します。ある意味で、それは質問の裏返しです " 技術的な決定をしようとしているビジネス "。

スクラムでは、開発チームは、顧客の要件を満たすために、設計と技術レベルおよびコードレベルの決定をまとめて行う責任があります。利害関係者とのコミュニケーションによってストーリーを定義して優先順位を付ける製品所有者と、方法を決定するチームの間には、責任と権限の分担があります。ストーリーを実装します。

これは、開発者がこれまでに作成したコードと、プロジェクトについて記憶またはメモしたすべての情報に精通しているため、必要なときに不適切な決定の結果に直面するという信念に動機付けられていると思います将来的にコードを変更する場合は、設計上の決定を行うのに最適です。そして、後から考えて、彼らが悪い決定をしたことに気付いた場合、それは彼らにとって非常に貴重な学習経験となり、彼らは何が悪かったのかを経営陣のせいにすることはできません。理論的には、私はこのすべてに同意します。しかし、(悪魔の擁護者の一種として)この原則から文字に従うのが悪い考えとなる状況がいくつかあります。

  1. 開発チームは、ほとんどが一時的な請負業者であるか、(他の人には知られていない)ジャンプ船を意図しているか、このプロジェクトの出荷後に冗長になるか、別のプロジェクトに移動して「コードメンテナンス」を行う完全に独立したチーム。 (これの良い例は次のようになります:典型的な外部委託された政府のコンピュータ化プロジェクト。)したがって、これらの理由のいずれかのために、チームはほとんど実際のメンテナンスを行う人ではありません。
  2. または、開発チームはすべての経験の浅い開発者であり、滑り止めの開発慣行や貧弱な人々によって引き起こされる可能性のある保守性の問題について明確な考えを持っていません。設計上の決定。彼らは正しいことをするためのインセンティブ理論を持っていますが、十分な回数燃焼されていないため、インセンティブはまだ機能していません(または彼らはずさんなコーディング慣行とやけどの関係を認めていません)。
  3. 開発チームのように(a)彼らは仕事中毒であり、(b)時間を浪費するのが好きなため、大きな間違いを犯し、それらを修正または回避するためにクレイジーな時間を費やすボイラープレートコードを記述したり、職務上の安心感を与えるために古い古いフレームワークを使用したり、(c)ヒーローのように見たり感じたりすることができます。
  4. チームは、無限に自転車に乗ったり、無限に異なるアイデアの組み合わせについて話し合ったり、価値の低い「内部的に見える機能」を追加したりしながら、企業が価値をより迅速に提供し、実現するために十分に優れていることを望んでいます。

組織内には、設計や技術的な決定にさまざまな有用な情報を提供できる人がいるかもしれません。多言語開発者; DBAを含むスペシャリスト(必ずしもスクラムチームに所属しているとは限りません)。冷笑的で、野心的または間違ったアーキテクチャを見たことがあるかもしれないマネージャーは、何度も失敗します。

しかし、それは貴重な経験を持つ人々から意見を得るだけではありません。これ以上に、管理者が(いいえ、このように実装するのは悪い考えです。代わりにこのようにしてください)、または少なくとも「いいえ時間があれば後でそれを試すことができますが、最初はこれをもっと簡単な方法で行います」スクラムはこの点で理想的すぎるように思えます。これは確かに起こりますが、この干渉のために、「組織がスクラムを行っていない」ということは、そのような場合には「スクラムを行う」ことは望ましくないことを示唆しています。

5
Robin Green

あなたが言っていることは要約すると次のように聞こえます:

  • 自己管理、自己設計のスクラムチームは、チーム全体が経験を積んでコミットしている場合にのみ存在します。
  • より現実的な状況では、より大きな問題を回避するために、管理者がチームを管理し、設計上の決定に影響を与えることを許可する必要があります。

これが正しければ、問題はスクラムではなく、チームがそれをどのように採用したかにあります。どちらか

  • それはまだ初期段階であり、誰もが効率的なアジャイルチームメンバーになることをまだ学んでいます。または
  • アジャイルとスクラムは、チームの個性に適していません。または
  • アジャイルとスクラムは、プロジェクトの要求に適したモミではありません。または、より可能性が高い
  • アジャイルとスクラムは、現在の管理の管理概念と互換性がありません。

スクラムとアジャイルは、反復的なソフトウェアリリースだけではありません。また、ソフトウェア開発ライフサイクルを改善することでもあります。各反復により、アプリケーションに改善がもたらされ、同様に重要なことに、開発プロセスにも改善がもたらされます。これは、物事がそれほどうまく機能しない可能性がある期間が前もってあることを意味しますが、あなたがチームに参加している場合、物事を取得しますより良い。

[〜#〜] if [〜#〜]あなたのチームが参加しています。誰かがボールをプレーしないからといってスクラムが失敗するのを見てきました。突然、他の1人のインセンティブがアジャイル/スクラムの精神と一致しないため、5人がアジャイルになるための努力が完全に狂ってしまいます。その人にならないでください!あなたは何が起こっているのが気に入らないかもしれませんが、それはなぜですか?本当の問題はありますか?チームは単にアジャイルを効果的に採用していないのでしょうか、それともこの新しいアプローチは単に異質で恐ろしいのでしょうか?

アジャイルとスクラムに完全に満足していて、チームが実際に改善や提供に失敗している可能性があります。この場合、アジャイル開発をやめるか、問題の修正により多くの時間と労力を費やすことができます。スクラムマスターはいますか?チームの全員がアジャイル開発とは何かを理解していますか?人々は通常、アジャイル開発がより脆弱または責任を負うようになると考えると、アジャイル開発を敬遠します。これは当てはまらないはずですが、時々人々はそのように感じます...

または、さらに悪いことに、それが真実である場合もあります。アジャイル/スクラム/反復ソフトウェア開発が実際にあなたの状況で理にかなっているかどうかを自問してください。そうでない場合、それを採用すると、チームに過度のストレスがかかる可能性があります。 Waterfallがすべての人にはるかに適していたときに、プロジェクトが反復型開発に従うのを見てきました。それは本質的なものであるため、単純に反復型開発を採用しないでください。それがあなたのプロジェクト/ビジネスに合っていることを確認してください。もしそうなら、素晴らしいです!そうでない場合は、そうする開発および管理スタイルを見つけてください。

ただし、最終的には、アジャイル/スクラムアプローチに従うことを選択した場合は、プロセス、ツール、目標、利点、および犠牲について全員が適切に教育されていることを確認してください。あなたの状況では、スプリントはプロダクトオーナーの絶えず進化するニーズに反応するため、非常に反復的なプロセスが設計とアーキテクチャを犠牲にする可能性があることを人々が忘れているようです短期的に。しかし、これらは短期の犠牲です。あなたのチームは、蓄積された負債(技術的、構造的、テストなど)を削ぎ落とすために、スプリントの強化を依頼する必要があります。これが、アジャイル開発が反応性と保守性のバランスをとる方法です。

ふぅ。今のところこれですべてだと思います!

11
MetaFight

アジャイル開発(特にスクラム)の鍵の1つは、フィードバックループの短縮です。つまり、開発チームは2〜4週間ごとに動作するソフトウェアを提供することが期待されています。 1回または3回のスプリントの後、チームが配信していない場合、経営陣は問題があることを認識し、方向を変えることができます。

シナリオを考えてみましょう。

  1. 請負業者/関心のないチームメンバー。チームが提供していない(新しい請負業者を取得する)か、メンテナンス不可能なソフトウェアを提供しています。これは、ソフトウェアが実際に機能することを示す反復可能な(自動化された!)テストを作成しておらず、新しいユーザーストーリーが以前のスプリントからのコードのやり直しを要求したときにパニックに陥り始めた場合、かなり迅速に証明されるはずです。スクラムはITガバナンスの必要性を否定するものではなく、請負業者と協力する場合は特にそうです。
  2. 経験の浅い開発者は、プロジェクトが何であれ問題です。解決策(方法論に関係なく)は、すべてのチームに少なくとも1人の経験豊富なプログラマを配置することです。繰り返しますが、チームが何をしているのかわからないことはすぐに明らかになるはずです。
  3. Masochists/Heros。繰り返しますが、動作するソフトウェアを提供するための要件数週間ごとに、チームが時間を無駄にしていることが明らかになるはずです。チームが愚かな時間を使い始めた場合、次のスプリントで同じ数のストーリーを引き継がせないでください。
  4. Bikeshedders配信されない==解決可能な問題。

プロジェクトのコマンドと制御構造は、これらの問題を実際にはうまく処理しません。問題1に必要な所有感を植え付けることはできません。経験豊富な開発者の関与が必要です(どちらの方法でも項目2の解決策です)。それはマゾヒスト/ヒーローになる可能性のある人の手に渡り、残念ながらリスクの高い状況と見苦しいソフトウェアをもたらします。また、スクラムよりも速く技術的な決定を下すことができないことをチームが示して解決することはおそらくないでしょう。

スクラムはフェイルファストの方法論(とにかくフレームワーク)です。それが最大の強みです。

8
Matthew Flynn

これが、スクラムやテクノロジーに集中するだけでは不十分な理由です--talent selectionは、プロジェクトの成功または失敗の原因の1つです。才能の欠如を補う方法論、監督、または方針はありません。

これらの4つの例の例は、複雑なプロジェクトを提供した経験があり、プロジェクトの継続を保証することに(個人的な利益と金銭的インセンティブを通じて)コミットしている優れた上級開発者をチームに含めることが重要である理由です。順調に進んでいます。チームは、経験豊富な開発者だけで構成されている必要はなく、リードポジションにいる必要があります。

アウトソーシングプロジェクトの場合、アウトソーシングチームが適切なスキルと経験を持っていること、およびアウトソーシングチームのアウトプットを監視する経験豊富な開発者が社内にいることを確認することをお勧めします。仕様、およびコードのレビュー(ソースコードが配信の一部である場合)。

3
ikh

議論は、無能なチームに自分自身を管理させることではありませんか?なぜ誰かがスクラムチームを配置して、その仕事をすることができない人々でそれを埋めたいのでしょうか?

たぶん、より良い技術的アイデアを持つこのマネージャーがチームにいる必要がありますか?

他の誰かに技術的な選択をしてもらいたいのですが、チーム全体が反対した場合、このチームはこの優先的なテクノロジーを使用して開発およびスケジュールを立てることができると思います。それで頑張ってください。

それがうまくいかない状況があり、一般的ではないので、私は何かに対する議論を支持することはできません。この質問で説明されているチームは、監督の量に関係なく、貧弱なコードを生成すると主張します。 1人のマネージャーがチーム全体の無能さを克服できれば、ソフトウェアの作成はそれほど難しくありませんが、そうではありません。

3
JeffO

おなじみのアーキテクチャと技術的負債については、あなたが持っていることについて議論しているようです。問題の一部である可能性のある「アーキテクトの役割」についての言及はありません。「ソフトウェアアーキテクト」に関するいくつかの優れたリソースについては、以下を参照してください。 http://www.codingthearchitecture.com/authors/sbrown/ 。 Simon Brownには、現在直面している問題の多くに対処しようとする優れたアイデアがたくさんあります。

あなたがロンドンを拠点としているのを見ると、良い ロンドンでのソフトウェアアーキテクチャ会議 毎年あります。カンファレンスの価値について私が書いたレビューをご覧ください。 ソフトウェアアーキテクチャカンファレンス–ロンドン2012 ジェイミークレイトン

また、「パディングの再開」に関するソフトウェアの決定にも注目します。多くの短期開発者は、自身のスキルを向上させる以外にビジネス上の理由に基づいてテクノロジーの組み合わせを使用したいと考えています。

長年にわたってビジネスの意思決定者や会計士/財務スタッフと協力してビジネス上の意思決定を行った後(タイトな札束)、ソフトウェアのメンテナンスとサポートは非​​常に重要であり、ソフトウェアのコストの80%になりやすいため、企業の予算に含める必要があります。最初のスクラム/プロジェクトが企業のソフトウェアソリューションのライフタイム全体で20%を占めている間、ソフトウェアを実行します。

先行プロジェクトの年間コストの20%〜30%として、企業ソフトウェアの社内メンテナンス/ライセンス契約をビジネスに売り込みます。これは、すべての商用ソフトウェアベンダーが最低でも請求する金額です。企業がこれらの費用を費用/便益の一部として受け入れない場合は、プロジェクトに対して助言する必要があります(致命的な決定は彼らに任せてください)。

2
Jamie Clayton

この質問を書いた後に私に起こったいくつかの事柄があります:

  • 開発チームは、独自の組織を持つ大規模な組織内にいることがよくありますポリシーとプラクティス(「コードを書く前に完全なプロジェクト要件仕様が必要」など、互換性のないウォーターフォールスタイルのことについては話していません。スクラムで!)展開をどのようにまたはいつ行う必要があるか、コーディングスタイルガイドやコーディング標準などの要件がある場合があります。これらの一部はガイドラインであり、一部は「必須」の要件である場合があります。次に、現実的には、スクラムはチームが物事を行う方法を決定することだと思いますこれらの制約とガイドライン内で(そして、障害を取り除くことが必要であると感じる場所、たとえば、組織にそれらを変更するように説得しようとすること)しかし、一方的にチームについてではありません無視それら。または、とにかく、そうであるべきではありません。
  • 開発チームには絶対に無制限の予算がありません。設計またはアーキテクチャの決定が予算に影響を与える場合(たとえば、分散NoSQLデータベース用の新しいサーバーまたはVMの取得、初期開発時間の延長、またはそのリスク)、予算に関する権限を持つ誰かが承認する必要がある場合があります。スクラムはそれを変えることはできません。
  • トレーニング、または経験豊富な開発者が経験の浅いチームとチャットする機会さえあれば、「神のクラス」などの初心者の間違いを回避するのに役立ちます。
  • コードレビュー、ペアプログラミング、または単に互いのコードでの作業(スクラムのクロスファンクショナルな側面のため、通常のイベントであるはずです)、問題を早期に発見できます。自分のものではない誰かのコードを見るだけでも、設計上の決定の影響についてより客観的になる可能性があります。多くのプログラマーは他の人の仕事に穴を開けるのが大好きです、その傾向を利用しましょう;)
1
Robin Green

あなたが説明しているシナリオはどのような方法論でも発生する可能性があり、それらはスクラム/アジャイルの適応とは何の関係もありません。すでにアジャイルフレームワーク内で働いている開発者を雇っている場合、それらのほとんどは、彼らのコーディングがプロジェクトの保守面に与える影響を知っています。

0
Vivek Nambiar