Slide 1

Slide 1 text

1 複雑なドメインと戦いながら ロボアド基盤をリプレースするときにした⼯夫 2020/09/02 Inside Fintech Meetup 〜 Finatext × Kyash × FOLIO 〜 @matsu_chara Copyright © 2020 FOLIO Co., Ltd. All Rights Reserved.

Slide 2

Slide 2 text

@matsu_chara - FOLIO 3.5年⽬(元はドワンゴ新卒⼊社) - ⼝座残⾼や⼊出⾦周りを扱うチーム(証券基盤部)の雑⽤係 - 好きなプログラミング⾔語はScala, Go, Pony - 最近の趣味は英語学習 2 ⾃⼰紹介

Slide 3

Slide 3 text

⾦融出⾝エンジニアがあまり多くないFOLIOが 「⾦融・証券」というドメインの中で どこに気をつけて戦っていたかについて話していきます 3 今⽇話すこと

Slide 4

Slide 4 text

4 ⽬次 • ロボアド基盤リプレースの背景 • リプレースプロジェクトの課題と⼯夫

Slide 5

Slide 5 text

時は2018年 5

Slide 6

Slide 6 text

荈⹛麊欽׌ַ׵䘏׃ְ֮ז׋ח׮ ֶתַׇ䫎项 ٗن،سغ؎ؠ٦ָ֮ז׋ח剑黝ז麊欽فٓٝ׾䲿周麊欽׃גֻ׸׷䫎项؟٦ؽأկ ظ٦كٕ颣「颣椚锷׾ك٦أח׃׋،ٕ؞ٔؤيד麊欽կ 䫎项⯓ך⦐ⴽꌀ厑װذ٦و׾鼅עֿהָ⭙⸘חז׏׋➂חֶׅׅ׭ ر٦ة瘝כ؟ٝفٕד֮׶ծ㼛勻ך麊欽䧭卓瘝׾爙㇗⿵כ⥂鏾ׅ׷׮ךדכ֮׶תׇ׿կ ꆃ輐㉀ㅷך《䒷חְֶגכծ吳⣣ծ捀剏ծꆃⵃծ׉ך➭ך䭷垥ך㢌⹛瘝ח״׶䴦㣟ָ欰ׄ׷ֶ׉׸ָ֮׶תׅկ ׀㤍秈ךꥷכծ㤍秈箍穠⵸❛➰剅꬗瘝ךⰻ㺁׾⼧ⴓח׀然钠ֻ׌ְׁկ 吳䒭⠓爡 '0-*0ꆃ輐㉀ㅷ《䒷噟罏ꟼ匌頿⹡㽷ꞿꆃ㉀痥 〾խ⸇Ⰵ⼿⠓傈劤鏾ⵙ噟⼿⠓ծ♧菙爡㔚岀➂傈劤䫎项곁㉏噟⼿⠓ 2018年11⽉2⽇ おまかせ投資 リリース

Slide 7

Slide 7 text

さらに 7

Slide 8

Slide 8 text

ⰼַ׵כׄ׭׷ ٙٝ؝؎ٝ䫎项 -*/&♳דⰼַ׵㨣׭׷ֿהךדֹ׷琎甧䫎项דׅկ 琎甧겘ָ -*/&QBZ ַ׵荈⹛ד䒷ֹ衅הׁ׸ծ ٗن،سغ؎ؠ٦ָ⚅歲⚥ך项欵חغٓٝأ״ֻ䫎项׃תׅկ 吳䒭⠓爡 '0-*0ꆃ輐㉀ㅷ《䒷噟罏ꟼ匌頿⹡㽷ꞿꆃ㉀痥 〾խ⸇Ⰵ⼿⠓傈劤鏾ⵙ噟⼿⠓ծ♧菙爡㔚岀➂傈劤䫎项곁㉏噟⼿⠓ ꆃ輐㉀ㅷך《䒷חְֶגכծ吳⣣ծ捀剏ծꆃⵃծ׉ך➭ך䭷垥ך㢌⹛瘝ח״׶䴦㣟ָ欰ׄ׷ֶ׉׸ָ֮׶תׅկ ׀㤍秈ךꥷכ㤍秈箍穠⵸❛➰剅꬗瘝ךⰻ㺁׾⼧ⴓח׀然钠ֻ׌ְׁկ ˟ -*/& أو٦ز䫎项כծ-*/&'JOBODJBM 吳䒭⠓爡ꆃ輐㉀ㅷ⟗➜噟罏ꟼ匌頿⹡㽷ꞿꆃ⟗痥 〾ךꆃ輐ꟼ鸬؟٦ؽأדׅկ ٙٝ؝؎ٝ䫎项כ吳䒭⠓爡 '0-*0 ך䲿⣘ׅ׷䫎项♧⟣麊欽؟٦ؽأד֮׶ծ-*/&'JOBODJBM 吳䒭⠓爡כֶ㹏圫ה吳䒭⠓爡 '0-*0 הך䫎项♧⟣㤍秈箍穠ך㯭➜׾遤ְתׅկ 2019年4⽉25⽇ ワンコイン投資 リリース

Slide 9

Slide 9 text

ꆃ輐㉀ㅷך《䒷חְֶגכծ吳⣣ծ捀剏ծꆃⵃծ׉ך➭ך䭷垥ך㢌⹛瘝ח״׶䴦㣟ָ欰ׄ׷ֶ׉׸ָ֮׶תׅկ ׀㤍秈ךꥷכծ㤍秈箍穠⵸❛➰剅꬗瘝ךⰻ㺁׾⼧ⴓח׀然钠ֻ׌ְׁկ 吳䒭⠓爡 '0-*0ꆃ輐㉀ㅷ《䒷噟罏ꟼ匌頿⹡㽷ꞿꆃ㉀痥 〾խ⸇Ⰵ⼿⠓傈劤鏾ⵙ噟⼿⠓ծ♧菙爡㔚岀➂傈劤䫎项곁㉏噟⼿⠓ FOLIO ROBO PROדכծفٗؿؑحءّشٕזꆃ輐堣ꟼך׫ח 䲿⣘ׁ׸גְ׋AI 䪮遭 AlpacaJapan 䲿⣘ ׾ծ ETF و٦؛حز׾㼎韋ח⦐➂ぢֽחⴱ鍑犜կ 鹌⻉׃׋ٗن،سغ؎ؠ٦׾ծ׉ך䩛חկ و٦؛حز✮庠 ت؎شىحؙ麊欽 2020年1⽉15⽇ ROBO PRO リリース

Slide 10

Slide 10 text

各種プラットフォーム・ニーズに応える形で 順調に展開 10

Slide 11

Slide 11 text

順調に展開? 11

Slide 12

Slide 12 text

12 理想と現実 やりたいこと - 顧客価値の向上(新機能追加・より分かりやすい顧客表⽰) - 運⽤改善(CSがよりスムーズに問い合わせに答えられるetc )

Slide 13

Slide 13 text

13 理想と現実 やりたいこと - 顧客価値の向上(新機能追加・より分かりやすい顧客表⽰) - 運⽤改善(CSがよりスムーズに問い合わせに答えられるetc ) やってること - 考えた機能が実現できない理由の説明(無理くり実現できないかの検討) - 改善出来ていない運⽤の埋め合わせ(CS問い合わせ個別調査, 運⽤でカバー系)

Slide 14

Slide 14 text

⾦融機関としての⽔準を満たすための 対応のために時間を取られていて 前に進むための活動が出来てない… 14

Slide 15

Slide 15 text

15 もろもろの議論(略)の後 リプレースを決断 本当にリプレースが適切なのかといった議論もたくさんしましたが、 時間が⾜りないのでここでは割愛

Slide 16

Slide 16 text

16 ⽬次 • ロボアド基盤リプレースの背景 • リプレースプロジェクトの課題と⼯夫

Slide 17

Slide 17 text

17 リプレースするとは⾔っても...

Slide 18

Slide 18 text

18 運⽤指図 ロボアド 基盤 外部 ブローカー 注⽂管理 顧客 - 購⼊余⼒チェック - ⼝座(残⾼)管理 - 終値・為替レート取得 - 運⽤報酬料計算・徴収 - 譲渡益税計算・徴収 - 祝⽇・⽉末処理 - などなどなど - 発注数量算出 - アロケーション 執⾏管理 - 外部ブローカーとの通信 - FIXでのやりとりetc ここをリプレース 全体像

Slide 19

Slide 19 text

ざっくり⾒積もると開発終了だけで1年?といった
 ボリューム感 関⼼が多く、全体の流れも⾒通しにくい
 - バッチ数85個程度 - 機能多数 - 注⽂管理 - 残⾼管理 - 終値・為替レート取得 - 運⽤報酬料計算・徴収 - 譲渡益税計算・徴収 - 祝⽇・⽉末処理、サマータイムでの切り替え - - ⼝座システムの特性上、
 ステートフルで要素同⼠が相互に関連しやすい 19 課題1. 巨⼤で知識も必要なドメイン・要件

Slide 20

Slide 20 text

新しく⼊社した開発メンバーも多く、 何が分からないのか分からない 状態に。 当時のメンバーの気持ち - 「どうしてこのバッチが必要なのか分からない」 - 「全体としてどういう業務があって、このバッチがど れに該当するのかが謎」 - 「業界標準の知識なのか、FOLIO独⾃の知識なのか分 からない」 20 課題2. 知識が豊富とは限らないメンバー

Slide 21

Slide 21 text

21 課題整理 巨⼤で知識も必要なドメイン・要件 知識がない状態ではスピードが出ない。 スピードが出ないといつまで経っても終わらない。 知識が豊富とは限らないメンバー 何が分からないのか分からない状態では理解が積み上がらない 最初の⼀歩が遅れ、スピードの低下につながるし 開発後の運⽤フェーズにも不安が…

Slide 22

Slide 22 text

22 という状況の中で ⾊々頑張ったところ

Slide 23

Slide 23 text

23 結果 巨⼤で知識も必要なドメイン・要件 3チーム並列開発で9ヶ⽉で本番稼働まで完了! 並列開発による⼿戻りもほぼ無しでスピード感を持って開発できた 知識が豊富とは限らないメンバー ⾃分の担当範囲外の処理も⼤まかには把握。 特定のメンバーがいなくても運⽤できる⾃信のあるチームに

Slide 24

Slide 24 text

⾦融出⾝エンジニアがあまり多くないFOLIOが 「⾦融・証券」という複雑なドメインの中で イベントストーミングを使うことで ⽣産性を保って開発を⾏った話をしていきます 24 改訂版: 今⽇話すこと

Slide 25

Slide 25 text

フォーマットは過去の案件を踏襲しながら 改善したものを利⽤ - データ・パイプラインの流れの可視化 - 稼働⽇判定など⽇付処理に関するもの - ⼤まかな処理の流れ・依存先・etc 認識齟齬を防ぐための情報は早期に揃っていた 25 設計書について

Slide 26

Slide 26 text

設計書が充実しているだけでは 新規参⼊メンバーが実⼒を発揮できない - 欲しい情報を探せない。 - 課題と情報をリンクできない。 - ⾒えてない他の要素が無いか不安になる 26 設計書があればOK?

Slide 27

Slide 27 text

「ドキュメントはナレッジじゃない。
 ドキュメントを読んだ⼈がナレッジ。」 by 社内有識者 27 ドメイン知識・ノウハウをチームに宿らせる

Slide 28

Slide 28 text

設計書 = 情報を チームのナレッジに転換する取り組みが ⾜りていなかった 28 ドメイン知識・ノウハウをチームに宿らせる

Slide 29

Slide 29 text

イベントストーミングとは 基本となる”イベント”を並べながら 流れを確認し疑問を挙げていくことで システムへの理解を深めていく ワークショップ型の活動。 29 イベントストーミングの実施

Slide 30

Slide 30 text

30 FOLIOミートアップ Scramble#3 明⽇からはじめられるEventStorming より引⽤

Slide 31

Slide 31 text

イベントストーミング⾃体は⾊々な使い⽅ができる - システムの要求に対して皆で同じ理解をする - 設計に整合性があるか、皆でチェックする - etc 今回のプロジェクトでは 「設計書にある情報を⾃分たちの知識に落とし込んで共通の理解を作る」 ことに主眼を置いて利⽤ 31 我々のイベントストーミングの利⽤⽅法

Slide 32

Slide 32 text

様々な粒度のイベントストーミングを チームが継続的に学習する機会(週⼀回
 程度)を作った 例(分配⾦再投資) - 分配⾦が⽀払われるタイミングで顧客が
 解約⼿続き中だったら再投資処理はどうなる? - マイページの履歴はどのタイミングで表⽰開始? - そもそも分配⾦って何??? 32 イベントストーミングの実施

Slide 33

Slide 33 text

33 再掲: 結果 巨⼤で知識も必要なドメイン・要件 3チーム並列開発で9ヶ⽉で本番稼働まで完了! 並列開発による⼿戻りもほぼ無しでスピード感を持って開発できた 知識が豊富とは限らないメンバー ⾃分の担当範囲外の処理も⼤まかには把握。 特定のメンバーがいなくても運⽤できる⾃信のあるチームに

Slide 34

Slide 34 text

新型コロナウィルス感染防⽌のため 2⽉からリモートワーク開始 知識移転を重視していたので ベロシティ低下せず ナレッジの積み上げを継続的に やれていた効果を実感できた。 34 余談:リモートワークでも⽣産性が低下せず

Slide 35

Slide 35 text

リプレースプロジェクトは終わったけど、 今後もやりたいことは⼭積みなので 35

Slide 36

Slide 36 text

開発⼿法を常に改善しながら 複雑なドメイン・システムと ⼀緒に戦いたい⼈ 36

Slide 37

Slide 37 text

˞։ൃݴޠ͸4DBMBͰ͕͢ɺೖ͔ͬͯΒ֮͑ͨਓ΋ͨ͘͞Μډ·͢ʂ ͓ؾܰʹ࠾༻ϖʔδ͔ΒΧδϡΞϧ໘ஊͷ͓ਃ͠ࠐΈΛʂ IUUQTDPSQGPMJPTFDDPNUIFTQFDJBMPOF

Slide 38

Slide 38 text

THANK YOU

Slide 39

Slide 39 text

付録 39

Slide 40

Slide 40 text

イベントストーミングの⽬的・実践⽅法については FOLIOミートアップ Scramble#3 明⽇からはじめられるEventStorming 本当にはじめられたイベントストーミング ―実践してみて⾒えたこと で紹介しています! 40 ⼿前味噌ですが…