effective architecting: best practices for software architects

42
Effective Architecting Best Practices & Guidelines for Software Architects

Upload: ganesh-samarthyam

Post on 12-Feb-2017

947 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Effective Architecting: Best Practices for Software Architects

Effective ArchitectingBest Practices & Guidelines for Software Architects

Page 2: Effective Architecting: Best Practices for Software Architects

Case Study: Patterns and Styles in Compilers

Page 3: Effective Architecting: Best Practices for Software Architects

Overarching StyleLexical Analyzer

Parser (Syntax & Semantic Analysis)

Optimizer

Code generator

Pipe-and-filter style

Page 4: Effective Architecting: Best Practices for Software Architects

Compiler DriverFacade pattern

Page 5: Effective Architecting: Best Practices for Software Architects

Representing grammarInterpreter

pattern

Page 6: Effective Architecting: Best Practices for Software Architects

Generating code

Source: “Design Patterns: Elements of Reusable Object-Oriented Software”, Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides, Addison-Wesley,1994

Visitor pattern

Page 7: Effective Architecting: Best Practices for Software Architects

source: https://github.com/cer/event-sourcing-examples/wiki/i/applicationarchitecture.png

Page 8: Effective Architecting: Best Practices for Software Architects

Apply relevant patterns and styles for effective architecting

Page 9: Effective Architecting: Best Practices for Software Architects

“Cities grow, cities evolve, cities have parts that simply die while other

parts flourish; each city has to be renewed in order to meet the needs of its populace… Software-intensive systems

are like that. They grow, they evolve, sometimes they wither away, and

sometimes they flourish…”

Grady Booch in the foreword for “Refactoring for Software Design Smells: Managing Technical Debt”, Girish Suryanarayana, Ganesh Samarthyam, Tushar Sharma, Morgan Kaufmann/Elsevier, 2014.

Page 10: Effective Architecting: Best Practices for Software Architects

CodeCity tool

Page 11: Effective Architecting: Best Practices for Software Architects
Page 12: Effective Architecting: Best Practices for Software Architects

Code Query Language (NDepend, Architect, …)

Page 13: Effective Architecting: Best Practices for Software Architects

Look at the world differently for creative design solutions

Page 14: Effective Architecting: Best Practices for Software Architects

Who coined the term “code

smell”?

Hint: He also originated the

terms TDD and XP

Page 15: Effective Architecting: Best Practices for Software Architects

Kent Beck

Page 16: Effective Architecting: Best Practices for Software Architects

Who coined the acronym “SOLID”?

(as in SOLID principles)

Hint: He is the author of the book

“Working effectively with legacy code”

Page 17: Effective Architecting: Best Practices for Software Architects

Michael Feathers

S Single Responsibility Principle

Every object should have a single responsibility and that should be encapsulated by the class

O Open Closed Principle Software should be open for extension, but closed for modification

L Liskov’s Substitution Principle

Any subclass should always be usable instead of its parent class

I Interface Segregation Principle

Many client specific interfaces are better than one general purpose interface

D Dependency Inversion Principle

Abstractions should not depend upon details. Details should depend upon abstractions

Page 18: Effective Architecting: Best Practices for Software Architects

Who coined the term “technical

debt”?

Hint: He is the creator of “wiki”

Page 19: Effective Architecting: Best Practices for Software Architects

Ward Cunningham

When,duetoconstraints,Idesignquicklyanddirty,myprojectisloadedwithtechnicaldebt

Page 20: Effective Architecting: Best Practices for Software Architects

NumberofAccessedVariables

CyclomaticComplexity

Page 21: Effective Architecting: Best Practices for Software Architects

NewlyAddedService

PercentageofNewlyAddedService

Page 22: Effective Architecting: Best Practices for Software Architects

Infusionwww.intooitus.com/products/infusion

Page 23: Effective Architecting: Best Practices for Software Architects

Violates Single Responsibility

Principle (SRP)

Page 24: Effective Architecting: Best Practices for Software Architects
Page 25: Effective Architecting: Best Practices for Software Architects

PublishedinJournalofObjectTechnology(Vol.12,No.2,2013)   SGGanesh,TusharSharma,GirishSuryanarayana.TowardsaPrinciple-basedClassifica4onofStructuralDesignSmells.InJournalofObjectTechnology,vol.12,no.2,2013,pages1:1–29.doi:10.5381/jot.2013.12.2.a1  URL:hLp://www.jot.fm/issues/issue_2013_06/arPcle1.pdf(openaccess)

Page 26: Effective Architecting: Best Practices for Software Architects
Page 27: Effective Architecting: Best Practices for Software Architects
Page 28: Effective Architecting: Best Practices for Software Architects

"This is a good book about ‘Design Smells’ – actually a great book – nicely organized - clearly written with

plenty of examples and a fair sprinkling of anecdotes."

- Will Tracz (Principal Research Scientist & Fellow, Lockheed Martin)

(review in ACM SIGSOFT Software Engineering Notes)

Page 29: Effective Architecting: Best Practices for Software Architects

Believe in your ideas: how small or “insignificant” it may

appear to be!

Page 30: Effective Architecting: Best Practices for Software Architects

Steve Jobs is viewed as an excellent speaker, business person, and leader. But

not much as an architect. He is an excellent architect.

Why?

Page 31: Effective Architecting: Best Practices for Software Architects
Page 32: Effective Architecting: Best Practices for Software Architects

In the movie Steve Jobs, he gives an example of a music composer. The composer directs the

people and focuses on the orchestra.

That is the case with a software architect as well.

Page 33: Effective Architecting: Best Practices for Software Architects
Page 34: Effective Architecting: Best Practices for Software Architects

As an architect, be a problem solver & technology leader

Page 35: Effective Architecting: Best Practices for Software Architects

What is the key to grow big and succeed?

Page 36: Effective Architecting: Best Practices for Software Architects
Page 37: Effective Architecting: Best Practices for Software Architects

Other organizations

Your organization

Gradually expand your circle of influence

Your departmentYour team

The world

Page 38: Effective Architecting: Best Practices for Software Architects

Some ways to expand your

circle of influence

Give talks (conference, workshop…)

Write articles, books, white papers, …

Organize meet-ups,

training programs, …

Contribute to process,

quality, and cost-saving

initiatives

Page 39: Effective Architecting: Best Practices for Software Architects

Meetups• Software Architecture:

http://www.meetup.com/SoftwareArchitectsBangalore/

• Container Developers: http://www.meetup.com/Container-Developers-Meetup-Bangalore/

• Software Craftsmanship: http://www.meetup.com/Software-Craftsmanship-Bangalore-Meetup/

• Core Java: http://www.meetup.com/Core-Java-Meetup-Bangalore/

• Technical Writers: http://www.meetup.com/Technical-Writers-Meetup-Bangalore/

• JavaScript: http://www.meetup.com/JavaScript-Meetup-Bangalore/

Page 40: Effective Architecting: Best Practices for Software Architects

Influence is leadership - expand your influence!

Page 41: Effective Architecting: Best Practices for Software Architects

Register here: https://www.townscript.com/e/designpattern

SOLID Principles and Design Patterns BootcampLocation: Bangalore

11 JUN 2016: 10:00AM - 6:00 PM