Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥

Conway's law and Agile development - software d...

Avatar for Kenji Hiranabe Kenji Hiranabe
September 16, 2024

Conway's law and Agile development - software design and team design

As the business environment changes so fast and becomes turbulent, most of the business innovations are now relying on software centric. Now Agile is the key concept of software engineering, moving its main focus from the software structure to the social (team) structure which produces the softwaret. I will start with software engineering concepts and show parallelism in the social (Agile) concepts, and the motivation for
applying Conway’s law.

゜フトりェア開発においおりォヌタヌフォヌル型の開発からアゞャむル開発ぞず倧きなパラダむムシフ
トが起きたしたむノベヌションが゜フトりェアを䞭心に起こるようになり゜フトりェア工孊が゜フトりェアそのものの蚭蚈から゜フトりェアを生み出す組織ずそのコミュニケヌション構造も含めたチヌムづくりにフォヌカスを移しおいたすその経緯や意味も含めコンりェむの法則の珟代的な意味に぀いお考察したす

Avatar for Kenji Hiranabe

Kenji Hiranabe

September 16, 2024
Tweet

More Decks by Kenji Hiranabe

Other Decks in Technology

Transcript

  1. 平鍋健児 (æ ª)氞和システムマネゞメント瀟⻑ (æ ª)チェンゞビゞョンCTO (æ ª)Scrum Inc. Japan 取締圹 アゞャむル開発を掚進し、囜内倖で、 モチベヌション䞭⌌チヌムづくり、ア ゞャむル開発の普及に努める。゜フト

    りェアづくりの珟堎をより✣産的に、 協調的に、創造的に、そしおなにより、 楜しく倉えたいず考えおいる。 アゞャむルゞャパン初代実⟏委員⻑。 第⌆版
  2. 共創・共育で利✀するプラクティス 4 モブプログラミング • ⌀぀のPCずディスプレむ • 同じ課題にみんなで✎ち向かう • 知識䌝搬が早い •

    レビュヌも同時に⟏うこずで効率的 スプリント 1〜4週間 ふりかえり • 毎週スプリント毎実斜 • ⟃分たちの課題を出し合い改善策を探る • チヌムワヌクを✣み出す効果も 開発はすべおアゞャむル
  3. 11

  4. 12

  5. 15

  6. 第 I 郚 衚⟯䞊の改善 • 2ç«  名前に情報を詰め蟌む • 3ç«  誀解されない名前

    • 4ç«  矎しさ • 5ç«  コメントすべきこずを知る • 6ç«  コメントは正確で簡朔に 19
  7. 名前に情報を詰め蟌む • 類語蟞兞(Thesaurus)でもっずカラフルな 意図を明確に䌝えられる名前を探す 単語 代替案 send deliver, dispatch, announce,

    distribute, route find search, extract, locate, recover start launch, create, begin, open make create, setup, build, generate, compose, add, new 鍵ずなるアむディア • 明確で正確な情報密床の⟌い名前を探す努⌒を 惜したない。 20
  8. 21

  9. 第III郚 コヌドの再構成 • 10ç«  無関係の䞋䜍問題を抜出する • 11ç«  ⌀床にひず぀のこずを • 12ç« 

    コヌドに思いをこめる • 13ç«  短いコヌドを曞く • 14ç«  テストず読みやすさ 27
  10. Design Patterns Elements of Reusable Object-Oriented Software • ゜フトりェア分野のベストセラヌ (1995)

    by GoF(Gang of Four)/Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides, foreword by Grady Booch. • 建築家、Christopher Alexander の「パタヌン⟔語」 をWard Cunningham/Kent Beck/Grady Booch らが 最初に先導(Hillside Group)。 • 埌のアゞャむル(XP, Scrum)にも぀ながる。 • 厳栌なフォヌマットいく぀か流儀があるに則っお いる。 • 過去に繰り返し䜿われた、兞型的な蚭蚈解を、「✂ 脈」(Context)「問題」(Problem)「解決策」 (Solution)の組みにしお、名前(Name)を぀けたもの。 32
  11. 1 ⟃✎地域 2 町の分垃 3 フィンガヌ状の郜垂ず✥園 4 蟲業枓⟕ 5 レヌス状の✥園道路

    6 ✥舎町 7 ✥園 8 モザむク状のサブカルチャヌ 9 仕事堎の分散 10 郜垂の魔⌒ 11 地区亀通区域 12 7000⌈のコミュニティ 13 サブカルチャヌの境界 14 ⟒分けやすい近隣 15 近隣の境界 16 公共茞送網 17 環状道路 18 孊習のネットワヌク 19 商店網 20 ミニバス 21 4階建の制限 22 9パヌセントの駐⟞堎 23 平⟏道路 24 聖地 25 ✔ぞの近接 26 ラむフサむクル 27 男ず⌥ 28 䞭⌌をはずれた栞 29 密床のリング 30 掻動の節点 31 プロムナヌド 32 買物道路 33 ナむトラむフ 34 乗りかえ地点 35 䞖垯の混合 36 公共床の倉化 37 䜏宅クラスタヌ 38 連続䜏宅 39 段状䜏宅 40 どこにも✌⌈ 41 仕事コミュニティ 42 ⌯業の垯 43 垂堎のような⌀孊 44 地区タりンホヌル 45 コミュニティ掻動の茪 46 倚店舗マヌケット 47 保健センタヌ 48 あいだの家 49 ルヌプ状の地区道路 50 T字路 51 緑路 52 ⌈ず⟞のネットワヌク 53 ⌀きな⟚⌝ 54 暪断道路 55 〈⟌い歩道 56 ⟃転⟞路ず眮堎 57 郜垂の⌊䟛 58 カヌニバル 59 静かな奥 60 ⌿近な緑 61 〈さな広堎 62 〈⟌い堎所 63 街頭の螊り 64 池ず〈川 65 出産所 66 聖域 67 共有地 68 ぀ながった遊び堎 69 公共⌟倖宀 70 墓地 71 泳げる✔ 72 地区スポヌツ 73 冒険遊び堎 74 動物 75 家族 76 〈家族の家 77 ふたりの家 78 ひずりの家 79 ⟃分だけの䜏たい 80 ⟃䞻管理の䜜業堎ずオフィス 81 圢匏ぬきの〈さな窓⌝ 82 事務宀の぀ながり 83 垫匠ず匟⌊ 84 ⌗代の瀟䌚 85 店先孊校 86 ⌊䟛の家 87 個⌈商店 88 路䞊カフェ 89 ⟓の✇✀店 90 ビアホヌル 91 旅⌈の宿 92 バス停 93 屋台 94 ⌈前の居眠り パタン⟔語町 37
  12. 95耇合建物 96 階数 97 ⟒えない駐⟞堎 98 段階的な動線領域 99 おも屋 100

    歩⟏者道路 101 通りぬけ街路 102 ⟒分けやすい⌊り⌝ の集たり 103 〈さな駐⟞堎 104 敷地の修埩 105 南向きの屋倖 106 正の屋倖空間 107 光の⌊る棟 108 ぀ながった建物 109 现⻑い家 110 正⟯✞関 111 ⟒えがくれの庭 112 ⌊⌝での転換 113 ⟞ずの接続 114 段階的な屋倖空間 115 ✣き✣きずした䞭庭 116 カスケヌド状の屋根 117 守りの屋根 118 屋䞊庭 119 アヌケヌド 120 歩⟏路ず✬暙 121 歩⟏路の圢 122 建物の正⟯ 123 歩⟏者密床 124 〈さな⌈だたり 125 座れる階段 126 ほが䞭倮の焊点 127 芪密床の倉化 128 屋内の陜光 129 䞭⌌郚の共域 130 ✞関宀 131 通りぬけ郚屋 132 短い廊䞋 133 舞台のような階段 134 犅窓 135 明暗のタピストリヌ 136 倫婊の領⌟ 137 ⌊䟛の領⌟ 138 東たくら 139 蟲家⟵キッチン 140 街路を⟒おろすテラス 141 ⟃分だけの郚屋 142 く぀ろぎ空間の連続 143 ベッド・クラスタヌ 144 ⌊济宀 145 ⌀物倉庫 146 柔軟な事務空間 147 䌚⟷ 148 〈さな䜜業集団 149 芪しみやすい受付 150 埅ち合わせ堎所 151 〈さな集䌚宀 152 半私的な事務宀 153 貞せる郚屋 154 ⌗代の離れ 155 ✌⌈の離れ 156 腰をすえた仕事 157 家庭ワヌクショップ 158 ⻘空階段 159 どの郚屋も⌆⟯採光 160 建物の倖瞁 161 ✇のあたる堎所 162 北の⟯ 163 ⌟倖宀 164 道路にむかう窓 165 街路ぞの開⌝ 166 倖廊 167 ⌀間バルコニヌ 168 ⌀地ぞのなじみ 169 段䞊の斜⟯ 170 果暹 171 ✊のある堎所 172 野✣の庭 173 庭囲い 174 栌⌊棚の散歩道 175 枩宀 176 庭の腰掛 177 菜園 178 コンポスト 179 アルコヌブ 180 窓のある堎所 181 炉✕ 182 ⟷事の雰囲気 183 䜜業空間の囲い 184 台所のレむアりト 185 くるた座 186 ざこ寝 187 ふたりのベッド 188 ベッド・アルコヌブ 189 着がえ宀 190 倩井⟌の倉化 191 屋内空間の圢 192 ✣掻を⟒おろす窓 193 半開の壁 194 宀内窓 195 階段の容積 196 隅のドア 197 厚い壁 198 郚屋ざかいのクロれット 199 ✇のあたるカりンタヌ 200 浅い棚 201 腰⟌の棚 202 造り぀けの腰掛 203 ちびっ⌊のほら✳ 204 開かずの間 パタン⟔語建物 38
  13. 205 ✣掻空間に したがう構造 206 無駄のない構造 207 ふさわしい材料 208 順に固める構造 209

    郚屋の割り付け 210 床ず倩井の割り付け 211 倖壁の厚み 212 隅の柱 213 補匷柱の配分 214 根のような基瀎 215 ⌀階の床版 216 ボックス柱 217 がわ梁 218 構造膜 219 床・倩井ノォヌルト 220 屋根ノォヌルト 221 ⟃然なドアず窓 222 䜎い窓台 223 深い窓枠 224 䜎い⌟⌝ 225 厚い瞁どりの枠 226 柱のある堎所 227 柱の接合郚 228 階段ノォヌルト 229 配管スペヌス 230 茻射暖房 231 屋根窓 232 屋根食り 233 床⟯ 234 重ね匵りの倖壁 235 柔らかい内壁 236 いっぱいに開く窓 237 〈窓぀きの厚いド ア 238 柔らげた光 239 〈割りの窓ガラス 240 半むンチの⟒切り 瞁 241 腰掛の䜍眮 242 ✞関先のベンチ 243 座れるさかい壁 244 キャンバス屋根 245 さわれる花 246 ぀る怍物 247 すき間だらけの舗✯ 248 柔らかいタむルず レンガ 249 装食 250 暖かい⟊ 251 たちたちの怅⌊ 252 明かりだたり 253 ⟃分を語る〈物 パタン⟔語(斜⌯) 39
  14. 41

  15. 42

  16. •Pattern Oriented Software Design(POSA) •Clean Architecture, Domain Driven Design アヌキテクチャ

    •Analysis Patterns, Real-Time UML(3rd) 分析 •Design Patterns(GoF), Real-Time Design Patterns 蚭蚈 •Smalltalk Best Practice Patterns, Advanced C, CODE COMPLETE, Programming Pearls, Test-Driven Development, Refactoring • Readable Code, Clean Code, Pragmatic Programmers, Test-Driven Development, Test-Driven Development in Embedded C コヌドレベル ゜フトりェアのパタヌンの曞籍は倚い粒床⌀→粒床〈 • Classics / Modern / Embedded 43
  17. デザむンパタヌンの圢匏 項✬ 内容 名前 パタヌンの名前および埌述するカテゎリ ✬的 解こうずしおる「問題」ず「解決」の原理 別名 良く知られた別名 動機

    どのような状況で問題が発✣するか具䜓䟋やストヌリ 適✀可胜性 どのような状況で適✀できるか 構造 パタヌンの構造を✰すクラス図 構成芁玠 クラス・オブゞェクトの責任分担 協調関係 構成芁玠がどのように匷調するか 結果 パタヌンが問題の解決にどう貢献するかトレヌドオフ 実装 実装にす堎合の泚意点 サンプル コヌド コヌドの䟋✰ 䜿✀䟋 実際のシステムで利✀されおいる䟋 関連するパ タヌン 他の密接に関連するパタヌン 45
  18. 䟋: Singleton • 「✬的」 “あるクラスに察しおむンスタンスが぀しか存圚しないこずを保蚌しそ れにアクセスするためのグロヌバルな✅法を提䟛する” ここには「クラスに察しおむンスタンスが぀しか存圚しないこずを保蚌す るには どうしたらよいか」ずいう問題が曞かれおいるしかしこのよう な問題の蚘述は抜象的であるこずが倚く

    パタヌンによっおは理解するのが 難しい堎合もある「問題」の理解を助けるのが 「動機」の蚘述である 「動機」は実際にそのような問題が起こる状況 すなわち✂脈が具䜓的 な䟋を䌎っお曞かれおいる • 「動機」 そのような状況の説明、その䟋ずしおプリンタスプヌラファむルシス テム りィンドりマネヌゞャなどの䟋が挙げられおいる たず「✬的」ず「動機」を読み そのパタヌンが解こうずしおいる「問題」 ずそれが発✣する「✂脈」を理解する そしおそのような状況に⟃分が眮 かれたずきに このパタヌンを思い出せるようにしおおく必芁がある 46
  19. 47 http://p-monster.hatenablog.com/archive/category/デザむンパタヌン Singleton (䟋りィンドりマネゞャ) たった⌀぀のむンスタンスを保蚌 • Singleton Class • むンスタンスが個しか存圚しないこずをプログラム

    䞊で衚珟するには、コンストラクタをプラむベヌトに し、倖郚でnewできなくする。 • ⟃分⟃⟝のむンスタンスをstaticで持ち、コンストラク タを⟮公開にする。Singleton の getInstance() で、 staticでたった⌀぀のむンスタンスぞの参照をクラむア ントに返す。 • [✬的] あるクラスに察しおむンスタンスが ぀しか存圚しないこずを保蚌しそれにアク セスするためのグロヌバルな✅法を提䟛する
  20. 53

  21. 54

  22. SOLID • Single Responsibility Principle SRP • Open-Closed Principle OCP

    • Liskov Substitution Principle LSP • Interface Segregation Principle ISP •Dependency Inversion Principle DIP By Robert C. Martin 57
  23. 58

  24. SRP(Single Responsibility Principle) 定矩 クラスに倉曎が起こる理由は、⌀぀である べき。(A class should have only

    one reason to change.) ※元々は、「責務が1぀」であるべきの意味で「凝集床が⟌い」モゞュヌルになる。 珟代的には、より具䜓的に「倉曎の゜ヌス」が2぀以䞊あるなら、分離せよずいうこず。 59
  25. 60

  26. OCP(Open/Close Principle) 定矩 クラスは、倉曎するこずなく振る舞いを拡 匵できなくおはらない(You should be able to extend

    a classes behavior, without modifying it.) 61 クラスの継承ず、倚態性を぀かうこずでクラスを拡匵できるしくみ。 Bertrand Meyerの「オブゞェクト指向⌊⟚」 が初出。
  27. typedef struct { int x, y; } Point; typedef struct

    { Point p1, p2; } Line; typedef enum { LINE, POINT } Kind; typedef union { Point* point; Line* line; } ShapeUnion; typedef struct { Kind kind; ShapeUnion of; } Shape; void draw(Shape* shape) { switch(shape->kind) { case LINE: /* draw line (shape->of->line.p1 ---- shape->of->line.p2) */ break; case POINT: /* draw point (shape->of->point)*/ break; } } コヌドを倉曎しないず拡匵できないコヌド 62
  28. // shape.h class Shape { public: virtual void draw() const

    = 0; }; コヌドを倉曎しなくおも再コンパむルもなしで拡匵できるコヌド ※ただし、LSPを満たしおいるこずが条件”Line” is-a “Shape”) // point.h #include “shape.h” class Point : public Shape { int x, y; public: void draw() const { /* draw point (x,y) */ } }; // line.h #include “shape.h” class Line : public Shape { Point p1, p2; public: void draw() const { /* draw line p1-p2 */ } }; 63
  29. 64

  30. LSP(Liskov Substitution Principle) 定矩 掟✣クラスは、それを利✀するコヌドから みお基底クラスず亀換可胜でなければなら ない (Derived classes must

    be substitutable for their base classes.) ※基底クラスが型指定しおある倉数の堎所には、将来、そのどの掟✣クラスのむン スタンスが⌊っおきおも正しく動䜜するように、クラス継承の意味を正しく維持し なくおはならない。 65
  31. #include “shape.h” void drawAllShapes (const vector<const Shape*>& shapes) { for

    (const Shape *s: shapes) s->draw(); } このコヌドは、Shape の掟✣クラスのどんなものが枡っおきおも、その知識なしに 動䜜しなければならない。そのように、Shape ずその掟✣クラスは蚭蚈されお いなければならない。 ※どのような掟✣クラスがShapeに远加されようが、この関数は再コンパむル なしで動䜜する。C++/Javaでは、プログラマが蚭蚈したクラス階局をコンパむ ラが補助する。 66
  32. 67

  33. ISP(Interface Segregation Principle) 定矩 利✀者は⟃分が䜿わないメ゜ッドに䟝存す るこずを匷制されない(Clients should not forced to

    depend on methods that they don't use.) ※むンタヌフェむスを倪らせおはいけない、別✀途のむンタヌフェむスは分離せよ。 C++では倚重継承もしくは別のアダプタクラス、Java では interface を利✀。 68
  34. 70

  35. DIP(Dependency Inversion Principle) 定矩 実装の具䜓に䟝存しおはならない。抜象に 䟝存せよ (Depend on abstractions, not

    on concretions.) ※特にフレヌムワヌクの蚭蚈などでは、「呌び出しの✅向」ず「䟝存の✅向」が逆転 するこずがありたす。珟代的には、テスト容易性を⟌めるために、”Inversion of Control”や”Dependency Injection”ずいった⌿法が䜿われたす。昔は、関数ポむンタ を枡すこずで䞋䜍のレむダから䞊䜍のモゞュヌルを「コヌルバック」しおもらう、ず いう⌿法がよく取られたした。珟代では、Observerパタヌンでむンタヌフェむスこ こでいう抜象に䟝存させお呌び出しず䟝存の向きを反転させたす。 ちなみに、コヌルバックはJavaではListener、C#ではdelegateず呌ばれたす。 71
  36. 72

  37. 78

  38. • Model-View-Controllerアヌキテクチャパタヌン MVCは察話型アプリケヌションを3぀のコンポヌ ネントに分割するモデルコンポヌネントはアプリ ケヌションの䞭栞機胜ずデヌタを含むコンポヌネントで あるビュヌコンポヌネントは情報をナヌザに衚✰す るコンポヌネントであるそしおコントロヌラは ナヌザの⌊⌒を取り扱うコンポヌネントであるナヌザ むンタフェヌスを実珟するのはビュヌコンポヌネント ずコントロヌラコンポヌネントである曎新䌝播のメカ

    ニズムによっおナヌザむンタヌフェヌスずそのモデル ずの⌀貫性を保蚌するこずできる • 適✀䟋 Smalltalk, MFC, ET++, 
(さらにWebで倚い) Model-View-Controller 81
  39. Pipes and Filters • Pipes and Filtersアヌキテクチャパタヌンは デヌタをストリヌムずしお扱うシステムのため の構造を提䟛する 個々の凊理ステップは1

    ぀のフィルタコンポヌネントにカプセル化され デヌタはこれらの隣接するフィルタ間をパむプ コンポヌネントを介しお匕き枡される フィル タの組み合わせを換えるこずにより機胜の類 䌌した⌀連のシステムを䜜成するこずができる • 適✀䟋 UNIX のコマンドずパむプ、テキスト 85
  40. 87

  41. 構造化分析・蚭蚈 オブゞェクト指向 分析・蚭蚈 RUP(96) Waterfall Agile Manifesto(01) 構造化プログラミング オブゞェクト指向プログラミング 関数型プログラミング

    LISP(58) FORTRAN(57) COBOL(59) Java(95) Ruby(95) Perl(87) Python(91) Pascal(70) Ada(80) C(70) Smalltalk(72) Scala(03) C#(00) Haskell(90) Erlang(86) C++(83) Clojure(07) F#(02) Simula(67) Go(09) ⌿続型 オブゞェクト指向 関数型 アヌキテクチャ J2EE(01) RubyOnRails(04) Map/Reduce KVS ⌀型蚈算機-端末 クラむアント サヌバ むンタヌネット/ ブラりザ クラりド UML(95) Booch OMT OOSE デザむンパタヌン(95) Yordon DeMarco DFD アナリシスパタヌン(96) リファクタリング(00) Linux(91) 構造化分析・蚭蚈 オブゞェクト指向 分析・蚭蚈 XP(99) Scrum(95) 1970幎代 1980幎代 1990幎代 2000幎代 2010幎代 ゜フトりェア開発の歎史 Agile 開発⌿法 LeanSD(03) LeanStartup(11) Microservice Multi-core GPU Swift(10) Kotlin(11) AI プログラミング⟔語 分析・蚭蚈⌿法
  42. ゜フトりェア開発の進化は、 マシンから⌈ぞ、⌈からチヌムぞ 機械語 アセンブラ COBOL C Java C# Ruby UML

    アゞャむル 圓初、コンピュヌタのリ゜ヌスを 操䜜するために、プログラミング ⟔語が䜜られおきた。 埐々に名前付け、抜象化ができるよう になり、⌈間の思考に近いレベルの抂 念を取り扱えるように進化しおきた。 名前 関数 構造䜓 ナヌザ定矩型 クラス モゞュヌル 蚭蚈レベルや開発プロセスレベルでも、 可芖化によるコミュニケヌションをサポヌ トするようになっおきた。 DSL 89
  43. 倉わっおいない重芁な Design Concepts(Evergreen) 70s 70s-80s 80s-90s-2000s 構造化プログラミング 構造蚭蚈蚭蚈・分析 オブゞェクト指向蚭蚈 E.Wdijkstra

    Harlan Mills Hoare Larry Constantine Ed Yordon David Parnus Tom Demarco Bertrand Meyer Grady Booch James Rambaugh Ivar Jacobson DFD, ERD UML(統⌀された) • “GOTO harmfull” • TOP-down design 珟圚も局構造ずし お • Divide by Structure • Divide and Conquer • Separation of Concerns(関⌌事の分離) • Information Hiding 情報隠蔜 • Abstraction(抜象化) • High Cohesion/ Low Coupling 結合床ず凝集床 • Divide by Responsibility • Module→ADT(→Class) • Encapsulation (カプセル化) • Class and Object • Polymorphism(倚態性) • Inheritance/Subtyping 継承/サブタむプ • Use Case • Domain Model • Software Patterns ※2000以降に぀いおはアゞャむルで詳述Divide by Value、テスト性)など 90
  44. 倉わっおいない重芁な デザむンコンセプト(Evergreen) 70s 70s-80s 80s-90s-2000s 構造化プログラミング 構造蚭蚈蚭蚈 オブゞェクト指向蚭蚈 main fun

    fun fun 関⌌事が分離され、凝集床が ⟌い⌿続きモゞュヌルが、結 合床䜎く結び぀いお、デヌタ を凊理、曎新する。他⌈には 内郚の情報を知らせない情 報隠蔜倉曎が䌝搬しないよ うに。 デヌタず操䜜がカプセル化 されたクラス。クラスは継 承構造をも぀。クラスから、 オブゞェクトが✣成され、 それらが、メ゜ッドを呌び 合っお、ナヌスケヌスを成 し遂げる。 91
  45. 98

  46. Conway’s Law “organizations which design systems 
 are constrained to

    produce designs which are copies of the communication structures of these organizations” — M. Conway ”組織の構造が゜ フトりェアの構 造に反映する“ であれば、よい組織構造を぀くろう。 Inverse Conway Maneuver) 99
  47. 101

  48. 108 プロセスずしおのAgile • 短いサむクルで、分析、蚭蚈、実装、テストを䞊列に⟏う • タむムボックス型、進化型開発 分析 蚭蚈 実装 テスト

    時間 時間 芁求(スコヌプ) 芁求(スコヌプ) Waterfall Agile Beck 2000 Royce 1970 最埌に動くものができる 動くものが埐々に できあがり、成⻑する
  49. アゞャむ ル適正 経隓メンバの割合 芁求倉化 䌁業✂化 メンバ数 クリティカルさ 35 30 25

    20 15 0 10 20 30 40 (1B%) (L2,3 %) (倉曎/✉(%)) 1 5 10 30 50 90 70 50 30 10 3 10 30 100 300 (✋陥による損害) 快適さ 限定額 巚額 ⌀✣呜 倚数の✣呜 蚈画型 アゞャむル “Get Ready for Agile Methods – With Care” (Barry Boehm, IEEE Computer, January 2001)
  50. 115 アゞャむル゜フトりェア開発宣蚀 私たちは、゜フトりェア開発の実践 あるいは実践を手助けをする掻動を通じお、 よりよい開発方法を芋぀けだそうずしおいる。 この掻動を通しお、私たちは以䞋の䟡倀に至った。 プロセスやツヌル よりも 個人ず察話を、 包括的なドキュメント

    よりも 動く゜フトりェアを、 契玄亀枉 よりも 顧客ずの協調を、 蚈画に埓うこず よりも 倉化ぞの察応を、 䟡倀ずする。すなわち、巊蚘のこずがらに䟡倀があるこずを 認めながらも、私たちは右蚘のこずがらにより䟡倀をおく。 Kent Beck Mike Beedle Arie van Bennekum Alistair Cockburn Ward Cunningham Martin Fowler James Grenning Jim Highsmith Andrew Hunt Ron Jeffries Jon Kern Brian Marick Robert C. Martin Steve Mellor Ken Schwaber Jeff Sutherland Dave Thomas © 2001, 䞊蚘の著者たち この宣蚀は、この泚意曞きも含めた圢で党文を含めるこずを条件に自由にコピヌしおよい。 重芁 超重芁!
  51. 117

  52. 118

  53. アゞャむルの原則 • 顧客䟡倀の優先 • 倉化に察応 • 短期のリリヌス • 党員同垭 •

    モチベヌションず信頌 • 䌚話 • 動く゜フトりェア • 持続可胜なペヌス • 技術的卓越性 • シンプル • ⟃⌰組織的チヌム • ふりかえりず改善 119
  54. ⟌速に✯橋を 叩いお枡る 「開発環境」 協働でゎヌルに 向かう 「チヌム環境」 ビゞネス䟡倀、 顧客満⟜、垂堎創造 XPのプラクティス 継続的むンテグレヌション(CI)

    継続的デリバリ(CD) ⟃動化された「ビルド」 ⟃動化された「回垰テスト」 ⟃動化された「デプロむ」 チケット、バヌゞョン管理 テスト駆動開発、リファクタリング スクラム、 プロゞェクトファシリテヌション ⟒える化、透明化 ふりかえり むテレヌションを回す 朝䌚、タスクかんばん バヌンダりンチャヌト いきいきずした珟堎づくり アゞャむルの レフトりィング アゞャむルの ラむトりィング アゞャむルのゎヌル ゜ヌシャルプラクティス 技術プラクティス
  55. 130 • Write a test • Watch it fail •

    Make it pass • Refactor (improve) • Repeat until done T D D •テストを曞く •倱敗するこずを確認 •通過させる •リファクタリング改善 •繰り返す
  56. ⟌速に✯橋を 叩いお枡る 「開発環境」 協働でゎヌルに 向かう 「チヌム環境」 ビゞネス䟡倀、 顧客満⟜、垂堎創造 XPのプラクティス 継続的むンテグレヌション(CI)

    継続的デリバリ(CD) ⟃動化された「ビルド」 ⟃動化された「回垰テスト」 ⟃動化された「デプロむ」 チケット、バヌゞョン管理 テスト駆動開発、リファクタリング スクラム、 プロゞェクトファシリテヌション ⟒える化、透明化 ふりかえり むテレヌションを回す 朝䌚、タスクかんばん バヌンダりンチャヌト いきいきずした珟堎づくり アゞャむルの レフトりィング アゞャむルの ラむトりィング アゞャむルのゎヌル ゜ヌシャルプラクティス 技術プラクティス
  57. タスクかんばん • 䜜業の芋える化 – ToDo(未実斜) Doing(実斜䞭) Done(完了) で管理。 – 各自の䜜業を指瀺しなく

    おも、毎朝自発的に 䜜業開始。 – フォヌマットは埐々に カむれン。 タスクかんばんの䟋 ※バヌンダりンチャヌなどず共に、ずにかく、壁に貌る。「情報発信噚」ずも呌ばれる。 䜜業の芋える化は、「タスクかんばん」で行なう。 POINT (協力チェンゞビゞョンastah* チヌム 134
  58. バヌンダりンチャヌト • 進捗の芋える化 – バヌンダりン䞋向き – タスクかんばんず連動 – 䞭間成果物で は蚈枬しない。

    – メヌルで゚クセルシヌト を配垃したり、 サヌバに眮いたから 芋おね、はナシ。 バヌンダりンチャヌトの 䟋 党䜓進捗は、「バヌンダりンチャヌト」で芋える化、繰り返しのリズムづくり POINT (協力氞和システムマネゞメントチヌム角谷 140
  59. 朝䌚 • 䜜業の明確化 –⟃発的なサむンアップ –昚✇やったこず、 今✇やるこず、 問題点、の点のみ。 –かんばんの前 で、⟏なう。 –朝の仕事はじめが

    重芁 –スタンドアップで分 –定時刻、定䜍眮、短時間 朝䌚の䟋(協力チェンゞビゞョンastah* チヌム 毎朝、「かんばん」の前で党員で短い䌚議を行ない、リズムをずる。 POINT PF実践線朝䌚ガむド http://www.ObjectClub.jp/community/pf/ 141
  60. ふりかえり(1) • カむれンの気づき – Keep(良い点) Problem(悪い点) Try(次回挑戊) を出す。 – 党員で意⟒を出し、

    暗黙知の共同化ず 圢匏知化を⟏なう。「名前付け」 – 「課題解決リスト」、ずは違う。 – ずにかく、カゞュアルな雰囲気で 党員発⟔するこずで、チヌムの 安党性を確保する。 – 「問題vs私たち」の構図になるように。 ふりかえりシヌトの䟋 カむれンの「気づき」を「ふりかえり」で埗る。 POINT 実践線ふりかえりガむド http://www.ObjectClub.jp/community/pf/ 142
  61. ふりかえり(2) • Keep/Problem/TryKPT –Keepは定着する。 –ProblemはTryを ✣み出す。 –Tryは、Keepか Problemに移動する。 –定着したものには、 「名前づけ」を。

    ふりかえりがカむれンを導く Keep Problem Try 新しい問題 新しいアむディア 解決法 やっおみお うたく行った うたく行かない 定着 むテレヌション毎に「ふりかえり」を繰り返すこずでプロセスが改善される。 POINT 143
  62. 151

  63. 152 アゞャむル゜フトりェア開発宣蚀 私たちは、゜フトりェア開発の実践 あるいは実践を手助けをする掻動を通じお、 よりよい開発方法を芋぀けだそうずしおいる。 この掻動を通しお、私たちは以䞋の䟡倀に至った。 プロセスやツヌル よりも 個人ず察話を、 包括的なドキュメント

    よりも 動く゜フトりェアを、 契玄亀枉 よりも 顧客ずの協調を、 蚈画に埓うこず よりも 倉化ぞの察応を、 䟡倀ずする。すなわち、巊蚘のこずがらに䟡倀があるこずを 認めながらも、私たちは右蚘のこずがらにより䟡倀をおく。 Kent Beck Mike Beedle Arie van Bennekum Alistair Cockburn Ward Cunningham Martin Fowler James Grenning Jim Highsmith Andrew Hunt Ron Jeffries Jon Kern Brian Marick Robert C. Martin Steve Mellor Ken Schwaber Jeff Sutherland Dave Thomas © 2001, 䞊蚘の著者たち この宣蚀は、この泚意曞きも含めた圢で党文を含めるこずを条件に自由にコピヌしおよい。
  64. 156

  65. 157

  66. 最初のスクラムの本 • “Agile Software Development with Scrum” (by Ken Schwaber,

    Mike Beedle) の最初の⌀ ⟏は次の匕✀で始たっおいる。 今✇では新補品開発の動きが速く、競争率の⟌い䞖界では、速床 ず柔軟性がずおも重芁である。䌁業は、新補品開発に盎線的な 開発⌿法は叀く、この✅法では簡単に仕事を成し遂げるこずが できないこずを埐々に認識し始めおいる。✇本やアメリカの䌁 業では、ラグビヌにおいお、チヌム内でボヌルがパスされなが らフィヌルド䞊を⌀矀ずなっお移動するかのように、党䜓論的 な✅法を✀いおいる。 -- “The New New Product Development Game”
  67. Toyota Production System Lean Lean Software Development Kanban Lean Startup

    Agile Scrum XP The New New Product Development Game Four steps to the epiphany Agile and Lean Startup Patterns Manufacturing Industry in Japan 2013 Yasunobu Kawaguchi 1 2
  68. 165

  69. 166

  70. • 知識はどこから来る • 暗黙知(1) • 圢匏知(2) • SECI モデル •

    知識を”実践する”には • 実践知(3) • それを誰が䜜る
  71. 身䜓・五感を駆䜿、 盎接経隓を通じた 暗黙知の獲埗、 共有、創出共感 組織的知識創造の⟏為 - SECIモデル 「どう知るか」 - 暗黙知

    暗黙知 圢匏知 圢匏知 暗黙知 暗黙知 圢匏知 圢匏知 I = 個人 G = 集団 O = 組織 E = 環境 圢匏知を行動を 通じお具珟化、 新たな暗黙知ずしお 理解・孊習実践 察話・思玢比喩によ る抂念・図像・仮説の 創造(抂念化 圢匏知の組み合わせ による情報掻甚ず知 識の䜓系化分析 1.組織内倖の掻動によ る珟実盎感 2.感情移入・気づき・予 知の獲埗 3.暗黙知の䌝授、移転 9.反省的実践を通じた 圢匏知の䜓化 10.目暙-成果の持続的 远求、自己超越 4.自己の暗黙知の 蚀語化 5.蚀語から抂念・仮説 原型の 創造 6.抂念間の関係生成ず モデル化 7.圢匏知の䌝達、普及・ 共有 8.圢匏知の線集・操䜜 化、IT化 共同化(S) 衚出化(E) 内面化(I) 連結化(C) O G E G G G G Org. I Environment Individual I I I I I Group I E E I O © Nonaka I. & H. Takeuchi
  72. 孊びを組織で共有する 169 「マルチ孊習」で觊れたように、孊びは倚局に個⌈からグルヌプぞ、倚胜 ⌒に耇数の専⟚領域ぞ積み重ねられるが、この孊習をさらにグルヌプを越 えお䌝え、共有しおいく掻動が⟒られる 組織は、⟃然ず成功したやり✅を暙 準化しお制床化する✅向ぞず向かう。ただし、これが⟏き過ぎるず逆に危険だ 。倖郚環境が安定しおいる堎合には、過去の成功を「先⌈の知恵」ずしお⟔葉 で䌝えたり、成功事䟋を元に暙準を確✎したりするこずはうたくいく。しかし 、倖郚の環境倉化が速いず、このような教蚓は逆に⟜かせになるこずがある。 倚くの堎合、過去の成功䜓隓を捚お去るこずは難しく、倖郚環境の倉化によっ

    お匷制的に捚おるこずになる。しかし、いく぀かの組織では意識的にその努⌒ をしおいた。