forked from apupier/glossaries-gh
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathantipatterns.txt
182 lines (143 loc) · 4.82 KB
/
antipatterns.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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
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
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
google driven development
GDD
e.g. javadoc
You have to Google for documentation.
Architecture by Implication
System that is developed without a
documented architecture; often due to
overconfidence based on recent success.
Solution:
Define architecture in terms of
multiple viewpoints corresponding to
system stakeholders.
Autogenerated Stovepipe
Automatic generation of interfaces for
distributed, large-scale systems from fine
grain header files.
Solution:
Separation of the architecture-level
framework design from the subsystem-
specific design is essential to manage
complexity.
Cover Your Assets
Document driven software processes often
employ authors who list alternatives
instead of making decisions.
Solution:
Establish clear purposes and
guidelines for documentation tasks;
inspect the results for the value of
documented decisions.
Design by Committee
Committee designs are overly complex and
lack a common architectural vision.
Solution:
Proper facilitation and software
development roles can lead to much
more effective committee-based
processes.
Intellectual Violence
People sometimes use obscure references to
esoteric papers, theories, and standards
for intimidation or short-term gain.
Solution:
Individuals and the organization
should encourage and practice mutual
education and mentoring.
Jumble
Interface designs are an un-factored
mixture of horizontal and vertical
elements, leads to frequent interface
changes, lack of reusability.
Solution:
Partition architectural designs with
respect to horizontal, vertical, and
metadata elements.
Reinvent the Wheel
Legacy systems with overlapping
functionality that don't interoperate.
Every system built in isolation.
Solution:
Use architecture mining and "best of
breed" generalization to define a
common interface, then object wrapping
to integrate.
Spaghetti Code
An ad hoc software structure makes it
difficult to extend and optimize code.
Solution:
Frequent code refactoring can improve
software structure, support software
maintenance, and iterative
development.
Stovepipe Enterprise
Uncoordinated software architectures lead
to lack of adaptability, reuse, and
interoperability.
Solution:
Use enterprise architecture planning
to coordinate system conventions,
reuse, and interoperability.
Stovepipe System
Ad hoc integration solutions and lack of
abstraction lead to brittle, un-
maintainable architectures
Solution:
Proper use of abstraction, subsystem
facades, and metadata leads to
adaptable systems.
Swiss Army Knife
Over-design of interfaces leads to objects
with numerous methods that try to
anticipate every possible need -- leads to
designs that are difficult to comprehend,
utilize, and debug, as well as
implementation dependencies.
Solution:
Defining a clear purpose for the
component and properly abstracting the
interface is essential to managing
complexity.
The Grand Old Duke of York
Four out of Five developers cannot define
good abstractions; this leads to excess
complexity.
Solution:
Project teams should have designated
architects who are abstractionists,
i.e. possess the architecture
instinct.
This leads to vendor lock-in.
Proprietary, product-dependent
architectures do not manage complexity
and lead to a loss of control of the
architecture and maintenance costs.
Providing an isolation layer between
product-dependent interfaces and the
majority of application software
enables management of complexity and
architecture.
Warm Bodies
Large software project teams make for
ineffective organizations and overruns.
Heroic programmers are essential.
Solution:
Small projects (4 people in 4 months)
are much more likely to produce
software success.
Wolf Ticket
A technology is assumed to have positive
qualities due to its open systems
packaging or claimed standards compliance.
Few standards have test suites (< 6%) and
few products are actually tested for
conformance.
Solution:
Discover the real truth behind the
claims.
Question authority.
Assume nothing.
Shift the burden of proof to the
marketing organization.
Talk directly to the technical product
experts and developers.