モチベーション
Feature-Sliced Designの主なアイデアは、さまざまな開発者の経験を議論し、研究結果を統合することに基づいて、複雑で発展するプロジェクトの開発を容易にし、開発コストを削減することです。
明らかに、これは銀の弾丸ではなく、当然ながら、FSDには独自の適用範囲の限界があります。
既存の解決策が不足している理由
通常、次のような議論があります。
- 「SOLID」、「KISS」、「YAGNI」、「DDD」、「GRASP」、「DRY」など、すでに確立された設計原則があるのに、なぜ新しい方法論が必要なのか?」
- 「プロジェクトのすべての問題は、良いドキュメント、テスト、確立されたプロセスで解決できる」
- 「すべての問題は、すべての開発者が上記のすべてに従えば解決される」
- 「すでにすべてが考案されているから、あなたはそれを利用できないだけだ」
- {FRAMEWORK_NAME}を使えば、すべてが解決される」
原則だけでは不十分
良いアーキテクチャを設計するためには、原則の存在だけでは不十分です。
すべての人が原則を完全に理解しているわけではありません。正しく原則を理解し、適用できる人はさらに少ないです。
設計原則はあまりにも一般的であり、「スケーラブルで柔軟なアプリケーションの構造とアーキテクチャをどのように設計するか?」という具体的な質問に対する答えを提供していません。
プロセスは常に機能するわけではない
ドキュメント/テスト/プロセスを使用するのは、確かに良いことですが、残念ながら、それに多くのコストをかけても、アーキテクチャの問題や新しい人をプロジェクトに導入する問題を解決することは常にできるわけではありません。
- ドキュメントは、しばしば膨大で古くなってしまうので、各開発者のプロジェクトへの参加時間はあまり短縮されない。
- 誰もが同じようにアーキテクチャを理解しているかを常に監視することは、膨大なリソースを必要とする。
- bus-factorも忘れないようにしましょう。
既存のフレームワークはどこでも適用できるわけではない
- 既存の解決策は通常、高い参入障壁があるため、新しい開発者を見つけるのが難しい。
- ほとんどの場合、技術の選択はプロジェクトの深刻な問題が発生する前に決定されているため、技術に依存せずに、すでにあるもので作業をすることができなければならない。
Q: 「私のプロジェクトでは
React/Vue/Redux/Effector/Mobx/{YOUR_TECH}
を使っていますが、エンティティの構造とそれらの間の関係をどのように構築すればよいでしょうか?」
結果として
「雪の結晶」のようにユニークなプロジェクトが得られ、それぞれが従業員の長期的な関与を必要とし、他のプロジェクトではほとんど適用できない知識を必要とします。
@sergeysova: これは、現在のフロントエンド開発の状況そのものであり、各リーダーがさまざまなアーキテクチャやプロジェクトの構造を考案しているが、これらの構造が時間の試練に耐えるかどうかは不明であり、最終的にはリーダー以外の人がプロジェクトを発展させることができるのは最大で2人であり、新しい開発者を再び入れる必要がある。
開発者にとっての方法論の必要性
アーキテクチャの問題ではなくビジネス機能に集中するため
FSDは、スケーラブルで柔軟なアーキテクチャの設計にかかるリソースを節約し、開発者の注意を主要な機能開発に向けることを可能にしています。 同時に、プロジェクトごとにアーキテクチャの解決策も標準化されます。
別の問題は、FSDがコミュニティの信頼を得る必要があることです。そうすれば、開発者は自分のプロジェクトの問題を解決する際に、与えられた時間内にFSDを理解し、信頼することができます。
経験に基づく解決策
FSDは、複雑なビジネスロジックの設計における経験に基づく解決策を目指す開発者を対象としています。
ただし、FSDは、全体としてベストプラクティスのセット、または特定の問題やケースに関する記事一覧です。したがって、開発や設計の問題に直面する他の開発者にも役立てます。
プロジェクトの健康
FSDは、プロジェクトの問題を事前に解決し、追跡することを可能にし、膨大なリソースを必要としません。
技術的負債は通常、時間とともに蓄積され、その解決の責任はリーダーとチームの両方にあります。
FSDは、スケーリングやプロジェクトの発展における潜在的な問題を事前に警告することを可能にしています。