A solution architect's function is to derive architectural direction and vision to the organisation, translating areas of development or domains into well-organised self-directed teams, providing guidance on how to develop cross-functionally.
Organisation
If the organisation has many departments or teams that develop software, or is part of the process in developing it, it is important that these organize themselves and the processes they follow in an efficient manner.
- Stakeholders
- Systems Design
- Requirement Management
- Project Management
Common Workflow & Conventions
Identifying commonalities across departments and teams, and streamlining the workflow and conventions employed allow for efficient cross-domain work and alleviate double-work. If are different conventions or indeed none or few, establishing common conventions and ways of working is paramount to ensure a smooth and fast development flow.
Note from Author
Guidelines
- Style guide — use an existing one, don't invent your own. Make amendments to the existing one if absolutely necessary.
Code Management
Note from Author
In order to illustrate how to manage your code we will have to use a specific language for the examples, but the concepts will carry over to any project. The core of the concept is that of modularity. For the examples I will be using C++.
File StructuredocARCHITECTURE.md High-level description of the architecturemodules/module_0 Self-contained unit of the systemdoc Documentation of the module (UML diagrams, markdown, etc.)inc Public API for the modulesrc Implementation of the modulemock Mocks of the module, for use in dependent module's teststest Contain tests of this module's functionalityunit Unit-tests that mock any of this module's dependenciestarget Target tests that tests the behaviour of the module deployed onto a targetREADME.md A high-level description of the module and how to use itmodule_1module_2lib :sdk vX.Y.Z External libraries like an SDKpytest vX.Y.Z Frameworks for target-testing (PyTest is just an example)googletest vX.Y.Z Frameworks for unit-testing (Google Test is just an example)scripts A collection of scripts useful to the developercmake CMake-specific scriptsmodule.cmaketools Contains tools used in the projectCHANGELOG.md Used to track changes across releases and generate release notes.README.md Used to give guidance on how to build, deploy and release.
Pipeline Management
Note from Author
Release Management
Note from Author
Identify Business Needs
Note from Author
Identify Domains
The business needs map into domains which the organisation will distribute work between.
A domain is to provide the functionality of the domain and only that. As such, for software-related domains, we will consider the product of the domain to deliver a platform. More specifically, a software platform.
What is an integration?
An integration is in this context refers to the act of integrating a domain into a particular target. A target is also a rather abstract term, but appropriately so as it may be anything that makes the domain functionality available on the target which runs it. This could be a specific OS, like Windows or MacOS, or mobile targets like Android and iOS. Or, more exotically, it could be specific hardware integrations for embedded systems.
Put in another way, an integration is merely adapting the domain to a specific system we want to use it on. And there's a keyword ‐ use. We therefore have the relationship shown below. More specifically, since we want these development areas to be able to work independently of each other the integration shall use a specific version of the domain.
Loading diagram...
Domain Repository/my_domain/modules/butterworth_filter/fast_fourier_transform
The domain supplies domain-level features. That is, features that solely are defined and implemented by the domain itself ‐ not project-level features. Consider for instance the domain of signal processing, which might provide features like filters or algorithms.
Integration Repositorymy_integration/modules/my_domainv1.2.3 git submodule pointing to the released version tag v1.2.3/modules
What is a variant?
A variant is a concrete project or product.
Example
Our fictional organisation is in the business of making ...
Loading diagram...
Summary
- Streamline your workflow and processes across departments and teams.
- Map business needs to development domains and organise architecture around these domains.
- Provides input to management for organisational structure.