The Modern Software Architect

3,112 views

Published on

Software Architecture Agile Modern

Published in: Technology

The Modern Software Architect

  1. 1. The  modern  architect   A  Pragmatic  View  from  the  Trenches  
  2. 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. 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. 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. 5. Enterprise  Architectural   Growth   Startup/ Small-­‐cap     Mid-­‐cap     Enterprise  
  6. 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. 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. 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. 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. 10. Enterprise  Agility   Adoption   Startup/ Small-­‐cap   Mid-­‐cap   Enterprise  
  11. 11. Agile  Iterations   Options/ Plans   Execution  Validation   Reflection   ”Tends  to  be  focussed  on  delivering  functionality  rather    than  looking  after  their  architecture”   Project   Manager   ?  
  12. 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  
  13. 13. Agile  Architecture  
  14. 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. 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. 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. 17. Convergence   BUSINESS  =  IT   Project   Manager  
  18. 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  
  19. 19. SÅDAN!  
  20. 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. 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. 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. 23. Problem  Solving  in  your   Team   Stack   Overflow   Google   Architect   Smart  Guy  
  24. 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. 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. 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. 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. 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. 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. 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. 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  
  32. 32. Recognize  this  place?  
  33. 33. Recognize  this  place?  
  34. 34. Recognize  this  place?  
  35. 35. Recognize  this  place?  
  36. 36. Recognize  this  place?  
  37. 37. Recognize  this  place?  
  38. 38. Recognize  this  place?  
  39. 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. 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. 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. 42. Example  3  -­‐  Violet   !   Simple  tools  for  structural  diagrams  
  43. 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. 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. 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    

×