string.format("{0} Architect{1}", "Over", "ed")

As an enterprise software architect, there are many difficult problems that I face at work.  Most of the time, these problems require an elegantly architected solution that promises to be both maintainable and efficient at the same time.  This is always a difficult balance to achieve. 

The thing that surprises me most is that many people have a skewed view of maintainability.  An application that is maintainable does not necessarily mean that it is simple to configure, refactor, or extend.  While these characteristics of software are good ones, they do not make software easy to maintain.  Ease of maintenance to me means that a developer with good fundamental skills can understand, support, and modify code.  Often times, the simplest software is the easiest to maintain.

Which brings me to my key point: Many software systems are overarchitected

While that word came up as a spelling error in my editor, I am quite confident that the concept exists.  You know the stuff I am talking about — Code that is ridiculously complex in the name of architectural purity.  Code that has hooks for uses that only the designer/developer were able to dream up and that the user or support tech will never understand or use.  If these extraneous bells and whistles cause you to expend brain cycles on goals other than making the software meet the requirements, the exercise is purely academic.

This is why is pays to have experience in the problem domain for which you are writing software.  If you understand what things the user may want to do, you can add the right hooks in (and none of the wrong ones).  Take the title of this blog post as an example.  I have plenty of flexibility as I have a plethora of options for switching out my title.  Heck, I could even put it in web.config!  But alas, does that really buy my anything to be able to easily switch my blog post tile to “Under Architecting”?

So before you amaze yourself with your coding prowess, think about what it is you are doing.  Is it a requirement for you application?  Would it be used any more often than once per ice age?  Did you only do it to prove that you could?

A little common sense goes a long way…