Architecture
According to the authors high performance is possible with all kins of systems (web apps, mobile, embedded systems, greenfield projects …) as long as teams are loosely coupled. This means that teams can easily test and deploy individual components or services.
The exception being main frame system, these as well as outsourced software development systems are more likely to be low performers.
(Conway 1968) ” Organizations with design systems are constrained to produce designs which are copies of the communication structures of these organizations”. This means that organizations should model their team structure to achieve the desired architecture.
Without loosely coupled architecture hiring more developers won’t improve velocity.
Loosely coupled architecture characteristics that enable high performance:
- Devs can run tests without integrated environment
- Releases can be done independently from other applications or services they depend on
- Deployments can be done on demand during normal business hours
- Teams can complete work without communicating or coordinating with people from other teams.
- Teams can make large scale changes to the design without permissions from outside of the team and without depending on other teams to change their systems
Tools
Teams should be able to choose tools that are most suitable for their particular needs. However it is a good idea to standardize infrastructure and configuration.
What tools and technologies you use is irrelevant if the people who must use them hate using them or if they don’t achieve the outcomes nor enable behaviors we care about.