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

技術的負債の怨霊と除霊方法 / ghosts-of-technical-debt

技術的負債の怨霊と除霊方法 / ghosts-of-technical-debt

このイベントの登壇資料です
『ミノ駆動さんと語るエンジニア怪談〜技術的負債の呪いにどう立ち向かうのかLT〜』
https://forkwell.connpass.com/event/291332/

MinoDriven

August 24, 2023
Tweet

More Decks by MinoDriven

Other Decks in Programming

Transcript

  1. 登壇及び受賞多数 • Developers Summit 2021 Summer ベストスピーカー賞3位 • Developers Summit

    2023 話題賞1位 • Developers Summit 2023 ベストスピーカー賞3位 • Developers Summit 2023 ベストスピーカー賞5位 • 昨年だけでも16回以上の講演依頼 • 今年は毎月講演やインタビュー etc...
  2. 「カプセル化」で通じなければ「セキュア設計」 - カプセル化せずフルアクセス、フルコントロール可能な構造はWebサービス で全くセキュリティ対策せず、重要情報を誰でも触れて変更できるのと同じ こと。 - 自社のプロダクションコードをGitHubのパブリックリポジトリに置いておき ますか? - 家の玄関や窓を全開にして外出できますか?

    - カプセル化で秘匿し正しい操作手段(メソッド)のみ公開するのは、玄関を 施錠し、ドアホンで来客者を確認することと同じ。招かれざる客(不正操 作)を排除する。 - クラス=家に例えても良い。クラス作成はセキュアな家をひとつひとつ建築し ていくことに似ている。
  3. 通常割引価格 割引率3% 夏季割引価格 3%割引に 仕様変更しますわ〜 きゃあああああ!!!!! 5%割引の仕様を満たせなく なりましたわよ!?!?? - 割引率が多目的に使われてしまっており

    一方の仕様変更が別目的の仕様に影響を及ぼしてしまう - DRY原則とはコードの重複を許さないのではなく 意図や目的の重複を許さない原則 - 典型的な単一責任原則違反
  4. 再利用性は基本的に共通基盤開発のみ 共通基盤 (フレームワーク) 固有 アプリA 固有 アプリB 固有 アプリC 再利用性を追いかけて

    いいのは共通基盤のみ • DRY原則に則ると固有アプリのロジックは 基本的に目的特化型 • 再利用可能なものはほぼ皆無 • 共通化可能なのは目的が同じロジックのみ
  5. 商品 原材料 構成部品 匂い 味 審査品目 品目分類 審査所見 審査結果 サイズ

    重量 抽出 在庫品 発注金額 在庫量 安全在庫量 配送品 サイズ 重量 注文品 取扱開始日 売値 在庫量 取扱開始日 売値 在庫量 抽出 抽出 品目分類 審査所見 審査結果 抽出 発注金額 在庫量 安全在庫量 原価 予約開始日 製造メーカー 賞味期限 目的ごとにそれぞれ必要な解決要素を抽出
  6. 在庫管理 配送 注文 商品審査 ECサイト 審査品目 品目分類 審査所見 審査結果 在庫品

    発注金額 在庫量 安全在庫量 注文品 取扱開始日 売値 在庫量 配送品 サイズ 重量 各目的に1:1で対応する特化モデルになる
  7. 【目的】 商品審査したい 【目的】 在庫管理したい 【目的】 注文したい 【目的】 配送したい 【手段】 審査品目

    【手段】 在庫品 【手段】 注文品 【手段】 配送品 手段に対応する目的はそれぞれたったひとつ リファクタリングもこの考えをベースにゴール設定する
  8. 怨霊の正体は学習コスト - 負債が積み上がることがマズいのではなく、解消されない、解消する環境を 作り出せないことが問題。 - t_wada御大が仰るように、設計に関する学習コストが原因の根本にあると考 える。 - ゆえに、負債解消には学習コストを軸に開発戦略を組み立てる必要がある。 -

    コアドメインなど、クリティカルな品質が求められる箇所には、単純な話、 設計の学習コストが低い人、つまり積極的に設計を学ぶ人をアサインする。 - 学習コストが高い人、つまり消極的な人は、クリティカルな品質が求められ るスコープとは別の箇所にアサインする。また、多少品質の悪いコードが書 かれても重要スコープに影響が生じないよう、アーキテクチャレベルで分離 設計することも有効な手段。