The whys and hows of software architectures
Software development projects go through a set of steps or phases that provide a model for their development. These are called a Software development lifecycle (SDLC). The intent of a SDLC process is to help produce software that is cost-efficient, effective and of high quality. The SDLC methodology usually contains the following stages: analysis (requirements and design), construction, testing, release, and maintenance. But there’s one crucial step in the process that can make or break the success of your software: architecture planning.
This article is a quick and very simplified introduction to software architectures. As things go, in the coming articles/tutorials we are going to learn about some different architectures and how to implement each.
What is a software architecture ?
Software architecture is the process of defining a set of technical decisions in order to have a code organization or structure that satisfies the requirements of the system. Before starting any coding, you have to ensure your software is stable and scalable through defining it’s correct structure. In short, “architecture is thinking in advance”. And it must be planned in advance! for it reduces the cost of development in the long run and saves the team much time.
Architecture vs design
Software design is the process of conceptualizing the software requirements into software implementation. During this process we establish a plan that takes the user requirements as challenges and works to identify solutions. Major steps of the “design phase” include defining the software specification (a document that describes the functional and non-functional requirements of the system), setting the high-level design (defining sub-systems and modules and depicting their interaction with each other) and setting the detailed design (defines a logical structure of each module and their interfaces to communicate with other modules).
When it comes to design, the implementation details are exposed and discussed. While a system architecture hides the implementation details. Also architecture is about how components within a system interact with one another. While design is about the implementation details of individual components. A famous quote for Grady Booch says that “All architecture is design, but not all design is architecture“. Even more briefly: architecture is the what and when (the big picture of the system) and design is the how.
Why the software architectures ?
Software must be built on a very solid base, just like any other system does! If a team fails on considering the key scenarios or designing for common problems they are obviously putting the application at risk. A poor architecture exposes the system to risks such as getting an unstable software, that’s unable to support existing or future business requirements, or is difficult to deploy or manage in a production environment. To avoid such risks, software architectures primary goals is set to build a bridge between business requirements and technical requirements by understanding use cases, and then finding ways to implement those use cases in the software.
The architectural landscape
As long as you are reading this article, you’re definitely up to the fact that we’re seeing major changes in the technologies we use to build software, and the way we build software has fundamentally evolved over the last years to improve the quality, accuracy, and speed of delivered software. For it’s crucial to understand the key forces that are shaping architectural decisions today, and which will change how architectural decisions are made in the future. These key forces are driven by user demand, by business demand, and by what the world is heading for today : a good system design is flexible, configurable, and focused on the user experience. A flexible design takes advantage of loose coupling to allow reuse and to improve maintainability. When it comes to the future trends and what the world is heading for, you have to consider trends in rich UI and media, increasing network bandwidth and availability, increasing use of mobile devices, interest in community and personal publishing models and the rise of cloud-based computing.
You have to study all these points and come up with a decision on the best architecture for your requirements and needs. To be able to do so, you have to know enough about each architecture. Obviously, you’ll do that through this blog for the sake of learning! Because when it comes to real projects and consistent systems, it’s the software architect who provides a solution that the technical team can create and design for the entire application.
Through the following articles/tutorials we’ll learn more about specific architectures and examine the details of each one. We’ll start with the Service Oriented Architecture (SOA) that offers a flexible design by providing interoperability with other systems.