web-dev-qa-db-ja.com

将来、1人のプロジェクトからチームプロジェクトに移行する。準備のために今何をすべきか、何を待つことができますか?

詳細については、1人のプロジェクト(チームソース管理、ドキュメント、ビルドなど)の間に実施する必要があると人々が考えていること、および2人目が来るまで行う必要のないことを知ることに興味があります。プロジェクトに。

このシナリオを経験したことのある人なら誰でも、その洞察に感謝します。

13
Dan MacBean

私が学んだこと。 (私は別の順序を試しました。私は間違っていました。これは物事が関連するようになる順序です。)

  1. すべてをソースコード管理に組み込みます。誰もがアクセスできるものを使用して開始今すぐ。例外なく。遅延なし。言い訳しない。

  2. 個人の「作業」環境または「開発」環境から完全に分離されたQA /テスト領域を作成します。少なくとも個別のユーザーID。理想的には、別個のVM上にあります。
    完全に分離しています。現在の作業環境と重複する可能性はありません。

  3. 独自の作業環境で単体テスト以外のテストを停止します。 「自分自身」で行うコードと単体テスト。別のVMで行うその他すべてのテスト(統合、パフォーマンスなど)。自分でテストしないでください。必ず別のQAユーザーとしてテストしてください。理想的には、別個のVM上にあります。

    「私のために働く」はあなたのチームメンバーに言わなければならない悪いことです。ひどい。あなたは彼らが間違っていることを理解する必要があります。一日に何度も。

  4. すべてを書き留めることを計画します。プレーンテキストマークアップツール(RSTまたはMarkdownなど)を使用して、すべてのドキュメントがバージョンコントロールリポジトリのプレーンテキストになるようにします。ツールは、HTMLページ(つまり、RSTのDocutils)またはPDFを作成できます。独自のドキュメント形式(MS-Wordなど)を使用しないでください。一部のソースコード管理システムではうまく機能しない場合があります。

  5. 最初に書き留める必要があるのは次のとおりです。

    • 実用的な開発環境を作成する方法。疑わしい場合は、仮想マシンを作成し、その仮想マシンですべての操作を実行します。手順reallyが機能し、ドキュメントがclearであることを確認してください。実際のコマンドラインで入力された実際の行は、わかりやすくしています。

    • 単体テストスイートの実行方法。再び。指示が機能し、考える必要がないことを確認してください。 「これを入力:」「それを確認:」のようなもの。あなたのチームメンバーが愚かであるということではありません。それはあなたがそれをすべて書き留めない限り、あなたが仮定していることを覚えていないということです。

    • 統合テストスイートの実行方法。

    アーキテクチャや設計原則を説明するのに多くの時間を無駄にしないでください。最初に誰かを立ち上げて走らせる必要があります。後で説明できます。

  6. 次に文書化するのは、ユーザーストーリーです。そして、それらのストーリーをサポートするテストケース。そして、それらのユーザーストーリーをサポートするテストケースに必要なデータフィクスチャ。

    これを共有します。ソースコード管理下にあります。

  7. 最終的には、他の4つのビューを文書化できます。

    • 論理ビューは文書化するのに役立ちます。写真はここで受け入れられます。これは急速に進化する傾向があるため、レガシー情報の取得に時間を費やさないでください。チームメンバーと協力する方法を考え出します。

    • 多くの場合、プロセスビューが役立ちます。これがどれほど重要かは、アプリケーション全体に依存します。

    • 開発ビュー(モジュール、ライブラリ、フレームワークなど)は、非公式に記述されることがよくあります。写真が役立つかもしれませんが、誰かがドキュメントを拾い上げて、その表または裏を作成できるようにこれを完全に完成させることは悪名高いほど困難です。古くからある非常に公共のプロジェクトでさえ、単に無視されているライブラリのドキュメントがあります。 (Stack Overflowに関する多くの質問につながる。)

      これは非公式であることを容認できることに加えて、急速に変化する傾向があります。

    • 展開情報。サーバー。 IPアドレス。データベース資格情報。すべてのもの必須書き留めます。やがて。

12
S.Lott

ツールと方法論

コラボレーションを成功させ、生産性を高めるには何が必要ですか?

  • プロジェクトのパーツ/コンポーネントを特定します:異なるパーツ(データベース、データアクセスレイヤー、Webサイト、サービス、API、テストプロジェクト、ビルドスクリプト)を明確に区別します、...)および環境(開発、ステージング、プロダクション)、およびそれらに一貫して名前を付けることは、口頭および書面によるコミュニケーション(ドキュメント、プロジェクト名など)に影響を与えます。
  • ソースコード管理システムを使用します(まだしていない場合に備えて)。プロジェクトとセットアップでブランチを使用する方法について考えます。
  • ビルドを自動化する-ソースリポジトリから環境を簡単にセットアップできるようにします。
  • テストプロジェクトは、少なくともより複雑なプロジェクトでは、大きなプロジェクトでは必須です。
  • ステージング環境を使用して、プロジェクトを使用する準備ができています。また、自動ステージングセットアップのサンプルデータを作成して維持します。
  • バグ追跡システムを使用してください。これは、開発の優先順位付けと計画に役立ち、過去のバグとそれらがどのように解決されたかの記憶にもなります。
  • ドキュメントプロジェクトの各部分。私は個人的に気に入っています:概要-アーキテクチャ-依存関係-構成-一般的な問題( ここ から)。ドキュメントが古くならないようにするには、簡潔にして、ドキュメントを日常の活動の一部にすることをお勧めします。

管理/チームワーク

...または対人レベルの他の何か

  • 他の開発者の期待を定義します。合理的であるようにしてください。少なくとも最初からではなく、あなたと同じような関与と情熱をもたらす人はいないでしょう。自分が期待していることとそうでないことを伝え、自分と相手の責任を明確にします。誰もがエンジニア、建築家、開発者、dba、sysadminであるとは限りませんが、それがあなたの求めているものである場合は、適切な人物を選択しないと失望します。
  • 最初にタスクを正確に定義し、結果を確認して議論します。徐々に、より少ないマイクロ管理から始めます。アイデアは信頼を築き、責任を増やすことです。
  • プロジェクトを計画し、次の年のプロジェクトとチームの目標を設定します。書き留めて後で確認すると、これによりperspectiveが得られます。これらの目標は、他の人に伝えられる場合と伝えられない場合があります(それらが目標である限りyo達成する必要があり、他の人ではありません)、単に独自のチェックリストにすることができます。
  • 1日かけて準備し、新しい開発者の最初の1か月(または2/3か月)を計画します。よく準備された人々と仕事をするとき、私はそれが非常にやる気を起こさせると思います。自分の時間が無駄になっているような印象を受ける人はいないでしょう。
  • 行こう。それはあなたの赤ちゃんです、それはまた、誰かの誰かになるはずです。少なくともプロジェクトの一部では、もう1人があなたよりも専門家になることを許可します。これは実際に成功したことを意味します。
  • 聞く-あなたが彼女を雇った場合、彼女は何か言いたいことがある。学ぶ準備をしてください。
  • あなたの知識と経験を共有する準備をしてください(したがって、時間がかかります)。
  • ミスケが行われます、それはそれらがどのように処理され、誰もが何を重要視するかについて彼らが学んでいることです。
  • 時間をかけて学び、実験する

参考文献

私がこれまでに読んだことのある一般的に言及されている本をいくつかリストします実際に読んだので、読んでみる価値があると思います。 SO this または this の質問のように、それを正確に尋ねます。

これらの本は、チーム、組織、およびプログラミングプロジェクトに関して本当に読む価値があります。

  • Peopleware
  • 神話の男月
  • ソフトウェアの見積もり、黒人のアートの謎を解く

これらはいずれも方法論Xの実装方法の実用的なガイドではありません(ソフトウェアの推定を除き、この本は適切な推定プロセスを選択するのに役立ちます)。もちろん、Code Completeのようなプログラミング自体に焦点を当てた本も非常に充実しています。

8
marapet

経験からお話ししますが、人それぞれ違いますのでご注意ください。これらは普遍的ではありません。

1つは、個人的に手放すことです。このプロジェクトは、18か月間住んでいたものです。当然、すべての変更を自分のようにする必要があります。同僚が間違えたり、学んだりするためのバッファを与える。それらが役立つように部屋を作成します。そして、それはすぐには起こらないかもしれないことを覚えておいてください。また、改善または作成に成功したと感じることができるコードの一部が、短期間に成功したように感じる場合、それは素晴らしいことです。忍耐と寛容は、ここでは良い見返り率を持っています。細かく管理しようとしないでください。批判したい場合は、「間違っている」と言って、メリットがあることを確認してください。それは「宗教的な」戦いではありません。

別の重要な問題は、あなたにぴったりの人を見つけることです。理想的には、自分より賢い人を見つける方が良いです。それは主観的で相対的ですが、人が持っていない知識やスキルを持っていると感じた場合は、それが最善です。相互にやりがいのあるコラボレーションになります。

それを行うには2つの方法があります-同僚が引きずられて、あなたは彼または彼女がやったことをやり直すことになります、またはあなたの2人のスキルは単に合計するのではなく、増加します、そしてあなたは本当に一緒に働くことに感謝します。

「クリーンで高速で再利用可能なコード」のトピックについて-インタビューで、小さなマイクロカーネル/サービスマネージャーやジョブエグゼキューターを作成するように依頼します。プラグイン可能なコンポーネントがどのように指定および構成されているかを確認します。終了する必要はありません、それは重要な考えです。そして、あなたはすぐにそれを行う方法をよく知っている人々がまともなお金を欲しがるようになるでしょう;-)頑張ってください!

4
Alex Pakka

私の見解:まず、内部プロジェクトのアーキテクチャを文書化することから始めてください。どの仮定が適切で、いつ/どこで一般的な慣行から逸れたか、およびその理由を説明するようにしてください。

ビルドの自動化:素晴らしいアイデアです。開発マシンの構成の自動化を追加できますか。ビルドするのが最も簡単です(より多くの/より速いテスト展開)。

別のアイデア(これは私を1度助けてくれました):新しい開発者に、コードベースのさまざまな領域で小規模なクリーンアップタスクを実行して、レイアウトツールなどに慣れるように依頼します。1つの良いアイデアは、後で混乱を招く可能性があるあいまいな領域(例:シェルスクリプトの2行にemmm pythonを使用し、プロジェクトがJavaに基づいている場合、これらの2行を=に書き換えるように依頼しますJava開発者#3が機能するために必要な知識が少なくなるように)

私は手作業を必要とするすべてを自動化することに焦点を当てているので、経験の浅い人によって台無しにされる可能性があります。上記の簡単なコメントに基づいて、以下が含まれます。

  • バージョン管理をインストールし、手動バックアップを自動バックアップに置き換えます。
  • 可能な限り自動展開を設定します(最低限、手動ではなくFTP経由で展開するスクリプトを記述します。

これらを実行できない場合は、これらのタスクを永遠に実行するために連鎖するか、(一部の)新しい人物が遅かれ早かれ何かを台無しにすることになります。

@dimitrisが指摘したように、他の重要なタスクはドキュメントです。 @Sロットはこれについてより多くの詳細を追加したので、繰り返すのではなく、+ 1するだけです:-)

1
Péter Török

これは、個人的な経験に一部基づいた考えです。

  • ドキュメントあなたのプロジェクト。設計仕様、図、マニュアル、コメントは、新入社員がすぐに慣れるのに役立ちます。複雑なシステムonlyを口頭で説明すると、遅くてイライラすることがあります。一人のプロジェクトでは、ドキュメントはしばしば無視されます。あなたのものは例外であることを確認してください。

  • 最初に、APIレベル/コアレベルのコードに専念し、新しい従業員に「アプリケーションレイヤー」の作業またはバグ修正を提供します段階的に慣れますコードで。一般的に、簡単で始まりますが、まだ意味のあるであり、したがってやりがいのあるタスク

  • コミュニケーションは重要です。 新入社員の質問、コメント、アイデアに応答します。アイデアが良いと思われない理由を説明してください。新鮮な目は驚くほどよく改善の余地を見つけることができます。あなたの新しい従業員がまともなものである場合、彼はあなたのコードをピアレビューし、最終的にアーキテクチャの決定に参加することができます。 話し合い、アイデアを互いに跳ね返させます。これは、プロジェクトに同僚がいることの最大の利点の1つです。

  • 責任を明確に定義する、新しいチームメンバーがどのようなタスクを実行するかがわかったら、 文書化の慣行コーディング規則を確立して、物事をスムーズに保ちます。

  • リビジョンコントロールシステムを使用します。 論理ソースファイルレイアウトビルド分野を維持します。

面接については、候補者のストレス耐性能力を試してみたいと思わない限り、私は人工的なコーディングテストやトリックの質問の大ファンではありません。このような状況では、最も賢い問題解決者でもロックアップできます。あなたが探している資質は、とりわけ:正直専門的能力技術的知識/洞察熱意および相互互換性仕事の雰囲気は大きな意味を持ちます。気に入らないチームメイトを選ぶことはお勧めしません。質問を適切に配置し、非公式のディスカッションを行って候補者の良い写真を撮ります。幸運を!

0
mizo

テクノロジー

開発者として他の人を呼び込む場合、開始する前に起動して実行することをお勧めします。

  1. ソース管理
  2. 問題追跡
  3. 継続的インテグレーション

これら3つが正常に動作している場合、新しいチームメンバーを招集するときに発生する一般的な問題の約75%を解消できます。これらのテクノロジーのポイントは、頭の中でのみ起こっていることの多くを取り、チームメンバーがそれと対話できる場所にそれを引き出すことです。

ソース管理により、両方が同じことを確実に処理します。課題追跡は、何をする必要があるかを追跡するのに役立ち、彼らが何に取り組んでいて何を達成しているかを簡単に知ることができます。継続的な統合とテストは、繰り返し可能なビルドプロセスがあり、新しい改善がコードの他の部分を壊していないことを確認するのに役立ちます。

Pragmatic Programmerはこれについてかなり良い本をいくつか持っています。ここに私がお勧めするいくつかを紹介します。使用しているプログラミング言語や使用したいバージョン管理に基づいて、他にも同様のタイトルがあります。

http://www.pragprog.com/titles/tpp/the-pragmatic-programmerhttp://www.pragprog.com/titles/tsgit/pragmatic-version-control- using-githttp://www.pragprog.com/titles/auto/pragmatic-project-automation

個人

多くの場合、直面する困難は、技術的な側面ではなく、手放すための学習にあります。他の誰かがプロジェクトの側面を制御できるようにするのは難しい場合があります。特に、自分ですべてを行い、すべての決定を行うことに慣れている場合は特にそうです。信頼できる基盤を築くことができるように、最初から新しい人に適度な自由度をもって働かせることができる領域を見つけることができれば、あなたは自分自身にいくらかの悲しみを救うでしょう。あなたが良い人を雇うなら、おそらくあなたが学ぶことの主なことは、彼らの個々の決定のすべてがあなたがしたであろうものと同じでなくても、他の人が良い仕事をすることを信頼する方法です。

新入社員には、問題を早期に発見できるように、安全対策を講じたまま問題を解決する自由を与えたいと考えています。

0
Mark

これらの点は私の意見では最も重要です:

  1. コードの重要な部分を読み、それらが理解しやすいことを確認してください。コメントまたは直感的な関数と変数名を使用します。
  2. 新しい人が簡単にコードを送信できるようにします。
  3. 些細なことではない場合は、READMEファイルを作成して、開発環境のセットアップ方法について新規開発者に必要なすべての手順を説明します。または、この環境のセットアップを綿密に支援してください。
  4. この新しいプロジェクトに取り組むとき、新しい開発者に非常に明確に定義されたタスクを与えます。私の意見では、これらのタスクには、新しくシンプルな機能が含まれているはずです。新しい開発者は最初にコーディングスタイルとその習慣に慣れなければならないので、たとえそれが悪い場合でも、クリーンアップタスクは私の意見ではあまり意味がありません。クリーンアップやリファクタリングは、コードを知っている人が行う必要のある仕事です。
  5. コードを送信するためのプロセスを明確にします。 (例えば、コンパイルするものだけを送信してください。)しかし、厳格すぎると、最初はイライラするかもしれません。
  6. コーディング規約が記載されたドキュメントを用意します。他のコーディング規約が何であるかを推測するのは本当にイライラすることがあります。
  7. アプリが複雑な場合は、アーキテクチャを説明するドキュメントを用意してください。または、フローチャートなどを使用して、新しい人にアーキテクチャを説明します。新しい開発者がプロ​​ジェクトのリバースエンジニアリングに多くの時間を無駄にしたくない場合。
  8. 新しい開発者が自分で展開を行うことになっている場合は、展開に必要なすべての手順を説明するordered checklistを用意してください。

そして最後に、バージョン管理システムを入手してください。 Subversionで十分です。ただし、ユーザー固有のEclipseファイル(またはその他)を追加しないでください。彼らはあなたに時間を浪費させます。 Stackoverflowに問題がある場合は、遠慮なく質問してください。

0
Philip