“By choosing carefully where and how to start, we are able to experiment and learn in areas of our organization that create value without jeopardizing the rest of the organization. By doing this, we build our base of support, earn the right to expand the use of DevOps in our organization, and gain the recognition and gratitude of an ever-larger constituency.”
Quote by Gene Kim
“The organization of the software and the organization of the software team will be congruent”
Source: The Cathedral & the Bazaar: Musings on Linux and Open Source by an Accidental Revolutionary
“limit on [team] size ... ensures the team has a clear, shared understanding of the system they are working on. As teams get larger, the amount of communication required for everybody to know what's going on scales in a combinatorial fashion.”
Source: The DevOps Handbook: How to Create World-Class Agility, Reliability, and Security in Technology Organizations
“Another way we can enable more market-oriented outcomes is by enabling product teams to become more self-sufficient by embedding Operations engineers within them, thus reducing their reliance on centralized Operations.”
Source: The DevOps Handbook: How to Create World-Class Agility, Reliability, and Security in Technology Organizations
“Instead of merely documenting the specifications of the production environment in a document or on a wiki page, we create a common build mechanism that creates all of our environments, such as for development, test, and production. By doing this, anyone can get production-like environments in minutes, without opening up a ticket, let alone having to wait week.s”
Source: The DevOps Handbook: How to Create World-Class Agility, Reliability, and Security in Technology Organizations
“Make infrastructure easier to rebuild than to repair”
Source: The DevOps Handbook: How to Create World-Class Agility, Reliability, and Security in Technology Organizations
“The perfect kind of architecture decision is the one which never has to be made”
“If the application is event-driven, it can be decoupled into multiple self-contained components. This helps us become more scalable, because we can always add new components or remove old ones without stopping or breaking the system. If errors and failures are passed to the right component, which can handle them as notifications, the application can become more fault-tolerant or resilient. So if we build our system to be event-driven, we can more easily achieve scalability and failure tolerance, and a scalable, decoupled, and error-proof application is fast and responsive to users.”
Source: Learning Reactive Programming with Java 8
“[...] you shouldn't be uneasy about any parts of the architecture. It shouldn't
contain anything just to please the boss. It shouldn't contain anything that's hard for you
to understand. You're the one who'll implement it; if it doesn't make sense to you, how
can you implement it?”
Source: Code Complete: A Practical Handbook of Software Construction
“The component structure cannot be designed from the top down. It is not one of the first things about the system that is designed, but rather evolves as the system grows and changes.”
Source: Clean Architecture
“Evolving a widely reused resource also requires coordination because changes must be compatible with all existing systems or users. Such coordination can slow down innovation... Some digital companies have even begun to explicitly favor duplication because their business environment rewards economies of speed.”
Source: The Software Architect Elevator: Redefining the Architect's Role in the Digital Enterprise