Brainstorming the Foundations of an Enterprise Software Architecture Practice
The formative moment of building an architecture function calls for a directive but not prescriptive collaboration where the team defines its charter and the pillars of the capabilities it offers. One way to kick things off is with a word cloud brainstorming session where many ideas can be generated quickly. The facilitator prompts the group with a proposed set of architecture function responsibilities and then sees where the discussion heads from there. This is my brainstorming on the responsibilities of a modern day architecture function and what comes to mind as I think about the form and function for each of those responsibilities.
- Formalize the Architecture Function. The architecture function is a first-class team, organized, funded, and empowered for success.
- Standardize Customer Profiles. Everything the architecture function does has a clear line-of-sight back to the customer. Architectures typically have multiple stakeholders that must be well-known.
- Drive Use of a Reference Architecture. A reference architecture provides the high level context in which all other design occurs, offering common vocabulary and constructs for direct use, augmentation, and adaptation by all other design efforts.
- Establish Cross-Enterprise Architecture and Detailed Design Standards. Concrete architectures are also the purview of the function, providing more detailed and technology-specific guidance on how to build software. Standards provide implementation prescriptions that should enable software development.
- Govern Adaptively. Ensuring adherence to architecture and implementation standards drives up software quality and the number of successful development projects. The governance needed to achieve that quality and success can vary considerably across projects and different organizations within an enterprise. Adapting governance to key considerations ensures the right balance of speed and quality while providing teams with a better overall work experience.
- Drive Concerted Technical Innovation and Evolution. The architecture function should be the champion for technical innovation that proactively cultivates creative contributions from the engineering and product management communities. The architecture function should also enable adoption of industry innovations.
- Drive Concerted Effort to Advance Technical Agenda Outside of the Enterprise. Part of the leadership role that an architecture function plays is representing the interests of the enterprise to the outside world.
- Service Orient the Enterprise. Similar in spirit to the standardization of functional domains, service orientation endures as a software engineering and organizational technique with many virtues.
- Standardize Key Roles. Good project management practice also applies to establishing an architecture function. Clear role responsibilities and an expectation for collaboration at the boundaries of design are critical to efficient execution.
- Standardize Functional Domains. Decomposition of systems and solutions according to function is a classic design responsibility of architecture whose practice continue to endure today.
- Shepherd Planning. The architecture function plays a critical role in defining the target state for software development, how to reach that target state through incremental development, and the technical considerations that can make-or-break execution.
- Be Principled. Architectures tend have higher technical quality when their principles are defined a priori to definition. They should also guide and enable lower levels of design decision making.
- Build Reusable Cross-Domain Software. Any sizable development effort invariably requires common software that should be built once for reuse across the functional / product domains of the enterprise. The architecture function serves as the gatekeeper and champion for this level of reuse.