Tuesday, 3 July 2012

What you need to know about Software architecture

At the end of the 60s, the programmers came out with a philosophy that is related to developing software. The concept stated that if the data structures are correct and stable and by applying effort, the development of the program will go very smoothly without any problems. Back in the 60s is was only an intuition and a philosophical concept but in the 1970s it was transformed from just a concept into a theory. The transformation of this concept to a real theory included the grasping and understanding of several points.

These points included the structure of the architecture software and the specifications. These specifications were expressed through math as algebraic axioms or abstract models. The understanding of language problems was also vital. It included user-defined types, scope and modules. Another major point that had to be understood is the protection of the information. This includes all kinds of information and not only the ones that are a part of the specifications. This is very essential as the protection of this information is vital to the success of any software development.

The target of this transformation was to enhance the quality of the architecture design of several parts of the software. This included the enhancing of abstract data types in order to surpass the level of the programming language or statements. In order to achieve that, the understanding of the above mentioned points were accompanied by integrating specifications, representations, functional interfaces and algorithms in uniform methods. In order for the architecture design to succeed, the programming language had to be used but the abstract data type paradigm gave some pieces of the system the ability to be developed using a vocabulary of data types that is not included in the programming language’s vocabulary.

The same ways programmers recognized the usage of strong and correct data structure back in the 60s, now experienced software developers recognize strong system organizations. Although many organizations and architecture software designers depend on abstract data types but this is not the only available method to organize a software system. This is due to the fact that other designers and developers have developed various organizations over the course of time. These organizations have become a solid part of the vocabulary of the language that software designers use. So as a software developer you have the choice to either choose these new organizations or the usual abstract data types.

Architecture principles for different businesses

If you are in a position where you have to architect enterprises and different business applications where you have to use different COTS products & come out with architecture solutions around these products. Then you should follow these easy and simple principles that would help you architect different solutions for your business. The first rule is to keep everything stupid and simple. You should not use complex and complicated words or terms that would make the readers scratch their heads. Some people think that the more complicated the more professional which is terribly wrong because if the readers do not understand it then it is of no use. So make sure to keep everything clear and a simple for the stakeholders whether its IT, Infra Team or Business.

The second principal is communication. Maintaining a strong network of communication of architecture to the whole team is essential and vital to the success of your solutions. This includes both external & internal stakeholder’s teams. Your side includes the development, deployment, testing and PMO teams. As for the other side, the client’s side it includes IT, security and business. Connecting all of the above teams together is one of the ingredients of success.

The third principal is the flexibility in the requirements. You have to be prepared and ready to accept changes that might occur. This is essential because as much as we would like for everything to stay the same but things change. For instance the requirements that always change include HTML appearance, the layout of the content and so on. On the other hand there are requirements that never change such as auditing, messaging and logging. This is why in order for your architecture solutions to work, it has to be flexible and for you to accept changes. Not only to accept them but to be prepared for them and to expect them.

Lastly, in any given architecture project and design, decisions will have to be made. People tend not to take decisions in order to avoid the risk of being wrong. The best thing to do is to take a look at the data and information available and to take decisions according to them for the project to move along. Even if you are wrong, the project and the design will move on. Plus, you gave your best decision according to the available data. So you did the best you can with what you had.

The difference between architecture & engineering

The question that has kept all the art historians and philosophers wondering and yet failed to find a clear and a specific answer, “what is architecture?” Not only them, as many of us find themselves wondering the same thing. It can be explained as any piece of work that has some sort of substance that has acquired a physical state. Any work that has the mentioned characteristics would pass as being architecture.

Whenever an architect starts his project, his main goal is to capture and realize a dream that he has in his mind. Every architectural design is aiming to achieve a concept or a goal that is set by the architect himself. This dream or goal can be a form, a function or a philosophy. An architect uses all of his past experiences and collective knowledge to achieve all of that, the end result of it all is what architecture means.

Some people mix between architecture and engineering. They think that they are the same because they both result in buildings and construction. They cannot be any more wrong. There is a very thin line between architecture and engineering. Engineering is the act of eliminating any kind of emotions or feelings while designing, this result in an emotionless design that is very objective and has the function as its first and only priority. On the other hand architecture is the absolute opposite of that as it is all based around the emotions, feelings and dreams of the designer and architect. The end result of a design made by an architect would be the result of all of his emotions and feelings. This is why the design is not revolved around the objectivity which is the function but rather around the emotions and dreams.

To sum it up, the difference between engineering & architecture lies in the emotional force and philosophical concept of the architect that is embedded into the design. For instance, reading a script of an opera and reading it objectivity from the paper differs completely from hearing it and seeing it being performed on stage. You will certainly feel a rush of emotions and feelings when watching it and you will not get that feeling if you are just reading the notes and the script objectively from the paper. This is why architecture is looked upon as a piece of art and as any piece of art, it has to be filled with emotions and as far as it can be from subjectivity.

Architecture