This presentation is a second version of my talk about Agile Architecture. Comparing to the first version (also available at slideshare) it contains significant more information about elements that comprise Agile Architecture, focusing on its structure and behavior.
We at codecentric, as a technically focused agile organization, get in our projects quite often confronted with the assessment of a customer’s software architecture, or more precisely with the assessment of the existing solution architecture. In many cases it is ok for us to stay in this technical scope and not to touch other, much wider architectural concepts like e.g. enterprise architecture. However, due to the fact, that more and more organizations want to transform to a more agile organization, the alignment between IT and Business, and thus between IT-architecture and Business-architecture becomes much more relevant for us in our projects than in the past and causes many questions to arise. Can we talk in this context about agile architecture? And if so, is it a model of a system or maybe just a process of creating it? Or maybe both? How long can I delay my architectural decisions? Can I refactor my agile architecture? And so on…
In this talk I won’t give you perfect answers to all these questions, however I’m pretty sure I will open your eyes and let you create your own point of view.
In Unternehmen wird von der IT immer mehr gefordert, einen Wertbeitrag zu leisten. Dahinter steckt der verständliche Wunsch, flexibler, schneller und messbarer zum geschäftlichen Erfolg beizutragen. Wie gut sind wir, Architekten und Entwickler, gerüstet, diesem Wunsch Folge zu tragen? Wie gut können unsere Systeme diese neuen, sehr oft revolutionären oder sogar disruptiven Anforderungen unterstützen? Unsere Entwicklungsprozesse sind bereits agil. Unsere Entwicklerwerkzeuge sind anspruchsvoll, qualitativ hochwertig und ausgereift. Wie ist aber unsere IT-Architektur? Spiegelt diese die Geschäftsarchitektur eines Unternehmens tatsächlich wieder oder sind die beiden Welten komplett voneinander getrennt? Wie kann eine geschäftskonforme IT-Architektur entwickelt werden? Wie kann eine bestehende IT-Architektur ggf. angepasst werden? Können wir über eine flexible oder sogar eine “Agile Architektur” reden? Und wenn ja, in welchem Kontext? Ist eine agile Architektur nur ein agiler Design-Prozess? Kann eine existierende Architektur “refactored” werden? Kann die Agilität in ein System „eingebaut“ werden? Kann sich ein System auf architektonischer Ebene agil verhalten?
In diesem Talk möchten wir über die o.g. Fragestellungen diskutieren. Basierend auf den von dem Vortragenden in den letzten Monaten durchgeführten Projekten werden mögliche Konzepte, Strategien und Lösungen für eine „Agile Architektur Transition“ in einem Unternehmen dargestellt.
11. CLEAN
ARCHITECTURE
AND DIP*
Enterprise BusinessRules
Application Business Rules
Interface Adapters
Frameworks & Drivers
Controllers
Ext. Interfaces
Processes
Entities
* Robert C. Martin (UncleBob),Dependency inversion principle
AGILE ARCHITECTURE IS
BUSINESS-CENTRIC
12. DOMAIN DRIVEN DESIGN*
AGILE ARCHITECTURE IS
BUSINESS-CENTRIC
Problem
Space
(Business)
Solution
Space
(IT)
* http://domainlanguage.com/ddd/
Agile Architecture
Ubiquitous
Language
Core and sub
domains
Bounded
contexts
Entities and
value objects
Aggregates
Factories and
repositories
Services and
modules
Domain Events Context Mapping
13. AGILE ARCHITECTURE IS
SIMPLE-AS-POSSIBLE
* http://simplearchitectures.blogspot.de/2011/10/sip-complexity-model.html
controlling complexity Through
Partitioning & Reduction
Subclasses of a partition should be constructed
with the synergistic equivalence relation.Complexity
NumberOf
theSystemStates dice are homomorphic representatives of variables in
software systems and paths inbusiness processes.
14. EVENT SOURCING
& BIG DATA
CAPTURE ALLCHANGESTOANAPPLICATION STATEAS A
SEQUENCE OFEVENTS*
* http://martinfowler.com/eaaDev/EventSourcing.html
Event Source
T1 | State 1
Event Source
T2 | State 2
Event Source
T3 | State 3
BIGData
Repository
Event T1 | State 1
Event T2 | State 2
Event T3 | State 3
AGILE ARCHITECTURE IS
EVENT-DATA-DRIVEN
15. PURE
LAYERING
AGILE ARCHITECTURE IS
SINGLE-RESPONSIBILITY-BASED
* MV* = MVP,MVC or MVVM
DOES ALL THE CLIENT JOB, MV*Presentation Layer
Business Layer
Persistence Layer
DOES ALL THE BUSINESS JOB
DOES ALL THE DB JOB
No businessstuff
No businessstuff
No Presentation stuff
17. SCALING OUT
STRATEGY*
AGILE ARCHITECTURE IS
CLOUD-ORIENTED
* http://spacebug.com/scale-out-versus-scale-up-html/
RUNNING THE APPLICATION
ON MANY HOSTS
SCALING UP
STRATEGY
18. JAVASCRIPTONE LANGUAGEFITS ALL*
JavaScript is a prototype-based scripting language with
dynamic typing
and has
first-class functions.
It is a multi-paradigm language, supportingobject-oriented,
imperative, and functional programming styles.
Coding
Testing
Operating
* http://en.wikipedia.org/wiki/JavaScript
AGILE ARCHITECTURE IS
MULTI-PARADIGM
19. JSONONE FORMAT FITS ALL*
AGILE ARCHITECTURE IS
MULTI-PARADIGM
JSON or JavaScript Object Notation, is a text-based
open standarddesigned for
human-readable data interchange.
Derived from the JavaScript scriptinglanguage, JSON is a language for
representing simple data structures and associative arrays, called
objects.
Calling
Persisting
Transforming
* http://en.wikipedia.org/wiki/JSON
20. MEAN STACK (JAVASCRIPT & JSON)
NodeJSis an event-driven
I/O server-side JavaScript
environment basedon
Google’s V8 engine.
ExpressJS is a node.js web
application framework.
MongoDB is A superb No-SQL
database.
AngularJS is
framework to
create one-page
dynamic apps.
AGILE ARCHITECTURE IS
MULTI-PARADIGM
21. * MV* = MVP,MVC or MVVM
DOES ALL THE CLIENT JOB, MV*
ANGULARJS
Presentation Layer
Business Layer
Persistence Layer
DOES ALL THE BUSINESS JOB
NODEJS, EXPRESSJS
DOES ALL THE DB JOB
MONGODB
No businessstuff
No businessstuff
No Presentation stuff
MEAN STACK (JAVASCRIPT & JSON)
IN ACTION
23. HATEOAS/REST AGILE ARCHITECTURE
SUPPORTS
SELF-DIRECTING
Consumer IS Directing*
Producer/
Backend
var response = producer.foo();
if (response.status == X) {
producer.foo1();
} else {
producer.foo2();
};
Consumer/
Client
Hypermediaas the Engineof ApplicationState
Representationalstate transfer
RPC API
Producer is directing*
var response = producer.foo();
// next_foo() is foo1() or foo2()
// producer decides what is right
response.next_foo();
Consumer/
Client
Producer/
Backend
Rest HATEOAS
* Pseudo-source-code for demonstration purposesonly
25. AGILE ARCHITECTURE
SUPPORTS
SELF-HEALING
The microcapsules release a healing agent when the
material is damaged*
* http://www.bbc.co.uk/news/science-environment-19781862
SELF-HEALING
MATERIALS
SOFTWARE
ERROR DETECTION
AND
SOFTWARE
HEALING AGENTS
MEAN
SELF-HEALING
SOFTWARE
SYSTEMS
26. THE BEHAVIOR OF A SYSTEM THAT FOLLOWS
AGILE ARCHITECTURE CAN BE CALLED
ARCHITECTURAL
INTELLIGENCE
ABILITY OF THE SYSTEM
TO DIRECT, OPTIMIZE, AND HEAL
ITSELF