“Perfect is enemy of
good enough”, that is one of the phrase I always trying to remember when I got
things to finished on time. Finishing things perfectly will take unimaginable
time, but make it good enough will take the time that has to take truly. This I
wanted to remind at the start of this article, because of , this is 100% true
concept for the Software Architecting too.
Knowing the basics will always put you on behind the safe
margin always. Before going to look at what we can do with the “Software
Architecture”, let’s see what the actual mean of it is,
“Software application
architecture is the process of defining a structured solution that meets all of
the technical and operational requirements, while optimizing common quality
attributes such as performance, security, and manageability. It involves a series
of decisions based on a wide range of factors, and each of these decisions can
have considerable impact on the quality, performance, maintainability, and
overall success of the application.”
This definition is not a one that I wrote myself, but I
copied it from Microsoft web site, where you can find lots of resources on
software architecture. There are lots of definitions that have been published
by different peoples and organizations, for the Software Architecture. You can
take time to Google and see more definitions.
Why is architecture important?
Like any other structure, Software also needs to have architecture
itself to make sure few key requirements,
·
How will the application be deployed into
production and managed?
·
What are the quality attribute requirements for
the application, such as security, performance, concurrency, internationalization,
and configuration?
·
How can the application be designed to be
flexible and maintainable over time?
·
What are the architectural trends that might
impact your application now or after it has been deployed?
The Goal of
Architecture
What Architecture is trying do is, build a bridge between
business requirements and technical requirements by understanding the Use Scenarios
(Use Cases or User stories). In generally Architecture should,
·
Expose the structure of the system but hide the
implementation details.
·
Realize all of the use cases and scenarios.
·
Try to address the requirements of various
stakeholders.
·
Handle both functional and quality requirements.
The Architecture
Landscape
It is always better to keep in touch with the architectural trends
that shape the Software Architecture today. There are key forces that demands to change
this area of Software development,
1. Users and Business demands for faster results
2. Better support for varying work styles and workflows
3. Improved adaptability of software design
These are few of key trends in Software Architecting,
1. User Empowerment
2. Market Maturity
3. Flexible design
1. Users and Business demands for faster results
2. Better support for varying work styles and workflows
3. Improved adaptability of software design
These are few of key trends in Software Architecting,
1. User Empowerment
2. Market Maturity
3. Flexible design
4. Future Trends
The Principle of
Architecture Design
Architecting and Designing the things upfront is almost
impossible. Things are getting improved stage by stage as you learn more. These
are the question that we have to consider while we create an Architecture
Design,
·
What are the foundational parts of the
architecture that represent the greatest risk if you get them wrong?
·
What are the parts of the architecture that are
most likely to change, or whose design you can delay until later with little
impact?
·
What are your key assumptions, and how will you
test them?
·
What conditions may require you to refactor the
design?
Always we have to keep options open for future changes.
Key Architecture
Principles
These are the few of key architecture principles which I found,
·
Build to
change instead of building to last. Consider how the application may need
to change over time to address new requirements and challenges, and build in
the flexibility to support this.
·
Model to
analyze and reduce risk. Use design tools, modeling systems such as Unified
Modeling Language (UML), and visualizations where appropriate to help you
capture requirements and architectural and design decisions, and to analyze their
impact. However, do not formalize the model to the extent that it suppresses
the capability to iterate and adapt the design easily.
·
Use
models and visualizations as a communication and collaboration tool.
Efficient communication of the design, the decisions you make, and ongoing
changes to the design, is critical to good architecture. Use models, views, and
other visualizations of the architecture to communicate and share your design
efficiently with all the stakeholders, and to enable rapid communication of
changes to the design.
·
Identify
key engineering decisions. Use the information in this guide to understand
the key engineering decisions and the areas where mistakes are most often made.
Invest in getting these key decisions right the first time so that the design
is more flexible and less likely to be broken by changes.
It’s is always need to use incremental and iterative
approach to refine the architecture.
Testing the
Architecture
We can consider answering following questions while we are
testing the architecture,
·
What assumptions have I made in this
architecture?
·
What explicit or implied requirements is this
architecture meeting?
·
What are the key risks with this architectural
approach?
·
What countermeasures are in place to mitigate
key risks?
·
In what ways is this architecture an improvement
over the baseline or the last candidate architecture?
Conclusion
This is just an overview of what Software Architecture is.
This is not complete coverage of the topic, but I wanted to remember and write
things that I leaned from few sources. Most of time it’s Microsoft web
site. Hope to continue this discussion
further with few key topics of Software Architecture.
Regards
Lakmal
No comments:
Post a Comment