SlideShare ist ein Scribd-Unternehmen logo
1 von 47
Track: Architecture Leadership




      Agile Design
      Best practices
                 We know that it is possible.


                      Igor Moochnick
                      Principal
                      IgorShare Consulting
                      igor@igorshare.com
                      Blog: www.igorshare.com/blog



1
Wireless Access
    1.   Connect to the “Cambridge” network

    2.   Open a Browser


    3. In Logon page use the code:
                   af609
2
A/agile? L/lean?
 It’s not about:
 •   Methodology
 •   Tools
 •   Games
 •   Protocols
 •   Rituals
 •   Manifests
 •   Etc…
 It’s about
 • doing the “right” thing for your customers and your team
 • Transparency
Am I agile?
 Agile means the ability to respond quickly to any change
 • Follow new business opportunities
 • Reflect rapid market changes or challenges
 Lightweight
 It has nothing to do with the software development, but it
 really helps to rapidly exploit business potential
 You have to have Agile company to really succeed
 • If your software team is agile and produces a ton of features but the
   sales and the marketing teams are not performing – it’ll not help you to
   grow your revenue as quickly as you’d like
Assumptions
 1. Life is unpredictable
 2. Doesn’t matter what you do, the statement #1 still
    holds true
 3. Customers are unpredictable – deduction from #1


 4. Our goal is to make it safely to the delivery while
    reacting to the consequences from statement #1
Agile design is here to address …
 How to move forward without having all the requirements
 flushed out
 How to isolate the “unknowns” and capitalize on “known”
 How to create the boundaries between the “stable” and
 “unstable”
 How to make your systems resilient to change
 How to make your systems accommodate constant and
 continuous changes
Agile design helps you to …
 Move forward without knowing the final destination – no design
 upfront
 Accommodate “continuous design”
 Capitalize on learning
 Socialize and Distribute the design – important for distributed teams
 Get early and continuous feedback
 Achieve flexible delivery options
 Provide sustainable development
Requirements
 Prioritized backlog
 • Allows you to make decisions on what and when should be done
 Track progress (lifecycle of a requirement)
 Ownership
Redesign – self-fulfilling prophecy
 Increased complexity of the code reduces productivity which leads to a “ahh…
 screw it and let’s redesign everything” mentality
 Reduced productivity leads to adding developers which increase the
 complexity faster




                                 “Clean Code” NDC 2010
                                     – “Uncle” Bob Martin
Backlog management
 Priority/Order   “Initial estimates are off by factor of 4.”
                       – from 1980 popularized by Steve
 Assignments           McConnell
 Estimates




                   “Software Engineering Economics”
                      – Barry Bohem (1981)
Transparency - Feedback
                                       Customer   Done, Done,
Not Started   In Progress   Testing    Review     Done

                                                  Story #1

                                                  Story #2

                                       Story #3

                            Story #4

              Story #5

                            Story #6

              Story #7

              Story #8

Story #9

Story #10
Kanban Board




               TechEd 2011 “Yes We Kanban”
Design
 No large design upfront
 • Not everything is known ahead of the time and will be discovered later
 • Design continuously – design hat is always on
 KISS/YAGNI/DRY
 Delay commitment and complexity
 Simplicity is hard
 Avoid “Architect Hubris”
 • If we just build the framework upfront, coding will be easy…
 Harvest Abstraction
 • Make any abstraction earn its existence
Basic Agile Mindset
 • Never get blocked
 • Decouple yourself from the others
 • Abstract the dependencies
 • Mock or Stub the unknowns
 • Feed your assumptions into evolving design
 • Incremental improvements
 • “First make it work, then make it right, then make it fast”
Development
 Orthogonal Code
 • Separation of Concerns
 • Cohesion
 • Coupling
 Don’t Repeat Yourself Principle (DRY)
 Don’t build frameworks
 Design for Testability
Composite Application
 Loosely coupled but cohesive
 Inversion of Control
 • Don’t call me, I’ll call you
 • Seamlessly swap one implementation with another
 Dependency Injection
 • “new()” is a form of tight coupling with inherent knowledge
 • Constructor Injection
 • Properties Injections
SOLID Development Principles (classes)
Coding Katas
               Effortful study means
               constantly tackling
               problems at the very edge
               of your ability. Stuff you
               may have a high probability
               of failing at. Unless you're
               failing some of the time,
               you're probably not growing
               professionally. You have to
               seek out those challenges
               and push yourself beyond
               your comfort limit.
                 – Coding Horror (Jeff Atwood)
Refactor Relentlessly
 Design reflectively
 The quality of a design is largely the accumulative sum of
 many small decisions
 “Clean the dishes after cooking”
 • Bad names
 • Duplication
 • Big classes
 • Long methods

 Software entropy is the enemy!
“Boy scout” Rule


  “…Commit your code in a better shape than the
  one it was when you started working on it. “
        – “Uncle” Bob Martin
The Last Responsible Moment

  “…delay commitment until the last responsible moment,
  that is, the moment at which failing to make a decision
  eliminates an important alternative. “
        – Mary Poppendieck
Decide when to Decide
 Make decisions at the right time
 Utilize continuous learning
 Think ahead, yes! Act ahead, no!
 • Don’t act on speculative design
 • Keep a queue of design ideas and possible refactorings
 Don’t go past the Last Responsible Moment
 • Be cognizant of outstanding design decisions
 • Some decisions have to be made earlier than others
Reversibility
 “If you can easily change your decisions, this means it's less
 important to get them right - which makes your life much
 simpler. ”
 - Martin Fowler
Where Reversibility breaks
 • Dependencies on external teams or external experts
 • Publicly published interfaces
 • Too late – other components may force your hand
 • It’s important to decide when to decide!
Design Feedback
 • SMELL test
 • Mockups for customers
 • Any Design is theory until proven
 • If you don’t know what to do next, Spike It!
 • Don’t keep bad design
 • Don’t be afraid of modeling but stop it as soon as you
   stop learning
Maximizing Evolutionary Design
 If possible, only divide teams by feature
 • Externally facing API’s are NOT reversible
 Be Cautious when building Frameworks
 Persistence Ignorant Domain Models
 Delay the Database Model
 Presentation / Behavior Separation in the User Interface
Package Cohesion Principles

       The Release Reuse       The granule of reuse is the
 REP
       Equivalency Principle   granule of release.
       The Common Closure      Classes that change together are
 CCP
       Principle               packaged together.
     The Common Reuse          Classes that are used together
 CRP
     Principle                 are packaged together.
Package Coupling Principles
      The Acyclic Dependencies   The dependency graph of packages
ADP
      Principle                  must have no cycles.
      The Stable Dependencies
SDP                              Depend in the direction of stability.
      Principle
      The Stable Abstractions    Abstractness increases with
SAP
      Principle                  stability.
Development feedback?
 • Continuous integration
 • Continuous deployment
 • Unit tests
 • Code coverage
 • Test automation
Testing
 • When do we start testing?
 • Do we really need it?
 • Do we test the right thing?
 • What does the test testing?
 • Do we know what code is tested? Coverage? Really?
 • If the test fails – what does this mean?
 • Do we know what failed?
Make your code easy to test
 “I don't care how good you think your design is. If I can't
 walk in and write a test for an arbitrary method of yours in
 five minutes, it’s not as good as you think it is, and whether
 you know it or not, you're paying a price for it.”
    – Michael Feathers
Tests are all
   about
confidence
Improve the Testability of the code
 Easy to test the classes in the system except for the edge
 Isolate the Ugly stuff (the hard to test things)
 Some things are hard to test
 User interface is hard to test – use MVP, MVC, MVVM, etc…
 Data Storage is hard to test – use ORMs
 Use Mock frameworks – nMock, Moq, etc…
 Dependency Inversion Principle
 • Code to the interface, not the implementation
Distributed Design
 Socialize the design
 Know the why
 Collectively challenge the design every day
 Talk about the design
 Keep the team abreast of changing design
 strategies
 The “This is the way we do it” moment
Distributed development
 Separation of concerns
 Hide responsibility
 Abstract external dependencies
 Decoupling teams
 Self-sustained and self-sufficient teams
 If possible, only divide teams by feature
 • Externally facing API’s are NOT reversible
 Transparency on interfaces and contracts – demos and unit
 tests
Work Vertically by Feature
 Design vertical slices of deliverable functionality
 All design work should be traceable to immediate business need
 • Includes architectural infrastructure
 • “Pull” Design versus “Push” Design
 Minimize rework by integrating early
 • Test early
 • User feedback early
 • Deployment feedback early
 • Shorten the time between doing and verifying


                                                       “Code Leaders and Beautiful
                                                       Teams”
                                                           – Roy Osherove
Delivery
 • Instant deployment
 • Constant deployment
About design of APIs
 • Convention over Configuration
 • “5 minutes out-of-the-box experience”
 • "design away" common problems rather than documenting workarounds


 • Read more on Developer’s Experience
   (http://blog.oshineye.com/2011/05/what-is-devexp.html)
 • Programmers are People too
   (http://www.natpryce.com/articles/000732.html)
 • Affordances and Design
   (http://www.jnd.org/dn.mss/affordances_and_design.html)
Thanks for ideas
 Martin Fowler – Is Design Dead
 “Uncle” Bob Martin – Principles of Agile Design
 Jeremy D Miller – How Design Gets Done on an Agile Project
 Roy Osherov
 Others …
Thank You Sponsors !

{CodeRight}
http://ArchitectFactory.com/Survey.aspx



Help make a better event -
Complete a Survey!

Weitere ähnliche Inhalte

Was ist angesagt?

Kens Scrum Presentation
Kens Scrum PresentationKens Scrum Presentation
Kens Scrum Presentation
James Peckham
 
Validation Missteps Making Us Full Time Firefighters
Validation Missteps Making Us Full Time Firefighters Validation Missteps Making Us Full Time Firefighters
Validation Missteps Making Us Full Time Firefighters
DVClub
 

Was ist angesagt? (20)

Hiring a developer: step by step debugging
Hiring a developer: step by step debuggingHiring a developer: step by step debugging
Hiring a developer: step by step debugging
 
Kens Scrum Presentation
Kens Scrum PresentationKens Scrum Presentation
Kens Scrum Presentation
 
Pair Programming, TDD and other impractical things
Pair Programming, TDD and other impractical thingsPair Programming, TDD and other impractical things
Pair Programming, TDD and other impractical things
 
Demystifying pair programming, swarming and mob programming - Shrikant Vashis...
Demystifying pair programming, swarming and mob programming - Shrikant Vashis...Demystifying pair programming, swarming and mob programming - Shrikant Vashis...
Demystifying pair programming, swarming and mob programming - Shrikant Vashis...
 
Validation Missteps Making Us Full Time Firefighters
Validation Missteps Making Us Full Time Firefighters Validation Missteps Making Us Full Time Firefighters
Validation Missteps Making Us Full Time Firefighters
 
Pair Programming - a pratical guide
Pair Programming - a pratical guidePair Programming - a pratical guide
Pair Programming - a pratical guide
 
The 7 Deadly Sins Of Almost Being Agile
The 7 Deadly Sins Of Almost Being AgileThe 7 Deadly Sins Of Almost Being Agile
The 7 Deadly Sins Of Almost Being Agile
 
Amanda Cinnamon - Treat Your Code Like the Valuable Software It Is
Amanda Cinnamon - Treat Your Code Like the Valuable Software It IsAmanda Cinnamon - Treat Your Code Like the Valuable Software It Is
Amanda Cinnamon - Treat Your Code Like the Valuable Software It Is
 
Lean Software Development: Values and Principles
Lean Software Development: Values and PrinciplesLean Software Development: Values and Principles
Lean Software Development: Values and Principles
 
Applying software design principles in practice
Applying software design principles in practiceApplying software design principles in practice
Applying software design principles in practice
 
Pair programming
Pair programmingPair programming
Pair programming
 
Introduction to Test Driven Development
Introduction to Test Driven DevelopmentIntroduction to Test Driven Development
Introduction to Test Driven Development
 
Introduction to Agile
Introduction to AgileIntroduction to Agile
Introduction to Agile
 
Titas Lapinskas - Technical Team Leader in Agile
Titas Lapinskas - Technical Team Leader in AgileTitas Lapinskas - Technical Team Leader in Agile
Titas Lapinskas - Technical Team Leader in Agile
 
Eric Ries sllconf keynote: state of the lean startup movement
Eric Ries sllconf keynote: state of the lean startup movementEric Ries sllconf keynote: state of the lean startup movement
Eric Ries sllconf keynote: state of the lean startup movement
 
Anti patterns
Anti patternsAnti patterns
Anti patterns
 
Prototyping for Interaction Design
Prototyping for Interaction DesignPrototyping for Interaction Design
Prototyping for Interaction Design
 
Mob Programming for Continuous Learning
Mob Programming for Continuous LearningMob Programming for Continuous Learning
Mob Programming for Continuous Learning
 
Enough about Process, Let’s Use Patterns
Enough about Process, Let’s Use PatternsEnough about Process, Let’s Use Patterns
Enough about Process, Let’s Use Patterns
 
It's XP Stupid (2019)
It's XP Stupid (2019)It's XP Stupid (2019)
It's XP Stupid (2019)
 

Ähnlich wie Arch factory - Agile Design: Best Practices

Building lean products with distributed agile teams
Building lean products with distributed agile teamsBuilding lean products with distributed agile teams
Building lean products with distributed agile teams
Igor Moochnick
 
Couples Counseling for Software Development by Joe Stage
Couples Counseling for Software Development by Joe StageCouples Counseling for Software Development by Joe Stage
Couples Counseling for Software Development by Joe Stage
GROWtalks
 

Ähnlich wie Arch factory - Agile Design: Best Practices (20)

Building lean products with distributed agile teams
Building lean products with distributed agile teamsBuilding lean products with distributed agile teams
Building lean products with distributed agile teams
 
TDD in Agile
TDD in AgileTDD in Agile
TDD in Agile
 
The 360 Developer
The 360 DeveloperThe 360 Developer
The 360 Developer
 
It's XP, Stupid
It's XP, StupidIt's XP, Stupid
It's XP, Stupid
 
Building Lean Products with Distributed Agile Teams - Igor Moochnick at Produ...
Building Lean Products with Distributed Agile Teams - Igor Moochnick at Produ...Building Lean Products with Distributed Agile Teams - Igor Moochnick at Produ...
Building Lean Products with Distributed Agile Teams - Igor Moochnick at Produ...
 
The Fundamentals of Continuous Software Design
The Fundamentals of Continuous Software DesignThe Fundamentals of Continuous Software Design
The Fundamentals of Continuous Software Design
 
Agile Software Development
Agile Software DevelopmentAgile Software Development
Agile Software Development
 
Agile Development Overview (with a bit about builds)
Agile Development Overview (with a bit about builds)Agile Development Overview (with a bit about builds)
Agile Development Overview (with a bit about builds)
 
Kasten Engineering Culture Deck
Kasten Engineering Culture DeckKasten Engineering Culture Deck
Kasten Engineering Culture Deck
 
Will The Test Leaders Stand Up?
Will The Test Leaders Stand Up?Will The Test Leaders Stand Up?
Will The Test Leaders Stand Up?
 
While You Are Coding
While You Are CodingWhile You Are Coding
While You Are Coding
 
Couples Counseling for Product Development
Couples Counseling for Product DevelopmentCouples Counseling for Product Development
Couples Counseling for Product Development
 
Joe Stump
Joe StumpJoe Stump
Joe Stump
 
GROWtalks - Couples Counseling for Software Development - Joe Stump Sprint.ly
GROWtalks - Couples Counseling for Software Development - Joe Stump Sprint.lyGROWtalks - Couples Counseling for Software Development - Joe Stump Sprint.ly
GROWtalks - Couples Counseling for Software Development - Joe Stump Sprint.ly
 
DevOps Year One
DevOps Year OneDevOps Year One
DevOps Year One
 
Technical Excellence Doesn't Just Happen - AgileIndy 2016
Technical Excellence Doesn't Just Happen - AgileIndy 2016Technical Excellence Doesn't Just Happen - AgileIndy 2016
Technical Excellence Doesn't Just Happen - AgileIndy 2016
 
Secrets of Scrum
Secrets of ScrumSecrets of Scrum
Secrets of Scrum
 
Scrum plus – why scrum is not enough for successful delivery
Scrum plus – why scrum is not enough for successful deliveryScrum plus – why scrum is not enough for successful delivery
Scrum plus – why scrum is not enough for successful delivery
 
Agile software development for startups
Agile software development for startupsAgile software development for startups
Agile software development for startups
 
Couples Counseling for Software Development by Joe Stage
Couples Counseling for Software Development by Joe StageCouples Counseling for Software Development by Joe Stage
Couples Counseling for Software Development by Joe Stage
 

Mehr von Igor Moochnick

Tips for building responsive cloud applications
Tips for building responsive cloud applicationsTips for building responsive cloud applications
Tips for building responsive cloud applications
Igor Moochnick
 
Building complex single page application should be as enjoyable as visit to a...
Building complex single page application should be as enjoyable as visit to a...Building complex single page application should be as enjoyable as visit to a...
Building complex single page application should be as enjoyable as visit to a...
Igor Moochnick
 
Amazon 101 - building composite responsive apps - small
Amazon 101 - building composite responsive apps - smallAmazon 101 - building composite responsive apps - small
Amazon 101 - building composite responsive apps - small
Igor Moochnick
 
Ccr - Concurrency and Coordination Runtime
Ccr - Concurrency and Coordination RuntimeCcr - Concurrency and Coordination Runtime
Ccr - Concurrency and Coordination Runtime
Igor Moochnick
 
NO SQL: What, Why, How
NO SQL: What, Why, HowNO SQL: What, Why, How
NO SQL: What, Why, How
Igor Moochnick
 
Caliburn.micro jump start composite applications for WPF, Silverlight and WP7
Caliburn.micro jump start composite applications for WPF, Silverlight and WP7Caliburn.micro jump start composite applications for WPF, Silverlight and WP7
Caliburn.micro jump start composite applications for WPF, Silverlight and WP7
Igor Moochnick
 
Building Gwt Clients For Cloud Apps.Pptx
Building Gwt Clients For Cloud Apps.PptxBuilding Gwt Clients For Cloud Apps.Pptx
Building Gwt Clients For Cloud Apps.Pptx
Igor Moochnick
 
Application Patters For The Cloud
Application Patters For The CloudApplication Patters For The Cloud
Application Patters For The Cloud
Igor Moochnick
 
Ado.Net Data Services (Astoria)
Ado.Net Data Services (Astoria)Ado.Net Data Services (Astoria)
Ado.Net Data Services (Astoria)
Igor Moochnick
 

Mehr von Igor Moochnick (20)

Continuous delivery workflow with Docker
Continuous delivery workflow with DockerContinuous delivery workflow with Docker
Continuous delivery workflow with Docker
 
Being a generalist and being great at what you do
Being a generalist and being great at what you doBeing a generalist and being great at what you do
Being a generalist and being great at what you do
 
The journey to container adoption in enterprise
The journey to container adoption in enterpriseThe journey to container adoption in enterprise
The journey to container adoption in enterprise
 
Dev ops overview (brief)
Dev ops overview (brief)Dev ops overview (brief)
Dev ops overview (brief)
 
Dev ops cd tool chains
Dev ops cd tool chainsDev ops cd tool chains
Dev ops cd tool chains
 
Orchestration musings
Orchestration musingsOrchestration musings
Orchestration musings
 
Delivery pipelines
Delivery pipelinesDelivery pipelines
Delivery pipelines
 
Tips for building responsive cloud applications
Tips for building responsive cloud applicationsTips for building responsive cloud applications
Tips for building responsive cloud applications
 
Building complex single page application should be as enjoyable as visit to a...
Building complex single page application should be as enjoyable as visit to a...Building complex single page application should be as enjoyable as visit to a...
Building complex single page application should be as enjoyable as visit to a...
 
Amazon 101 - building composite responsive apps - small
Amazon 101 - building composite responsive apps - smallAmazon 101 - building composite responsive apps - small
Amazon 101 - building composite responsive apps - small
 
Ccr - Concurrency and Coordination Runtime
Ccr - Concurrency and Coordination RuntimeCcr - Concurrency and Coordination Runtime
Ccr - Concurrency and Coordination Runtime
 
RavenDB overview
RavenDB overviewRavenDB overview
RavenDB overview
 
NO SQL: What, Why, How
NO SQL: What, Why, HowNO SQL: What, Why, How
NO SQL: What, Why, How
 
Azure ServiceBus Queues and Topics
Azure ServiceBus Queues and TopicsAzure ServiceBus Queues and Topics
Azure ServiceBus Queues and Topics
 
Caliburn.micro jump start composite applications for WPF, Silverlight and WP7
Caliburn.micro jump start composite applications for WPF, Silverlight and WP7Caliburn.micro jump start composite applications for WPF, Silverlight and WP7
Caliburn.micro jump start composite applications for WPF, Silverlight and WP7
 
Practical alm testing
Practical alm   testingPractical alm   testing
Practical alm testing
 
Putting SOAP to REST
Putting SOAP to RESTPutting SOAP to REST
Putting SOAP to REST
 
Building Gwt Clients For Cloud Apps.Pptx
Building Gwt Clients For Cloud Apps.PptxBuilding Gwt Clients For Cloud Apps.Pptx
Building Gwt Clients For Cloud Apps.Pptx
 
Application Patters For The Cloud
Application Patters For The CloudApplication Patters For The Cloud
Application Patters For The Cloud
 
Ado.Net Data Services (Astoria)
Ado.Net Data Services (Astoria)Ado.Net Data Services (Astoria)
Ado.Net Data Services (Astoria)
 

Kürzlich hochgeladen

+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 

Kürzlich hochgeladen (20)

presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 

Arch factory - Agile Design: Best Practices

  • 1. Track: Architecture Leadership Agile Design Best practices We know that it is possible. Igor Moochnick Principal IgorShare Consulting igor@igorshare.com Blog: www.igorshare.com/blog 1
  • 2. Wireless Access 1. Connect to the “Cambridge” network 2. Open a Browser 3. In Logon page use the code: af609 2
  • 3. A/agile? L/lean? It’s not about: • Methodology • Tools • Games • Protocols • Rituals • Manifests • Etc… It’s about • doing the “right” thing for your customers and your team • Transparency
  • 4. Am I agile? Agile means the ability to respond quickly to any change • Follow new business opportunities • Reflect rapid market changes or challenges Lightweight It has nothing to do with the software development, but it really helps to rapidly exploit business potential You have to have Agile company to really succeed • If your software team is agile and produces a ton of features but the sales and the marketing teams are not performing – it’ll not help you to grow your revenue as quickly as you’d like
  • 5. Assumptions 1. Life is unpredictable 2. Doesn’t matter what you do, the statement #1 still holds true 3. Customers are unpredictable – deduction from #1 4. Our goal is to make it safely to the delivery while reacting to the consequences from statement #1
  • 6. Agile design is here to address … How to move forward without having all the requirements flushed out How to isolate the “unknowns” and capitalize on “known” How to create the boundaries between the “stable” and “unstable” How to make your systems resilient to change How to make your systems accommodate constant and continuous changes
  • 7. Agile design helps you to … Move forward without knowing the final destination – no design upfront Accommodate “continuous design” Capitalize on learning Socialize and Distribute the design – important for distributed teams Get early and continuous feedback Achieve flexible delivery options Provide sustainable development
  • 8. Requirements Prioritized backlog • Allows you to make decisions on what and when should be done Track progress (lifecycle of a requirement) Ownership
  • 9. Redesign – self-fulfilling prophecy Increased complexity of the code reduces productivity which leads to a “ahh… screw it and let’s redesign everything” mentality Reduced productivity leads to adding developers which increase the complexity faster “Clean Code” NDC 2010 – “Uncle” Bob Martin
  • 10. Backlog management Priority/Order “Initial estimates are off by factor of 4.” – from 1980 popularized by Steve Assignments McConnell Estimates “Software Engineering Economics” – Barry Bohem (1981)
  • 11. Transparency - Feedback Customer Done, Done, Not Started In Progress Testing Review Done Story #1 Story #2 Story #3 Story #4 Story #5 Story #6 Story #7 Story #8 Story #9 Story #10
  • 12. Kanban Board TechEd 2011 “Yes We Kanban”
  • 13. Design No large design upfront • Not everything is known ahead of the time and will be discovered later • Design continuously – design hat is always on KISS/YAGNI/DRY Delay commitment and complexity Simplicity is hard Avoid “Architect Hubris” • If we just build the framework upfront, coding will be easy… Harvest Abstraction • Make any abstraction earn its existence
  • 14. Basic Agile Mindset • Never get blocked • Decouple yourself from the others • Abstract the dependencies • Mock or Stub the unknowns • Feed your assumptions into evolving design • Incremental improvements • “First make it work, then make it right, then make it fast”
  • 15. Development Orthogonal Code • Separation of Concerns • Cohesion • Coupling Don’t Repeat Yourself Principle (DRY) Don’t build frameworks Design for Testability
  • 16. Composite Application Loosely coupled but cohesive Inversion of Control • Don’t call me, I’ll call you • Seamlessly swap one implementation with another Dependency Injection • “new()” is a form of tight coupling with inherent knowledge • Constructor Injection • Properties Injections
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23. Coding Katas Effortful study means constantly tackling problems at the very edge of your ability. Stuff you may have a high probability of failing at. Unless you're failing some of the time, you're probably not growing professionally. You have to seek out those challenges and push yourself beyond your comfort limit. – Coding Horror (Jeff Atwood)
  • 24. Refactor Relentlessly Design reflectively The quality of a design is largely the accumulative sum of many small decisions “Clean the dishes after cooking” • Bad names • Duplication • Big classes • Long methods Software entropy is the enemy!
  • 25. “Boy scout” Rule “…Commit your code in a better shape than the one it was when you started working on it. “ – “Uncle” Bob Martin
  • 26. The Last Responsible Moment “…delay commitment until the last responsible moment, that is, the moment at which failing to make a decision eliminates an important alternative. “ – Mary Poppendieck
  • 27. Decide when to Decide Make decisions at the right time Utilize continuous learning Think ahead, yes! Act ahead, no! • Don’t act on speculative design • Keep a queue of design ideas and possible refactorings Don’t go past the Last Responsible Moment • Be cognizant of outstanding design decisions • Some decisions have to be made earlier than others
  • 28. Reversibility “If you can easily change your decisions, this means it's less important to get them right - which makes your life much simpler. ” - Martin Fowler
  • 29. Where Reversibility breaks • Dependencies on external teams or external experts • Publicly published interfaces • Too late – other components may force your hand • It’s important to decide when to decide!
  • 30. Design Feedback • SMELL test • Mockups for customers • Any Design is theory until proven • If you don’t know what to do next, Spike It! • Don’t keep bad design • Don’t be afraid of modeling but stop it as soon as you stop learning
  • 31. Maximizing Evolutionary Design If possible, only divide teams by feature • Externally facing API’s are NOT reversible Be Cautious when building Frameworks Persistence Ignorant Domain Models Delay the Database Model Presentation / Behavior Separation in the User Interface
  • 32. Package Cohesion Principles The Release Reuse The granule of reuse is the REP Equivalency Principle granule of release. The Common Closure Classes that change together are CCP Principle packaged together. The Common Reuse Classes that are used together CRP Principle are packaged together.
  • 33. Package Coupling Principles The Acyclic Dependencies The dependency graph of packages ADP Principle must have no cycles. The Stable Dependencies SDP Depend in the direction of stability. Principle The Stable Abstractions Abstractness increases with SAP Principle stability.
  • 34. Development feedback? • Continuous integration • Continuous deployment • Unit tests • Code coverage • Test automation
  • 35. Testing • When do we start testing? • Do we really need it? • Do we test the right thing? • What does the test testing? • Do we know what code is tested? Coverage? Really? • If the test fails – what does this mean? • Do we know what failed?
  • 36. Make your code easy to test “I don't care how good you think your design is. If I can't walk in and write a test for an arbitrary method of yours in five minutes, it’s not as good as you think it is, and whether you know it or not, you're paying a price for it.” – Michael Feathers
  • 37. Tests are all about confidence
  • 38. Improve the Testability of the code Easy to test the classes in the system except for the edge Isolate the Ugly stuff (the hard to test things) Some things are hard to test User interface is hard to test – use MVP, MVC, MVVM, etc… Data Storage is hard to test – use ORMs Use Mock frameworks – nMock, Moq, etc… Dependency Inversion Principle • Code to the interface, not the implementation
  • 39. Distributed Design Socialize the design Know the why Collectively challenge the design every day Talk about the design Keep the team abreast of changing design strategies The “This is the way we do it” moment
  • 40. Distributed development Separation of concerns Hide responsibility Abstract external dependencies Decoupling teams Self-sustained and self-sufficient teams If possible, only divide teams by feature • Externally facing API’s are NOT reversible Transparency on interfaces and contracts – demos and unit tests
  • 41. Work Vertically by Feature Design vertical slices of deliverable functionality All design work should be traceable to immediate business need • Includes architectural infrastructure • “Pull” Design versus “Push” Design Minimize rework by integrating early • Test early • User feedback early • Deployment feedback early • Shorten the time between doing and verifying “Code Leaders and Beautiful Teams” – Roy Osherove
  • 42. Delivery • Instant deployment • Constant deployment
  • 43. About design of APIs • Convention over Configuration • “5 minutes out-of-the-box experience” • "design away" common problems rather than documenting workarounds • Read more on Developer’s Experience (http://blog.oshineye.com/2011/05/what-is-devexp.html) • Programmers are People too (http://www.natpryce.com/articles/000732.html) • Affordances and Design (http://www.jnd.org/dn.mss/affordances_and_design.html)
  • 44. Thanks for ideas Martin Fowler – Is Design Dead “Uncle” Bob Martin – Principles of Agile Design Jeremy D Miller – How Design Gets Done on an Agile Project Roy Osherov Others …
  • 45.
  • 46. Thank You Sponsors ! {CodeRight}
  • 47. http://ArchitectFactory.com/Survey.aspx Help make a better event - Complete a Survey!