Dedication // Foreword // Preface // Acknowledgments // Author Biographies // Executive Summary // Part 1—Introduction to AntiPatterns // Chapter 1—Introduction to Patterns and AntiPatterns 3 // AntiPatterns: AntiHype 4 // The Truth about Software Technology 6 // What Is an AntiPattern? 7 // Where Did AntiPatterns Come From? 9 // Portland Pattern Repository 9 // How to Kill a Software Project 11 // AntiPatterns Research 13 // AntiPatterns: The Book 13 // Chapter 2—AntiPatterns Reference Model 15 // Viewpoints 18 // Root Causes 19 // Haste 19 // Apathy 20 // Narrow-Mindedness 21 // Sloth 22 // Avarice 23 // Ignorance 24 // Pride 24 // Primal Forces 26 // What is a Primal Force? 27 // Software Design-Level Model 34 // Design Reuse versus Code Reuse 37 // Object Level 38 // Micro-Architecture Level 39 // Framework Level 39 // Application Level 40 // System Level 41 // Enterprise Level 43 // Global Level 44 // Level Summary 45 // Architecture Scale and Primal Forces 46 // Chapter 3—Templates for Patterns and AntiPatterns 49 // Degenerate Form 50 // Degenerate Pattern Form 50 // Alexanderian Form 50 // Alexanderian Pattern Form 50 // Minimal Template (Micro-Pattern) 51 // Micro-Pattern Template 51 // Mini-Pattern Template 51 // Inductive Mini-Pattern 51 // Deductive Mini-Pattern 52 // Formal Templates 52 // Gang-of-Four Pattern 52 // System of Patterns Template 53 // Rethinking the Design Pattern Template 54 // CORBA Design Pattern 54 // Antipattern Templates 55 // Pseudo-AntiPattern Template 56 // Mini-AntiPattern 56 // Full AntiPattern Template 57 // Chapter 4—Advice for Using AntiPatterns 61 // Dysfunctional Environments 62 // AntiPatterns and Change 62 // Fixed and Improvisational Responses 63 // Writing New AntiPatterns 64 // Summary 66 // Part 2—AntiPatterns // Chapter 5—Software Development AntiPatterns 67 // Software Refactoring 68 //
Formal Refactoring Transformations 68 // Development AntiPattern Summaries 69 // AntiPattern: The Blob 73 // Background 73 // General Form 73 // Symptoms and Consequences 75 // Typical Causes 76 // Known Exceptions 77 // Refactored Solution 77 // Variations 79 // Applicability to Other Viewpoints and Scales 80 // Example 83 // Mini-AntiPattern: Continuous Obsolescence 85 // AntiPattern: Lava Flow 87 // Background 87 // General Form 88 // Symptoms and Consequences 91 // Typical Causes 91 // Known Exceptions 92 // Refactored Solution 92 // Example 93 // Related Solutions 94 // Applicability to Other Viewpoints and Scales 94 // Mini-AntiPattern: Ambiguous Viewpoint 95 // AntiPattern: Functional Decomposition 97 // Background 97 // General Form 97 // viii // Contents // Symptoms and Consequences 98 // Typical Causes 98 // Known Exceptions 99 // Refactored Solution 99 // Example 100 // Related Solutions 101 // Applicability to Other Viewpoints and Scales 102 // AntiPattern: Poltergeists 103 // Background 103 // General Form 104 // Symptoms and Consequences 105 // Typical Causes 105 // Known Exceptions 106 // Refactored Solution 106 // Example 106 // Related Solutions 107 // Applicability to Other Viewpoints and Scales 107 // Mini-AntiPattern: Boat Anchor 108 // AntiPattern: Golden Hammer 111 // Background 111 // General Form 111 // Symptoms and Consequences 112 // Typical Causes 113 // Known Exceptions 113 // Refactored Solution 113 // Variations 115 // Example 115 // Related Solutions 116 // Mini-AntiPattern: Dead End 117 // AntiPattern: Spaghetti Code 119 // Background 119 // General Form 119 // Symptoms and Consequences 120 // Typical Causes 120 // Known Exceptions 121 // Refactored Solution 121 // Example 124 // Related Solutions 127 // Mini-AntiPattern: Input Kludge 127 // Mini-AntiPattern: Walking through a Minefield 129 //
AntiPattern: Cut-and-Paste Programming 133 // Background 133 // General Form 133 // Symptoms and Consequences 134 // Typical Causes 134 // Known Exceptions 135 // Refactored Solution 135 // Example 136 // Related Solutions 137 // Mini-AntiPattern: Mushroom Management 138 // Chapter 6—Software Architecture AntiPatterns 141 // Architecture AntiPatterns Summaries 142 // Mini-AntiPattern: Autogenerated Stovepipe 145 // AntiPattern: Stovepipe Enterprise 147 // Background 147 // General Form 148 // Symptoms and Consequences 149 // Typical Causes 149 // Known Exceptions 149 // Refactored Solution 150 // Example 155 // Related Solutions 156 // Applicability to Other Viewpoints and Scales 157 // Mini-AntiPattern: Jumble 158 // AntiPattern: Stovepipe System 159 // Background 159 // General Form 159 // Symptoms and Consequences 160 // Typical Causes 161 // Known Exceptions 161 // Refactored Solution 161 // Example 163 // Related Solutions 164 // Applicability to Other Viewpoints and Scales 165 // Mini-AntiPattern: Cover Your Assets 166 // AntiPattern: Vendor Lock-In 167 // Background 167 // General Form 169 // Symptoms and Consequences 169 // Typical Causes 169 // Known Exceptions 170 // Refactored Solution 170 // Variations 172 // Example 172 // Related Solutions 173 // Applicability to Other Viewpoints and Scales 174 // Mini-AntiPattern: Wolf Ticket 174 // AntiPattern: Architecture By Implication 177 // Background 177 // General Form 178 // Symptoms and Consequences 179 // Typical Causes 179 // Known Exceptions 179 // Refactored Solution 180 // Variations 181 // Example 182 // Related Solutions 183 // Applicability to Other Viewpoints and Scales 183 // Mini-AntiPattern: Warm Bodies 184 // AntiPattern: Design By Committee 187 // Background 187 // General Form 188 // Symptoms and Consequences 188 // Typical Causes 188 // Known Exceptions 189 // Refactored Solution 189 //
Variations 192 // Example 192 // Related Solutions, Patterns and AntiPatterns 196 // Applicability to Other Viewpoints and Scales 196 // Mini-AntiPattern: Swiss Army Knife 197 // AntiPattern: Reinvent the Wheel 199 // Background 199 // General Form 200 // Symptoms and Consequences 200 // Typical Causes 201 // Known Exceptions 201 // Refactored Solution 201 // Variations 203 // Example 203 // Related Solutions 206 // Applicability to Other Viewpoints and Scales 206 // Mini-AntiPattern: The Grand Old Duke of York 207 // Chapter 7—Software Project Management AntiPatterns 209 // Changing Role of Management 209 // Death March Projects 209 // Management AntiPattern Summaries 211 // Mini-AntiPattern: Blowhard Jamboree 214 // AntiPattern: Analysis Paralysis 215 // Background 215 // General Form 216 // Symptoms and Consequences 217 // Typical Causes 217 // Known Exceptions 217 // Refactored Solution 218 // Mini-AntiPattern: Viewgraph Engineering 219 // AntiPattern: Death By Planning 221 // Background 221 // General Form 221 // Symptoms and Consequences 223 // Typical Causes 225 // Known Exceptions 225 // Refactored Solution 226 // Variations 228 // Example 230 // Related Solutions 231 // Applicability to Other Viewpoints and Scales 232 // Mini-AntiPattern: Fear of Success 233 // AntiPattern: Corncob 235 // Background 235 // General Form 236 // Symptoms and Consequences 236 // Typical Causes 237 // Known Exceptions 237 // Refactored Solution 237 // Variations 239 // Examples 241 // Related Solutions 242 // Applicability to Other Viewpoints and Scales 242 // Mini-AntiPattern: Intellectual Violence 243 // AntiPattern: Irrational Management 245 // Background 245 //
General Form 246 // Symptoms and Consequences 246 // Typical Causes 246 // Known Exceptions 247 // Refactored Solution 247 // Variations 251 // Examples 251 // Mini-AntiPattern: Smoke and Mirrors 253 // AntiPattern: Project MisManagement 255 // Background 255 // General Form 255 // Symptoms and Consequences 256 // Typical Causes 256 // Known Exceptions 257 // Refactored Solution 257 // Variations 259 // Example 259 // Related Solutions 260 // Mini-AntiPattern: Throw It over the Wall 261 // Mini-AntiPattern: Fire Drill 262 // Mini-AntiPattern: The Feud 265 // Mini-AntiPattern: E-mail Is Dangerous 266 // Part 3—Conclusions and Resources // Appendix A // AntiPatterns Synopsis 269 // Appendix B // AntiPatterns Terminology 275 // Appendix C // Acronyms Used in AntiPatterns 281 // Appendix D // Bibliography 285 // Index 293