The nature of software engineering is changing. Whereas building systems was previously the predominant activity, the focus has more recently shifted toward composing systems from open-source, commercial, and proprietary components, and to only build the functionality that truly is competitively differentiating. In addition, the way software is developed has changed, focusing especially on short development cycles and frequent (or even continuous) deployment.
Because of these requirements, teams are often organized around features, rather than components, and can change all components in the system, including their interfaces. A third trend is the increasing adoption of software ecosystems, where significant development of functionality relevant for customers occurs outside the platform organization. Obviously, however, the quality attributes necessary for system success remain important, as well as the ability to easily incorporate new requirements into the system in a cost-effective fashion.
As a result, the role of software architecture (and that of a software architect in particular) is more important in this new world, but there is significant evolution in its implementation. This talk starts by characterizing the new approach to software engineering and the role of compositionality. It then explores the implications for software architecture and the role of the software architect. The talk presents examples from several industries to illustrate specific focus areas.