As a consultant I often struggle with poor decisions of my clients, most of which are done by good capable developers. In fact every software project has its share of mistakes, even acute ones. Just a few months ago Mark Zuckerberg confessed that choosing HTML 5 for Facebook’s mobile platform was a big mistake. Facebook prevailed, and released a much better and much awaited native mobile application. Actually, this is not the first massive mistake Facebook have confessed to. In the past, database pioneer Michael Stonebraker called Facebook’s choice of MySQL as their database “a fate worse than death”.
Antitecture was discovered in an attempt to help a client to abandon such a decision. This was not an acute decision like the one’s Facebook have done. Actually, Antitecture was discovered while trying to convince a client not to use singletons. a few years ago, on my first consulting gig ever, I was a part of a large team of consultants, that was struggling with a big project that simply would not go in the right direction. Working on a specific component, we found that we are running into issues caused by a singleton that was put to place by the project’s chief architect. One day, one of my colleagues was going through the Wikipedia anti-pattern page looking for proof that singleton is an anti-pattern. He called me in to his cubicle, excited about a new finding: apparently almost every anti-pattern in the list was implemented in our project.
Eliminating the impossible, we were left with only one conclusion: this was not a coincidence. There is no way for a project to pick-up so many anti-patterns without a guiding hand. This understanding, however improbable (so said Sherlock Holmes), must be the truth.
“Antitecture: a discipline of un-structuring, misusing or abusing software principles. Software antitecture is a process enforced by software antitects: highly trained individuals, who are able to identify software anti-patterns, framework misuse and other software malpractices, and to endow them into the organization’s software and teams”
– I really should put this on Wikipedia
Above is the formal definition I just invented for Antitecture. And it comes from the very essence of what we realized while we were scratching our heads all those years ago, that there is no way for a single software project to pick up 20-something behaviors without anyone actually knowing them and making a conscious decision. This is the role of the Antitect. Over the years, I have come to learn that there are many reasons for someone to turn to the dark arts of Antitecture: some antitects lost their path and have been caught in a downward spiral. Others have become drunk with power, feeling that they can enforce any far-fetched concept without facing the consequences. Some feel this is a good way to secure their jobs.
But the most fascinating and probably the most dangerous reason of all begins, like any road to hell, with good intentions. If you take a good look at the list of anti-patterns, you can easily identify things that just 10-15 years ago were considered to be design patterns, or at least, best practices. Who of us did not learn about singletons in a design-patterns course? Remember when you could only access a database using stored-procedures? There's a silver bullet for you. There is a fine line between an IoC container and a god object (which is the best anti-pattern E V E R!!!) and the list goes on and on and on and on…
Dealing with Antitecture
The more I encounter Antitecture, the more I understand it’s devastating effect on software teams. I often meet capable strong teams that are being pushed away from solid solutions to the arms of antitecture. In fact a big part of my job as a technological consultant is to defuse the effects of antitecture before a solution can be reached.
Defusing antitecture is a continuous struggle. Every antitect has his own reasons for doing what he does and some of them are good professionals and have only the best intentions. One of the dangers of fighting antitecture, is that it can lead to antitecture. Standing on your back feet is a great way to fixate yourself on a specific path, and this is how every great antitect begins. We are all potentially antitects and the only way to avoid becoming one yourself is to constantly doubt yourself.
So before you go on and start taking apart the antitect next to you, ask yourself, are you an antitect?