What Does a Good Web Application Look Like? Part 2: DevOps’ Point of View
Last time when we were writing about web applications our main focus was on user perspective. It is time to discuss another dimensions. So, how does good web application look like for developers and operations team?
We prepared short list of most important properties for that guys:
- Availability – ability to operate within a declared proportion of time. Usually is defined in a Service Level Agreement (SLA) as a specific number of “nines” (e.g. four nines = 0.9999, hence the system can be unavailable for at most 0.0001 time = one hour per year). Availability of your application is not the only matter of well-written code, but also depends on hardware, network configuration, deployment strategy, operation team proficiency and many other things.
- Scalability – ability to serve increasing amount of requests without a need for architectural changes. In case you have scalable application you can simply add more hardware into your cluster and server more and more clients. In case you host your application in a cloud you even can dynamically scale it up and down making your application incredibly cost-efficient.
- Fault tolerance – ability to operate in case of some unpreventable failure (usually hardware). Usually it means that system can lose some part of functionality in case of failure, but other parts should be working. Fault tolerance is related to availability and some claim it to be one of the properties of highly available applications.
- Extensibility – system functionality can be extended without a need for core and/or architectural changes. Usually in this case the system is extended by adding plug-ins and extension modules. Sometimes it could be quite tricky to implement extensibility, especially for SaaS.
- Multitenancy – ability to isolate logical user spaces (e.g. individual or organization) so that the tenants feel like they are the only user/organization in the system. It sounds easy, but could be a challenge on a large scale.
- Interoperability – ability to integrate with other systems usually by providing or consuming some kind of API. With comprehensive API your service can leverage full power of developers community. Consuming other services API you can extend your application functionality in an easiest way.
- Flexibility – architectural property that describes the ability of the system to evolve and change without a need to perform significant changes in its architecture. Holy Grail of software architecture – it is almost impossible to achieve it for fast growing web applications, but you should always do your best.
- Security – ability to prevent information from unauthorized access, use, disclosure, disruption, modification, perusal, inspection, recording or destruction. Another critical property for both enterprise and consumer markets. Nobody wants their data to be available for unauthorized access.
- Maintainability – ease of maintenance, error isolation and correction, upgrading and dealing with changing environment. Of course it is better to have system that doesn’t require maintenance at all, but in real world even the best systems do require it. You have to provide comprehensive maintenance toolset to your operations team in order to have your system up and running most of the time.
- Measurability – ability to track and record system usage. Usually it is required for analytic purposes and in pay-per-use scenarios. Even if you don’t have pay-per-use scenarios it is always better to understand your hardware utilization rate in order to optimize costs.
- Configurability – ability to change system look and behavior without need to change anything in its code. Being critical for web products that are installed on premise it is also important for software-as-a-service model.
- Disaster Recovery – ability to recover after significant failures (usually hardware). This usually includes a disaster recovery plan that lists possible failure scenarios and steps the operations team should perform to recover the system from failure.
- Cost Efficiency/Predictability – ability to operate efficiently in relation to the cost of operation. Being closely related to measurability this property concentrates on financial effectiveness of web application.
You have to account lots of things when you’re developing your web application. Hope this list would be helpful for you. Stay tuned!