What are antipatterns?
Commonly used patterns that are inefficient or counterproductive in practice
The opposite of design patterns
A proven and documented refactored solution exists
Categories of antipattern
Project management antipatterns
Smoke and mirrors
Mushroom theory of management
Software design antipatterns
Big ball of mud
Coding by exception
Cargo cult programming
Copy and paste
Reinventing the wheel
Test driven development
Nightmare before deadline
Ask me no questions, tell me no answers
Never ending story
What is analysis paralysis?
OVer analysis of requirements or design that prevents progress
What is stovepipe enterprise
Information is only transmitted up and down the organization
Deparments/peers don't communicate
Alternative name to smoke and mirrors
What is a big ball of mud antipattern?
A system with no recognizable architecture
Usually the occurs over time with lots of people working on it
What are poltergeists?
Objects who only purpose is to pass information to another object
Usually have a very short lifetime
Associated with middle man code smells
What is gold plating?
Working on a project beyond the point where the value is worth the effort
What is coding by exception?
Code evolves by having special case functionality added piecemeal
Examples of cargo cult programming
Copy and pasting code that you don't understand
Overuse of design patterns
Deletion code in garbage collected languages
Factory objects for simple objects
What is cargo cult programming?
Ritual inclusion of program structures that have no use in the program
What is a boat anchor?
Keeping a part of the system that no longer has a use
Associated with lazy class code smell
Makes maintenance hard and lowers understandability
When is copying and pasting ok?
Replicate and specialize
What is Test
New requirements are specified by bug reports
Characterized by long testing phase
What are the symptoms of tester driven development
Very late projects
Poor code quality
Causes of tester driven development
Testing started too soon
Requirements were incomplete
Tester are inexperienced
Developers are inexperienced
Poor project management