To czego należy unikać podczas projektowania oprogramowania.
Antywzorce w projektowaniu oprogramowania:
Inwersja abstrakcji (ang. Abstraction Inversion) - ukrywanie zaimplementowanej funkcjonalności przed użytkownikami, którzy tej funkcjonalności potrzebują. Użytkownicy zmuszeni są do samodzielnej implementacji funkcji używając funkcji wyższego poziomu,
Niejednoznaczny punkt odniesienia (ang. Ambiguous viewpoint) - obiektowe modele systemu są prezentowane, bez wskazania, do czego się odnoszą,
Błotna bryła (ang. Big ball of mud) - system o trudnej do zrozumienia strukturze. Ryzykowne zmiany w kodzie, nie sposób przewidzieć skutków zmian,
Petrochemia (ang. Gas factory) - zbyt dokładny i skomplikowany projekt programu lub funkcjonalności,
Wadliwe wejście (ang. Input kludge) - system nie radzi sobie z danymi na wejściu. Błędnie lub niewystarczająco zaimplementowana obsługa niepoprawnych danych wprowadzonych przez użytkownika. Bardzo często błędy tego typu wykrywane są dopiero przez użytkowników,
Interfejs gigant (ang. Interface bloat) - tworzenie zbytnio rozbudowanych interfejsów,
Magiczny przycisk (ang. Magic pushbutton) - implementowanie zbyt ubogiego w możliwości interfejsu użytkownika. Przenoszenie zbyt dużej części funkcjonalności do konkretnych komponentów np. obsługi przycisku. Brak możliwości ponownego wykorzystania kodu z przycisku, przycisk powinien zawierać tylko niezbędne funkcjonalności, pozostała uniwersalna część powinna być dołączona do interfejsu,
Silnie zależne komponenty (ang. Re-Coupling) - zbyt silnie powiązania i zależności pomiędzy komponentami i klasami w systemie,
System, który gra i tańczy (ang Stovepipe system) - system zawierający zbyt dużą ilość elementów niepowiązanych pomiędzy sobą, ciężki do analizy i aktualizacji,
System z wyścigami (Race hazard) - system, w którym poprawne działanie i obsługa zdarzeń jest zależne od kolejności wywołania zdarzeń.