プログラマーが宝くじに当たった場合、会社が水中に進まないようにする方法[非公開]


28

私の下には数人のプログラマーがいますが、彼らはすべて非常に優れており、明らかに賢明です。どうもありがとうございました。

しかし、問題は、それらの各自が1つのコア領域を担当していることです。チームの他の誰も、それが何であるかについて最も曖昧な考えを持っていません。これは、それらのいずれかが取り出された場合、それらは交換できないため、ビジネスとしての私の会社は死んでいることを意味します。

彼らがバスに遭ったり、辞任したりする場合に備えて、新しいプログラマを招いて彼らをカバーすることを考えています。しかし、私はそれを恐れています

  1. 古いプログラマーは、バックアップによって価値が低下するのではないかと恐れて、知識移転の考えに積極的に抵抗するかもしれません。
  2. 異なる開発者間の技術移転を促進するシステムがないので、たとえ彼らにそれを行うように頼んだとしても、彼らがそれを適切に行うという保証はありません。

私の質問は、

  1. 彼らが同意するような古いプログラマーにそれを置く方法
  2. この種の「バックアップ」を容易にするために使用するシステムは何ですか?コードレビューができることは理解できますが、これを行う簡単な方法はありますか?チェックインコードレビューによる本格的なチェックインの準備ができていないと思います。

4
特定のエリアに冗長性を持たせることで、別のエリアを探す代わりに、そのエリアを維持することができます。これはプログラミングの知識にも当てはまるので、他の人が知っていることを他の人が知っていることを実際に安全に保つことができます。

1
ある仕事では、オフィスの宝くじプールがありました。マネージャーは、全員が保釈されてもそこに留まりたくないという理由で、参加を主張しました。
デビッドソーンリー

3
ジェフ?あなたなの!私たちを殺そうとしないでください

2
なぜ世界でタイトルが変更されたのか-「バスでヒットする」というアイデアは広く知られているため、このトピックには独自の名前とWikipediaの記事:バス番号があります。あなたは人々が彼らのチームの「宝くじ番号」について話しているのを聞きません。
ニコール

1
残念ながら、@ Carraの質問は同じではありません。ゲームの愛のためにバスに乗った人を説得することはできません。:)
ニコール

回答:


19

彼らが同意するような古いプログラマーにそれを置く方法

もちろん、問題を脅威としてではなく、チームとプロジェクトを改善する機会と見なすような方法で、問題をオープンに提示してください。例えば「私は他の人はあなたが解雇の場合に知っているものを知っていたい」は、明らかに間違ったアプローチです:-) 「私はあなたのいくつかは、休日に行くか、病気になっても、プロジェクトの円滑な動作を確保したいと思います「はるかに優れています。

通常、開発者自身が休暇中に問題を経験するたびに、開発者自身が問題を経験します。さらに、優れた開発者は作業中のプロジェクトに責任を感じているため、おそらくこの考えに同意するでしょう。それでも、彼らに話し合い、(できれば)アイデアにコミットする時間を与えてください。また、チーム内で知識をどのように、誰と共有するかについて彼らが発言できるようにします。ジョーはジムと仕事をする(そして彼の知識を共有する)ことは大丈夫だと感じるかもしれませんが、ジャックなどとはできないかもしれません。

この種の「バックアップ」を容易にするために使用するシステムは何ですか?コードレビューができることは理解できますが、これを行う簡単な方法はありますか?チェックインコードレビューによる本格的なチェックインの準備ができていないと思います。

チームでは、コード/デザインレビューとは別に、

  • チームメンバー間のタスクと責任領域のローテーション(各自が主な責任領域を持っていますが、時々、他のチームメンバーがよく知っている領域でタスクを実行します)
  • 対面ナレッジトランスファーセッション(通常、上記のタスクが必要なときだけでなく、誰かがチームを離れる前)
  • チーム/プロジェクトwiki

多くの場合、開発者はコードから直接読み取れるものよりも多くのことを知る必要があるため、コードのレビュー自体では不十分な場合があります。つまり、ドメインモデルもあります。コードが実際に何をしているのかを読むことはできますが、モデルがなければ理由はわかりません。


Team/project wiki、これについて詳しく説明していただけますか?また、face-to-face knowledge transfer sessionsこの種のセッションを修正時間に定期的に開催していますか?
グラヴィトン

@Graviton、私たちはプロジェクトwikiで(レガシー)システムの設計と実装を文書化するよう努めています。これは、たとえばチームメンバーごとに編集や更新が簡単で、たとえば個別のWordドキュメントを使用したり、任意のページ間で無料のリンクを作成したりできます。必要に応じて、特定のツールまたはプロジェクトの一部で行う知識の伝達。
ペテルトレック

Knowledge transfers we do on when needed、それはおそらくスタッフが辞任する時ですか?これに必要な時間は少し短すぎませんか?
グラビトン

@Graviton、いや、私が意図したことは、誰かが他の誰かによく知られている領域でタスクを割り当てられるときです。(これは実際には「知識バックアップ」を作成する優れた方法であるため、これを上記のリストに追加します。)
PéterTörök11年

12

彼らに知識を共有するように動機付ける1つの方法は、彼らの仕事について他の人に短いプレゼンテーションをするように頼むことです。プログラマは通常、自分の仕事に大きな誇りを持っています。これはそれを誇示するためのチャンスです。プレゼンテーションは、部外者にはめったに知られない癖のいくつかを見せるための良い機会です。

また、なぜそれについてオープンになって、誰もがバスに襲われた場合に備えて知識共有のスキームを考え出す必要があることを全員に伝えてはどうでしょうか。これは不合理だとは思わない。私の会社では今まさにそれが起こっており、一部の人はそれについては防御的ですが、彼らはそれを行う必要があることを知っています。

たぶん彼らはいくつかのことでペア仕事をするかもしれません、彼らが好奇心nature盛な性質のものであれば、問題はないはずです。


4

新しい人員を雇用する前に、ソフトウェアの内部ドキュメントを最新のものにすることが最初のステップです。確かに、それはあなたの貴重なプログラマーがIDEの代わりにOfficeとUMLツールでいくらか時間を費やすことを意味しますが、私はそれがどんな場合でも価値があると思います。

最新のドキュメントを入手したら、プログラマーにクロスチェックして、他の人が書いた内容を全員が理解していることを確認できます。まだ新しい人はいりません。

その後、新しい人を雇うことを検討できます。または、会社のワークロードに応じて。


@ammoQ、これがスケーリングするかどうかはあまりわかりません。新しい従業員を雇用した後はどうなりますか、再びUMLを描画しますか?また、設計アーキテクチャが変更された場合はどうなりますか?それらをレビューするシステムはありますか?
グラビトン

2
@Graviton:新しい人は、既存のスタッフが書いたドキュメントを読むだけです。UMLダイアグラムを再度描画する必要はありません。アーキテクチャが変更された場合は、ドキュメントを採用する必要があります。ええ、それはひどいです、私は知っています。しかし、それを支援するUMLツールがあり、ソースコードを読み取り、クラス図などを生成します。
user281377

ところで、新しいスタッフは、学ぶべきソースコードと既存のプログラマーにしか頼らないソフトウェアの内部をどのように学ぶと思いますか?
user281377

@ammoQ、わかりません。質問をする必要がないとわかっていれば。
グラビトン

1
@oosterwal、幸いなことに今では標準のビルド管理システム(Maven)を使用できるので、ビルドプロセスの詳細を文書化する必要はほとんどありません。(そして、チームメンバーがビルド構成を更新せずに新しいモジュールを追加した場合、私たち全員が5分以内に継続的インテグレーションサーバーからメールを受信し、ビルドが壊れていること、および誰によって通知されます。)ビルドとリリースを自動化するスクリプト、私はそれらをうまく文書化しました。
ペテルトレック

4

大企業にいる場合は、人事部に電話してこの問題について話すことができます。私を信じて、主要な人員がバスに襲われた場合、会計の人は同じ問題を抱えています。重要な交渉の最中に主要なセールスマンがゾンビになった場合、マーケティング担当者も多くの問題を抱えることになります。

このための正しいHR言語は後継者計画だと思います。あなたの会社はこれに対処するためのポリシーとフレームワークをすでに持っているかもしれません。


4

私が働いていた場所には同じ問題がありました。彼らがしたことは、各シニア開発者と一緒に働くために、1人のジュニア開発者を雇うことでした。彼らは一緒にプロジェクトに取り組む2人の小さなチームを作りました。数か月ごとまたはプロジェクトごとに、チーム間でジュニア開発者を交代させます。このように、シニア開発者は主題の専門家のままでしたが、ジュニア開発者はすべてのシステムとそれらがどのように連携しているかをよく把握し始めました。さらに、チーム規模の倍増プロジェクトにより、プロジェクトが迅速に完了しました。

大規模なプロジェクトについては、シニア開発者は、プロジェクトの他の部分でシステムの別の部分でジュニア開発者として行動し、他のシステムの学習を開始できるように求められることがありました。

そこで重要だったのは、チームの拡大と成長を続けながら、既存の開発者の知識と年功を尊重することでした。それは遅いプロセスでしたが、時間が経ってもうまくいきました。


4

成功したオープンソースプロジェクトを成功に導くものの1つは、コードの「所有権」の欠如です。つまり、誰もアプリケーションの領域の唯一のメンテナーではありません。誰でもアプリケーションのどの部分にも貢献することができ、また奨励されています。それは私が強く信じていることです。

あなたがしたいことは、物事が実際にあなたが現在持っているチームを傷つけていることを説明することです。ここにあなたが行きたいポイントがあり、この順序でできれば:

  • あなたがこれがどのように機能するかを知っている唯一の人であるなら、私はあなたがパイクを降りてくる他のクールなものに取り組むことを自由にすることはできません。
  • 私たちあなたが良い休暇をとれるようにしたいが、他の誰もあなたがすることをすることができないので、余裕がない。
  • 人々が現在の位置に満足していないために転職するのは不愉快な事実ですが、あなたが働いている地域に閉じ込められていると感じるので、あなたを失いたくありません。

個人的な注意として、私は亡くなった同僚に対処しなければなりませんでした。情報のサイロ化はありませんでしたが、損失は依然として大きな打撃を受けました。これが起こる可能性は、上記の3番目の箇条書きよりもはるかに低いです。

ケースを公開したら、問題を修正する方法についてのアイデアを求めて彼らの助けを求めてください。もちろん、あなた自身で来てください。彼らのアイデアは、彼らがチームの一員であり、彼らの専門分野以上のものに必要であることを理解するのに役立ちます。ジェーンはジョーがやっていることに興味を持っているかもしれませんが、それによって少し怖がっていると感じます。それを知っていると、知識の伝達がより楽しくなります。あなたがしたいことのいくつかは次のとおりです。

  • 現在のチームをクロストレーニングします。短期的には少し効率が落ちるかもしれませんが、アプリの他の部分に適用できるアプリの1つのコーナーで学んだ教訓があるかもしれません。しばらくの間、ジェーンとジョーにお互いのプロジェクトで協力してもらいます。
  • 知識共有の文化を育みます。私が働いていた会社は、「ブラウンバッグテックトーク」プログラムを持っていました。誰でも承認されたトピック(通常は技術またはソフトウェアプロセスを紹介する)について発表できます。会社は昼食を提供し、発表者は努力のために数百ドルを得ました。
  • メンタリングは生き方でなければなりません。他の人を指導する目的は、あなたが新しいことをするのを自由にすることであり、会社にとってあなたをさらに価値のあるものにします。
  • ランクを引き上げずに情報サイロの境界を越える方法を見つけます。楽しくすればするほど、脅威は少なくなります。あなたのチームの人たちがあなたの言うほど上手なら、彼らはおそらく物事のやり方に完全に満足していないでしょう。チームがそれを処理できるかどうかの判断者である必要がありますが、「まあまあピック」週間を持つことができます。常にここから始めましょう。そのアイデアは、「まあまあ」の責任とは何か、そして彼らが抱えている問題をどのように解決できるかについて、みんなの目を引くことです。首から先に行けば、誰も仕事に出てこないという考えを得るでしょう。

一般的に、あなたが仕事をもっと楽しくしたいので、彼らに印象づけようとしてください、そして、あなたはそれをするために彼らの助けが必要です。


2

インターンは良い考えかもしれません。彼らは現在の開発者の直属の部下になるので、彼らは脅迫されることはありません。

会社が成長するにつれて、古い開発者とインターンシップ後に成功した開発者の両方が必要になります。

これはうまくいくと思う。


1

一般的に、あるマネージャーが突然ドキュメンテーションと後継者の計画を気にし始めると、プログラマーが解雇または解雇されようとしているという強い警告サインです。これは、典型的な管理上の振る舞いとはかけ離れたものであり、プログラマーのあらゆる種類の警告信号を引き起こします。

誰もがすべての手順とプロセスを文書化するように言われています

企業の破滅の警告サイン」のレベル3

代替案として、あるエッセイは、「アップまたはアウト」の文化を奨励することを提案していますが、反論は、(誤った)経営者のキャリアラダー含まれています。


同意しません。企業の価値は知的財産(IP)に大きく依存しています。これには、特許、プロセス、およびすべての内部文書が含まれます。秘密の知識を文書化して共有したくない従業員は、その秘密の知識が書かれた紙の価値はありません。従業員の秘密の知識は、企業に目に見える価値を加えるものではありません。
oosterwal

1
@oosterwol-生産的な開発チームを集めて管理できることは、評価のはるかに優れた予測因子です。優れたドキュメントがあると言うのは、優れたソース管理があると言うようなものです。もちろん、それらは必要ですが、それは競争からあなたを区別しません。
JeffO

@Jeff O:IPの知識はすべて現在の開発者の頭の中にあるので、ドキュメンテーションは今日の競争相手と区別しません。5年後、現在のすべての開発者が価値のあるドキュメントを作成する企業に移行すると、新しい開発者は古いコードを維持しようとして、過去に悪いことが証明されたがドキュメント化されていないアイデアの実装に失敗するでしょう。
oosterwal

1

@ammoQが彼の答えで始めた完全なドキュメントのコンセプトに基づいて...

優れたマネージャーは、直属の部下のレポートのスキルを開発して、いずれかのレポートでそれらを置き換えることができるようにします。開発者に、仕事の完全な透明性を提供する従業員は、すべての仕事を秘密にして非公開にする従業員よりも価値があることを理解させます。「秘密の」開発者が今日亡くなった場合、その失われた知識を取り戻すことは企業にとって大きな費用負担となります。「完全な情報開示」の従業員が今日死亡した場合、会社は依然として損失を被っていますが、それほど破壊的ではありません。したがって、「完全開示」従業員にはより多くの価値があります。

解雇されることを免れるために隠された知識を保とうとする従業員は、昇進を免れます。開発者を、今日の負担となるありふれたタスクを完了する人がいない場合、より挑戦的でやりがいのあるポジションに移動することはできません。ありふれたタスクが完全に文書化され、完全に開示されている場合は、新しいジュニア開発者を雇って、以前の開発者を記入し、より上級の地位に昇進させることができます。

これは、あなたもあなたがしたことを文書化し、各直属の部下にトレーニングを提供する必要があることを意味します。そうすれば、あなたが今日亡くなった場合、フルタイムの交換が見つかるまで、そのうちの1人があなたのために埋めることができます。


インターネット上の1つのドキュメントへのリンクを提供して、かなりのサイズのアプリケーション全体を構築するのに十分な仕様が記述されていることを示してください。これは都市神話に該当すると思います。
JeffO

1
@ジェフO:あなたは正しいです-かなりのサイズの完全なシステムを記述するのに十分な完全な単一のドキュメントはありません。このようなシステムを単一のドキュメントで説明できるという考えは、プロジェクト管理が不十分であり、仕様が不十分に書かれている歴史の結果です。実質的なシステムは、階層的な一連のドキュメントで指定する必要があります。ルートドキュメントは、システムの高レベルレイアウトとその子ドキュメントへのリンクを提供します。各子ドキュメントは、1つの具体的な機能のみを指定するエンドノードドキュメントまで追加情報を提供します。
oosterwal

1

新しいプログラマーを導入する前に、文書化された独自の遺産を作成するのを手伝ってくれるように、各プログラマーにお願いします。

ウィキ、または仕事のあらゆる側面に関する文書の3リングバイブルを使用します。

または、本当に詳細で徹底的なドキュメントが必要な場合は、テクニカルライターを雇って、各プログラマーにインタビューし、すべてのドキュメントを毎日、毎週、毎月、毎年作成します。

それから、あなたのプログラマーが更新/編集/参加/コメントできるウィキ版を作成します。

その後、時間とともに成長し、新しいプログラマーの学習曲線を改善するシステムができます。

また、正直なところ、プログラマーを1つのコア領域にとどめることは賢明ではありません。

そうすれば、1人が休暇などをするときに、既存の人員を使用できます。


1

プログラマーの1人が病気になったときはいつでも、質問や問題を繰り返し電話してください。

プログラマーが休暇をとるたびに、質問や問題を繰り返し電話してください。

彼らはすぐに、彼らだけでなく会社にとっても、コア領域に責任を持つ独身の人がいないほうがよいことに気付くでしょう。


0

誰もバスに襲われたくはありませんが、彼らはまた、誰かのプロジェクトを急に引き継いで、プロジェクトを維持する必要もありません。その後、誰もが廃業するリスクを負います。

サイロで開発している場合、あるプロジェクトから別のプロジェクトに人を移動させる必要があります。ドキュメント、コードレビュー、または単純なバグの修正から始めます。これが手に負えなくなる前に、コード保護/縄張りの小さな行為に対処する必要があります。

コードの一部に専任のスペシャリストがいることは効率の錯覚です。

休暇に行きたい人はいますか?


0

経営陣による愚かなミスのために、私はさらに多くの企業を倒した。1人か2人のエンジニアが辞めたとしても、クラッシュして火傷することはありません。しばらくは少し努力する必要があります。Sheesh、私は四半期ごとに誰かを失うオフショアチームを管理しています。タスクの移動を開始します。今日。

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