The primary analysis effort for new software architecture always revolves around the computer hardware and software structure and new software technologies. But it’s surprising how much the software architecture is really influenced by and dependent on the people in the business organization rather than the latest technology.
Imagine that you’ve worked long hours on gathering an initial set of requirements for a new project. Then you used those requirements to research the latest technology that will run on the computer systems you have or envision you will purchase.
Then you create software architecture for the project based on the research and the hardware requirements. You even document the architecture using diagrams and fine prose.
It’s perfect! It fits the technical requirements just right. Now it is time to plan out the development of the project.
But wait a minute. You find out that the development staff doesn’t have the required skills to carry out the assignments. The new architecture made sense according to your own experience and the latest technology trends. However, the staff doesn’t have the same knowledge base as you and they are not familiar with the latest technology.
Also, you may have some contractors at the ready. But should they create software that the staff can’t maintain? Also, from an organization standpoint, do the users have the skills to use the new system? Is the development staff organized in teams already that match the type of software components you want to develop?
In the book Software Architecture in Practice by Len Bass, Paul Clements, and Rick Kazman, it says, “Software architecture is a result of technical, business, and social influences. Its existence in turn affects the technical, business and social environments that subsequently influence future architectures. We call this cycle of influences, from the environment to the architecture and back to the environment, the Architecture Business Cycle (ABC).”
So the software architecture is not totally driven by a written set of requirements. It’s much more influenced by the social environment (business users using the system, organization into groups, developers, managers) than we usually think when creating an architecture.
Sometimes the social environment may be at least as important as the requirements, if not more important. Just think about a few of these relationships between the software architecture and people.
The software development organization, and to an extent the company’s total organization structure must support the new architecture. The software development people are organized around tasks that are required to develop software that fits the architecture. Users may also be organized somewhat related to the architecture of the software.
The full-time employees of the organization need the skills to develop or maintain the software that’s developed according to the new architecture.
Even if you utilize contractors, the full-time employees that will support and maintain the system must have the required skills. This means that the employees may require training in new technologies before starting development or before taking over support and maintenance.
The organization of business people who will be using the system probably had a lot of input into the new system, and thus the new architecture. In turn, they will have to understand how best to use the new system, and may require training (there is a limit as to how intuitive or self-evident the system can be).
Once the business uses the new system the awareness and skill level of users will increase, and they will ask for more features. The requests for new features will lead to requirements for the next system.
So the next time you set out to create a new software architecture, new system, or just a new enhancement, take some time to consider the human side of software development up front to avoid surprises when it comes to implementing the new software.