Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Real_World_Replacement_PJ.pdf
Search
horiuchie
August 23, 2023
Technology
2
200
Real_World_Replacement_PJ.pdf
horiuchie
August 23, 2023
Tweet
Share
More Decks by horiuchie
See All by horiuchie
LLMアプリケーション_リリース後の苦労とGROW.pdf
horiuchie
0
430
はじめてのアジァイル開発ならJIRAよりもBacklog.pdf
horiuchie
3
4.1k
Introduce the backlog into Plan Of Record
horiuchie
1
410
Other Decks in Technology
See All in Technology
Apple/Google/Amazonの決済システムの違いを踏まえた定期購読課金システムの構築 / abema-billing-system
cyberagentdevelopers
PRO
1
220
スプリントゴールにチームの状態も設定する背景とその効果 / Team state in sprint goals why and impact
kakehashi
2
100
【若手エンジニア応援LT会】AWS Security Hubの活用に苦労した話
kazushi_ohata
0
170
グローバル展開を見据えたサービスにおける機械翻訳プラクティス / dp-ai-translating
cyberagentdevelopers
PRO
1
150
CyberAgent 生成AI Deep Dive with Amazon Web Services / genai-aws
cyberagentdevelopers
PRO
1
480
omakaseしないための.rubocop.yml のつくりかた / How to Build Your .rubocop.yml to Avoid Omakase #kaigionrails
linkers_tech
3
740
LeSSに潜む「隠れWF病」とその処方箋
lycorptech_jp
PRO
2
120
最速最小からはじめるデータプロダクト / Data Product MVP
amaotone
5
740
IaC運用を楽にするためにCDK Pipelinesを導入したけど、思い通りにいかなかった話
smt7174
1
110
オーティファイ会社紹介資料 / Autify Company Deck
autifyhq
9
120k
Vueで Webコンポーネントを作って Reactで使う / 20241030-cloudsign-vuefes_after_night
bengo4com
4
2.5k
現地でMeet Upをやる場合の注意点〜反省点を添えて〜
shotashiratori
0
530
Featured
See All Featured
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
92
16k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
159
15k
Build The Right Thing And Hit Your Dates
maggiecrowley
32
2.4k
Typedesign – Prime Four
hannesfritz
39
2.4k
Visualization
eitanlees
144
15k
Optimising Largest Contentful Paint
csswizardry
33
2.9k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
246
1.3M
Rebuilding a faster, lazier Slack
samanthasiow
79
8.6k
Designing for Performance
lara
604
68k
Why You Should Never Use an ORM
jnunemaker
PRO
53
9k
4 Signs Your Business is Dying
shpigford
180
21k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
231
17k
Transcript
Real World Replacement PJ 2023年 8月24日 株式会社カラダノート 堀内 栄一 ー アーキテクトの視点から
ー
About
自己紹介 名前 堀内 栄一 出身地 和歌山県 のとても山奥 役割 プロダクト本部長兼VPoE 経歴 ・A社(SIer,
SES) ・B社(自社開発系のベンチャー) ・C社(スタートアップ) ・株式会社カラダノート(現職) → 4社中3社でリプレースを経験しました SNS https://twitter.com/horiuchie1 https://www.wantedly.com/id/eiichi_horiuchi 得意分野 アーキテクト、宣言的 /関数型、データ分析、 Vim、泥臭さ、...etc
カラダノートについて 会社名 株式会社カラダノート 代表 佐藤 竜也 ビジョン 家族の健康を支え 笑顔をふやす バリュー 仕事もプロ 家族もプロ
成長が生む幸せ 全てはビジョンに向けたストーリー 設立 2008年 12月 24日 従業員数 49名(2023年1月時点) 証券コード 4014(東京証券取引所グロース市場) 2020年10月27日 上場 エンジニア向け資料 https://bit.ly/3sCE3c8
事業概要
ビジネスモデル
それは3年前・・・
3年前のシステム
最後に残った箇所(赤枠の部分)の問題点・・・ • 当社ビジネスのメイン部分のアプリケーション • 「機能追加の改修スピードが遅い」或いは「急ぐと事故になる」 ◦ 要件 ~ 外部設計: ▪
現仕様を把握して改修内容をFixさせる工程に時間がかかっていた ▪ 想定外の負荷(非機能要件)による障害 ◦ 詳細設計 ~ 実装: ▪ 多くのハードコード ▪ 組み合わせのパターンが多い ▪ バッチの個数42個(いずれも3 ~ 5分おきに動く) ◦ テスト面 ▪ 他の仕様を壊さないように
参考)多くのハードコード および 42個バッチの抜粋
アプローチ
どうやってリプレースするか = アーキテクトの出番 ソフトウェアアーキテクトには主に次の 8つが期待される。 1. アーキテクチャ決定を下す 2. アーキテクチャを継続的に分析する 3.
最新のトレンドを把握しつづける 4. 決定の遵守を徹底する 5. 多様なものに触れ、経験している 6. 事業ドメインの知識を持っている 7. 対人スキルを持っている 8. 政治を理解し、かじ取りする 出典:ソフトウェアアーキテクチャの基礎より ▪ リプレースにあたっての泥臭いこと 問題を言語化したり、解決方法を導き出したり、意思決定したり、事業への影響を洗い 出したり、ドメインを整理したり、 ...etc 8つの期待(役割)と一致する
事業ドメインの知識を持っている • 既存のコードを隅から隅まで読む ◦ パターンが256個あるなら全部マトリクスにまとめる ◦ マジックナンバー・識別子などをすべてピックアップしていく ◦ ドメインに関するルール(=不変式)を抽出してまとめていく •
なぜこういう仕様なんだろう?既に担当者がいない場合は? ◦ 不明な点として書き出しておく • 事業に関連する書籍を読む ◦ 営業に関すること ◦ マーケティングに関すること ◦ 法律に関すること ◦ …etc
事業ドメインの知識を持っている • 事業ドメインの知識を身につけると・・・ ◦ ビジネスチームとより突っ込んだ会話・深掘りができる ◦ ビジネスチームさえ気づけない構造や概念に気づくことができる ◦ 書き出していた不明点の解像度が上がる 本屋に行って、端から端まで本を買う
自分の課題に関連する業界の本を端から端まで買うことをお勧めしま す。たとえば飲食業のSaaSビジネスをしたいのなら飲食ビジネスに関連 する本屋を端から端まで買います。 出典:解像度を上げる
政治を理解し、かじ取りする • 前提として 政治 = 社内政治 ではない ◦ コミュニケーションの仕方である ◦
意思決定の構造を理解して決裁者に最適な提案をすること • 問題を生み出している原因を言語化・蓄積しておく ◦ 決裁者にレポートする前提で ◦ e.g. 組み合わせが複雑、職人しか対応できない、動作確認に時間がかかる、 ...etc • コストや時間は最後の手段 それは最後の手段として使用すべきで、もっと重要な他の正当性や合理的な理由を先に試すべきだ。 コストと時間が交渉の重要な属性であるならば、一旦合意に達したあとでそれを考慮できる 出典:ソフトウェアアーキテクチャの基礎より
問題点の書き出しメモの抜粋 泥臭くコツコツ
多様なものに触れ、経験している 多くのハードコードやバッチは、 マッチングアルゴリズムで表現できることに気づく
アーキテクチャ決定を下す オニオンアーキテクチャ ▪ リプレース領域を切り分け e.g. インフラ層で吸収すればDBに変更を食わずにリプ レースできる 影響を及ぼさない (影響範囲の切り分け)
アーキテクチャ決定を下す EC2 ECS RDS
その他:プロジェクトには名前をつける • 改善余地あり ◦ XXシステムリプレースPJ • Good ◦ XXシステム YY問題改善PJ
◦ XXシステム YYリスク対応PJ ◦ XXシステム ZZモデル反映PJ スコープがはっきりする・ブレない・オーナーシップ
技術まわり Before After • PHP • Laravel • EC2 •
Vue2 • JavaScript • テストコードなし • … • Python 3.10(当時) • Fast API • 型検査やLintの強制およびpre-commit連携 • テストコードおよびCI/CD連携 • 循環的複雑度の解析および CI/CD連携 • 脆弱性解析およびCI/CD連携 • TypeScript • Nuxt3 • VS Code Dev Containers • ECS • …
最後に
明日はすぐに変えられない 1年後は必ず(置き)変えられる
ありがとうございました 本日の発表、当社についてや個人的なキャリア相談など TwitterからDMくださいませ