Architecture is the big buzz word in the developer community these days. Who doesn't aspire to be an architect. Unfortunately there is too much emphasis on being an architect than on engineering solutions that are efficient and effective. I have a friend that says every application has an architecture the question is did you design it or did it just happen. I tend to agree. These days I describe the development process as engineering a solution, I believe it more effectively describes the process, especially in this world where architecture is over used.
Why do I feel this way? Well as a teenager I was involved in construction, building homes and commercial projects. I was able to observe the people constructing the projects some architect designed. A lot of the time you would hear "that sorry architect didn't think about this or that" and so often the design was "modified" on site. Maybe it was a function of the design being off or too complex but regardless it was modified. I see it a lot in development too. Too much custom work going on in projects to tie everything together. Also it can make estimating projects real difficult. Yeah we have a nice UML model that says this object plugs into that object but when we get to the assembly line we are stuck with a square peg and a hole.
I believe in consistency and uniformity. Everything in the business layer should be designed to look the same, behave the same and expose very similar properties. This solves a lot of problems in the development phase as well in the maintenance phase. As my friend likes to say only about 25% of the cost of the product is in development, the rest is spent on maintenance. Recently I was involved in a large scale development effort and the business layer was really a beast. It seemed like everything was difficult to estimate, implement and maintain. Plus the inconsistencies really became a bottle neck and source of bugs. The next large development process I had control over the data and business layers. I was able to engineer the components to be flexible, generic but type safe and extensible to support all the business entities in the system. The result was a uniform, scalable business layer that is easy to learn yet powerful enough to solve the most complex problems, all with just a handful of core components and a class generator. Engineering was truly the answer.