複数の小さなプライベートリポジトリ上に単一のWebアプリケーションを配置することは、どの程度実行可能ですか?


8

私たちはウェブアプリに取り組んでいる低予算のチームです。いくつかの複雑さのため、1月以降はリモートで作業する必要があります。いくつかのコンサルティングとグーグルの後、いくつかの小さなリポジトリがより安価なオプションであると結論付けました。私たちは考えています:

  • バックエンドとサービス

  • ミドルウェア

  • フロントエンド

このようにして、関連するチームに分離し、それぞれがリポジトリでリモートで作業できます。私たちのアプリをいくつかの小さなプライベートリポジトリに置くことは、どの程度実行可能ですか?

さらに、この方法で作業する場合、どのような考慮事項を考慮する必要がありますか?

注:複数の小さなリポジトリに分割された単一の大きなプロジェクトについて質問しています。これは、1つまたは複数のリポジトリで複数のプロジェクトを要求しているため、このサイト尋ねられ関連質問とは異なります。さらに、私たちはプロジェクトを分割することを選択しました。これは主に、私たちがそれに固執しない限り、単一の大きなプライベートリポジトリに投資するつもりがないためです。


リポジトリとは、コードリポジトリ(gitまたはsvn)を意味しますか?
Jay Elston、

チームを分割することは、レポを分割することよりもはるかに大きな問題であるという点で、Scantは正しいです。私が働いているチームには数十人のレポがいますが、私たちはまだ1つのチームです。
Ixrec

回答:


4

「...私たちは、いくつかの小さなリポジトリがより安価なオプションであると結論付けました。」

それは素晴らしいことです。分割統治。努力を論理的な部分に分割し、各部分を異なるハードコアチームに与え、数か月間狂ったように作業し、すべてをまとめて、そして...

そして...

まあ、それはいまいましい悪夢になるでしょう。それは間違いなく安くはありません。なぜでしょうか?

ソフトウェアプロジェクトにおける最大の「コスト」はコミュニケーションです。コードを速く書くことでお金を節約することはできません。それはプログラマーが認めない秘密です。(Psst。誰にも言わないでください。コードを書く速さは本当に問題ではありません。コードの記述に費やされる時間は、計画と話し合い、交渉、戦い、話し合い、会議と話し合いに費やされた時間に比べると、はるかに小さいです。妥協して実現することは、より良いことを叫んだり、望んだり、解決したりすることを妥協して約束したり(言葉ではありません)、ループバックしたり、pingしたり、話したり、眠ることができなかったりするべきではありません。

したがって、作業を個別のチャンクに分割し、各チャンクを別々のチームに渡します。何をしたの?コミュニケーションの負担を追加しました。運がよけれ場合チームは完璧です。1つの大きなリポジトリといくつかの小さなリポジトリの間にコストの違いはまったくありません。運が悪い場合(少数の場合)、別のチームに分割すると実際にはさらにコストがかかります。全員が同じコードベースにいるときに、互いにつま先を踏んで同期を保つのは十分に困難です。ここで、3つの異なるチームが要件がわずかに異なる何かを意味すると(他のチームの要素を壊していないので迅速に修正する方法はありません)、文化がわずかに異なり、最終的には物事がうまくいかなくても責任を負わないように非常に動機付けられているので、彼らは他のチームをバスの下に投げ入れようとする以上のものです。

私は知っています、あなたのチームはそれよりも優れています。しかし、彼らは本当にですか?あなたはそれにお金を賭けるのに十分自信がありますか?

どちらのアプローチ(大きなリポジトリ/多くの小さなリポジトリ)でも、最初はがらくたの束をモックアウトする必要があります。あなたは盲目で働き始めます。できるだけ早く、利用可能になり次第、他のレイヤーからの具体的な実装の使用を開始する必要があります。これにより、問題と誤解を早期に特定できます。もちろん、少しでこぼこになりますが、不安定な仕様とハンドシェイクを使用して独自に開発し、後で物事を一緒に折りたたむよりは、かなりでこぼこです。

私のポイントは、大きなレポ/小さなレポは問題ではないということです。重要なのは、チームをどのように構築するかです。理想的には、チームはより大きなまとまりのあるアイデンティティの中に小さな独立したアイデンティティを持っています。生物の臓器や粘液粘菌のようなもの。コードをどのように構成するかに関係なく、全員がお互いにぶつかる機会を与えてください。コミュニケーションを容易にします。一緒に間違いを犯し、それらを早期かつ頻繁に修正します。


私はこの答えのほとんどに同意しません。もちろんコミュニケーションは重要ですが、コードベースを複数のリポジトリに分割したからといって、1。コラボレーション-共同編集者はコードベースを表示(および必要に応じて変更)できます。2。ドキュメント。フロントエンドとは別にREST APIを構築している場合、APIは十分に文書化されており、手間がかかりません(実際に初心者のフロントエンド開発者やがらくたドキュメントがない限り)。どうやって知るの?サードパーティの開発者が使用するREST APIを作成/維持しており、その使用方法について週に1通のメールを受け取っています。
Chris Cirefice

@ChrisCireficeそれはまったく別のアプローチです。システムの一部を開発するのではなく、システムを共同開発するのは別の種類の獣です。あなたの場合、フロントエンド開発者はあなたの決定に適応しますが、opの場合、バックエンドの決定は、フロントエンドのニーズと要望に並行して行われます
Machinarius

@Machinariusそれは多かれ少なかれ本当です。上司がフロントエンドをモックアップし、アプリの外観/機能を決定します。フロントエンドの開発者はスケルトンの作業に取り掛かり、バックエンドで必要なAPIエンドポイントを開発します。フロントエンドの人たちはAPI呼び出しをプラグインして、データを並行して取得します。これは週ごとに行われるため、私のケースではそれほど大きな違いは見られず、それでも問題なく機能します。個別の開発者がさまざまな側面にタンデムで取り組んでいますが、それは以前のコメントでは明らかに触れられていませんでした。
Chris Cirefice

私たちのチームには、1人のバックエンド、1人のサービスの作成と保守、2人のフロントエンダー、2人のモバイルバージョンの担当者、そしてチームリーダーと上司がいます。それらの領域以外のコードにはほとんど触れません。コミュニケーションの問題は、他のチームと同様に現実的ですが、すでに独立して作業しているため、チームの分割は問題になりません。チームリーダーに示すための洞察が得られたため、回答をありがとうございます。
シルバー

1

私の目には、リポジトリの分割は、目標と使用しているツールに大きく依存しています。

たとえば、フロントエンドが(たとえばAJAXによって)消費するパブリック(またはプライベート)APIなしでRuby on Rails Webアプリを作成している場合、実際にリポジトリを分割する方法がわかりませんあなたのチームに大きな頭痛の種を引き起こしています。その場合、Railsフレームワークはモノリシックタイプのアーキテクチャで最もよく機能します。

ただし、RailsまたはNode.jsでAPIを記述する予定で、フロントエンドをEmber.jsなどで記述したい場合は、リポジトリを分割するのが妥当です。Webアプリのデータが他のクライアント(Android / iOSアプリなど)によって将来共有される場合も同様です。複数のクライアントで使用されるAPIを作成する場合は、リポジトリを分割してください。一部では、分割が別のアプリケーションへのAPIが完全に悪い考え、私は心をこめて同意することを1(であり、それがためにそう思えると主張良い理由

すでに説明したようにWebアプリの分解を計画している場合は、リポジトリを分割することが唯一の論理的なオプションです。ただし、他の人のコードを閲覧するのは難しくなるため、優れたコミュニケーションを確保する必要がありますが、さらに重要なのはドキュメントです。たとえば、APIを文書化しないと、APIチームがアーキテクチャを文書化しなかったため、他の2つのチームはすぐに腹を立てることになり、誰もが質問を続けるため、APIチームは腹を立てることになります。これは、リモートチームにはさらに当てはまります

したがって、それはすべて、そもそもアプリをどのように構築したいかにかかっています。モノリシックWebアプリを構築している(そして、それがWebアプリのままであることがわかっている、または確信している)場合は、リポジトリを1つ作成します。マイクロサービスや、複数のクライアントによって使用されるREST APIなどの作成を計画している場合(または将来的にこれを計画している場合)、リポジトリを分割します。


単一のリポジトリがモノリスである必要はありません。物理層と論理層別々のリポジトリに保存できますが、そうである必要はありません。単一のリポジトリには、バックエンドAPIと他のレイヤーを含めることができます。コミュニケーションの負担(ドキュメントはコミュニケーションの一部です)は、1つの大きなレポまたはいくつかの小さなレポジトリでほぼ同じです。それが私のポイントです-リポジトリは関係ありません。重要なのは、チームが問題についてどのように考え、協力して問題を解決するかです。
Scant Roger、2015

アプリはすでに別のエンティティに分離されています。バックエンドとサービスは片側にあります。フロントエンドはクライアント経由でのみサービスを消費します。私たちのフロントエンドは、サービスがどのように機能するかを知っているだけです。私たちのチームには1人のバックエンド、1人のサービスを書く人、2人のフロントエンダーと2人の人がモバイルバージョンに取り組んでおり、彼らは自分の領域以外のコードにはほとんど触れません。
シルバー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.