$30 off During Our Annual Pro Sale. View Details »

複雑なドメインと戦いながらロボアド基盤をリプレースするときにした工夫

matsu_chara
September 15, 2020

 複雑なドメインと戦いながらロボアド基盤をリプレースするときにした工夫

Inside Fintech Meetup ~ Finatext × Kyash × FOLIO ~
https://finatext.connpass.com/event/186666/
で発表した資料です。

matsu_chara

September 15, 2020
Tweet

More Decks by matsu_chara

Other Decks in Programming

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  5. 時は2018年
    5

    View Slide

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

    View Slide

  7. さらに
    7

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  11. 順調に展開?
    11

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  19. ざっくり⾒積もると開発終了だけで1年?といった

    ボリューム感
    関⼼が多く、全体の流れも⾒通しにくい

    - バッチ数85個程度
    - 機能多数
    - 注⽂管理
    - 残⾼管理
    - 終値・為替レート取得
    - 運⽤報酬料計算・徴収
    - 譲渡益税計算・徴収
    - 祝⽇・⽉末処理、サマータイムでの切り替え
    -
    - ⼝座システムの特性上、

    ステートフルで要素同⼠が相互に関連しやすい 19
    課題1. 巨⼤で知識も必要なドメイン・要件

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  27. 「ドキュメントはナレッジじゃない。

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  32. 様々な粒度のイベントストーミングを
    チームが継続的に学習する機会(週⼀回

    程度)を作った
    例(分配⾦再投資)
    - 分配⾦が⽀払われるタイミングで顧客が

    解約⼿続き中だったら再投資処理はどうなる?
    - マイページの履歴はどのタイミングで表⽰開始?
    - そもそも分配⾦って何???
    32
    イベントストーミングの実施

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  38. THANK YOU

    View Slide

  39. 付録
    39

    View Slide

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

    View Slide