The Modern Software Architect

45
The modern architect A Pragmatic View from the Trenches

description

Software Architecture Agile Modern

Transcript of The Modern Software Architect

Page 1: The Modern Software Architect

The  modern  architect  A  Pragmatic  View  from  the  Trenches  

Page 2: The Modern Software Architect

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”  

Page 3: The Modern Software Architect

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”  

Page 4: The Modern Software Architect

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  

Page 5: The Modern Software Architect

Enterprise  Architectural  Growth  

Startup/Small-­‐cap    

Mid-­‐cap    

Enterprise  

Page 6: The Modern Software Architect

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  

Page 7: The Modern Software Architect

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  

Page 8: The Modern Software Architect

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  

Page 9: The Modern Software Architect

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  

Page 10: The Modern Software Architect

Enterprise  Agility  Adoption  

Startup/Small-­‐cap  

Mid-­‐cap  

Enterprise  

Page 11: The Modern Software Architect

Agile  Iterations  

Options/Plans  

Execution  Validation  

Reflection  

”Tends  to  be  focussed  on  delivering  functionality  rather    than  looking  after  their  architecture”  

Project  Manager  

?  

Page 12: The Modern Software Architect

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  

Page 13: The Modern Software Architect

Agile  Architecture  

Page 14: The Modern Software Architect

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?  

Page 15: The Modern Software Architect

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”  

Page 16: The Modern Software Architect

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  

Page 17: The Modern Software Architect

Convergence  

BUSINESS  =  IT  

Project  Manager  

Page 18: The Modern Software Architect

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  

Page 19: The Modern Software Architect

SÅDAN!  

Page 20: The Modern Software Architect

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  

Page 21: The Modern Software Architect

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  

Page 22: The Modern Software Architect

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  

Page 23: The Modern Software Architect

Problem  Solving  in  your  Team  

Stack  Overflow  

Google  

Architect  Smart  Guy  

Page 24: The Modern Software Architect

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.    

Page 25: The Modern Software Architect

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.  

Page 26: The Modern Software Architect

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  

Page 27: The Modern Software Architect

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  

Page 28: The Modern Software Architect

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  

Page 29: The Modern Software Architect

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  

Page 30: The Modern Software Architect

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  

Page 31: The Modern Software Architect

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  

Page 32: The Modern Software Architect

Recognize  this  place?  

Page 33: The Modern Software Architect

Recognize  this  place?  

Page 34: The Modern Software Architect

Recognize  this  place?  

Page 35: The Modern Software Architect

Recognize  this  place?  

Page 36: The Modern Software Architect

Recognize  this  place?  

Page 37: The Modern Software Architect

Recognize  this  place?  

Page 38: The Modern Software Architect

Recognize  this  place?  

Page 39: The Modern Software Architect

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  

 

 

Page 40: The Modern Software Architect

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  

Page 41: The Modern Software Architect

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  '|===’            }    }  

Page 42: The Modern Software Architect

Example  3  -­‐  Violet  !   Simple  tools  for  structural  diagrams  

Page 43: The Modern Software Architect

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?  

Page 44: The Modern Software Architect

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  

Page 45: The Modern Software Architect

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