今それをシンプルに保つか、将来を念頭に置いてプログラムしますか?


21

現在、かなり複雑な会社向けに新しいアプリケーションをコーディングしています。期限に間に合うように、機能はかなり打ち上げられており、起動する準備ができています。

私は今月末までにバージョン1を立ち上げて実行するタスクを与えられました。私は開発のほぼ半分であり、終わりが見えてくるようになりました。

昨日、要件の1つに対する非常に優れた簡単なソリューションを思いつくのに時間を費やし、その結果を非常に誇りに思っています。今朝、バージョン2のドキュメントが送信されました。そこには、昨日書いたコードを破壊するか、大幅に変更する必要があるという要件があります。そのままにしておくと、将来多くの作業が必要になります。現在のソリューションをより堅牢にするためにもう1日かかるため、v2機能をはるかに少ない労力で追加できますが、必要な追加のコーディングには少し遅れが出ます。

v2を実行するかどうかはわかりません。私の場合もあれば、同僚の場合もあれば、インターンの場合もあります。

あなたが私の靴を履いていたら、将来それをより簡単にするために今時間を費やしますか、それともあなたのソリューションを残して、時間が来たときにそれを処理しますか?



次のリンクは私にとって役に立ちました。elegantcode.com
/

回答:


18

締め切りが石で刻まれている場合、あなたがそれを満たすために持っているものを終えてください。新しい要件のコード変更に対応するために、v2の見積もりを確実に膨らませてください。また、新しいv2機能のために変更する必要があると思われるものを簡単に文書化し、他の何かに再割り当てされた場合に同僚がそれを取得できるようにしてください。

締め切りに十分な柔軟性がある場合(1日、その音により、2.5日間の延長を目指してください)、確かに、先に進み、既知の未来のためにコーディングしてください!


1
より堅牢なソリューションを文書化する提案については、+ 1。この機能は、計画どおりに実装される場合と実装されない場合がありますが、変更についての考えを将来の実装者に通知することをお勧めします。
マイクパートリッジ

2
私は今朝、ドキュメントを読んだ後、v2の予想のためにメソッドスタブの記述を始めました。私はそれと、これらが将来どのように機能するかを述べるいくつかのコメントにそれを残すと思います。ありがとう:)
ティアナ

1
ボールから目を離さないでください。私の経験では、V1の締め切りが目に入る間、V2に関係することを考えるのは悪いことです。開発が期限を逃した場合、それは開発者の責任です。
マッテンツ

13

セカンドシステムエフェクトの餌食(早期)に陥ることは避けてください。適用するいくつかの優れた手法を次に示します。

  1. バージョン2で 予定されていることを理由に、バージョン1の脱線を絶対に避けてください。先の計画は問題ありませんが、v2仕様の作成者は、v1ではなくv2の障害に責任を持つ必要があります。
  2. (可能であれば)現在大きな変更を必要としないバージョン2の要件を作成者に再作成してもらうことができるかどうかを確認し、後でv3向けにそれらを計画します。
  3. YAGNIを念頭に置いてください。ただし、拡張性を念頭に置いてコーディングしてください。マジックナンバー、ハードコードされた値を避け、適切な単体テストやコードコントラクトなどを作成してください。早い段階で適切な手法を適用すると、リファクタリングやコード変更の苦痛が軽減されます。

都市のように成長するほとんどのソフトウェアプロジェクトは、長期的には成功しています。限られた未来に向けた進化的計画により、ソフトウェアを予定どおりにリリースでき、リリース時に必要な機能が追加されます。Carl Saganからの次の抜粋を参照してください。

[都市の]配置は、すべての市民システムが並行して構築され、定期的に交換される場合、より効率的である可能性があります(これにより、例えばロンドンやシカゴの大火災などの悲惨な火災が都市計画の助けになることがあります)。しかし、新しい機能のゆっくりとした付加により、何世紀にもわたって都市は多かれ少なかれ継続的に働くことができます。


デザイナーや経営陣と話をして、彼らがその機能に結婚しているかどうかを確認するアイデアが好きです。私はそれを価値のあるものよりも多くの仕事を引き起こす役に立たないベルとしてもっと見ています...しかし、それから私は強調された開発者です。:)
ティアナ

2
+1:未来を予測しようとしないでください。届くと驚くでしょう。
S.Lott

7

来月の要件のために、今日コードを追加しないでください。今日、あなたはあなたが持っている要件にできる限りきれいなコードを書くべきです。私は、1日の仕事で数日後には節約できるのではないかと疑っています。私はそのような主張を聞いたことがあり、それが真実だった単一のケースを思い出すことはできません。いくつかのコードを表示することで私を納得させることができるかもしれませんが、私の経験ではそうは思えません。


それは本当ですが、前もって徹底的に計画する時間を持ち、さまざまな変化の性質を予測するために必要なビジネス知識を持っている場合にのみ真実です。しかし、ほとんどのビジネス状況(現在、安価、小規模)を考えると、私はあなたの声明に完全に同意します。しかし、あなたが真の非信者ならいくつかの例を持っています:)
ジョエルイーサトン

@JoelEtherton:あなたがビジネスの知識を持っているとしても、変化を予測することは非常に難しいです。
sleske

@sleske:時々可能ですが、私の経験は両方向にあります。私の現在の仕事では、優れた計画と先見の明により、余分な頭痛の種が大幅に削減されました。
ジョエルイーサートン

6

そのままにしておきます。

開発者は実際に、本来の目的を果たすだけで、それ以上のレガシープロジェクトを評価します。

今日、「将来の」要件を満たすためにコードベースを「ステージング」するための良いアイデアのように思えるかもしれませんが、おそらく将来のコードを理解する上で障害となるでしょう。部分的に実装された機能や忘れられたファントム要件の痕跡を扱うのが好きな人はいません。私はそれが事実だとは言っていませんが、最善の意図にもかかわらず、物事はしばしばそのようになります。


「半実装機能なし」の場合は+1。もっと賛成できたらいいな。
sleske

1

良い答え。私は追加するだけです-このような場合に私がすることは良い差分を取るので、私がやったことをキャプチャし、安全な場所にそれをリスニングすることができます。その後、次のバージョンで再びそれを行う機会が来れば、それは簡単です。

一般的に、優れた開発者は将来の要件を予測しますが、締め切りが迫っているときは、「ボートを揺さぶる」のではなく、すでに持っているもののバグに対応するときです。


変更を個別に保持することをお勧めします。差分の代わりに、ブランチはおそらくより良いアイデアです(目に見える、マージしやすいなど)。いつでも削除できます。
sleske

1

場合によります。古き良きルールがあります。他の人を自分のように扱われたいように扱ってください。自分のプロジェクトで、すべての優先事項を知っていたらどうしますか?

v2が絶対に必要であり、締め切りが難しい必要性ではなく単なる願いである場合は、天候が良い間は技術的な負債を作らずに帆を修理しないでください。他の誰かがv2を実行する場合でも、先見性に感謝します。

v2の必要性に疑問がある場合は、YAGNIを使用してください。また、あなたがスペクトルの反対側にいて、彼らが形成する前にアイデアを絶えずあなたにスパムするクライアントの1人を持っているなら、あなたのメールを毎日2〜3回だけチェックし、アクションに急いでいない場合、あなたは驚かれることでしょうあなたがそれらを読む前に、いくつの「問題」とリクエストが無関係になるか。

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