2. One
definition
! ”Software
Architect
is
a
computer
manager
who
makes
high-‐level
design
choices
and
dictates
technical
standards,
including
software
coding
standards,
tools
and
platforms”
3. One
definition
! ”Software
Architect
is
a
computer
manager
who
makes
high-‐level
design
choices
and
dictates
technical
standards,
including
software
coding
standards,
tools
and
platforms”
4. Main
Responsibility
! Limiting
choices
available
during
development
by
! Choosing
a
standard
way
of
development
! Creating,
defining
or
choosing
a
framework
for
the
application
! Recognizing
potential
reuse
by
! Observe
and
understand
the
broader
system
environment
! Creating
component
design
! Having
knowledge
of
other
applications
in
the
organisation
! Subdivide
a
complex
application
into
manageable
entities
! Grasp
the
functionality
of
each
component
within
the
application
! Understand
the
component
interactions
and
dependencies
! Communicate
these
concepts
to
developers
6. Tiered
architects
Strategic
Thinking
System
Interactions
Communication
Design
Enterprise
Erchitect
Across
Project
Highly
Abstracted
Across
Organisation
Minimal,
High
Level
Solution
Architect
Focused
on
Solution
Very
Detailed
Multiple
Teams
Detailed
Application
Architect
Component
Re-‐
use,
Maintainability
Single
Application
Single
Project
Very
Detailed
8. Agile
That
is,
while
there
is
value
in
the
items
on
the
right,
we
value
the
items
on
the
left
more
We
are
uncovering
better
ways
of
developing
software
by
doing
it
and
helping
others
do
it.
Through
this
work
we
have
to
come
to
value
9. Agile
That
is,
while
there
is
value
in
the
items
on
the
right,
we
value
the
items
on
the
left
more
Up-‐front
design
UML/BML
Organisation
ROI/TCO
Iterative
Real
Options
Retrospectives
Craftmanship
11. Agile
Iterations
Options/
Plans
Execution
Validation
Reflection
”Tends
to
be
focussed
on
delivering
functionality
rather
than
looking
after
their
architecture”
Project
Manager
?
12. Irrespectively
of
scale
! Cross-‐cutting
concerns
such
as
logging
and
exception
handling
! Security;
including
authentication,
authorisation
and
confidentiality
of
sensitive
data
! Performance,
scalability,
availability
and
other
quality
attributes
! Audit
and
other
regulatory
requirements
! Real-‐world
constraints
of
the
environment
! Interoperability/integration
with
other
software
systems
! Operational,
support
and
maintenance
requirements
! Consistency
of
structure
and
approach
to
solving
problems
! Implementing
features
across
the
codebase
! Evaluating
that
the
foundations
you’re
building
will
allow
you
to
deliver
what
you
set
out
to
deliver
14. Time,
Leading
to..?
! Software
Entropy
receives
no
focus
! as
a
system
is
modified,
its
disorder,
or
entropy,
always
increases.
This
is
known
as
software
entropy
! When
a
program
is
modified,
its
complexity
will
increase,
provided
that
one
does
not
actively
work
against
this.
! Technical
Debt
increases
! a
neologistic
metaphor
referring
to
the
eventual
consequences
of
poor
software
architecture
and
software
development
within
a
codebase.
! Technical
Debt
will
increase
until
eventually
only
rewrite
is
possible
! Tribal
Knowledge
is
not
Internalized
! Tribal
Knowledge
or
Know-‐How
is
the
collective
wisdom
of
the
organization.
It
is
the
sum
of
all
the
knowledge
and
capabilities
of
all
the
people.
! Knowledge
must
be
transferred
or
else
behaviour
is
duplicated
or
forgotten
! Who
is
around
the
agile
project
to
identify
reuse
and
manage
complexity?
15. What
IF
! ”Software
Architect
is
a
computer
manager
who
makes
high-‐level
design
choices
and
dictates
technical
standards,
including
software
coding
standards,
tools
and
platforms”
! ”Software
Architect
is
a
techo
polymath
who
offers
high-‐level
design
choices
and
and
facilitates
best
technical
practises,
including
software
coding
standards,
tools
and
platforms”
16. Main
Responsibilities
! Technical
Leadership
of
the
product
! Set
the
standards
for
development
! Provide
high-‐level
design
practises
! Ensure
best
practise
and
communicate
these
! Minimize
software
entropy
and
increase
product
quality
! Ensure
that
the
architecture
is
sufficiently
documented
! Enterprise
collaborator
and
networker
! Identify
and
support
re-‐use
! Collaborate
with
enterprise
architects
to
incorporate
cross-‐
cutting
concerns
18. Up-‐Front
Project
Planning
Structure
Understand
the
significant
structural
elements
and
how
they
fit
together
based
on
the
architectural
drivers
Design
and
Decomposition
down
to
containers
and
components
Risk
Identify
and
mitigate
the
highest
priority
risk
Risk-‐storming
and
concrete
experiments
Vision
Create
and
communicate
a
vision
for
the
team
to
work
with
Context,
container
and
component
diagrams
Just
enough
up
front
design
to
create
firm
foundations
for
the
software
product
and
its
delivery
20. In
the
face
of
Continuous
Delivery
! Set
the
technology
stack
! Control
the
build
process
! Be
responsible
for
deployment
! May
be
handled
by
the
Build
Engineer
21. Shifting
the
focus
! Focus
for
an
application
architect
in
the
presence
of
working
software
must
be
to
facilitate
the
team
to
make
the
best
decisions
and
help
provide
the
best
possible
platform
for
further
extension
24. Stack
Overflow
I
need
to
send
multiple
requests
to
many
different
web
services
and
receive
the
results.
The
problem
is
that,
if
I
send
the
requests
one
by
one
it
takes
so
long
as
I
need
to
send
and
process
all
individually.
I
am
wondering
how
I
can
send
all
the
requests
at
once
and
receive
the
results.
25. Top
3
Ludicrous
Answers
! It
has
got
various
option
to
develop
this:
! JMS
:
quality
of
service
and
management,
e.g.
redelivery
attempt,
dead
message
queue,
load
management,
scalability,
clustering,
monitoring,
etc.
! Simply
using
the
Observer
pattern
for
this.
For
more
details
OODesign
and
How
to
solve
produce
and
consumer
follow
this
Kodelog
! Looking
at
the
problem,
you
need
to
integrate
your
application
with
10+
different
webservices.
While
making
all
the
calls
asynchronous.
This
can
be
done
easily
with
Apache
Camel.
! You
can
ask
your
jax-‐ws
implementation
to
generate
asynchronous
bindings
for
the
web
service.
26. Availability
! A
software
architect
must
have
enough
time
and
interest
to
answer
all
questions
from
teams
and
individuals
! A
software
architect
must
facilitate
learning
and
mentoring
! A
software
architect
must
communicate
shared
models
and
shared
visions
! By
having
high
developer
interaction
the
software
architect
can
! Identify
re-‐use
and
componentization
! Increase
awareness
of
cross-‐cutting
concerns
27. Quality
Assurance
! Code
Review
is
a
systematic
examination
of
computer
source
code.
It
is
intended
to
find
and
fix
mistakes
overlooked
in
the
initial
development
phase
improving
both
the
overall
quality
of
software
and
the
developers’
skills.
! Automatic
as
well
as
manual
intervention
! Automatic
testing
! Automatic
software
analysis
! Peer
review
28. Automatic
Testing
! Accepted
curse
of
unit
testing
! Documentation
! Regression
! Works
best
on
loose
coupled
entities
! Focus
on
Integration
testing
! End
to
end
scenario
support
! Ensure
that
Input
leads
to
Output
! Helped
by
virtualization
and
continuous
deployments
! Watch
out
for
maintenance
costs
29. Automatic
Software
Verification
! Perform
automatic
analysis
of
source
code
and
binaries
! Tools
such
as
PMD,
Checkstyle,
Findbugs,
jdepend,
classycle,
Emma,
Cobertura,
Pathfinder,
ThreadSafe,
Macker,
clirr,
Tattletale
(for
Java
development)
! Or
collective
in
reporting
systems
such
as
SonarQube,
QALab
or
Xradar
! Important
to
apply
qualified
analysis
on
top
of
the
result
30. Peer
Review
! Formal
or
informal
collaborate
effort
of
cross-‐
examination
of
source
code
! Review
improve
quality
by
! Rejecting
or
improving
commits
! Committers
and
reviewers
learn
from
each
other
! Motivation
to
do
boring
tasks
! But
can
also
improve
overall
morale
and
team
coherence
! Important
to
keep
an
open
culture
and
avoid
blame
game
For
any
software
team
not
already
doing
so,
the
single
most
effective
thing
It
can
do
to
improve
product
quality
is
to
introduce
a
code
review
process
31. The
Code
doesn’t
Tell
the
Whole
Story
! Code
may
hint
at
! (Functionality)
! Programming
language
! Architectural
tiers
! Naming
standards
! Patterns
and
idioms
! But
even
those
hints
may
be
misinterpreted
! Code
may
not
reveal
! Why
the
technologies
were
chosen
! The
overall
structure
of
the
system
! Whether
any
common
patterns
or
principles
are
used
! How
and
where
to
add
new
functionality
! How
security,
stability,
scalability,
etc
is
achieved
39. Documenting
Architecture
! Documentation
is
not
hard
! Briefly
outline
technologies
and
choices
! Keep
the
stories
short
and
to
the
point
! Create
simplified
diagrams
! Keep
it
with
the
source
code
under
revision
control
40. Example
1
-‐
AsciiDoc
! Extremely
simple
markup,
integrates
with
builds
<profile>
<!-‐-‐
=========================================================================
-‐-‐>
<!-‐-‐
Include
a
documentation
profile
if
the
project
have
src/main/asciidoc
-‐-‐>
<!-‐-‐
Adds
a
process-‐asciidoc
goal
to
the
generate-‐resources
phase
-‐-‐>
<!-‐-‐
=========================================================================
-‐-‐>
<id>fdc-‐documentation-‐profile</id>
<activation>
<file><exists>${basedir}/src/main/asciidoc</exists>
</file>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.asciidoctor</groupId>
<artifactId>asciidoctor-‐maven-‐plugin</artifactId>
<configuration>
<backend>html</backend>
<outputDirectory>${project.build.directory}/docs</outputDirectory>
<sourceHighlighter>coderay</sourceHighlighter>
</configuration>
</plugin>
</plugins>
</build>
</profile>
Ex
42. Example
3
-‐
Violet
! Simple
tools
for
structural
diagrams
43. Are
you
responsive?
! All
changes
to
a
software
product
must
be
reversible
! Deployments
fail
for
many
reasons
outwith
control,
making
this
a
real
risk
in
any
software
project
! However
the
risk
is
easy
to
avert
by
proper
rollback
mechanisms
! Projects
are
no
longer
static,
and
must
be
palpable
by
engineering
staff
and
newcomers
! Especially
when
projects
are
signed
off
! Ask
yourself
these
questions
! How
long
time
does
it
take
to
check-‐out
the
software,
circumvent
a
simple
problem
and
re-‐release
your
product
to
production
environment?
! How
long
time
does
it
take
to
integrate
a
new
developer
with
a
workable
developer
environment?
44. In
total
! Engage
in
Just
Enough
Up-‐Front
Design
! Set
the
standards
and
the
builds
! Evolve
the
documentation
! Master
Code
Reviews
! Be
the
go-‐to
guy
! Be
responsible
for
the
product
artefact
45. Q
(+A?)
I
left
the
murky,
bedraggled
streets
of
home
to
venture
on
a
Journey
for
a
thousand
miles
and
more.
I
had
a
vision
and
a
purpose
and
everything
around
me
sprang
to
life
In
a
newfound
thrill
of
excitement.
Arriving
at
my
final
destination
I
saw
wonders
beyond
compare
and
such
Joy
and
such
life
that
everything
fell
into
place
and
harmony.
How
can
this
be
of
wonder,
you
ask,
when
I
reveal
the
final
destination
As
the
origins
of
my
journey.
But
alas,
everything
old
can
be
born
again
From
a
new
perspective