Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
@hanhan1978 ADRを一年運用してみた そのまま口伝で続ける?メルカリ、カオナビ、estieの試行 錯誤から学ぶ設計ドキュメントの活用方法 2024/03/05
Slide 2
Slide 2 text
@hanhan1978 ● 富所 亮 ● 所属 株式会社カオナビ CTO室 BackEnd Re-architecturing Team (BERT) ● 職業 バックエンドエンジニア ● ブログ https://blog.hanhans.net ● Yokohama North AM https://anchor.fm/yokohama-north-am 2
Slide 3
Slide 3 text
ここからしばらくはキレイな話
Slide 4
Slide 4 text
ADRとはなにか?
Slide 5
Slide 5 text
Architectural Decision Records
Slide 6
Slide 6 text
細かいお作法とか言われたりするけど
Slide 7
Slide 7 text
ソフトウェアに関連する決定・経緯を 記録しておくもの この程度の認識でだいたい合ってる
Slide 8
Slide 8 text
参考1 https://adr.github.io/
Slide 9
Slide 9 text
参考2 ソフトウェアアーキテクチャーの基礎 13章「アーキテクチャー決定」
Slide 10
Slide 10 text
それぞれの組織の都合に合わせて ある程度の改造はありだと思う ポイントについては後述
Slide 11
Slide 11 text
弊社のADR このテンプレートから新しいADRを作成する
Slide 12
Slide 12 text
● メール送信の方式 ● ディレクトリ階層 ● CIどうしよう? ● ログの方式どうしよう? 例えばこんな内容がADRになる
Slide 13
Slide 13 text
様々な決定事項を書いて溜めておく 気軽なノリが大切
Slide 14
Slide 14 text
ところで
Slide 15
Slide 15 text
Q 普通の設計資料と何が違うの?
Slide 16
Slide 16 text
● DesignDoc ● ReadME ● PRD ● 謎のMiro、Figma ソフトウェア開発では何がしか設計資料必要になるよね
Slide 17
Slide 17 text
A 実態はかわらん 弊社開発チームもそれぞれドキュメントを書いていた
Slide 18
Slide 18 text
ではなぜADRが必要になるのか?
Slide 19
Slide 19 text
その前に
Slide 20
Slide 20 text
所属するCTO室の役割について
Slide 21
Slide 21 text
横軸のカイゼンチーム [引用]チームトポロジー Chapter 5 4つの基本的なチームタイプ コレと コレと コレ
Slide 22
Slide 22 text
広くチームをサポートする役割
Slide 23
Slide 23 text
ADRの話にもどる
Slide 24
Slide 24 text
いわゆるサービス開発 ● 複数チームが同じアプリケーションを同時並行で開発 ● 一部のチームは異なるアプリケーションを単独で開発
Slide 25
Slide 25 text
各チームのドキュメント ● リードが選んだツールを使う ● 用意するドキュメントは自分たちの開発に必要なもの
Slide 26
Slide 26 text
このドキュメント群は 良い意味、悪い意味でサイロ化する
Slide 27
Slide 27 text
良い意味 ● チームはメンバーに最適なツールを自分たちで選定(主体性 ● PdMの管理とも関係しておりマネージメントにもつながる ● 自分たちが作ろうとする機能に最適化していて効率がいい
Slide 28
Slide 28 text
悪い意味 ● チーム部外者に読ませる動機がない ● チームまたぎでの統一感はない(利点の裏返し) ● システム全体の設計を記述するのは不適切
Slide 29
Slide 29 text
ADRの役割 ● そもそもチームをまたいた情報共有のために用意している ● 横軸チームのドキュメント配置場所としても適切
Slide 30
Slide 30 text
ADRはみんなのドキュメント
Slide 31
Slide 31 text
統一フォーマットで認知負荷を下げ みんなに情報を共有する
Slide 32
Slide 32 text
● 導入者は社内から信頼されている ● 導入者は積極的に活用 ● 気合と根性 ADRによらず、大体のモノゴトと同じ 導入のポイント
Slide 33
Slide 33 text
弊社でのADR事例1 ● チームを横断する決定だったので長年放置されていた ● ADRという形で明文化することで問題が具体化できた
Slide 34
Slide 34 text
弊社でのADR事例2 ● デプロイとリリースを分離する機能トグル ● 特に並行開発においてリリースの細かい制御ができて助かる
Slide 35
Slide 35 text
導入前に気づいてなかった利点
Slide 36
Slide 36 text
歴の浅いメンバーが横断的同意を得やすい 古参も援助しやすく、新参も使いやすい 🎉🎉🎉🎉 WIN&WIN 🎉🎉🎉🎉
Slide 37
Slide 37 text
きれいな話終わり
Slide 38
Slide 38 text
ここから本音
Slide 39
Slide 39 text
● 運用・保守しやすいソースコード ● 個別のドキュメント、コメント ● 決定プロセス、経緯の記録 ソフトウェアが備えていてほしい
Slide 40
Slide 40 text
● コードつらい ● ドキュメントない ● 決定プロセス、経緯の記録などない ● チケット?そんなぜいた…ry) 開発あるある
Slide 41
Slide 41 text
ある程度の改善はできる ソースコードだけから読み取れることも多い
Slide 42
Slide 42 text
理由がわからないと解決策が浅くなる
Slide 43
Slide 43 text
● ところどころに条件分岐 ● 意味があるかわからない消せないコード ● 運用対処(データ更新とかね… 浅い解決策は認知負荷を上げる 浅い解決策
Slide 44
Slide 44 text
● 運用・保守しやすいソースコード ● 個別のドキュメント、コメント ● 決定プロセス、経緯の記録 これが残っていると根本解決の方向性がつけやすい ソフトウェアが備えていてほしい
Slide 45
Slide 45 text
ソースコードがきれいなことは もちろん助かる
Slide 46
Slide 46 text
が!!! コードそのものから読み取れない物がある…
Slide 47
Slide 47 text
さらなる本音
Slide 48
Slide 48 text
とりあえず何でもいいから手がかり残 しておいてくれ… 無はつらい(正直ADRじゃなくていい)
Slide 49
Slide 49 text
導入障壁になりそうなこと
Slide 50
Slide 50 text
ドキュメントが必要だと思う経験 ドキュメント不要派が一定数存在
Slide 51
Slide 51 text
ドキュメントを書く能力が必要 ADR自体の読みやすさは書き手に依存
Slide 52
Slide 52 text
これだけはやめておけ(ADR編)
Slide 53
Slide 53 text
● 気軽に読み書きできないツール(Git) ● 気軽にコメントできないツール ● テンプレートなしでの運用 ● 履歴が取れない Wiki系ツールなら多分大体OK
Slide 54
Slide 54 text
最後に
Slide 55
Slide 55 text
ADRは横断的な決定事項の記録
Slide 56
Slide 56 text
チームを越えられる
Slide 57
Slide 57 text
気軽に読み書きできることが大切 街の掲示板を目指せ!