見出し画像

金融サービス開発におけるドメイン知識への向き合い方

ファンズ株式会社 CTO の若松(@yshnb)です。弊社が運営する Funds というサービスは、個人の方に対しては資産運用の機会を提供するとともに、企業に対しては資金調達の機会を提供する金融のサービスです。

Funds は金融という事業ドメインということで、比較的複雑なドメイン知識が必要な求められる事業のように感じます。

一方で自分自身は、 Web マーケティングを中心とした企業の出身で、金融という領域も関心はあったものの、金融ドメインについての知識をもたないところからサービスの開発に取り組んできました。

このような経験もあることから、金融サービスのような複雑な開発における難しさやどのような場面で要求されるのか、またドメイン知識を身につけていくためにやってきたことを述べることで、ドメイン知識への向き合い方について少しでも参考になればと考えています。

金融サービス開発における難しさ

必ずしも技術的に高度な要求があるとは限らない

弊社の Funds は、株式のようにすでに流通市場が存在する金融商品を取り扱うプラットフォームとは異なり、金融商品の組成自体もある意味で Funds が手掛けています。

そのため、弊社の Funds の場合証券システムのように金融市場のゲートウェイなどと直接接続するということはなく、大量のデータを扱う必要性やレイテンシーやスループットへの要求は実はあまり高いものではありません。

法令で定められた要件を満たすこととその難しさ

一方で金融サービスの運営にあたっては、関連する法令で定められているさまざまな要件があり、システムの開発においても、そのような要件への対応が求められます。

例えば、金融商品への投資勧誘にあたり必要な要件や、投資家の方々に関する事実を記録する帳簿や交付書面など、 Web サービスとして設計する上で素朴に考えれば必要がなかったり、ユーザー体験上は必ずしも必要ないようなものに思えても、法令上必要とされる要素があります。

また難しいのは、必ずしもそれがシステムとしてどのように実装すれば十分なのかが明らかではない場合が多いことです。法的要件として定められていることでも、どのようにシステムとして落とし込めば適切であるか、といったことにおいて一定の解釈余地がある場合もあります。求められている要件と、それをシステムとしてどのように扱うことができそうか?といった点を、専門家、ある種のドメインエキスパートと議論しながらシステムの要件を定義し、適切な設計に落としていく必要があります。

そして上記のようなことを実現していくためには、開発者であってもドメイン知識を必要とします。

ドメイン知識はどのような場面で必要なのか

このようなサービスを開発する中で、開発者に求められるドメイン知識というのはどのようなものなのでしょうか?

最低でもエキスパートの話を理解できることは必要

Funds には金融や法律、財務、会計などさまざまな分野のエキスパートがいます。それぞれの分野においては、その分野のエキスパートの方が詳しくて当然です。

一方で開発者も、それらの話を理解できるための前提知識のようなものは必要です。そうした前提知識がなく何を求められているのか分からないとなると、システム開発における要件を適切に定義できず、必要な要件を満たすシステムを開発できない可能性があります。

キーポイントとなる考え方を理解していれば、専門家とも議論できる

開発者であってもいつも正しい答えが出せるわけではないのと同様に、それぞれの分野のエキスパートも 100% 正しい答えを持っているとは限りません。確固たる答えがないことも往々にしてあります。

このような時に、各分野において基本的な事項を理解していたり、キーとなる考え方について理解できていると、各分野のエキスパートと比較的スムーズに議論も進めることができ、結果として適切な結論に着地させることができるように感じます。

要件を満たすための適切な方法を提案する

それぞれの領域において必要な要件を明らかにできたとしても、それをソフトウェアによってどのように実現するのかを考えるのは開発者側の役割です。

各分野のエキスパートは、ソフトウェアによってどのように実現するか?という点を理解しているわけではないので、実現手段を理解している開発者の方がより適切な答えを出せることも多いと感じます。

またディスカッションを深めていくことで、ビジネスにおける各領域のエキスパートが想定していないような解決策を提示できることもあります。

技術的な観点から、現実的に実現可能で目的を満たすことができる方法を提案するためにも、背景となるドメイン知識を理解することが求められます。

本質的な概念を理解することでより適切なドメインモデルを定義できる

各領域における要件を明らかにしたうえで、実装に必要なモデリングをするときに、各ドメインにおける概念の本質を理解していれば、ユースケースに特化したドメインモデルとしてモデリングしてしまうことを避けることができ、汎用性や拡張性を担保できるように感じます。

反対に、概念の本質的な部分を理解できていないと、その時の要件には対応できても、将来的なサービスの拡張において無理な変更の必要性が生じることがあります。

成果を生み出すことのない開発にコストを投じる必要のある状況を避けるためにも、その概念が一般的にどのようなことを指しているのか、などを知る必要があるように思います。

ドメイン知識を得るためにしてきたこと

ここまで述べたように、 Funds のような複雑なドメイン上で展開されるサービスでは、要件を明らかにしていくためのドメイン知識が必要となります。

そこで以下では、自分なりの開発に必要なドメイン知識を得る方法を述べていきたいと思います。

toC のサービスであれば、まずユーザーとして利用してみる

Funds の開発チームに新たに加わる方に、入社前に何を学んでおくとよいか?ということを尋ねられることがあるのですが、この時に Funds のほか関連する類似のサービスをまずユーザーとして利用してみるということをお勧めしています。

Funds の場合、個人投資家として投資ができるサービスですが、類似のサービスもあります。実際にサービスを利用してみることで、各サービスにおいて共通点を見つけることができます。

金融のほか医療などの規制業種の場合、ユーザー体験的には必要性を感じられず、冗長に感じられるアクションなどを求められることもあるでしょう。にもかかわらず各サービスで同様の設計となっている場合、なんらかの規制によって制約が設けられていることが多く、こうした感覚はサービスを利用すると経験的に理解しやすくなります。

また、しっかりと内容を読む方は少ないと思うのですが、サービスの利用規約などを読み解くことで、サービス運営の背景となっている考え方や契約関係などを理解できることもあります。

該当分野の書籍に一通りでも目を通す

わからないドメイン知識について学ぶときに、 Web で情報を探すこともできますが、体系的な知識を得るには書籍の方が有効なことが多いと感じます。

具体的な問いがある場合は、 Web を検索することで見つけることもあります。一方で、具体的な問いの背景としてどのような制度設計や理論的背景があったりするのかとか、制度上の位置付けなどはなかなか Web の情報から得ることは難しく、書籍のようにある程度まとまった情報源からインプットをするほうが効率的です。

個人的なアプローチとしては、とりあえずどういう分野があるのか、というのがわかった時点で、ある程度書籍を読んでインプットしておくということをやっています。実際問題としては、書籍を読んでもあんまり頭に入っていないことが多いのですが、あとでなんらかの機会に具体例が出てきた時に、「あ、これはここで書かれていたトピックスだな」ということが思い出せると、そのときにあらためて書籍に遡ることで、書籍上の概念だけであったものが、実例を伴って理解できると感じます。

アウトプットの機会を通じてなにがわからないのかを知る

理解したと思えることでも、いざ人に説明するためにアウトプットをしようとしてみると、意外と正確にドメイン知識を理解できていない、と感じる場面があったりします。

体感としては、人に説明するための情報としてアウトプットをしようというときには、説明する事項そのものの直接的な理解だけでなく、その一つ外側の世界まで理解して相対的な位置付けが捉えていることが必要なように思います。 Funds でいえば、 Funds という金融商品について説明するときに、一般的な金融商品としてはどのようなものがあって、それぞれの特徴はどのようなものがあって…そのうえで Funds はどういう位置付けなのか、という具合です。

人に説明することを通じて考えを整理することで、あらためて自分自身の理解も深めることができ、より本質的なドメイン知識を得ることができるように思います。

同じ対象をさまざまな角度から見てみる

ドメイン知識がなく解像度の低い段階では、そもそもなにが分からないのかが分からないとか、どんな分野があるのかもわからないことが多いと思います。一方で、ある程度理解が深まっていくと、どのような分野ががあるのか見えてきます。

例えば、 Funds のファンドのような金融商品の経済性を考えるときにも、株式や債券などの一般的な金融商品に関するリスク・リターンの考え方を知っておく必要があります。またその発行や取引において求められることを把握するためには、実務的な慣例もあれば、その前提となる法令面での知識が必要であったりします。

まずはどういう分野があって、それぞれの領域ではどのようなものがあるのかという理解を深めていくことを通じて、自分自身でわからないことを調べられるようになるところまでいけると、わからないことが出てきても自走することができるようになるように感じています。

まとめ

私自身はサービスの開発である種立ち上げるを取り組んできたこともあり、正直なところ、すでに運用されているサービスの開発に関わるという場合、必ずしも同じような山の登り方ができないこともあるとは感じています。一例として参考になれば幸いです。


学ぶ意欲のある人にとっては面白い仕事

金融サービスの開発においては、さまざまなドメイン知識を学ぶ必要があるのは事実ですが、ドメイン知識の吸収に関心がある人にとっては、いくら学んでも学び尽くしたといえることはない点で面白く感じていただける領域なのではないかと思います。

そんな Funds で現在募集中のポジションは以下から確認できます。もしご興味のある方は、ぜひ以下よりご応募いただけると嬉しいです。

ファンズの採用に関する情報については、以下の内容もご覧ください!

この記事が気に入ったらサポートをしてみませんか?