フリーランサーおよびソフトウェア開発者としてのキャリアの中で、「プロトタイプを作成しているのでない限り、常に高品質のコードを作成する」というアドバイスに注意深く従いました。コードレビュー、テスト、QA、またはリファクタリングを行わないことは、プロジェクトを高速化するのではなく、低速化するだけだとかなり早い時期に確信しました。
The Mythical Man Month by Fred Brooksや Rapid Development Steve Steve McConnellのような本は私の考えを裏付けた。中規模企業での専門的な経験も、質の高い仕事をしようとしないことによってどれだけのお金と時間が浪費されるかを私に示しました。
同時に、私は同僚から、コードの品質を常に維持する、またはコードの品質を単に達成するだけでは、小規模の企業や小規模なチームにとっては複雑すぎると不平を言うのをよく耳にしました。
人々が高品質のコードを書いて維持できるようにするのは高すぎる。
会社が月額$ 3 000で2人、月額$ 6 000で1人を雇うことができる場合、ほとんどのマネージャーは、2人の方が1人よりも生産的であると考えます。または、小さな会社が1人あたり月額3,000ドルで雇い、残りの3,000ドルを他の何かに使うこともできます。
小さなチーム内でそれを行うことができるようにするために考慮するには余りにも多くの側面があります。
コードのスタイル、読みやすさ、アーキテクチャ、設計、テストのしやすさ、テスト自体、信頼性、セキュリティ、使いやすさ、パフォーマンスなどを一人で管理することはほとんどできません。
そしてそれは価値がありません。
それは、コードの一部が今後15年間コードベースに残り、何百人もの開発者によって何千回も読み込まれるようなものではありません。たぶん、同じ人がこのソフトウェアを今後5年間維持し、それを捨てて、最初からより良いものを書くでしょう。
私は通常、開発者間の生産性係数1:10を覚えておく必要があり、ほとんどの時間はコードの作成ではなく維持に費やされていると答えます。これは、低品質のコードが依然としてずっと高価であることを意味します。
しかし、そうですか?
すべての会社は、その規模に関係なく、彼らが余裕のある可能な限り最高の開発者を雇って、高品質のコードを書くように奨励する必要がありますか?
まあ、これはおそらくサイトにとって大きすぎる大きな質問です。しかし、コアポイントのいくつかに焦点を当てましょう。
品質はそれだけの価値がありますか?
このstackexchangeの質問 は、バグが見つかった時期に応じて、バグのコストに関する詳細の一部に入ります。一言で言えば、バグは開発からQA、顧客のフィールド検証に移るたびに、修正するのに桁違いにコストがかかる傾向があります。プログラミング中にバグを修正するために1ドルを費やすと、現場でバグを修正するのにかかる1000ドルを節約できます。
その点で、それは常に価値があります。高品質のコードは、低品質のコードを作成して後で修正するよりも作成コストが低くなります。
バグを修正するつもりであると仮定します。原子炉に必要な品質のレベルは、Angry Birdsクローンに必要な品質のレベルとは異なります。 多すぎるここに品質があると、もちろん負担となり、利益が減少します。しかし、バグを修正するつもりであれば、開発中の修正にかかるコストはほとんど常に低くなります。
私たちは最高の開発者を雇うべきですか?
おそらく違います。優れた開発者の通常の「コスト削減」は、次の2つの場所から生じます。
問題は、ほとんどのプログラミングジョブがテクノロジー企業に関係していないことです。彼らはバニラのウェブサイトを作ったり、あるポイントから別のポイントにデータを配管したりしています。単なる平均的な開発者は、それを完全に実装できます。
バグが少ないということは、相対的な問題でもあります。 99パーセンタイルの開発者はすべてのバグをキャッチできますが、非常に単純な作業を行っている場合、75パーセンタイルの開発者はすべてのバグを半分のコストでキャッチできます。
その点で、それは常に価値があるわけではありません。
小さなチームは、高品質のソフトウェアを作ることはできません。
あなたが スコープやスケジュールを犠牲にしない のときだけ、小規模なチームは高品質のソフトウェアを作成できません。ソフトウェア管理には、コスト、スコープ、スケジュールの3つの手段があります。コストを小さくする必要があり、高品質が必要な場合は、より多くの時間を必要とするか、必要な機能を少なくします。あなたの会社がより多くの機能またはより速いスケジュールのために品質を犠牲にしたいのであれば...それは彼らの選択ですしかし、小さなチームに強制することはありません悪いコードを作る。
その選択は、いくつかのシナリオで合理的ですか?承知しました。市場投入までの時間がso重要/価値のあるスタートアップ環境でシナリオを見てきましたが、今すぐ手を抜くことは理にかなっています。多くのスタートアップの場合、最初に市場に出ることはほとんど無限の価値があります。素晴らしいアイデアはあなたの会社に関連付けられ、誰もがコピーではなくセクシーな新しいものを望んでいるので、市場への2番目のエントリーはチャンスがありません。
したがって、要約すると、常に一流の開発者を雇って高品質のソフトウェアを作成する価値はおそらくありません。低品質のソフトウェアnowの方が価値がある場合があります。そして、平均的な開発者を雇うことは、それらの開発者の相対的なコストと生産性に応じて、「十分に良い」ソフトウェアを生産するためのより費用効果の高い方法になるでしょう。しかし、ほとんどのシナリオでは、高品質のソフトウェア(ひいては優れた開発者)がビジネスを行うための最も費用効果の高い方法であると私は主張します。
私は彼らが最善を尽くして努力すべきだと思いますが、状況によっては何が最善であるかは他の人には当てはまりません。それは会社/開発チームの管理に依存しますが、異なる規模の会社は通常、さまざまな理由でこれらの問題を抱えることがあります。本「Dreaming in Code」では、彼らのプロジェクトには才能、時間、お金、そして素晴らしいものを作成したいという願望がありましたが、何とか作成した10x開発者のパックではなく、かなり優れたプログラマーの方がうまくいっていたかもしれません永遠にかかった大きな混乱。
プロトタイプ-スタートアップのビジネス側から要件を取得する場合、プロトタイプのように聞こえるかもしれませんが、実際にリリースするときに開発者を説得してみてください。これは、10倍のプログラマから利益を得られないという意味ではありません。その「10:1」の開発比率の最大の要因の1つは、あまりプログラマーができないこと(1000:1?)を構築できることだと思います。多くの大企業はプロジェクトのようなスタートアップを抱えており、同じ運命をたどることができます。
「いいえ」と言うのに十分良いプログラマーは、悪いコードを書くことを拒否するのにより良い立場にいます。彼らは否定的な結果を直接経験しており、その力を説得するのは得意ですが、あなたがどれほど優れているかは気にしません。ビジネスが十分に推進すれば、がらくたを書くでしょう。任意の締め切りが、最初に「正しく」実行するのではなく、それを実行するのに十分な時間がある理由です。大企業には、物事がいつ完了するのかを尋ね続けること以上に良いことは何もないマネージャーがたくさんいます。
ベストプラクティスの習慣優れたプログラマーは、学習し、時間をかけて学習するため、流暢さと良い習慣を身につけますが、ほとんどの人はそれを信じています。テスト、ドキュメンテーション、ソース管理、バグ追跡、コードレビュー、標準について、彼らが時間を無駄にしたりうめいたりする時間を無駄にしません。彼らはこれがあなたの仕事をいかに簡単にするかを知っています。彼らは多くの言語を知らないかもしれませんが、彼らがそれらを使うことを拒否するからではありません。違いがあります。何千人もの開発者がGitで生産性を発揮できますが、何があなたをそんなに特別なものにしていますか?大企業はさまざまなレベルの開発者を雇うことができ、見習いプログラムを作成する必要がありますが、10xコードを書くからといって、才能を活用して他の人に教えることができるわけではありません。
雇用
彼らは仕事をするために必要なスキルの代わりに必要とされる他のすべての手荷物を持っているので、ほとんどの企業はより少ない才能のために解決します。 「隅に座ってコードを書いているだけの人は欲しくない。」多くの開発者は、「自分のことを教えて」に光を当てていません。質問ですが、彼らが構築するものについて話すのが大好きです。ディナーパーティーで非常に静かに座っている男性を見たのですが、モニターのすべてのスペースを使用するために画面サイズを拡大する方法をホストに示し始めたとき、私は彼が売りに出ていると思いました。彼はそれを黒いTシャツ-The Horrorで行うこともできました。
多くの企業の問題は、「十分な品質のコード」を書くよりも、人々が品質の高いコードを書くことに関心がないことです。かろうじて仕事をするコード。このような状況では、2人でお互いの作業を確認する方が、1人を雇うよりも安全に思えます。
人々にあなたを選ばせるためには、1)高品質のコードだけが機能すること、2)あなたがそのような高品質のコードのプロバイダーであることをクライアントに納得させる必要があります。 2つ目は、おそらく1つ目よりも簡単な「販売」です。 「だれでも」が「適切な」コードを書くことができるサブフィールドである場合、それはあなたにとっては大変なことかもしれません。次に、最低基準が高く、スキルのレベルを要求する新しい領域を見つける必要があります。