In my opinion, Software Architecture can be described as followed:
The software architecture is a directive for the effective and efficient building, understanding and expanding of a software system.Ok, that's nothing new so far. So let's talk on the nature of an architecture. A software architecture is a directive or kind of a building plan for a software system. There will be decisions on the choosen n-tier model or the third party libs we plan to use. All this information can be implemented 1:1 in code and is therefore non-conceptual!
-- Reto Carrara
But a software architecture describes also, how features of a domain shall be implemented. This kind of information is conceptual!
Defining a Service Oriented Architecture for example, you can be sure, there is a concept in your architecture, how to define new Services. Specifying a Architecture for Complex Event Processing there will be EventHandlers, Events and EventSources.
This conceptual information is one of the most important of our architecture. It tells the developers how to embed new features in the existing structure of the software system.
The concept how to embed new features in your software helps also, to understand the structure of a complex software systems in the maintenance phase.
Having a concept how to build new features for a complex software system is most important. Only a system that is built on a clear concept can be understood and maintained over time.So, what's the problem?
If one thing is certain in our job: things change - always! Even your basic requirements are subject to change, if your market asks for it.
One of the most basic and most important requirements is therefore:
Software Requirement 1:
Design for Requirements Change!
As we have seen: implementing concepts is most important to read and understand our code later on.
But there is a crux:
Concepts that are implemented many times by their very nature. But concepts that are implemented many times are very hard to change, because every implementation has to be adapted.So, we need to have concepts to understand the structure of our software system. But implementing concepts prevent us from changing them. Seems to be an unsolvable problem!
Not so, if we implement all concepts automatically by generating the code needed.
actifsource allows you to formalize the conceptual parts of your software architecture to generate the structural feature code. Doing so, concept changes can be done easily just by regenerating existing implementations.
In our experience, structural feature code is about 60-70% of the code of a complex software system.
Imagine to focus on features, not structural code.