開発スタックのスライス-対角線?


11

新しいプロジェクトが進行中です。現時点では、開発者はチームAとチームBの2つのチームに分かれています。このプロジェクトには、開発スタック全体での開発が必要な2つの部分があります。以下に示す非常に単純化されたスタックのサンプル:

ここに画像の説明を入力してください

プロジェクトの各部分はスタック全体にわたる開発を必要とするため、通常はチームB内で作業を分解し、異なる部分間の相互作用を設計および実行するフルスタック開発者アプローチを期待します。

ここに画像の説明を入力してください

しかし最近、チームAがスタックの特定の部分を担当することを望んでいることを学びました。チームは、2つのチームの分割を提案しています。チームBからの開発はありません。分割は次のようになります。

ここに画像の説明を入力してください

私にはこれは非常に不自然に感じます。各チームには、これらを達成するための異なる明確な目標とタイムスケールがありますが、チームBは機能を実装するためにチームAに依存します。提案された解決策は、共通のインターフェイスが事前に定義されていることです(おそらくプロジェクトには2年のタイムスケールがあり、多数になる可能性があります)。チームAは、独自の目標を設定しているにもかかわらず、これらのインターフェイスに必要なビットを早期に開発し、チームBは、すぐに短期間のすべての呼び出しをスタブして、進行できるようにします。

私はこのアプローチについて懸念があります:

  • インターフェイスは変更される可能性があり、チームAは変化する要件に対応するための帯域幅または時間がない場合があります。
  • チームAのコードのバグにより、チームBの進行が妨げられる可能性があります。また、チームAが異なる優先順位キューを持っているため、これらを修正する優先事項ではない可能性があります。
  • チーム全体に広がる知識の欠如-チームBは、内部で何が起こっているのかを完全に理解していない可能性があり、そのために設計上の決定が下される可能性があります。

業界の多くの企業にはサブチームがあり、これに対処できる必要があることが示唆されています。私の理解では、一般的に、チームは当初の予想方法(フルスタック)に分割されるか、以下のようにテクノロジースタックを分割します。

ここに画像の説明を入力してください

ですから、私は他の業界が何をしているかを知りたいと思っています。ほとんどの分割は垂直/水平ですか?対角線分割は意味がありますか?対角線の分割が発生した場合、私の懸念は有効であると思われ、チームBが懸念すべきことは他にありますか?私はおそらく、チームBの成功または失敗の責任を負うことに注意してください。


10
「残りの産業」は、おそらくあなたが考えることができる分割のあらゆる組み合わせをしているでしょう。しかし、正直なところ、チームAが担当する理由を教えてくれませんでした。そして、それはあなたのチームの大きさ、そしてチームが同等に資格を持っているかどうかに違いをもたらします。
Doc Brown

3番目の図では、チームAとチームBの作業は別個のAPIで分離されていますか?その境界線によって課せられる明確で論理的な境界はありますか?分業はまったく新しいものではありません。たとえば、Stack Exchangeには独自のデザイナーがいます。
ロバートハーヴェイ

@DocBrownチームAが担当したいと思うのは、以前のプロジェクトで大きなチームが失敗した後、「料理人が多すぎてスープを台無しにしてしまう」と感じているからですが、確かにわかりません。チームはそれぞれ約5人の開発者であり、合理的に同等のスキルを備えています。
イアン

1
垂直分割を説得できない場合は、チームAにコミットさせて、チームBのリクエストを自分のリクエストとしてより高い優先度で処理することをお勧めします。これにより、ブロッキングや悪血を防ぐことができ、支払うのに公正な価格のようです。
ハンス・ピーターStörr15年

1
@hstoerr:興味深いことに、これはまさにスクラムアライアンスが示唆するものです。消費コンポーネントチーム(他のコンポーネントチームの成果物を使用または「消費」するコンポーネントチーム)は、プロデューサーチームの製品所有者として機能します。scrumalliance.org/community/articles/2012/september/
イアン

回答:


12

あなたの懸念は非常に有効です。特に、チームAに関する最初の2つのポイントには、チームBに影響を与える機能を追加したりバグを修正したりする時間がありません。これは、自分の仕事で何度か起こります。

次の場合、これは良い考えです。

  • チームAはデータベースの新機能を必要とするプロジェクトに取り組んでいることが知られていますが、チームBの目標は基本的に「フロントエンドのみ」の機能を行うことです。たとえば、チームBが会社の新しいiPhoneアプリを作成している場合、デスクトップバージョンのすべての機能を移植/再実装する必要があるため、しばらくの間新しいデータベースフィールドを追加しない可能性があります。

  • 「フルスタック」は十分に複雑になっているため、単一の開発者(または開発チーム)がすべてを効果的に「所有」することはできません。「自分で」とは、機能を追加してバグを修正するだけでなく、システム全体を理解し、時間の経過とともに技術的な負債を追加しないように気を配ることを意味します。この場合、チームAがDAL /データベース実装(おそらくいくつかの内部診断ツール?)に非常に単純な、または避けられないほど緊密に結合されたUI / Web APIを所有している場合、「対角」分割は賢明な動きです。すべての複雑なユーザー向けのフロントエンドのもの。

  • 経営陣は、チームAがボトルネックになるリスクを理解しており、このリスクが実際の問題になった場合、またはそのタイミングで物事の対角化を解除したいと考えています。

私は業界で多かれ少なかれ一般的なことについて話すことはできませんが、少なくとも私が働いているところでは、すべてのアプリケーション開発者が「フルスタック」であることが明確に必要です。私たちが持っているのは、社内データベース、Webサービスフレームワーク、UIフレームワークを開発/維持する「インフラストラクチャ」チームです(私の会社は巨大だと言いましたか?)。開発者は、会社全体として一貫したパフォーマンスとUIをすべてのサービスに提供できます。

最近、当社はまったく新しいUIフレームワークを作成しているため、新しいフレームワークのバグや欠落している機能に関して、新しいアプリの一部が非常にひどくブロックされていた時期がありました。主にフレームワークを所有するチームにプルリクエストを送信する許可が与えられたために、これはもはや当てはまりません(「非対角化」ではありませんが、アイデアは得られます)。


2
2番目のポイントでは、これは合理的なサイズのビジネスアプリケーションのすべてに当てはまります。明確に定義されたAPIを備えたライブラリは、大きすぎない限り、論理的な境界のようです。
ロバートハーヴェイ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.