高価なプログラマーに対してどのように主張するのですか?


33

当社では、モバイルUIの開発など、一見複雑ではないように思われる多くのことを行う必要があります。

経験豊富なプログラマーは初心者の4倍の費用がかかるとしましょう。

どちらも基本的には、一見単純なことを同じ時間で完了することができます。

違いは、経験豊富なプログラマーはバグが少なく、コードはより安定していることなどです。初心者プログラマーは他の全員(PM、クライアントなど)の多くの時間を無駄にします。しかし、彼らはかなり安いです。

反論は、HTMLでテーブルを作成するのに経験と初心者が同じ時間かかることです。したがって、経験豊富なプログラマーを雇うことは贅沢です。初心者プログラマーも同様に達成できます。

私たちの分野で経験のあるプログラマーと新しいプログラマーの違いは4倍になる可能性があるので、より多くの優れたプログラマーに投資する必要がありますか。


18
経験豊富なプログラマーは、コードをより迅速に、より少ないバグで作成できますが、単純なプロジェクトでの作業も短期間で退屈します。
-david25272

18
Let's say the experienced programmers costs us 4x as much as the beginners.-それはありそうにない。比率は2倍または3倍に近い。あなたが貧しいプログラマーにお金を払っているなら、あなたが本当にしていることはアマチュアを雇い、必要な仕事をするために彼らを訓練することです。
ロバートハーヴェイ

4
Both are basically able to complete the seemingly simple things in the same amount of time.-まあ、経験豊富なプログラマーは、何をすべきかについてより具体的な指示を与える必要がないため、長い目で見ればかなりの時間を節約できます。
ロバートハーヴェイ

8
@jules:アウトソーシング/オフショアを行うには、非常に詳細な仕様を作成する必要があります。これは、経験豊富なプログラマが実際のプログラムを作成するのと同じくらいの時間がかかるプロセスです。私の言葉を受け入れないで、オフショアリングを試みた人と話してください。私が持っています。
ロバートハーヴェイ

2
@Ewan:英国の他の場所で安価なソフトウェア開発者を探すために過去2年間にロンドンを離れた大企業の例を挙げてください。
gnasher729

回答:


60

実際に同じプロジェクトで実際に試されている両方の理論を直接体験しています。

私が到着する前に、より高価なBAと非常に安価なプログラマーを雇うという決定が下されていました。そのアイデアは、非常に若いプログラマーが質の高い仕様を従うことでした。

6か月以上にわたるメインプロジェクトのスラッシングを経て、開発マネージャーを引き継ぎました。いくつかの衛生要因を修正すると、コード品質の問題が残りました。私にはいくらかの予算があり、グラフを使用しないコミュニケーションスキルと、C#(プロジェクトが記述された言語)のトレーナーとしての以前の経験を持つ、非常に経験豊富なプログラマ(まあ、ソリューションアーキテクト)を雇いました。アイデアは、メンタリングと効果的に無料のトレーニングを提供することにより、他のコーダーの品質を改善することでした。

1、2か月後、それでもうまくいかないことが痛々しいほど明白になったため、元のチームはプロジェクトから削除され、トップドロワープログラマがさらに2人追加されました。彼らは、元のコードが取り返しのつかないため、最初のチームがゼロから1か月のスプリントを3回試行して8か月以上で完全に失敗したプロジェクトを提供しました。

要件が非常に基本的なものである場合は、非常に若いプログラマーを使用しても大丈夫かもしれませんが、長期的にはより多くのコストがかかる可能性があります。「単純な」要件が非常に複雑になる場合があります。

私が方向を変えるという難しい選択をしていなかったなら、彼らはおそらくまだそれに取り組んでいるでしょう:)-より深刻なことには、この例では、元のチームによるコミュニケーションと能力の欠如は、彼らが問題を提起しないことを意味しました仕様ではありませんが、アーキテクチャ上意味があるかどうかに関係なく、依頼されたすべての処理を実行しようとしますより経験豊富で自信のある開発者が質問をし、基本的な要件を掘り下げたため、最初に適切なソリューションを作成しました。

ああ、もう一つ。すぐに優秀なプログラマーを雇えると思い込まないでください。長年の平凡な経験を持つ多くの人々がいますが、それはジュニアとほとんど同じくらい悪い結果を提供しますが、スーパースターと同じ(時にはさらに)費用がかかります。私は非常に良い「ヒット率」を持っていますが、それは経験があり、たくさんあります。これは、ここでは話題にならないまったく異なる会話の主題です...

TL; DR優れたプログラマーはお買い得です。難しいのは、それらを見つけ、それらを維持するのに十分な魅力的な作業環境を作成することです。


3
tl; drの「Experienced」と「Good」を入れ替えるのは、そのすぐ上で指摘した理由です。また、プロの経験が比較的少ないか、まったくない優秀なプログラマーを見つけることはかなり可能です(それでも困難です)。ただし、これらの開発者の可能性を引き出すにはグルーミングが必要であり、OPの会社にはこれを行うのに適した文化がない可能性が高いと認めます。優れたプログラマーを持つことの利点の1つは、優れた行動と実践のロールモデルであり、平凡とは対照的であることです。
デレクエルキンズ

1
@Derek Elkins-良い提案です。2番目の点に同意します。ある仕事で私は予算に非常に制約されていましたが、1人の経験豊富な現職プログラマーと3人の非常に若いプログラマー(学位なし、経験がほとんどない)から非常に優れたチームを新規採用者としてまとめることができました。しかし、私はそれらを見つける前にいくつかの憂鬱な悪い履歴書を通過する多くのお金を「費やし」、適切なレベルで小さなタスクを売り込み、解決策を所有させ、成果を祝わせることによって自分自身を訓練するより多くの時間/お金を費やしました。
mcottle

ええ、私の経験は似ていますが、外部結合が何であるかわからないSQLの15年の経験を持つ「シニア」開発者にインタビューするよりも、気のめいるほど悪いジュニアCVの方がずっと落ち込んでいます。しかし、会社のフィット感、忠誠心、一般的に士気の向上という観点からのトレーニングコストにはいくらかの見返りがあります。そして、率直に言って、彼らは「典型的な」上級開発者よりも良くて安いでしょう。しかし、それは間違いなく投資であり、ペイオフまでの時間は、それがそうでなければ正味の勝利であったとしても、しばしば役に立たないほど遠い場合があります。
デレクエルキンズ

すばらしい投稿+1。納期は開発者の品質を評価するための非常に鈍いツールであるという警告を付け加えます。私たちには「スーパースター」の請負業者がいましたが、彼は開発スピードのおかげで当初大きな需要がありました。人々は彼のものをピックアップしてみましたら、車輪がすぐにオフに来た-ハック、ハードコーディング、モノリシックコードは、ユニットテストの欠如-彼はすぐにポスト速攻を梱包送られた...
ロビーディー

さらに、彼らは他人を助けるの支援の需要に多額だとして保険料の開発者は自分の後輩よりもコーディングはるかに少ない時間を費やし、コードレビュー、アーキテクチャ、DevOpsチーム、茶色のバッグセッション、ワークショップ、などなどを訓練
ロビーディー

19

広範なパフォーマンス統計がある場合は、数学でビジネスケースを作成できます。これらは、開発速度が価格の上昇を補うこと、またはさらに良いこととして、堅牢な設計により、後続バージョンのメンテナンスと開発をさらに節約できることを示しています。残念ながら、そのような数値はあまり利用できません-特に新しい技術では。

もう1つの議論は、市場投入までの時間です。これは、経営陣がより簡単に理解できます。ただし、時間が非常に重要でない場合、これは役に立ちません。

最後の手段として、有名な消防士であるRed Adairの写真を見つけてください彼は経験の浅い人たちが何度か失敗した後に大災害で呼ばれました。彼の有名な引用:

プロを雇うのが高価だと思うなら、アマチュアを雇うまで待ってください。

...カラーで印刷し、オフィスのドアに目立つように表示して、誰もがそれが何であるかを理解できるようにする必要があります;-)


これは私が見た中で最良の答えだと思います。すでに多くの答えがあるので、上級のプロの開発者の価値は同じエラーを少なくして同じことを繰り返さないことです。繰り返し作業を排除し、抽象化のレベルを上げることができる人を獲得し、ジュニアチームのメンバーを指導および指導するという考え方です。長期的には役に立たない古い悪いアイデアの絶え間ないリサイクルから抜け出すために、開発中のシニアとジュニアの人々のより多くの混合が必要です。
ジミージェームズ

開発者の品質を評価するための簡単な統計情報の検索は、コードの行、欠陥の数、循環的複雑さ、コードカバレッジなど、ずっと前に中止されたと思います。ゴールデングースは、十分な製品を生産するために最小限のコストで組み立てることができる開発者の適切な組み合わせの予測因子です。
ロビーディー

@RobbieDee完璧なモデルは必要ありません。ただ実用的なアプローチです。たとえば、開発タスク、実装時間、および担当する開発者の年功序列レベルに対応するストーリーポイントを体系的に推定する場合、時間の経過とともに非常に興味深い平均を収集します。もちろん、これらの統計は、同じテクノロジーで同様のアクティビティを推定する場合にのみ関連します。そして、それらは単なる平均であり、クリスタルボウルではありません。ただし、傾向を示し、年功序列の価格比を正当化するのに役立つデータを取得できます。
クリストフ

@Christophe Storyポイントは、1つのタスクの複雑さを別のタスクと比較するためのものです。時間を測定するように設計されていません(2pts = 1日など)。
ロビーディー

@RobbieDeeそれが私のポイントです。パフォーマンスの統計情報が必要な場合は、タスクのパフォーマンス時間とタスクの複雑さを比較する必要があります。すべての難しさは、複雑さの正確な評価を得ることです。統計を実際に実行できるのは、簡単に近似値を取得できる場合のみです。FPを使用する場合、非常に正確です。しかし、FP評価は時間がかかり、あまり機敏ではありません。ストーリーポイントは客観的ではありませんが、簡単に取得できます。もちろん、あなたは正しいです。平均を取りたい場合は、スケールを線形化する必要があります。プロジェクト管理では、このアプローチは「パラメトリック推定」と呼ばれます。
クリストフ

10

私はmcottleの答えが好きで、それを支持しましたが、他の答えがまだ出していない他のダイナミクスと議論をカバーしたいと思います。

第一に、mcottleの答えに暗示されているのは、特定のスキルレベルを下回ると、いくつかの問題がまったく不可能であるという事実です。残念ながら、あなたはこのアウトを見つける方法があるあなたのチームしようと失敗によるものであり、非常に高価な。失敗した後、これから学ぶべき2つのレッスンがあります。1つの選択肢は、より有能な開発者が必要であり、彼らを雇い、プロジェクトを大幅に予算超過およびスケジュール超過で完了することを学習することですが、少なくとも将来的には準備ができています。他の選択肢は、そのようなプロジェクトはあなたのチームにとって「難しすぎる」ことであり、そのようなことは将来試されるべきではありません。つまり、プロジェクトを放棄し、事実上同様のプロジェクトを放棄します。もちろん、「これを行うにはあまりにも愚かな」と表現されることはめったにありませんが、代わりに「私たちのシステムは非常に複雑です」または「レガシーコードがたくさんある」などと合理化されます。後者の見方は、何が可能か、どのくらいの期間/高価な開発が必要かという会社の見方を大きく歪める可能性があります。」

1つの質問は、あなたの会社の計画は正確に何ですか?さて、彼らは安くて若いプログラマーを雇います。3年が経ちました この3年間ずっと一緒にいたデベロッパーに対して、彼らは何をしますか?彼らは決して彼/彼女を昇給させませんでしたか?ここでのオプションは次のとおりです。

  • 彼らは従業員を保持するために競争力のある昇給をしますが、その場合、なぜ彼らはシニア開発者の料金を支払うのに問題があるのですか?ただし、これに戻ります。
  • 彼らは停滞しているため、やがて意欲やスキルが不足している従業員に「ボイルダウン」することになります。
  • 彼らはより多くの上級従業員をより積極的に削除します。

次の2つのケースは、従業員の離職が多いことを意味します。これは、会社の知識を失い、継続的に従業員を増やすための支払いを意味します。2番目のケースでは、基本的に悪い開発者を選択しているため、スケジュールの増加という形でコストが上昇します。これがうまくいく方法は、プロジェクトXですべてが順調に進んでおり、ジムが2年で昇進していないため、ジムが突然去るまで、彼は次のように大幅に時間がかかります。 (おそらく)ジムほど良くない新しいジュニア開発者を雇って訓練する必要があります。これは、期待を再調整する方法です。

競争力のある昇給が提供されている場合でも、あなたが持っているのがジュニア開発者だけで、どこでどのように学ぶべきですか?あなたは基本的に、彼らのうちの1人が彼らの職場環境にもかかわらず自分自身良い慣行を学び、最終的に他の人を指導することを望んでいます(緑の牧草地に去るのではなく)。一部の優れた開発者と「ポンプを準備する」ことは、はるかに理にかなっています。おそらく、初心者の文化を開発するでしょう。その結果、ジュニア開発者よりわずかに優れているだけで、文化的に有毒な人々にシニア開発者料金を支払うことになります。

特に非常に優秀な開発者の利点の1つは、誰も言及していないことに驚いていることです。彼らは容易に乗法要因になる可能性があるからです。ジュニア開発者とシニア開発者が同じ時間をかけてテーブルを作成する場合があります。ただし、優秀な開発者はそれを行いません。全員がテーブルを作成する時間を短縮するテーブルジェネレーターを作成します。代わりに/さらに、すべての人に可能なことの上限を引き上げます。たとえば、GoogleのMapReduceフレームワークを実装した開発者はおそらく非常に有能でしたが、ユーザーがMapReduceの大部分は、独自にアルゴリズムの大規模な分散バージョンを作成することはまったくできませんが、MapReduceを使用して簡単に実行できるようになりました。多くの場合、このダイナミクスはそれほど露骨ではありません。たとえば、ソース管理、テスト、および展開のプラクティスを改善することで、全員の能力が向上しますが、特定の人物を追跡するのは難しくなります。

反対側を少し議論するために、多分、上位者は正しいでしょう。経験豊富な開発者は必要ないかもしれません。ただし、そうであれば、開発は会社の重要な部分ではないように思われます。その場合、開発者を完全に排除し、既製のソフトウェアを使用するか、オンデマンドで請負業者を雇います。社内チームではなく請負業者だけを使用しない理由を調べる価値があるかもしれません。とにかく大量の従業員を解雇する場合は、請負業者を増やすことは問題になりません。


請負業者は、シニアのスキルレベルを必要としているが、1年間のフルタイムの給料を支払う余裕がない場合、このOPに対する非常に実行可能な回答になる可能性があります。信頼できる地元の契約会社を見つけてください。請負業者のアイデアを独自の答えに拡大すべきだと思います。
-rwong

6

これは、どちらかまたは両方の状況ではありません。

特に大規模なプロジェクトでは、比較的日常的に上級の役職の比較的経験のある人が数人、若手の役職の経験の少ない人がかなりいます。このように、高齢者はコードを記述し、より困難な決定を下すことでプロジェクトを直接支援できるだけでなく、後輩を指導することで間接的に支援することもできます。

ある程度の注意を払うことで、これはシニアエンジニアが挑戦や関心のない仕事を絶えず行うように求められることで、すぐに燃え尽きないようにするのにも役立ちます。少なくとも私の経験では、熱心なジュニアレベル(またはインターンレベル)の人々を指導する少しの時間でさえ、スプリントをもっと面白くすることができます。

公平に言うと、この種の立場はおそらくすべてのシニアエンジニアに合うわけではないということを付け加えておきます。アーキテクチャと設計、コミュニケーション、ドキュメントなどを大幅に重視する必要があります。特に早い段階では、多くの規律も頻繁に必要になります。コードを書くキャリアを積んだ人にとっては、ジュニアエンジニアにその方法を教えるのではなく、コードを書くだけでジャンプしたくなるでしょう。また、コードが個人の好みの方法ではない場合は、完全に書き直そうとすることもよくあります(仕事に完全に適している場合でも)。

ただし、管理者に複数の経験レベルを組み合わせるように説得できない場合、より多くの経験を得るために行かなければならないことは基本的にまったく問題ありません。プロジェクトを完全に後任者に任せた場合、使用可能な製品をまったく入手できない可能性が非常に高くなります。さらに悪いことに、彼らは自分がやっていることが使用可能な製品に向けて実際の進歩をもたらしていないことに気付かないので、経験豊富な人が自分たちが根本的な間違い。早い段階でバックアップを取り、グループを組み直し、新しい方向に出発して、意味のある目的地に到着することを望んでいます。


5

実際のプロジェクトはすべて顧客の要求によって駆動されるため、複雑性の低いタスク(CRUDフォームの構築など)と複雑性の高いタスク(イベント駆動型通知システムの構築など)が含まれます。複雑さの低いタスクのみを使用する唯一の方法は、顧客に「いいえ」という言葉を繰り返し伝えることです。

ジュニアレベルの開発者しかいない場合、複雑性の低いタスクしか実行できないため、低価値の製品を構築し、市場で製品を差別化するのに苦労するだけです。差別化する場合は、価値の高い機能を構築する必要がありますが、これは必然的に非常に複雑なタスクになります。結局のところ、それが簡単だった場合、それは価値がないでしょう。つまり、これらの非常に複雑なタスクを実行する人が必要であり、上級レベルの開発者が必要です。

上級レベルの開発者しかいない場合、価値の低い仕事にスキルを浪費し、彼らに言われた仕事を強いるときに彼らを維持するのに苦労します。取り組むのが面白い。つまり、これらのタスクを引き受けるには、経験の浅い開発者も必要です。

顧客主導型の製品に取り組む健全なチームは、通常ミックスです。ジュニア開発者とシニア開発者の比率は、低複雑度タスクと高複雑度タスクの比率に依存し、それはビジネス戦略に依存します。マージンの少ない簡単に理解できるクッキーカッターの仕事を積極的に探している場合は、それほど複雑ではないタスクはほとんどなく、おそらく主にジュニアレベルの開発者を雇います。十分にサービスを提供されていないニッチをより高い利益率で差別化してターゲットにしようとする場合、多くの複雑なタスクがあり、主に上級レベルの開発者を探します。


3

私の答えでは、上級プログラマーは必ずしもジュニア開発者よりも速くコーディングするとは限らないと主張します。実際、最速のプログラマーは、大学を去ったばかりの平均的な人たちです。

ドメイン知識は上級開発者の鍵です。優れたシニア開発者は、この分野に関する強力な知識を持っている必要があります。ジュニア開発者にはないかもしれません。経験豊富な開発者は、問題、解決する対象、および解決方法を理解しています。彼らはほとんどのジュニア開発者よりもビジネスのより複雑な問題を解決できます。

プログラミングは比較的安価なスキルセットであり、重要なのは専門知識です。


2

「主張」しようとしないでください市場は従業員の価格を設定します。市場が経験に対して4倍の支払いをいとわない場合、企業全体としては4倍の生産性の向上が見込まれているためです。

現在、明らかに市場は間違っている可能性があります。たぶん3.5倍か5倍ですが、あなたがデジタルエージェンシーでない限り、市場と競合するか、そのようなニュアンスは重要ではありません。

あなたの本当の問題は、面接で十分に経験豊富な開発者とそれを責めているだけの古い開発者を区別することができるかどうかです。

PMと開発者の予算に関する2番目の質問。開発者はPMなしで実行できますが、PMは開発者なしでは実行できません。最初に開発エンジンをソートしてから、PMを取得して管理者を解放します。


これは経済的な意味では正しいかもしれませんが、小さな町、田舎などの孤立した地域の市場は非常に歪んでいる可能性があります。大学の町はもっと良いかもしれません。
rwong

本当ですが、あなたのビジネスは場所にあります。
ユアン

2

本当に優れた開発者の4分の1のコストで、自国に誰もいないでしょう。あなたは給料の半分で誰かを見つけるかもしれません、そしてそれは絶対的な初心者です。給与の4分の1の人にとっては、国外に出なければなりません。そうすると、コミュニケーションに問題が生じ、仕様に盲目的に従う人々や、あらゆる種類のトラブルが発生します。

あなたは必要とする一つの良い開発を。ジュニアプログラマをさらに追加する場合は、強力なコミュニケーションスキルを持ち、ジュニアを監視し続ける能力のある優れた開発者が1人必要です。優秀な開発者がいなければ、あなたは失われます。並外れた才能のある初心者を見つけるのは幸運かもしれませんが、彼または彼女が優秀だとわかると、より高い給料が必要になります。

優れた開発者が1人もいない場合、全体像を見る人はいません。また、stackoverflowを使用しても解決できない問題を解決できる人はいません。そして、ジュニア開発者は保守可能なコードを作成する方法を知らないので、あなたはリークし、維持できないコードを持っているでしょう。彼らはそれを学ぶことができますが、彼らはチームの優秀な開発者なしではいられません。


1

より良いプログラマーを雇うことが費用対効果が高いかどうかを判断する前に、会社が乗り越えなければならないいくつかのハードルがあります。あなたが働いている場所について否定的な仮定を立てている場合は申し訳ありませんが、彼らが何をしているのかを彼らが確信しているとは思いません。

  1. 構築するソフトウェアの複雑さを正確に評価しましたか?彼らはあなたがしていることを非常に難しいとは思わないようですが、なぜより良い人を雇うのですか?間違いを犯した場合や、より良いソリューションと生産性がどのようにお金を稼ぐかを主張しましたか?時間を節約することは素晴らしいことですが、多くの企業は、マウスパッドを購入するためのお金を与えるよりも、プログラマの1週間の時間を無駄にしたいと考えています。
  2. あなたの会社は優秀なプログラマーにとって魅力的ですか?彼らはそれらを識別することができますか?シニア開発者を雇うより悪いことはありません。彼らにもっとお金を払ってください。彼らはスキルやリーダーシップの不足のためにチーム全体を引きずります。
  3. あなたの会社は優秀なプログラマーを利用できますか?彼らがやろうとしているのが、粗悪な仕様を投げつけて、ただそれを構築するように言うだけなら、その意味は何ですか?彼らは自分たちのやり方で何かをする自由を彼らに与えるつもりですか?結局のところ、優れたプログラマーは定義上、自分の時間をより有効に活用する方法を知っています。それらは周囲の人々に影響を与え、他のプログラマーを向上させます。優れた設計とアーキテクチャを紹介し、残りは製品をより良くすることに基づいています。

申し訳ありませんが、あなたの会社は優秀なプログラマーと何をすべきかわからないと思うので、まずはより良いマネージャーを雇ってこれらの内部の問題を解決するように説得したいと思うかもしれません。

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