2. “Advice is a dangerous gift”
There are no right answers
Use the advice to prod your thinking,
but don’t use it as a replacement for
your thinking
And remember, architecture is not
cast in stone
3. Building Enterprise Applications
Building computer systems is hard
– As the complexity of the
system gets greater, the
task of building the
software gets
exponentially harder
4. Building Enterprise Applications
Building computer systems is hard
Design
Pattern
Software
Architecture
Middleware
Frameworks
OO
Programming
6. “A complex system that works is invariably
found to have evolved from a simple system that
worked. The inverse proposition also appears
to be true: a complex system designed from
scratch never works and cannot be made to
work. You have to start over, beginning with a
simple system.”
— John Gall, systems theorist
7. Goals of an Enterprise Architecture
Be robust
Be performing and scalable
Take advantage of OO design principles
Avoid unnecessary complexity
Be maintainable and extensible
Be easy to test
8. Enterprise Systems
Building large multi-tier systems is done one line
at a time
– Layering
– Clear interfaces
– Minimize dependencies
– Separation of concerns
– Object Oriented programming
– Design patterns
– Frameworks
– Testable code
9. Create Abstractions
Minimize dependence on subsystems
– Must be easy to change
• Gateway, Mapper, Service Stub
Abstract things that varies from what stays the
same
– Design principles
• Factory, Plugin, Dependency Injections
10. Separation of Concerns
One of the main challenge of frameworks is to
provide separation of concerns
Frameworks deal with generic functionality
Frameworks need patterns to combine generic and
domain specific functionality
11. Minimize dependencies
Be careful with dependencies
– It is easy to create code where modules depend on
other modules
• Plugin, Factory, Service Layer, Separated Interface,
Dependency Injection and Observer Pattern
12. Layering
Software systems can get complicated
– Abstractions are needed
Provides abstraction by separating computer
systems in layers
– Higher layers use services from
lower layers
– Each layer has dedicated task
and hides complexity from upper
layers
13. The Three Layers
Presentation
– User’s interface to the system
– User can be another system
– Accepts input, displays views
Domain
– The Application of the system
– The “Business logic”
– Has the tendency to creep into other layers
Data Source
– Connection to the database
14. Three Layers
Presentation Layer for the User Interface
Domain Layer for the domain logic
Persistence Layer for the data access
Remember the “role” – concern, in each layer
15. Considerations
Don’t overdesign!
– User Interfaces are really difficult to make generic and
reusable
– If there is no need for extra layer, don’t have it
– If you don’t need an interface, don’t have it
Don’t let frameworks rule you!
– If you have to write code just to satisfy a framework,
maybe there is another way – or fix the framework
– Frameworks can overdo it
16. Considerations
Don’t overdo Configurations
– Sometimes coding is better than config
– Testing and debugging config is hard
Don’t be afraid to Refactor
– You can always add another indirection
– You can always add a new layer
Design Principles are good guidelines
– Don’t be afraid to reevaluate them
17. Considerations
Embrace new tools and techniques
– These exist to help you
– But be careful, don’t jump at everything – there is a
cost
Use Tech Rader to evaluate
– Example: ThoughtWorks Radar
http://www.thoughtworks.com/radar
19. Practical Considerations
Solutions are designed and implemented
according to time schedule and budget
– Hardest part is management of people
20. Practical Considerations
Agile is an attempt to answer this
Backlog
Backlog
ordered by
Product Owner
Sprint
stories
Daily
Standup
1-2 week
sprints
Working
Product
Working
Product
Released
23. Tech Radar
ADOPT
Start using
when
appropriate
TRIAL
Learn and
try out to
understand
ASSESS
Evaluate
how this
will impact
the
company
HOLD
Proceed
with
causion
24. Trends 2014
Churn in the JavaScript World
– Rise of JavaScript libraries
Microservices and the Rise of the API
– Importance of the APIs both within an organization
and as a bridge to the outside world
Conway's Law
– Ignoring this law is dangerous
Re-decentralization
– Data and infrastructure
30. THE DIGITAL DECADE
MUSIC
PICTURE
S
TV SHOWS
MOVIES
2000 2010
VOICE
SMARTPHONES
BOOKS
31. Mainframes
Mini computers
DIVERGE
Personal Computers
Servers
Laptops
2G Cell phones
Clusters
Smartphones
Tablets
Smart TV
Wearable
Cloud – utility computing
Music player
CONVERGE
1960 1970 1980 1990 2000 2010
Internet of things
SaaS - APIs
34. Digital Online World
Work
More
information
Focused
Browsing
Consuming
content
Checking
Mobile
Now
Consuming
Video
Information
Real-time
35. The Post-PC Era
The Personal Computer era is over
– Rise of the network
– APIs
– Enterprise systems are accessible
by consumers
– New devices, mobile phone,
ITV, game machines, MP3 players,...
Source: (cc) 1998-2008
Digibarn Computer Museum,
Source: Picture from Convergence Transforms Digital Home: Techno-Economic
Impact
36. Challenges in Computing
Hardware
Connecting hardware
Network
Software
1980 1990 2000
Connecting
software
Software and integration of components and
devices are the challenges ahead
Cloud computing and ubiquity
Move to Service Oriented Architecture and APIs
37. Challenges in Computing
Software
Connecting
software
Mobility
Wearables
APIs, SaaS, real-time
2000 2010 2020
Multiple devices – anything can connect
Ability to predict – know the users
Data Analytics aka Big Data
Real-time streams
39. Objectives
Know the basics of software design and
beautiful code
Understand and know how to use design
patterns
Implement software framework with component
reuse in mind
40. Objectives continued
Understand different software architectures and
the different design choices
Understand Software Oriented Architecture
(SOA) and Software as a Service (SaaS)
Understand the practices of how professional
software is developed in the software industry