スクラムチームはYAGNIの原則に従っていません


13

SCRUMミーティングで、製品チームは、モバイルアプリで使用されるAPIの機能について議論していました。私たちは、画面がどのように見えるべきか、そしてどのキー要素を含むべきか(「レイアウト」)を示すモックアップを用意しました。

これと製品所有者との議論に基づいて、API応答のプロトタイプ(HAL + JSON)を作成しました。それは非常にシンプルで、HALに準拠したJSONであり、モックアップにあるものを表すことしかできませんでした。ビジネスマンは頻繁にアイデアを変更する傾向があるため、私は将来のアイデアに影響されることはなく、ミニマルなアプローチを取ることにしました。私の提案はチームによって却下され、7対1に投票されました。

チームは、レイアウトをより柔軟に配置できる、より複雑で非セマンティックな抽象json構造を使用することにしました。そのアプローチの欠点は、設計上、nullおよび空のプロパティを持つ可能性のある一連の均一なオブジェクトになってしまったことです。彼らはまた、A / Bテストを可能にすると良いと思っていましたが、そのような要件がなかったため、予測に基づいていました。

ほとんどの場合、スプリントの一部ではなく、モックアップで言及されていないことについて議論していました。説明された問題は、「将来のマーケティングがどうなるか...」、「ビジネスが私たちに望むならどうなるか...」でした。

私と製品所有者は経験豊富なプログラマーであり、過去にこの種の問題を見てきました。YAGNIKISSの原則に従うよう努めています。チームの他のメンバーは少し経験が浅く、これらの原則を知っていますが、理解していないようです。

チーム全体が私たちにとってより重要であり、私たちはそれほど重要ではない何かをめぐって戦いたくなかったので、私たちは彼らの解決策に同意しました。しかし、そのようなことが今後のより複雑な議論の先例になり得るのではないかと心配していますか?そのような行動に対処する方法は?チームリーダーとして、私がもっとうまくできることはありますか?

製品は初期段階のMVPであることに言及する価値があります。


11
I'm afraid if such thing can become a precedence for upcoming, more complicated debates?-それはまた、YAGNIに違反します:起こらないかもしれない未来について心配しています。あなたが自分の立場に立つつもりなら、あなたはすでにそうしているべきです。
ロバートハーベイ

@gnat:これは時間の制約に関するものではないようです。
ロバートハーヴェイ

HAL準拠であることはYAGNIの対象ではありませんか?
マシュー

@Matthew全体に1週間かかり、HALを取り除くためにプレーンJSONを使用して別のプロトタイプも準備しましたが、「柔軟性が不十分」と見なされて拒否されました。チームはそれを修正し、その修正版が最終的に使用されました。HALは、標準、一連のガイドラインとして機能し、すべてのエンドポイントに均一な構造を適用するのが簡単です。以前のAPIは標準を使用していなかったため、うまく終了しませんでした。
ヤチェクコブス

5
柔軟性により複雑さが増します。チームがそれを理解している限り、前進することができます。
ジョンレイナー

回答:


10

あなたの痛みを感じます 私見この種の問題は、あなたが8人のチームを持っているという事実によって引き起こされます。そして、それはすでにあなたが常に最高の戦略的決定に来ることができないほど大きいです。

8人以上のチャンスのあるチームでは、平凡なプログラマーの数は経験豊富なプログラマーの数よりも多くなります。それは、しばしば、より良い決定が平凡なものによって委任される状況につながります。特にあなたが経験豊富な人の1人である(または自分がそうだと思う)場合、それは満足のいくものではありませんが、少なくとも同じことが本当に悪い決定についても当てはまります。

事実は、少なくとも物事が民主的であり続けるなら、チームが変わらない限り、あなたがそれについてできることはあまりありません。

  • それと一緒に暮らすことを学ぶ
  • チームと1、2年働き、自分の専門知識を共有し、YAGNIとKISSの価値を長期にわたって学んでもらいたい
  • チームに設計または戦略的決定を「販売」する独自のスキルに取り組む
  • あなた自身の専門知識レベルがチーム全体の平均に近い別の(おそらく小さい)チームに切り替えてみてください

ミニマルなアプローチとYAGNIの真の価値を学び理解する唯一の方法は、いくつかの経験を直接体験することだと思います。たとえば、多くの間違った「what if」予測、「ジャストインケース」引数に動機付けられた間違った設計決定、または実際には必要のない過剰に一般化されたフレームワークコードを含むレガシーシステムのメンテナンスに関与することによって。しかし、それは2日間でチームメンバーに教えることができるものではなく、人々が自分で経験しなければならない経験もあります。


5
ほとんどの人は、ストーブに触れて熱くないことを知るためにストーブに触れなければなりません。ソフトウェアはほとんど同じです。++
ラバーダック

2
プロジェクトログ/日記を保存することは、この種のことの鍵です。行われたさまざまな議論を記録すると、数か月または数年後の人々の会話の思い出よりもはるかに具体的です。ここで練習に関して良い質問があります
ロビーディー

@RobbieDee:確かに、チームがYAGNIとKISSについて学ぶのに役立つなら。
ドックブラウン

3
3番目の箇条書き(デザインを「販売」するための独自のスキルに取り組む)は、十分な注目を集めていません。開発者が依然として優れたコミュニケーションスキルを持っている(または取り組んでいる)理由です。
ランドール・スチュワート

@RandallStewart:絶対に。しかし、最高のコミュニケーションスキルを備えていても、YAGNIを自分で経験したことがない人に販売することは難しい場合があります。単純化のためではなく、抽象化のために物事を抽象化すること。コミュニケーションには2つの側面が必要です。1つは物事をうまく説明でき、もう1つは聞いて理解したいと思っています。
Doc Brown

8

前方互換性は正当な懸念事項です

7人の開発者のうちの1人がアーキテクトである場合、必要に応じてNFRを導入することが彼の権利であり、それらのNFRの1つは「前方互換性」になる可能性があります。リリーススケジュール。前もって考えていなかったので、ユーザーがアプリの新しいバージョンをインストールする必要はありません。

他の要件と同様に、受け入れ基準が必要です

つまり、NFRは要件として文書化され、受け入れ基準が定義されている必要があります。また、それらをテストする手段を考え出す必要があります。YAGNIが重要なのはそのためです。テストできないコードを書きたくないので、コードの唯一の目的が誰も使用していない機能をサポートすることである場合、テストするのは困難です。

判断の電話であってはなりません

あなたが見逃したと思われる暗黙の要件についてチームに同意してもらい、それを書き留めておくことをお勧めします。テストする手段を定義したら、実装は少なくとも1つのテストに失敗する必要があるため、投票の問題ではないはずです。


1
質問では、OPのチームが前方互換性の要件のためにYAGNIのパスを離れたと読んでいますか?
ドックブラウン

上位互換性は何であるContent-Typeヘッダがあるために
ジャック

2
必要に応じて、多分拡張性と呼んでもいいでしょう。ポイントは同じです。まだNFRです。
ジョン・ウー

1
システムを拡張可能にする方法は2つあります。方法1では、多くの潜在的な要件の変更を予測し、「万が一に備えて」大幅に構成できるようにしています。この種の拡張性について、多くの受け入れテストを発明できると確信しています。または、物事を可能な限りシンプルに保つことで、コードベースを小さく、把握しやすくし、拡張ポイントまたは抽象化を後で必要に応じて追加できるようにします。後者は、テストを書くことができる(または必要とする)ものではありません。したがって、私は...これは「ダウン暗黙NFRsを書く」ことで容易に解決することができるとは思わない
ドク・ブラウン

...したがって、これは、多分創造的な開発者のチームがNFRについての仮定を立てないようにし、いくつかを発明する方法についての詳細です。
Doc Brown

3

開発チームが迅速なトライアルを可能にするフレームワークを作成することで製品チームを促進しようとしているようですが、これは製品チームが本当に望んでいることのようです。あなたのアプローチは、「文字通り彼らに彼らが求めているものを与え、彼らのために考えていない」に似ています。

私がプロダクトオーナーであれば、開発チームが後者よりも最初のアプローチを取る方がずっと幸せになるでしょう。


3
+1の変化を予測して計画することは、フルアーキテクチャの宇宙飛行士になって内部プラットフォームを作成することと同じではありません。現在、少しの基礎があれば、将来の多くの作業を防ぐことができます。OPのチームはおそらく仮説の方向に少し傾いていますが、原理主義的なYAGNIアプローチは確かに最適ではありません。
アモン

4
チームの他のメンバーよりも、OPに喜んで投票し、「もし将来のマーケティングがどうなるか」という計画について同じ間違いを犯すと思われます。タスクがアプリケーションソフトウェアを構築することであるとき、人々がアプリケーションソフトウェアの代わりにフレームワークを構築し始めるとき、彼らはほとんど常にそれを間違ってやっています。
Doc Brown

@DocBrown技術的には同意します。しかし、このケースは、個人的な敬意を要求することを容易にすることに対する意欲に関するもののようです。一方で「正しい」ことと、他方で有用または有用であること。行間で私が読んだことは、OPが地位を失いつつあり、彼がもう快適に感じられない環境に貢献するのではなく、オンライン視聴者に彼の経験を強調することによって彼のエゴを盛り上げることを選んだことです。このダイナミクスは、スクラムの導入に典型的です。
マーティンマート

@MartinMaat私は彼らが私に同意しなかったという事実に少し失望しました。なぜ起こったのか理解できませんでした。毎日の作業中に、コードレビューなどで彼らを助けます。私たちはしばしば主張しますが、私はそれが好きです。彼らは私の意見を尊重することを知っています。私は常に自分の理論をサポートする有効な引数を使用しようとします。最終的に、彼らは最良のオプションを選択し、それに対して責任を負います。チームはそれがすべきことをした-問題を解決した。問題が最初から広すぎて説明が不十分だったのは、私と製品所有者の間違いでした。
ヤチェクコブス

2

私の意見では、民主主義は適切に機能していません-政治システムでも、ほとんどのプログラマーが下級または平凡なチームでも。

チームリーダーとして、そしてチーム内で最も経験豊富な人の1人としてのあなたの言葉は、チームの他の部分よりも大きな影響を与えるはずです。あなたにとってYAGNIが重要な場合は、それについてプレゼンテーションを行う必要があります。それについて議論し、なぜそれが良いのかを見せてください。

結局のところ、あなたの責任は他の人よりも高くなります。コードを書くだけでなく、人々を導くことでもあります。


3
民主主義はおそらくここでの問題の原因ですが、民主的でないことは解決策ではありません。質問で説明されている問題よりも大きな問題を簡単に引き起こす可能性があるためです。
Doc Brown

@DocBrownあなたはちょうど同じ文で自分自身に矛盾しました。IMOの一部の決定は、決定する人次第ではありません。OPが説明したのはそれらの1つです。人々はYAGNIを使用していないためにアームストロングを引用するには:あなたはバナナを望んでいたが、何を得たことは、バナナと全体のジャングル保持ゴリラだった
BЈовић

2
いいえ、これは矛盾ではありません(多分、自分の主張をうまく表現していなかったのかもしれません)。物事は常に「白黒」ではありません。一部の状況では民主主義がうまく機能しないからといって、民主的でないことは状況を改善し、物事を改善することを保証するものではありません。多くの場合、それほど単純ではありません。
ドックブラウン

1
民主主義では、ほとんどの人が同意する「正しい」ものを必要とするわけではありません。そして、これには欠陥があります。そして、多くの場合、「正しい」ことは社会的受容に問題があります。YAGNIは、必要に応じて「ゴリラ」または「ジャングル全体」を簡単に追加できる適切な抽象化の導入を妨げる手錠であってはなりません。
oopexpert

@oopexpert問題は、それら必要になる可能あることです。YAGNIはオーバーエンジニアリングに反対します。適切な抽象化は一つのことであり、必要でないかもしれないものを追加することは別の問題です。
BЈовић

2

YAGNIについて少し混乱があると思います。

開発者は、システムを「修正のために閉じ、拡張のために開いたままにする」抽象化を省略すると、YAGNIに従うと考えることがよくあります。

「明らかに」要求されていない機能を使用してシステムを「拡張」しない限り、YAGNIを処理しません。拡張が発生する可能性のある抽象化の導入は、すでに述べた「前方互換性」です。

私の個人的な意見は、ドメインの深い知識だけが抽象化の決定とその場所を決定するのに役立つということです。


2

YAGNI AND KISSの問題は、それらが完全に主観的で曖昧であることです。

json ?? ヤグニ!csv文字列を送信するだけです!

オブジェクト?? KISSTUPID !!! ただgotoを使用してください!!

「チームリーダー」の役割は明確に定義されていませんが、チームの技術的な選択について主観的な意見を表明することから距離を置くことをお勧めします。間違っていると感じても。明確に定義された要件の短いリストに固執します。

  • コードの単体テスト
  • APIの統合テスト
  • 最終製品の自動UIテスト
  • パフォーマンスとスケーリングの要件

チームがすべてのビジネス要件および大規模な技術要件での基本的なパフォーマンスのテストに合格することができれば、動作する製品があります。

その後、同じことをしますが、より高速になります


1

チームの全員がdone定義に同意しなければなりません。これがないと、スコープのクリープ、視点、および中核要件の粗悪化が大量に発生しやすくなります。

これ以上に配信されるものはすべて、バックログ上に存在する必要があり、バックログ自体にも完了の独自の定義があります。

優先順位については、MoSCoWメソッドが常に役立っています-YMMV。


1

私がこれについて最初に考えたのは...なぜ変更を心配しているのですか?プロダクトオーナーについての歴史的な理解があり、将来の拡張を容易にするためにもう少し構成可能な最初のソリューションを構築する必要があると感じていますか?ソリューションに2日かかり、それらのソリューションに5日かかる場合、はい、2倍以上かかります。しかし、計画の変更に毎回2日間かかり、それらの機能強化に1日間かかる場合、計画は長期にわたってより効率的であるように見えます。この質問に正しい決定や間違った決定があるとは思わない。それは他の要因、私見に依存します。ただし、他のソリューションでLOEを2倍にした場合、そのような直接的なガイダンスがなければ、この考え方については正しいです(スケーラビリティ、堅牢性などに追加の複雑さが必要であるという証拠)。私の提案は、優先順位付けを支援する必要があるため、これらの会話に製品所有者を連れてくることです。ソリューションが5ポイントであり、現在はニーズを満たしているが、彼らがしたいことは50ポイントと2スプリント以上を必要とする場合、POは「保留、このMVPの優先度の高いリリースを計画しており、ロードマップにない機能の構築に2週間費やすことはできません!」

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.