Practical definition
Many people have different interpretations of what software architecture actually means. Some people take it as the high level decomposition of the system (subsystems or physical distribution). However, a much better interpretation is simply "the most important design decisions". What are important design decisions? If they are going to impact what you (or your customer) care the most, then it is important. Typically, if the design decision is going to impact the availability, performance, scalability, security, usability, manageability, maintainability, cost, then it is part of the architecture.
Examples
Below are some examples of architectural decisions:
- Availability: how to build in redundancy in all the layers (storage, middle tier) and how to fail-over (e.g., client initiated vs virtual IP)? How to handle excessive load (e.g., QoS)? Selecting well proven products with strong support?
- Scalability: how to scale (scale out or scale up) and load balance?
- Performance: multi-threading, algorithm, processing in batches?
- Security: encrypting data against exposure, using HMAC to check data integrity, secure communication, auditing?
- Manageability: monitoring and operational control (e.g., logging, JMX)? Live upgrading (OK to upgrade just one node at a time in a cluster)?
- Maintainability: automated tests, using a language, tools and frameworks familiar to the team, proper layering of the code (UI, service, data access layers)?
- Cost: language, tools and frameworks familiar to the team, open source vs commercial products?
Specifying and maintaining the architecture
I find the best way to specify the architecture is to explain it in use cases (e.g., how to perform fail-over when a certain component fails or how to ensure security in a typical use case).
Also, specifying the architecture is just the first step. Some team members may make sub-optimal architectural decisions in programming without knowing it, or you may realize that your initial decisions can be further improved when you see the code. Therefore, as the architect, your work is far from over and you must keep the architecture (as implemented in the code) fit as the project goes.
Thanks for your write-up. My partner and i have usually observed that most people are needing to lose weight as they wish to show up slim and also attractive. On the other hand, they do not constantly realize that there are many benefits for you to losing weight in addition. Doctors say that fat people are afflicted with a variety of diseases that can be perfectely attributed to their excess weight. Thankfully that people who definitely are overweight along with suffering from numerous diseases can help to eliminate the severity of the illnesses by means of losing weight. It is easy to see a constant but marked improvement in health when even a small amount of weight loss is realized.
ReplyDelete