modern agile software architecture
TRANSCRIPT
by KANNAN DURAIRAJ, Domain Architect - DigitalSoftware Engineer and Architect
Software Architecture
● Introduction - Software Architecture● Forms of Architecture ● Architecture vs Design ● Architectural Patterns● Design Patterns● Diagrams● Agile + Architecture● Principles - Architecture and Design● Recap● References
Agenda
Architecture is it a Perspective? How to see things in a meaningful way?
Need for Architecture
“Where Business meets Technology”
Definition
The fundamental organization of a system embodied in its components, their relationships to each other, and to the environment, and the principles guiding its design and evolution. Usually captured as a diagram.
My Definition
A shared understanding among various team members (business, product, development, operations) about an application or a set of applications that deliver business value by building platform capabilities that are robust, flexible - open for extension, composable by nature, and can be orchestrated to produce an optimal solutions for a business and add value to the end user.
In Nutshell
Define Boundaries / Contracts / Responsibility
of Software Components
Architectural Boundaries
Imagine Success With Boundary Without Boundary
What are architectural considerations?
● Hard choices in Software● Expensive part of Development and Delivery● Important stuff! ● Business Value vs Platform Capability
current vs future
What are those hard choices?
Any thoughts?
Hard things and important stuff:
● Programming Language - Fit, Tools and Skills● Reversibility - heights of tight coupling● Building on top of unstable platform or software● Over Engineering (should be Agile, right?)● Complex frameworks and dependencies (YAGNI)● Deployment Environment, DevOps● Compliance, Security and Performance
Why Architecture is so important?
What & Why Where How Product Feature Platform Capability ImplementationUX & CX Cross-Cutting Develop & Test Customer Value Concerns Plays by Component / System boundaries
Define Boundaries
Forms of Architecture
Forms of Architecture
System ArchitectureComponent ArchitectureApplication ArchitectureData / Information ArchitectureIntegration ArchitectureIT / Network / Infrastructure ArchitectureEnterprise Architecture
Software Architects = City Planners
city keeps changing… so does software!
Architect Roles
Integration ArchitectApplication / Technical ArchitectSolution Architect / Solution DesignerDomain ArchitectEnterprise Architect Principal / Chief Architect
Software Architecture and Software Design - is it the same thing?
Which one is more important?
Both are important - one can’t survive without the other.
Let's look at the Definition of ‘Software Design’
Definition: Software Design
The fundamental organization of code/modules within a component, and its relationships to each other, and to the run time environment, and the principles guiding its development to deliver a specific goal/functionality of an overall solutions.
Usually referred to as Application or Module design.
Patterns
Patterns
In software engineering, a software design pattern is a general reusable solution to a commonly occurring problem within a given context in software design. It is not a finished design that can be transformed directly into source or machine code.
An architectural pattern is a general reusable solution to a commonly occurring problem in software architecture within a given context. Architectural patterns are similar to software design pattern but have a broader scope.
Architectural Patterns
● Service-Oriented (SOA) and Microservices● Event-Driven / MOM / ESB● Layers● Multi-Tier (2-tier, 3-tier, n-tier) / Client-Server● Model-View-Controller,
Presentation-Abstraction-Control, Model-View-Presenter, Model-View-ViewModel
Architecture Styles
Structure● Component-based, monolithic, Layered, etc
Messaging● Event Driven, Pub-Sub, Async Messaging, etc
Adaptive ● Plugin, Reflection, etc
Distributed● Client-Server, REST, SOA, Microservices, etc
Design Patterns
Creational ● Abstract Factory, Builder, Factory Method,
Singleton, PrototypeStructural
● Bridge, Adapter, Composite, Decorator, Facade, Proxy, Flyweight
Behavioral ● Command, Observer, Visitor, Chain of
Responsibility, etc..
Diagrams
Why Diagrams? ● Nothing but a form of “representation”● Simple to understand, common language● Simplifies Complexity (conceptualize)● Abstracts code/development● Logical + Data Flow + Integration View
Agile &
Architecture
Agile + Architecture
Software Architecture in Agile Development Process
● Evolutionary Architecture and Emergent Design● YAGNI● Defer until the last responsible moment● Refactoring● Spikes, Stripes and Tracers● Pragmatic
Agile Architecture
It's about “Just Enough”- Boundaries, Structure, Vision and Leadership - Understand how the significant elements fit
together- Provide the foundations and vision to move
forward- Mitigate the key risks
Agile Architecture “Guiding Principles”
● Last Responsible Moment● Continuous Integration● Lightweight, Living Documentation● Continuous Delivery● Adapt for Organizational Structure● Design for Replaceability
Architectural Patterns will evolve over time
● Microservices● API Layers
- Experience, Gateway, Application / System, Core● newServerless / FaaS● IoT, Smart Watch, Smart Cars - Tesla / Driverless● new Unikernels - Clive, MirageOS, Rump Kernels
Key Enablersa.k.a
Platform for Business
External Enablers (Industry / Market Push)
Cloud Infrastructure - Agility- Elasticity of Compute Resources
SaaS - Integration is easy, follow standards - REST, SAML
Microservices and API - deliver faster, deliver frequently
Internal Enablers
The two key enablers are:
● A high-speed culture○ A poor culture inhibits organisational changes designed to increase
speed.○ Improve decision-making processes, can’t slow down delivery
● Strategic focus - two critical elements: ○ a clear strategic goal and ○ a focused strategic agenda.
If the culture injects the fuel for speed, strategic focus delivers the grip and traction.
Recap
● Software Architecture is a shared responsibility ● Ask ‘what, why, where’ before ‘how’ ● Patterns and Principles (Architecture & Design)● Cool Diagrams!! ● Collaboration, close the feedback loop● Agility in process is only half good without
Architecture agility● Market Hypes & Internal Culture
Conclusion
Embrace by participation ● Minimum Viable Architecture / Agile Architecture● Don’t think Architecture as just● Architecture Solution is a living document just like
API documentation