SlideShare a Scribd company logo
The	
  modern	
  architect	
  
A	
  Pragmatic	
  View	
  from	
  the	
  Trenches	
  
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”	
  
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”	
  
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	
  
Enterprise	
  Architectural	
  
Growth	
  
Startup/
Small-­‐cap	
  	
  
Mid-­‐cap	
  	
  
Enterprise	
  
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	
  
The	
  Dictating	
  Ivory	
  
Tower	
  
Enterprise	
  
Architect	
  
Solution	
  
Architect	
  
Application	
  
Architect	
  
Developer	
   Developer	
  
Application	
  
Architect	
  
Solution	
  
Architect	
  
Application	
  
Architect	
  
Application	
  
Architect	
  
Developer	
   Developer	
  
UML	
  
Design	
  
Manual	
  Req	
  
spec	
  
TCO	
  
ROI	
  
EJB	
  
MOM	
  
ESB	
  
Business	
  
Intelligence	
  
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	
  
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	
  
Enterprise	
  Agility	
  
Adoption	
  
Startup/
Small-­‐cap	
  
Mid-­‐cap	
  
Enterprise	
  
Agile	
  Iterations	
  
Options/
Plans	
  
Execution	
  Validation	
  
Reflection	
  
”Tends	
  to	
  be	
  focussed	
  on	
  delivering	
  functionality	
  rather	
  
	
  than	
  looking	
  after	
  their	
  architecture”	
  
Project	
  
Manager	
  
?	
  
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	
  
Agile	
  Architecture	
  
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?	
  
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”	
  
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	
  
Convergence	
  
BUSINESS	
  =	
  IT	
  
Project	
  
Manager	
  
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	
  
SÅDAN!	
  
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	
  
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	
  
Mastering	
  Skillset	
  
Remember	
  
Describe	
  
Name	
  
Find	
  
List	
  
Relate	
  
Write	
  
Understand	
  
Explain	
  
Compare	
  
Discuss	
  
Predict	
  
Outline	
  
Restate	
  
Apply	
  
Complete	
  
Use	
  
Examine	
  
Illustrate	
  
Classify	
  
Solve	
  
Analyze	
  
Compare	
  
contrast	
  
Examine	
  
Explain	
  
Identify	
  
Categorize	
  
Investigate	
  
Evaluate	
  
Justify	
  
Assess	
  
Prioritize	
  
Recommend	
  
Rate	
  
Decide	
  
Create	
  
Plan	
  
Invent	
  
Compose	
  
Design	
  
Construct	
  
Imagine	
  
Bloom’s	
  Taxonomy	
  
Problem	
  Solving	
  in	
  your	
  
Team	
  
Stack	
  
Overflow	
  
Google	
  
Architect	
  
Smart	
  Guy	
  
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.	
  
	
  
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.	
  
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	
  
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	
  
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	
  
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	
  
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	
  
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	
  
Recognize	
  this	
  place?	
  
Recognize	
  this	
  place?	
  
Recognize	
  this	
  place?	
  
Recognize	
  this	
  place?	
  
Recognize	
  this	
  place?	
  
Recognize	
  this	
  place?	
  
Recognize	
  this	
  place?	
  
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	
  
	
  
	
  
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	
  
Example	
  2	
  -­‐	
  gmaven	
  
!   Generate	
  lists	
  from	
  source	
  code	
  scanning	
  
<plugin>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <groupId>org.codehaus.gmaven</groupId>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <artifactId>gmaven-­‐plugin</artifactId>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <version>1.5</version>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <executions>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <execution>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <phase>generate-­‐sources</phase>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <goals>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <goal>execute</goal>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  </goals>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <configuration>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <source>	
  src/main/gscripts/services.groovy	
  </source>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  </configuration>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  </execution>	
  
	
  	
  	
  	
  	
  	
  	
  	
  </executions>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <dependencies>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <dependency>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <groupId>com.thoughtworks.qdox</groupId>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <artifactId>qdox</artifactId>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <version>1.12.1</version>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  </dependency>	
  
	
  	
  	
  	
  	
  	
  	
  	
  </dependencies>	
  
	
  	
  	
  	
  	
  	
  </plugin>	
  
	
  
	
  
	
  def	
  dir	
  =	
  new	
  File(project.basedir.parent,	
  "gps_persistence/src/main/java")	
  
	
  def	
  builder	
  =	
  new	
  com.thoughtworks.qdox.JavaDocBuilder()	
  
	
  builder.addSourceTree(dir)	
  
	
  def	
  services	
  =	
  builder.classes.findAll	
  {	
  
	
  	
  	
  	
  	
  it.annotations.find	
  {	
  it.type.value	
  ==	
  "org.springframework.stereotype.Service"	
  }	
  
	
  }	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  def	
  servicelist	
  =	
  new	
  File(project.build.directory,	
  "service.ad")	
  
	
  servicelist.withPrintWriter	
  {	
  pw	
  -­‐>	
  
	
  	
  	
  	
  	
  services.each	
  {	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  pw.println	
  "+${it.name}+”	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  if	
  (it.comment)	
  pw.println	
  "${it.comment}”	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  pw.println	
  '[cols="2",	
  options="header"1]’	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  pw.println	
  '|===’	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  pw.println	
  '|Method’	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  pw.println	
  '|Description’	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  it.methods.each	
  	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  if	
  (it.public)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  pw.println	
  "|${it.name}”	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  pw.println	
  "|${it.comment?:''}”	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  pw.println	
  '|===’	
  
	
  	
  	
  	
  	
  }	
  
	
  }	
  
Example	
  3	
  -­‐	
  Violet	
  
!   Simple	
  tools	
  for	
  structural	
  diagrams	
  
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?	
  
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	
  
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	
  
	
  

More Related Content

PPTX
Chapter 10 designing and producing Multimedia
PPTX
Spm unit iii-risk-working in teams
PPTX
List of Software Development Model and Methods
PPTX
Software Engineering
PPTX
Software Evolution
PDF
Agile software development
PPTX
Software development life cycle (SDLC)
PDF
Software Architecture: views and viewpoints
Chapter 10 designing and producing Multimedia
Spm unit iii-risk-working in teams
List of Software Development Model and Methods
Software Engineering
Software Evolution
Agile software development
Software development life cycle (SDLC)
Software Architecture: views and viewpoints

What's hot (20)

PPTX
Software development process models
PPTX
Animation & Animation Techniques
PPTX
Introduction to Computer Graphics
PPT
PDF
Introduction To Video Compression
PPT
5 architecture
PPT
Software Configuration Management
PPT
Software Project Management
PPTX
Agile Practices - eXtreme Programming
PPTX
hci in software development process
PDF
Project Planning in Software Engineering
PPT
SQA-Plan.ppt
PDF
Multimedia Network
PPTX
Software Engineering Practice
PPTX
Estimating Software Maintenance Costs
PPTX
Securing hand held computing devices
PPT
Software development slides
PPT
Architecture design in software engineering
PPTX
Checkpoints of the Process
PPT
Rhapsody Software
Software development process models
Animation & Animation Techniques
Introduction to Computer Graphics
Introduction To Video Compression
5 architecture
Software Configuration Management
Software Project Management
Agile Practices - eXtreme Programming
hci in software development process
Project Planning in Software Engineering
SQA-Plan.ppt
Multimedia Network
Software Engineering Practice
Estimating Software Maintenance Costs
Securing hand held computing devices
Software development slides
Architecture design in software engineering
Checkpoints of the Process
Rhapsody Software
Ad

Viewers also liked (20)

PPTX
Modern Software Architectures: Building Solutions for Web, Cloud, and Mobile
PPTX
Software Architecture Patterns
PDF
Modern Software Architecture Styles and Patterns
PPT
05 architectural styles
PPTX
A Software Architect's View On Diagramming
PPT
Kiến trúc phần mềm
PDF
Django Weekend talk "Infrastructure of modern web applications"
PDF
Leverage Hibernate and Spring Features Together
PDF
Pjok bs sem1_sma kelas xi kurikulum 2013_[blogerkupang.com]
PDF
Spotify services (SDC 2013)
ODP
Oredev 2009 JAX-RS
PDF
Spotify services - Leetspeak 2014
ODP
REST made simple with Java
PDF
Descending from the architect's ivory tower
PDF
INTRODUCTION TO SOFTWARE ARCHITECTURE-TRAINING WORKSHOP
PPT
Usability
PDF
Introduction to Software Architecture
PDF
Pendidikan jasmani, olahraga, dan kesehatan (buku siswa)
PPTX
Introduction to NserviceBus
PDF
Technical Architect, Software Architect job in London, see @niruban_abrs
Modern Software Architectures: Building Solutions for Web, Cloud, and Mobile
Software Architecture Patterns
Modern Software Architecture Styles and Patterns
05 architectural styles
A Software Architect's View On Diagramming
Kiến trúc phần mềm
Django Weekend talk "Infrastructure of modern web applications"
Leverage Hibernate and Spring Features Together
Pjok bs sem1_sma kelas xi kurikulum 2013_[blogerkupang.com]
Spotify services (SDC 2013)
Oredev 2009 JAX-RS
Spotify services - Leetspeak 2014
REST made simple with Java
Descending from the architect's ivory tower
INTRODUCTION TO SOFTWARE ARCHITECTURE-TRAINING WORKSHOP
Usability
Introduction to Software Architecture
Pendidikan jasmani, olahraga, dan kesehatan (buku siswa)
Introduction to NserviceBus
Technical Architect, Software Architect job in London, see @niruban_abrs
Ad

Similar to The Modern Software Architect (20)

PPTX
Agile architecture upload
PPT
04 designing architectures
PPTX
Modern software architect post the agile wave
PPT
Software engineering
PDF
Software design.edited (1)
PDF
SDTpresentaion on testingand sofware all required materials
PDF
Software Architecture: How Much Design?
PDF
LESSON FOR SOFTWARE ENGINEERING BASED ON MODELS
PDF
L5555555555555555555555 Agile Scrum Framework.pdf
PPTX
Consulting
PPT
01 the big_idea
PDF
[2015/2016] Software systems engineering PRINCIPLES
PDF
Secrets of going codeless - How to build enterprise apps without coding
PPTX
Lect5 improving software economics
PDF
Various Process of Software Engineering notes
PDF
Are You an Accidental or Intentional Architect?
PDF
Roles and Responsibilities of a DevOps Engineer
PDF
Webinar - Design Thinking for Platform Engineering
PPT
want to contact me login to www.stqa.org
Agile architecture upload
04 designing architectures
Modern software architect post the agile wave
Software engineering
Software design.edited (1)
SDTpresentaion on testingand sofware all required materials
Software Architecture: How Much Design?
LESSON FOR SOFTWARE ENGINEERING BASED ON MODELS
L5555555555555555555555 Agile Scrum Framework.pdf
Consulting
01 the big_idea
[2015/2016] Software systems engineering PRINCIPLES
Secrets of going codeless - How to build enterprise apps without coding
Lect5 improving software economics
Various Process of Software Engineering notes
Are You an Accidental or Intentional Architect?
Roles and Responsibilities of a DevOps Engineer
Webinar - Design Thinking for Platform Engineering
want to contact me login to www.stqa.org

Recently uploaded (20)

PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PPTX
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
PDF
Unlocking AI with Model Context Protocol (MCP)
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PDF
Encapsulation theory and applications.pdf
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PDF
Network Security Unit 5.pdf for BCA BBA.
PDF
KodekX | Application Modernization Development
PDF
Approach and Philosophy of On baking technology
PDF
Spectral efficient network and resource selection model in 5G networks
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PDF
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
PPT
Teaching material agriculture food technology
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PPTX
MYSQL Presentation for SQL database connectivity
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
Reach Out and Touch Someone: Haptics and Empathic Computing
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
Unlocking AI with Model Context Protocol (MCP)
Understanding_Digital_Forensics_Presentation.pptx
Encapsulation theory and applications.pdf
NewMind AI Weekly Chronicles - August'25 Week I
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
Network Security Unit 5.pdf for BCA BBA.
KodekX | Application Modernization Development
Approach and Philosophy of On baking technology
Spectral efficient network and resource selection model in 5G networks
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
Agricultural_Statistics_at_a_Glance_2022_0.pdf
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
Teaching material agriculture food technology
Advanced methodologies resolving dimensionality complications for autism neur...
Diabetes mellitus diagnosis method based random forest with bat algorithm
MYSQL Presentation for SQL database connectivity
“AI and Expert System Decision Support & Business Intelligence Systems”

The Modern Software Architect

  • 1. The  modern  architect   A  Pragmatic  View  from  the  Trenches  
  • 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  
  • 5. Enterprise  Architectural   Growth   Startup/ Small-­‐cap     Mid-­‐cap     Enterprise  
  • 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  
  • 7. The  Dictating  Ivory   Tower   Enterprise   Architect   Solution   Architect   Application   Architect   Developer   Developer   Application   Architect   Solution   Architect   Application   Architect   Application   Architect   Developer   Developer   UML   Design   Manual  Req   spec   TCO   ROI   EJB   MOM   ESB   Business   Intelligence  
  • 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  
  • 10. Enterprise  Agility   Adoption   Startup/ Small-­‐cap   Mid-­‐cap   Enterprise  
  • 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  
  • 17. Convergence   BUSINESS  =  IT   Project   Manager  
  • 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  
  • 22. Mastering  Skillset   Remember   Describe   Name   Find   List   Relate   Write   Understand   Explain   Compare   Discuss   Predict   Outline   Restate   Apply   Complete   Use   Examine   Illustrate   Classify   Solve   Analyze   Compare   contrast   Examine   Explain   Identify   Categorize   Investigate   Evaluate   Justify   Assess   Prioritize   Recommend   Rate   Decide   Create   Plan   Invent   Compose   Design   Construct   Imagine   Bloom’s  Taxonomy  
  • 23. Problem  Solving  in  your   Team   Stack   Overflow   Google   Architect   Smart  Guy  
  • 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  
  • 41. Example  2  -­‐  gmaven   !   Generate  lists  from  source  code  scanning   <plugin>                  <groupId>org.codehaus.gmaven</groupId>                  <artifactId>gmaven-­‐plugin</artifactId>                  <version>1.5</version>                  <executions>                      <execution>                          <phase>generate-­‐sources</phase>                          <goals>                              <goal>execute</goal>                          </goals>                          <configuration>                              <source>  src/main/gscripts/services.groovy  </source>                          </configuration>                      </execution>                  </executions>                  <dependencies>                      <dependency>                          <groupId>com.thoughtworks.qdox</groupId>                          <artifactId>qdox</artifactId>                          <version>1.12.1</version>                      </dependency>                  </dependencies>              </plugin>        def  dir  =  new  File(project.basedir.parent,  "gps_persistence/src/main/java")    def  builder  =  new  com.thoughtworks.qdox.JavaDocBuilder()    builder.addSourceTree(dir)    def  services  =  builder.classes.findAll  {            it.annotations.find  {  it.type.value  ==  "org.springframework.stereotype.Service"  }    }                                      def  servicelist  =  new  File(project.build.directory,  "service.ad")    servicelist.withPrintWriter  {  pw  -­‐>            services.each  {                      pw.println  "+${it.name}+”                    if  (it.comment)  pw.println  "${it.comment}”                    pw.println  '[cols="2",  options="header"1]’                    pw.println  '|===’                    pw.println  '|Method’                      pw.println  '|Description’                      it.methods.each    {                            if  (it.public)  {                                    pw.println  "|${it.name}”                                    pw.println  "|${it.comment?:''}”                            }                    }                    pw.println  '|===’            }    }  
  • 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