それはいつやり過ぎになるのですか?


10

まず、コミュニティスレッドの作成方法がわからないことをお詫びします。誰かが私を助けてください。

開発者として、多くのプラットフォーム、テクノロジー、さらにはインフラストラクチャレベルで。私はいつも自分が質問しているのを見つけます。

私が始めて以来、それは終わりのない学習プロセスでした。私が学んだことの1つは、要件が長期間有効であることがほとんどないということです。そのため、少しの見通しは長い道のりになるかもしれません。

しかし、バランスはどこにありますか、そしてそれを得るのではなく、あなたが時間を失っているときをどうやって知るのですか?


1
現在顧客がいない最初の日から100万人のユーザー向けにスケーリングすることについて話しているのでしょうか。または、税計算がどのように実行されるかを提案するような「構成可能」な方法で税額計算を変更するなどのより機能的なものは、誰も変更しなかったとしても、この仮想の新しい世界でどのように機能するか考えられていませんか?
Jon Hopkins

1
コミュニティWikiはほとんど非推奨です。計画どおりに機能することはありませんでした。心配しないでください。
David Thornley、2010年

100万人のユーザーについて話しているときは、やりすぎは語彙に入れるべきではありません。
Theofanis Pantelides 2010年

回答:


12

平均的な開発者があなたのコードを読んであなたが何をしか理解できないとき、あなたはあまりにも多くをしています。

  • チームで頻繁にコードレビューを行います。
  • 使用する予定のアーキテクチャ、テクノロジー、パターンについて話し合います。(あなたがそれらを持っている場合、毎日のスタンドアップミーティングで)

私は遭遇したすべてのCV駆動の「建築家」と戦います。ドームがあったらいいのに!;)

世界は莫大なお金を浪費していて、代わりに私たちの(プログラマーの)生活を改善するために使うことができると思います。


5
「私は出会ったすべてのCV駆動の「建築家」と戦う」:)
Gratzy

2
不平等なレベルの開発者がいることを考えると、私はこれに(実際的に)必ずしも同意しません。よくあることですが、類似のプロジェクトをリファクタリングして共通のライブラリを使用しますが、以前のように常に読みやすいとは限りません。
Theofanis Pantelides、2010年

1
すべてのチームメンバーが作業しているソースコードを十分に理解することはかなり重要だと思います。あなたのプロジェクトの豊かさのために、そしてまた建築家が彼自身の実装の奴隷になることを避けるために。ですから、知識の違いが大きすぎる場合は、最初に修正してください。

1
私はあなたの最初の文が好きです。コードの明快さは重要です。しかし、頻繁なコードレビュー?毎日の会議での建築の議論...本当に?そして、「CV主導の建築家」は正確にはどういう意味ですか?
Robert Harvey、

1
頻繁なコードレビューは、それらが自動でなければならないことを意味します。あなたは機能を書き、同僚の1人がそれをレビューし、それを検証するにはそれを理解する必要があります。彼があなたに質問した場合、あなたは協力してコードを改善します。あなたはスタンドアップ中にあなたの建築上の問題に言及しますが、議論はその後に起こります。誰がアーキテクトを必要とするかを読んでください(martinfowler.com/ieeeSoftware/whoNeedsArchitect.pdf)。CV駆動とは、CVで必要なテクノロジを選択することを意味します

11

プロセスが結果を追い越したとき。

開発者が結果よりもプロセスに集中している場合(品質、締切など)、悪いことが始まります。

このため、コードレビューやデザインパターンなどの目的はコードを改善することですが、それ自体がターゲットではないことを忘れてはなりません。


4

私にとっては、Kent BeckがXPで提案するアプローチが好きです(「彼の」アイデアなのか、それとも他の人のアイデアなのかはわかりませんが、最初に聞いたのはここです)。

明日の問題が何であるかを考え出して解決しようとせずに今日の問題を解決することは十分に困難です。

開発者は、存在しない要件のソリューション、発生しないエッジケース、または問題の影響が問題を回避するコストよりもはるかに少ない真の問題でさえ、多くの時間をソリューションに費やすことができます。

これは、ユーザーが本当に望んで使用することになる可能性のある時間です。これらのことの1つが実際に発生するというまれなイベントで発生する不便さをはるかに上回るメリットをユーザーに提供するものです。

ユーザーにとってこの非最適な結果を超えて、この方法での過剰なエンジニアリングの開発者への影響は、サポートや拡張が困難な複雑なコードに及ぶ傾向があります。

だから、私にとってあなたが知っているか、かなり確かなことができるなら、何かが要件であるか、問題を引き起こすだろうし、それを解決しなければならない。

最初に実装したよりも広い要件があったことが判明した場合は、戻ってやり直す必要があるかもしれませんが、ほとんどの場合それが起こらないので、プロジェクト全体で行った総労力は依然として低くなります。


すべてをモジュール化して、スケーリングに応じてモジュールを交換してみませんか?それともやりすぎか!?
Theofanis Pantelides、2010年

1
@Theofanis Patelides-十分に構造化されたコードは明らかに常に良いアイデアですが、ほとんどの場合と同様に、あなたは確かにそれを行き過ぎることができます。私はこれらの多くのことで本能が時間の経過とともに本能になると思います-あなたは以前にやったことがうまくいったこと、そして何が時間の無駄だったかを知っています。
Jon Hopkins

1

あなたの質問はかなり自由回答なので、「プロジェクトの一部でやりすぎ」と解釈します。

私にとって、本当に顧客にそれほど利益をもたらさない何かに時間をかけすぎるのは簡単です。多くの場合、それは「まあ、うまくいくが、私が望んでいるようには完全にそうではない」などの小さなことであり、顧客がおそらくこの方法で動作したかどうかは気にしません。

それが起こったら、私はそれを止めて、もっと重要なことに時間を費やすべきです。製品が全体として機能するよりはましですが、完璧に機能するこれらの小さな部品があります。

Code Completeから)トレーサーコードを作成することは、おそらくこれを回避するための良いアイデアです。プロジェクト全体を、コード全体(GUIから(またはその近く)からバックエンドまで、そしてバックエンドまで)に接続するコードを作成することから始めます。このようにすると、常に機能するものがあり、すべてが実行されるまで、小さなものを完成させるのに時間を費やしません。

しかし、それでも、それは規律と優先順位の問題です。


私も同意しますが、細かい事柄のために、何時間もの機能性を費やし、それを技術者以外のエンドユーザーに渡し、断る場合も何度もありました。
Theofanis Pantelides、2010年

1

私が「私は怒るつもりですか?」

IRLのリソースと時間の制約により、通常はこの質問をしなくてはなりません。その時点で、あなたは最も重要な/達成可能なビットに集中し、最高のものを望みます。


1
私にとって、プランAから逸脱することほど刺激的なことはありません
Theofanis Pantelides 2010年

1

実際、終わりのない学習プロセスです。...そして私はそれがそのままであると思います!バランスは、物事が十分に効率的で、プログラミング以外にも何かをする時間があるときです。ガブリンは「規律と優先順位の問題」であり、ジム・ホプキンスはしばらくすると本能的になると同意します。小さな部品を完成させることが私たちを幸せにするものであることは知っていますが、結局のところ、それはエンドユーザーを幸せにすることのすべてです。したがって、バランス(またはおそらく妥協点)は、エンドユーザー/顧客/クライアントを最初に幸せにすること(プランAである必要があります)、次に完成に時間がある場合-「小さな部品」をより効率的にすることです/または他のすべてあなたがしてください。ある時点で「十分」と言わなければならないかもしれませんが:)そうでなければ、それはやり過ぎになります!

もちろん、最悪のシナリオは、エンドユーザー/顧客/クライアントがあなたである場合です。:)

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