Upgrade to Pro — share decks privately, control downloads, hide ads and more …

設計を積み重ねてシステムを刷新する

SansanTech
February 25, 2025

 設計を積み重ねてシステムを刷新する

■ イベント
リプレイスメント・デイ - システム刷新の最前線 -
https://enechange-meetup.connpass.com/event/343395/

■ 発表者
技術本部 Sansan Engineering Unit Product Enhancementグループ
加畑 博也

■ Sansan 開発エンジニア 採用情報
https://media.sansan-engineering.com/sansan-engineer

SansanTech

February 25, 2025
Tweet

More Decks by SansanTech

Other Decks in Technology

Transcript

  1. 4 © Sansan, Inc. 営業DXサービス「Sansan」 4 10,000社 ※利⽤企業数は、 営業DXサービス「Sansan」を ご利⽤いただいている契約数

    利⽤企業 シェア ※営業⽀援DXにおける 名刺管理サービスの最新動向2025 (2025年1⽉ シード・プランニング調査) 84.1%
  2. 5 © Sansan, Inc. Sansanユーザ Webブラウザ スマホアプリ スキャナ 外部サービスなど Sansanプロダクト(サーバー)

    Webアプリ スマホ用アプリAPI スキャナ⽤API ユーザ公開⽤API RDB ファイルストレージ キャッシュ メッセージキュー 外部システム⽤ コールバックAPI 内部システム⽤ コールバックAPI バッチ 外部サービスなど データ化/名寄せ など社内の別部署 システム構成 - ユーザーに提供するアプリケーションやAPI、および社内向けのAPI等も 含めて、WebサービスとしてのSansanを提供している。
  3. 6 © Sansan, Inc. Sansan Engineering Unit(約30名) 開発組織 Enhancementグループ (約15名)

    Reliabilityグループ (約15名) プロダクト 組織 Sansan PdM チーム グループマネジャー Mobileグループ Sansan デザイナー インフラグループ グループマネジャー チーム チーム - 基本的にマネジャーを含めて全メンバーがコードを書く。 - ドメインを限定せずプロジェクトをアサイン・リードする。
  4. 9 © Sansan, Inc. - Sansanの開発⾔語はC#、フレームワークは.NET Frameworkである。 - .NET Frameworkは現⾏バージョンで開発終了が発表されている。

    - 新たなフレームワークである.NETへの移⾏が必要である。 課題:開発フレームワークのサポート終了 https://devblogs.microsoft.com/dotnet/net-core-is-the-future-of-net/ https://devblogs.microsoft.com/dotnet/announcing-dotnet-9/
  5. 10 © Sansan, Inc. 課題:技術的負債の蓄積 - 初期から現在に⾄るまでのコードが積層している。 - モジュール間が密結合している。 -

    複数世代のアーキテクチャが共存している。 - 保守性や開発効率が低下している。 http://www.laputan.org/mud/ https://www.infoq.com/news/2015/01/lava-layer-antipattern
  6. 11 © Sansan, Inc. - システム刷新は⻑期的な取り組みとして、 漸進的に進めている。 - 「重要であるが、緊急ではない」タスクである。 -

    ⼀般論としての対策は「計画すること」である。 - ⼀⽅、「重要かつ緊急」な機能開発もある。 - 機能開発が流動的なため、システム刷新の計画が⽴たない。 - 本質的に、事業の対象となる市場・社会⾃体の 不確実性が⾼いためである。 - システム刷新を停滞させずに進捗するには、どうすればいいか? 課題:システム刷新の停滞 https://en.wikipedia.org/wiki/Time_management#The_Eisenhower_Method Eisenhower Matrix
  7. 13 © Sansan, Inc. - “私が検討する難問の⼀つ⼀つを、 できるだけ多くの、しかも問題をよりよく 解くために必要なだけの⼩部分に 分割することである。” by

    デカルト - システム刷新を実⾏可能な単位に分割し、 機能開発の合間に組み込む。 対策:困難は分割せよ
  8. 14 © Sansan, Inc. - ライブラリ - ⾮業務機能 - データプロバイダ

    - データベースコネクション管理 - メッセージング処理(⾮同期・分散ライブラリ) - … - 業務機能 - ビジネスロジック - エントリーポイントアプリケーション - Webアプリ - Web API(公開API&社内API) - バッチ 対策:全体を体系的に分割
  9. 15 © Sansan, Inc. - 体系的な分割の単位では⼤きすぎる。 - 機能開発のプロジェクトより優先してアサインできない。 - プロジェクトマネジメントにおける不確実性が⾼い。

    - 概算⼯数を⾒積り、適切な粒度に分割する。 - 例えば、1000時間×1プロジェクトを100時間×10プロジェクトに。 - 実⾏単位の依存関係を明確にし、並列化を意識する。 - 例えば、複数のアプリケーションから参照するライブラリを移⾏する場 合、ライブラリ⾃体の移⾏および各アプリケーションの移⾏を分割する。 対策:実⾏可能な単位へ分割
  10. 18 © Sansan, Inc. - .NET Frameworkに依存する実装を廃⽌する。 - しかし、すべて同時に廃⽌する必要はない。 -

    「ライブラリAを移⾏」を、 「ライブラリAのクラス1を移⾏」 「ライブラリAのクラス2を移⾏」に分割する。 対策:実⾏可能な単位へ分割 - 機能
  11. 19 © Sansan, Inc. - メリット - システム刷新の進⾏を保証しつつ、⽇常の機能開発と両⽴できる。 - プロジェクトの規模が⼩さくなり、品質が向上する。

    - デメリット - システムとしての⼀貫性が損なわれる。 - 新たな技術的負債をリアルタイムに⽣み出すだけになるかもしれない。 対策:分割のメリット・デメリット
  12. 23 © Sansan, Inc. - 起票したイシューについて、優先度をつける。 - 様々な要因を勘案してメンバーへのアサインを決定する。 - 他プロジェクトのアサイン状況

    - プロジェクトの優先度 - プロジェクトの難易度 - メンバーの熟達度 - メンバーのタスク状況 - … - 適切に分割しておくことで、アサインがしやすくなる。 実例:リファインメント&アサイン
  13. 27 © Sansan, Inc. - うまくいった点 - 密結合の温床だった汎⽤処理ライブラリを⼩分けにしてアサインするこ とで、着⼿しやすくなり、リリースまでのサイクルが短縮された。 -

    ユースケースや利⽤者を意識したインターフェースを再設計できた。 - 改善点 - プロジェクト初期の時点でメソッドの仕様を再整理すべきだった。 - ライブラリの挙動を維持する前提で設計してしまっていた。 - 設計の論点がふくらみ、結果として⼯数が上振れした。 実例:結果
  14. 33 © Sansan, Inc. - ソフトウェアシステムは継続的に適応・変化を続けなければならない。 - Lehmanのソフトウェア進化法則: https://ieeexplore.ieee.org/document/1456074 -

    成⻑を続けるシステムの刷新は、本質的に進捗しづらい。 - 適切な粒度への分割と、設計への投資によって対処している。 - 結果、機能開発が多くある中で、破綻せず継続できている。 結論:まとめ
  15. 34 © Sansan, Inc. - 困難を分割する - 分割統治的なアプローチは、システム刷新にかぎらず、⼀般的な課題解 決の戦略である。 -

    例:「スライドをつくる」という困難を分割して、「構成をつくる」「背 景の章をつくる」「まとめの章をつくる」… - 設計に投資する - ⻑期的に価値を提供するシステムにおいて、⼀貫性・整合性の⽋如によ る負債、初期の投資による効果は軽視されがちである。 結論:学び
  16. 35 © Sansan, Inc. 採⽤案内 Sansan Engineering Unitのカルチャーや具体的な業 務内容など気になることを応募前に⾯談にてお話す ることができます。お気軽にお申し込みください。

    カジュアル⾯談 採⽤情報 申し込みはこちら 募集中のポジションやメンバーの執筆記事、オフィ ス、社内制度などを紹介しています。 詳細はこちら