Architecture Anti-Patterns
In the realm of software development, design patterns are common approaches to common problems that have been formalized and are generally considered good development practices. In contrast, there are certain patterns that are considered bad programming practices, or anti-patterns. They may seem justifiable at first, but result in a bad solution with consequences.
As I mentioned in a previous post, code reading is an important skill. Being familiar with architecture anti-patterns can improve understanding should you encounter one during a code review. It’s also important when designing or extending a system to make sure that you are not falling into a common trap.
One of the first documented architecture anti-patterns is the Big Ball of Mud, a software system that lacks a perceivable architecture. There can be various reasons for this: lack of experience on the developer team, staff turnover, business pressures, code entropy over time, etc. These systems are difficult to maintain and extend.
The Big Ball of Mud was covered along with six other patterns in a 1997 paper by Brian Foote and Joseph Yoder on architecture anti-patterns. The seven anti-patterns covered in this paper are:
- Big Ball of Mud
- Throwaway Code
- Piecemeal Growth
- Keep it Working
- Shearing Layers
- Sweeping it Under the Rug
- Reconstruction
Jeff Atwood also has a good summary of this paper on Coding Horror.
There’s another great list of thirteen architecture anti-patterns on sourcemaking.com. The first page summarizes the anti-patterns. Then there is a separate page describing each after that. These thirteen anti-patterns are:
- Autogenerated Stovepipe
- Stovepipe Enterprise
- Jumble
- Stovepipe System
- Cover Your Assets
- Vendor Lock-In
- Wolf Ticket
- Architecture by Implication
- Warm Bodies
- Design by Committee
- Swiss Army Knife
- Reinvent the Wheel
- The Grand Old Duke of York
Finally, Christoph Nissle has coverage for five additional architecture anti-patterns. The five anti-patterns are:
- Gas Factory
- Inner Platform Effect
- Spaghetti Code
- Sumo Marriage
- Integration Databases
Which of these have you encountered?