SlideShare a Scribd company logo
1 of 31
Download to read offline
進化可能なアーキテクチャ
を手に入れる
有限会社 システム設計 増田 亨
越境アジャイル 2017-10-26
越境する情シス
逆境
特別文化遺産
がちがちの岩盤
破砕帯
ハウルの動く城
大きな泥団子
秘伝のたれ
…
現状の変更禁止/立ち入り制限
低凝集・密結合
トンネル工事の最大の難所
動きながら壊れていく
代々伝わる運用奥義
岩盤の中で岩が細かく砕け、
隙間に地下水を大量に含んだ
軟弱な地層
構造のない集合体
逆境との戦い方
アンチパターン
全面刷新
全面刷新
膨大なコスト(直接/間接)
プロジェクトの長期化/度重なる遅延
前提条件の崩壊
当初目的の喪失
新たな逆境の拡大再生産
逆境
もう一つの戦い方
アーキテクチャ
リファクタリング
アーキテクチャ
リファクタリング
アーキテクチャの継続的な改善活動
外部インタフェースを維持しつつ内部構造を変更する
アーキテクチャ
リファクタリング
いつやるか?
テストのタイミング
複数の関係者が
活動する時
障害の調査時
バグの修正時
軽微な機能追加
大きな機能変更
アーキテクチャリファクタリング
戦略
戦略の選択肢
集中 分散
同期 非同期
直列 並列
長期的に大規模にどちらに取り組んでいくか?
システムの「インテグレーション」の発想と技法が異なる世界
アーキテクチャリファクタリング
逆境との戦い方
境界の発見
賞味期限切れの廃棄活動
ビジョン駆動
3カ月サイクル
パレートの法則
持続的努力と学習曲線
戦う相手
ほんとうのリーダー
武器と戦術
兵站(ロジスティクス)
境界の発見
• 構造の手がかりを見つける
• IN/OUTのインタフェースを定義できる場所
• 責任分界点(部門や組織の利害の対立点)
• テスト可能(手動で)
• (理論)インタフェースを境に独自に変更可能
• (現実)密結合と副作用
• (現実を知る)推測ではなく実験で確かめる
賞味期限切れの廃棄活動
• 余計な仕事を減らす事前準備
– コメントアウトされたコードの削除
– 使っていないコードの削除
– 使っていない区分の廃止
– 使っていないカラムの廃止
– 使っていないデータの削除(アーカイブ)
• 賞味切れの発見
– 障害の調査や再現テストする時が絶好のチャンス
• 賞味期限切れの廃棄活動を地道に積み重ねる
– やる場合とやらない場合の一年後の違い
ビジョン駆動
• あるべき姿を描く
• 方向性の明示
• そこに至る道は定義しない
• そこに至る期日は定義しない
• ビジョンに近づくための実験の奨励
– 実験なので失敗もある
– 失敗から学ぶ
3カ月サイクル
• 3カ月ごとに実データでの並行運用を開始する
– 実データでの運用=総合テスト
• 活動のコントロール
– 期限を定める
– 予算を固定する
– 仕様と品質は実運用に必要なレベルを維持
– スコープ(対象の機能やデータ範囲)を柔軟に縮小・拡大する
• 3カ月サイクルの効能
– 中規模の開発のリズム
– 業務のサイクルとの整合
• 3カ月ごとにビジョン(あるべき姿)を改定する
パレートの法則で取り組む
20%の
顧客
80%の
売上
20%の商品、20%の機能、20%のデータ項目、…
費用対効果の高い実証実験
8割を手に入れてから、残りの20%への取り組みを議論する
持続的努力と学習曲線
出典:http://tamafas.tumblr.com/post/88756355771
戦う相手
• ソースコード
• 実データ
• 提供中のサービスレベルの維持
• 戦線から離れてアーキテクチャを議論しない
– コンサルタント、アーキテクト、上級SE、…
– 単価が高いほど役に立たない
• パワーポイントでアーキテクチャを判断しない
逆は真ではない…
ほんとうのリーダー
• コードに責任を持つ現場の技術者の中で
– 技術者仲間に頼られている
– 視野が広い
– 知識と経験が豊富
– ビジネスの言葉で会話できる(会話する意思がある)
• 多くの場合、非公式なリーダー
• 候補を見つける
• 育成する
– 先生につける、学ぶ機会(失敗する機会)を与える
– 複数を育てる(相談相手)
– 先生役をやらせる
• サポートする
– 公式なリーダーが非公式なリーダーを尊重する
– 非公式なリーダーの見積もり、判断をオーバーライドしない
– 非公式なリーダーに余計な仕事をさせない
武器と戦術
議論の枠組みと共通の語彙
戦術的な基本スキルの習得
実装技術の習熟
実験を繰り返す
議論の枠組みと共通の語彙
第4部 戦略的な設計
メッセージング
パターン
戦術的な基本スキルの習得
• リファクタリング
– プログラムのモジュール構成(クラス構成)のリ
ファクタリング
– モデルのリファクタリング
– データベースのリファクタリング
実装技術の習熟
• Spring Integration
• Spring Boot
• AWS
分散・非同期・並列を指向した実装技術群
パワーポイントではなく、
実際に動くコードで
実験し、判断し、展開する
小さな実験→実戦投入→横展開をシームレスに実現可能
実験を繰り返す
• 実験環境という財産
– 実データ
– できれば疑似環境で
– できれば並行運用で
• 小さな実験
– 失敗を繰り返す
– 知見を蓄積する
– 持続的な努力と学習曲線
兵站(ロジスティクス)
• 長く複雑な戦いを後方から継続的に支援する
• 人材
• 食料、機材、弾薬
• 訓練
• 休暇
• 督励
• 慰問
アーキテクチャリファクタリング
逆境との戦い方
境界の発見
賞味期限切れの廃棄活動
ビジョン駆動
3カ月サイクル
パレートの法則
持続的努力と学習曲線
戦う相手
ほんとうのリーダー
武器と戦術
兵站(ロジスティクス)

More Related Content

More from 増田 亨

正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース増田 亨
 
ソフトウェア開発のやり方の改善
ソフトウェア開発のやり方の改善ソフトウェア開発のやり方の改善
ソフトウェア開発のやり方の改善増田 亨
 
事業活動モデル・システム機能モデル・ビジネスロジックの記述
事業活動モデル・システム機能モデル・ビジネスロジックの記述事業活動モデル・システム機能モデル・ビジネスロジックの記述
事業活動モデル・システム機能モデル・ビジネスロジックの記述増田 亨
 
ドメインオブジェクトの設計ガイドライン
ドメインオブジェクトの設計ガイドラインドメインオブジェクトの設計ガイドライン
ドメインオブジェクトの設計ガイドライン増田 亨
 
ドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったことドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったこと増田 亨
 
オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来増田 亨
 
ドメイン駆動設計 コアドメインを語り合ってみよう
ドメイン駆動設計 コアドメインを語り合ってみようドメイン駆動設計 コアドメインを語り合ってみよう
ドメイン駆動設計 コアドメインを語り合ってみよう増田 亨
 
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer
オブジェクト指向プログラミング入門 -- Java object-oriented programming primerオブジェクト指向プログラミング入門 -- Java object-oriented programming primer
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer増田 亨
 
ドメイン駆動設計という設計スタイル
ドメイン駆動設計という設計スタイルドメイン駆動設計という設計スタイル
ドメイン駆動設計という設計スタイル増田 亨
 
プロダクトづくりのためのソフトウェア設計スタイル
プロダクトづくりのためのソフトウェア設計スタイルプロダクトづくりのためのソフトウェア設計スタイル
プロダクトづくりのためのソフトウェア設計スタイル増田 亨
 
ソフトウェア設計の学び方を考える
ソフトウェア設計の学び方を考えるソフトウェア設計の学び方を考える
ソフトウェア設計の学び方を考える増田 亨
 
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチレガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ増田 亨
 
ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方増田 亨
 
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチマイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ増田 亨
 
ビジネスルールの複雑さに立ち向かう
ビジネスルールの複雑さに立ち向かうビジネスルールの複雑さに立ち向かう
ビジネスルールの複雑さに立ち向かう増田 亨
 
ソフトウェアの核心にある複雑さに立ち向かう
ソフトウェアの核心にある複雑さに立ち向かうソフトウェアの核心にある複雑さに立ち向かう
ソフトウェアの核心にある複雑さに立ち向かう増田 亨
 
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説増田 亨
 
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門増田 亨
 
DDD sample code explained in Java
DDD sample code explained in JavaDDD sample code explained in Java
DDD sample code explained in Java増田 亨
 
アジャイルなソフトウェア設計を目指して
アジャイルなソフトウェア設計を目指してアジャイルなソフトウェア設計を目指して
アジャイルなソフトウェア設計を目指して増田 亨
 

More from 増田 亨 (20)

正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース
 
ソフトウェア開発のやり方の改善
ソフトウェア開発のやり方の改善ソフトウェア開発のやり方の改善
ソフトウェア開発のやり方の改善
 
事業活動モデル・システム機能モデル・ビジネスロジックの記述
事業活動モデル・システム機能モデル・ビジネスロジックの記述事業活動モデル・システム機能モデル・ビジネスロジックの記述
事業活動モデル・システム機能モデル・ビジネスロジックの記述
 
ドメインオブジェクトの設計ガイドライン
ドメインオブジェクトの設計ガイドラインドメインオブジェクトの設計ガイドライン
ドメインオブジェクトの設計ガイドライン
 
ドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったことドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったこと
 
オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来
 
ドメイン駆動設計 コアドメインを語り合ってみよう
ドメイン駆動設計 コアドメインを語り合ってみようドメイン駆動設計 コアドメインを語り合ってみよう
ドメイン駆動設計 コアドメインを語り合ってみよう
 
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer
オブジェクト指向プログラミング入門 -- Java object-oriented programming primerオブジェクト指向プログラミング入門 -- Java object-oriented programming primer
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer
 
ドメイン駆動設計という設計スタイル
ドメイン駆動設計という設計スタイルドメイン駆動設計という設計スタイル
ドメイン駆動設計という設計スタイル
 
プロダクトづくりのためのソフトウェア設計スタイル
プロダクトづくりのためのソフトウェア設計スタイルプロダクトづくりのためのソフトウェア設計スタイル
プロダクトづくりのためのソフトウェア設計スタイル
 
ソフトウェア設計の学び方を考える
ソフトウェア設計の学び方を考えるソフトウェア設計の学び方を考える
ソフトウェア設計の学び方を考える
 
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチレガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
 
ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方
 
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチマイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ
 
ビジネスルールの複雑さに立ち向かう
ビジネスルールの複雑さに立ち向かうビジネスルールの複雑さに立ち向かう
ビジネスルールの複雑さに立ち向かう
 
ソフトウェアの核心にある複雑さに立ち向かう
ソフトウェアの核心にある複雑さに立ち向かうソフトウェアの核心にある複雑さに立ち向かう
ソフトウェアの核心にある複雑さに立ち向かう
 
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
 
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門
 
DDD sample code explained in Java
DDD sample code explained in JavaDDD sample code explained in Java
DDD sample code explained in Java
 
アジャイルなソフトウェア設計を目指して
アジャイルなソフトウェア設計を目指してアジャイルなソフトウェア設計を目指して
アジャイルなソフトウェア設計を目指して
 

越境する情シス:進化可能なアーキテクチャを手に入れる