web-dev-qa-db-ja.com

開発者が作業中のプロジェクトモジュールのみを確実に表示する方法

これは初めてのPMの経験です。私は開発者チームを作成し、Angular-NodeJSプロジェクトに取り組みたいと考えています。

いくつかのタスクを定義し、プロジェクトをさまざまなモジュール/コンポーネントに分割しました。たとえば、Webサイトの各ページにはコンポーネントがあります。また、ルーティングコンポーネント、さまざまなサービスなどもあります。

これは初めてのプロジェクトなので、プロジェクトの基本的なフレームワークを作成し、ルーティングコンポーネントとその他の基本的なサービスをそのプロジェクトに組み込むことにしました。次に、プロジェクトのすべての開発者が自分の作業を複製して開始できるパブリックリポジトリに配置します。ただし、他の開発者がタスクを実行した後にのみタスクをコミット(プルリクエストを送信)できるプライベートリポジトリ内にも配置しますが、プロジェクト全体を表示して受け入れ、所有できるのは私だけです。

スクラム方法論に従いたいが、上記の問題を解決した後。私は以前の経験がないので、自分の考えがどれだけ正しい/間違っているかわからないので、アドバイスをお願いします。私は正しい方向に進んでいますか?

3
Hasani

チームの観点からそれをすべきでない理由

チームに関するプロジェクト管理の最も重要なルールは次のとおりです。

  1. このプロジェクトは、激しいチームワークによってのみ成功する可能性があります。
  2. お互いを信頼する権限を与えられたチームは 最も効果的 です。
  3. すべてに1つ、すべてに1つ

あなたがやろうとしていることは、とても異なります。それは "Divide et impera" と呼ばれ、2067年前のジュリアスシーザーによって呼ばれました。プロジェクトをコンパートメントに分割することで、管理を維持できます。これはすぐにチームを示します-ここにだまされることはありません! -あなたがそれらを完全に信頼していないこと。そして、これは集合的なパフォーマンスを妨げます。

それは遅かれ早かれ、スクラムを適用する意図と衝突します。スクラムは、ボキャブラリーに「プロジェクトマネージャー」という用語が含まれていない点までチームワークを評価します。それは反アジャイルなアプローチです:

私たちは個人とプロセスとツールの相互作用
-アジャイルマニフェスト

区分化されたアプローチは、プロジェクトをより高いレベルのチームエンゲージメントから奪う可能性があります。チームが相互理解を深めることが難しくなります。もちろん動作します。しかし、それはあなたを含むすべての人にとって、より難しく、楽しくないかもしれません。

ソースコード管理の観点からそれをすべきでない理由:

プロジェクト管理の役割は、秘密のリポジトリで他の人のコードをコミットしないことです。あなたはあなたのチームのボトルネックになります。ところで、マージの競合をどのように管理しますか?

あなたとチームのために1つの共有リポジトリを使用します( ここでGooleがこのアプローチをどのように使用したかを参照 を参照してください)。役立つと思われる場合は、コードをコミットするためのピアレビューのルールを確立してください。 2つの製品(アプリケーションと新しいフレームワークなど)または本当に独立したコンポーネントが表示される場合は、コンポーネントごとにリポジトリを分割できます。

プロジェクトは十分に困難です。エキゾチックな秘密主義のリポジトリ管理手法で、これをさらに難しくしないでください。

23
Christophe

あなたはAppleまたはMicrosoftではありません。

Appleのソフトウェア開発者がAppleのコードのすべてを知らないのは、流血の恐ろしい膨大な量のコードがあり、誰もそれをすべて知ることができないためです。 Appleリポジトリを担当する1人の男。彼らは複数いる:-)

あなたが考えていることは、完全に誤った見方です。あなたが実際にそれを実装しようとした場合、あなたの下で働くきちんとした開発者は次の2つのことのいずれかを行います:他の場所で仕事を見つけるか、またはあなたが他の場所で仕事を見つけるべきであると会社を説得しようとします。 2番目を行います。

Appleでは、開発チームには秘密はありません-提案されたものとは正反対です。複数のチームが存在します。チームによっては、外の世界に秘密のことをします。ただし、チーム内にはありません自体。

10
gnasher729

私は以前の経験がないので、自分の考えがどれだけ正しい/間違っているかわからないので、アドバイスをお願いします。私は正しい方向に進んでいますか?

経験がなく、スクラムマスターまたはスクラムチームのプロジェクトマネージャーの役​​割を担っている場合、できる最善のことは、一歩下がって、チームにこれらの決定を任せることです。スクラムマスターとしてのあなたの仕事は、コードの門番ではありません。 あなたの仕事は障害を取り除くことであり、追加することではありません。

だから、いや、あなたは正しい軌道に乗っていません。あなたがhugeプロジェクト(例:Windows、OSX、Salesforce)または高セキュリティのミッションクリティカルなアプリケーションのマネージャーでない限り、誰かがアクセスする必要があるかもしれないコードを隠すため。必要に応じて、コミットのコードレビューを要求するルールを設定できますが、コードをビューからチームのメンバーに隠すべきではありません。

あなたの説明に基づいて、あなたのプロジェクトはそのような保護を保証するだけの大きさ(数桁)ではありません。

6
Bryan Oakley

他の回答は、すべてを分離するのではなく、何をすべきかを説明するのに役立ちます。私はそれらに同意します。あなたが本当に求めていることは極端ですが、これを行う技術的な側面に焦点を当てた回答を試みますあなたはそれが正当だと思う。


ここでの前提は、非表示にして他のコンポーネントから分離する必要があるものを見つけたということです。明確にするために、あなたが防衛産業で働いていない限り、このようにすべてを扱わないでください。そして、あなたが防衛産業に取り組んでいるなら、神の愛のためにこれについてインターネット上の見知らぬ人に相談しないでください。

とにかく、機密事項を独自のリポジトリに分離します。適切なアクセスを実施するためのツールが整っていることを確認して、許可された担当者だけがコードを見ることができるようにします。マシンコードにコンパイルされるテクノロジースタックを選択してください。バイナリを他のチームに配布します。バイナリをリバースエンジニアリングできることに注意してください。これだけでは、弾丸の証拠を分離することはできません。

また、信頼できる人を雇う必要があります。これには、身元調査、および非開示契約などの他の法的文書が含まれる場合があります。実際のところ、システムを構築している人々を信用していないと、水中で死んでしまいます。請負業者を信頼できない場合は、請負業者を雇うのではなく、フルタイムの従業員のみを雇ってください。

機密性の高いものを他のコンポーネントと同じプロセスで実行する必要がない場合は、Webサービスまたはマイクロサービスを検討してください。コードを分離できるだけでなく、機密性の高いサービスのコンシューマを物理的に分離して、それらが異なるサーバーであり、異なるネットワークセグメントに存在するようにすることができます。ファイアウォールルールは、誰が誰と通信できるかを管理します。

しかし実際には、どのような戦略でも、コードを複数のリポジトリに分離し、本当にそれを必要とする人にのみアクセスを許可する必要があります。信頼できる人を雇い、法務部門に相談して適切な契約に署名してもらうことで、誰かが不正行為を行った場合に会社が法的オプションを利用できるようにする必要があります。

1
Greg Burghardt