Nothing but bones

Monsters are an exciting thing to see in a movie.  They are not so thrilling in your application architecture.  I recently came up with (or at least I think I came up with) a term for architectures that are put together with mismatching parts and in ways the software gods never intended: Frankenstein Architectures.  A co-worker then evolved that to Frankentechture.

Of course the designer of a framework or an application platform can’t envision every possible use of their creation.  How do you know then when you are just using it in a new and inventive way and when you are creating a Frankenstein monster?  Read the documentation of the author’s intent, see where it performs best and where the maintenance story is the best and then don’t stray far from those boundaries.

Another thing to think about is if you are using patterns just because you read them in a book and it sounded good?  Are you adding them to the application just because you saw them at the latest conference?  Are you spending days and weeks finding ways to get around the limitations of pattern? Do your developers require a 500 level course to make a simple change to your code base?  If you answered yes to any of these then you might have brought a Frankentechture to life.

There is a time and place for adding complex patterns or work around for a limitation in a framework to your solution.  Before you do that though, ask yourself if the problem might be that you are using the wrong toolset or have wrong design pattern for your situation.  If you can identify this as a possible problem early in the development process your can save yourself a lot of grey hair and your company a lot in maintenance costs.

So my call to action is to question every design decision.  Apply the YAGNI principle where ever possible and don’t add complexity before you have a compelling reason to do so.  Choose the architectural components that work well together and best suit your requirements.  If you do this you can assemble a hero instead of a monster.