The Quality of service or Quality attributes are most important for any Architecture, The Architect’s responsibility also consist of maintaining these services, well defined in any project and communicate the same to the development team. The QoS mostly consists of below services.
Other services like Performance, Interoperability, Usability, Maintainability etc are also very important. I am not discussing them here as I am trying to take the things very common and most important for any software application. As I am a JEE Architect, my examples and explanations might be of Java and related technologies.
This is a very important service in the list and it means, the application you are working on should be available whenever the users are expected to use. This intern means it should be available 24 * 7, because of the distributed applications we have these days and users on almost all the countries and continents. To make this happen we might put the application in a clustered servers with a load balancing mechanism. This way we can make sure even if one server is down, the application requests can be served by other server in the cluster. Read more >>>
This is a very confusing concept as it is difficult to find difference between manageability and programmability. Although the lines are blurry between these two they are different and Manageability deals with the management of software. For Eg; How you manage your versions of the code? How you manage your build with any CI tools? How you configure your application itself? These kind of questions would come under Manageability. Read more >>>
Security is a key service any application should provide, the data of any application can’t be compromised, in some cases the code also. This is the thumb rule of any application. To keep the security there are some guidelines given by all programming languages which can be followed. I can give some examples for Java and .Net. The key features of the application like authorization, authentication, Encryption/Cryptography etc are the things should be taken care here. Read more >>>
Scaling any application is a challenge. We are in the cloud era and the hardware can be automatically scaled with the cloud providers. But still the software or the code we have written should be able to scale for the requirement of the future. This challenge is all about planning, usually we consider the application scope is very small and choose the technologies very much relevant for that scope, but after couple of years we start getting the response delays etc. Read more >>>
Reusability as a concept it is very easy to understand, all we have to do is “Re use” already existing things/ components / code / template etc. However the implementation of reusability in a real time project is not that easy. Very often we tend to copy paste the code instead of moving the code to another cohesive method, there could be many reasons to do that. At higher level abstraction like Component re use is much more difficult than a method or class. I feel identifying the use case itself is harder than implementing the reusability. Read more >>>
Portability is often a thing which was not thought trough in the beginning of the development and be done ad hoc when it is needed. When we say portability, the application you develop should be portable to different environment all together, For eg; It could be moved from one OS to another OS or from regular environment to cloud. This is the part of portability. Read more >>>
Other useful reference ->