約1年前の職場で、社内で使用するWebアプリを開発することにしました(この質問には関係のない、より複雑なシステムの一部として)。誰も実際にWeb開発の経験を持っていなかったので、おそらく私たちの決定のいくつかは間違っていましたが、全体として、私たちが開発していたツールで成功しました。 Pythonでの開発経験があったため、Djangoをプラットフォームとして選択しました。
私の質問は「誰が何をするのか」です。私たちが作業を分割した方法は、すべてのPythonコード-つまり、すべてのDjango url、ビュー、モデル、非同期タスクの実行を処理する実際のバックエンドとして(Celeryのようなもの)。別のチーム(より正確には、別の開発グループの1人-しかし、これは単なる実装)がテンプレート(データバインディング)、JavaScriptを担当します。 、デザイン、HTML、CSSなど.
私が言ったように、私たちは約1年間このように働いています。私はおそらく、2つのチーム間の責任の線が間違っていると考え始めています。その理由は、対話する必要があるときはいつでもかなり大きなオーバーヘッドがあるからです。たとえば、新しいテーブルを追加してそれを表示したい場合は、「フロントエンドの人」に、URLとは何で、何が含まれるかを知らせる必要があります。次に、作業を統合して、すべてが正常かどうかを確認する必要があります。時々、テンプレートを機能させるのに十分なコンテキストをテンプレートに渡さなかったため、情報のピンポンが遅い場合があります。
だから私の質問はこれです-Webアプリで作業を分割する慣れた方法は何ですか?さまざまなモジュール(モデル、ビュー、URL、テンプレート、デザイン、ユーザーエクスペリエンス、HTML、CSS、JavaScript)は誰が担当しますか?
小さなチームでは、スキルのクロスオーバーが必要です。さもないと、それらのアイデアの実装方法の理解が異なる可能性のある開発者の間でアイデアをやり取りするために多くの時間を費やしています(ご存じのとおり)。各開発者がフロントエンドとバックエンドを含む単一の機能を担当するようにした方がよいでしょう。アイデアに関するコミュニケーションは、概念レベルでのみ必要です。
もちろん、すべての開発者に長所と短所があるわけではありません。すべての開発者のすべてのタスクで同じパフォーマンスを期待することが現実的であるとは思いません。スキルセットに基づいて機能を割り当てます。機能がバックよりもフロントエンドの場合は、フロントエンドの担当者に提供し、逆の場合も同様です。
プロジェクトが大きくなると、開発者の専門性が高まります。このシナリオでは、機能は有益であり、時間を費やすだけの価値があるので、コミュニケーションの努力はそれほど問題ではありません。
このような強い分割は必要ないと思います。私が取り組んできたほとんどすべての開発者は、バックエンドとフロントエンドをコーディングできました。マークアップを美しく見せることができるcss/htmlの頼りになる人がいました。そのため、大まかなスタイルを設定し、その周りにコードを記述し、プッシュして磨くことができます。時には、デザインのモックアップを作成し、UIフローについて考える人もいました。
私の好みは、ウェブサイトであろうとなかろうと、アプリケーションの階層ではなく「機能」に取り組むことです。
アプリケーションまたはその他の境界(物理的な地理、企業内のグループ)での「階層化」は、開発の障害となります。
コミュニケーションの必要性が高まり、潜在的なブロッカーが増えます。