anti-pattern
Social and business operations
Organizational
analysis paralysis: A project that has stalled in the analysis phase of development, and is unable to achieve support for any of the potential plans of its implementation bicycle shed: Giving disproportionate weight to trivial issues bleeding edge: Operating with cutting-edge technologies that are still untested or unstable, leading to cost overruns, under-performance or delayed delivery of the product bystander apathy: The phenomenon in which people are less likely to or do not offer help to a person in need when others are present Cash cow: A profitable legacy product that often leads to complacency about new products design by committee: The result of having many contributors to a design, but no unifying vision Groupthink: A collective state where group members begin, often unknowingly, to think alike and reject differing viewpoints management by objectives: Management operating with the exclusive focus on quantitative management criteria, such as number of sales, when these are non-essential or cost too much to acquire micromanagement: Ineffective results stemming from excessive observation, supervision, or other hands-on involvement from management Moral hazard: Insulating a decision-maker from the consequences of their decision Mushroom management: Keeping employees "in the dark and fed manure" (also "left to stew and finally canned") about decisions being taken by management Peter principle: Continually promoting otherwise well-performing employees up to a position they are unsuited for, with responsibilities they are incompetent at completing, where they remain indefinitely Seagull management: Management in which managers only interact with employees when a problem arises, when they "fly in, make a lot of noise, dump on everyone, do not solve the problem, then fly out" Stovepipe or Silos: An organizational structure of isolated or semi-isolated teams, in which too many communications take place up and down the hierarchy, rather than directly with other teams across the organization typecasting: Locking successful employees into overly-safe, narrowly defined, predictable roles based on their past successes rather than their potential vendor lock-in: Making a system excessively dependent on an externally supplied component Project management
Death march: A project whose staff, while expecting it to fail, are compelled to continue, often with much overwork, by management in denial of the project's possible failure Ninety-ninety rule: Tendency to underestimate the amount of time to complete a project when it is "nearly done" overengineering: Spending resources making a project more robust and complex than is needed scope creep: Uncontrolled changes or continuous growth in a project's scope, or adding new features to the project after the original requirements have been drafted and accepted (also known as requirement creep and feature creep) smoke and mirrors: Demonstrating unimplemented functions as if they were already implemented Brooks's law: Adding more resources to a project to increase velocity, when the project is already slowed by coordination overhead gold plating: Continuing to work on a task or project well past the point at which extra effort is not adding value Software engineering
Software design
abstraction inversion: Not exposing implemented functionality required by callers of a function/method/constructor, so that the calling code awkwardly re-implements the same functionality in terms of those calls ambiguous viewpoint: Presenting a model (usually Object-oriented analysis and design (OOAD)) without specifying its viewpoint Database-as-IPC: Using a database as the message queue for routine interprocess communication where a much more lightweight mechanism would be suitable inner-platform effect: A system so customizable as to become a poor replica of the software development platform input kludge: Failing to specify and implement the handling of possibly invalid input interface bloat: Making an interface so powerful that it is extremely difficult to implement magic pushbutton: A form with no dynamic validation or input assistance, such as dropdowns race hazard: Failing to see the consequences of events that can sometimes interfere with each other Object-oriented programming
anemic domain model: The use of the domain model without any business logic. The domain model's objects cannot guarantee their correctness at any moment, because their validation and mutation logic is placed somewhere outside (most likely in multiple places). Martin Fowler considers this to be an anti-pattern, but some disagree that it is always an anti-pattern. call super: Requiring subclasses to call a superclass's overridden method circular dependency: Introducing unnecessary direct or indirect mutual dependencies between objects or software modules God object: Concentrating too many functions in a single part of the design (class) object cesspool: Reusing objects whose state does not conform to the (possibly implicit) contract for re-use object orgy: Failing to properly encapsulate objects permitting unrestricted access to their internals poltergeists: Objects whose sole purpose is to pass information to another object Singleton Pattern: This design pattern brings coupling and is considered a bad solution yo-yo problem: A structure (e.g., of inheritance) that is hard to understand due to excessive fragmentation Programming
accidental complexity: Programming tasks which could be eliminated with better tools (as opposed to essential complexity inherent in the problem being solved) boat anchor: Retaining a part of a system that no longer has any use busy waiting: Consuming CPU while waiting for something to happen, usually by repeated checking instead of messaging caching failure: Forgetting to clear a cache that holds a negative result (error) after the error condition has been corrected Design pattern: The use of patterns has itself been called an anti-pattern, a sign that a system is not employing enough abstraction error hiding: Catching an error message before it can be shown to the user and either showing nothing or showing a meaningless message. This anti-pattern is also named Diaper Pattern. Also can refer to erasing the Stack trace during exception handling, which can hamper debugging. hard code: Embedding assumptions about the environment of a system in its implementation lasagna code: Programs whose structure consists of too many layers of inheritance lava flow: Retaining undesirable (redundant or low-quality) code because removing it is too expensive or has unpredictable consequences magic string: Implementing presumably unlikely input scenarios, such as comparisons with very specific strings, to mask functionality. repeating yourself: Writing code which contains repetitive patterns and substrings over again; avoid with once and only once (abstraction principle) Shooting the messenger: Throwing exceptions from the scope of a plugin or subscriber in response to legitimate input, especially when this causes the outer scope to fail. shotgun surgery: Developer adds features to an application codebase which span a multiplicity of implementors or implementations in a single change soft code: Storing business logic in configuration files rather than source code11 spaghetti code: Programs whose structure is barely comprehensible, especially because of misuse of code structures Methodological
golden hammer: Assuming that a favorite solution is universally applicable (See: Silver bullet) invented here: The tendency towards dismissing any innovation or less than trivial solution originating from inside the organization, usually because of lack of confidence in the staff premature optimization: Coding early-on for perceived efficiency, sacrificing good design, maintainability, and sometimes even real-world efficiency programming by permutation (or "programming by accident", or "programming by coincidence"): Trying to approach a solution by successively modifying the code to see if it works reinventing the square wheel: Failing to adopt an existing solution and instead adopting a custom solution which performs much worse than the existing one Silver bullet: Assuming that a favorite technical solution can solve a larger process or problem Configuration management
DLL hell: Inadequate management of dynamic-link libraries (DLLs), specifically on Microsoft Windows extension conflict: Problems with different extensions to classic Mac OS attempting to patch the same parts of the operating system JAR hell: Overutilization of multiple JAR files, usually causing versioning and location problems because of misunderstanding of the Java class loading model List of software development philosophies – approaches, styles, maxims and philosophies for software development
List of tools for static code analysis
ISO/IEC 29110: Software Life Cycle Profiles and Guidelines for Very Small Entities (VSEs) ? (AntiPattern|anti pattern)