SlideShare a Scribd company logo
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)
Arch factory - Agile Design: Best Practices
Arch factory - Agile Design: Best Practices
Arch factory - Agile Design: Best Practices
Arch factory - Agile Design: Best Practices
Arch factory - Agile Design: Best Practices
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 …
Arch factory - Agile Design: Best Practices
Thank You Sponsors !

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



Help make a better event -
Complete a Survey!

More Related Content

PPT
Best practices for agile design
PDF
Pair Programming (2014)
PDF
Pair programming demystified
PDF
Introducing Pair Programming
PPT
The Smells Of Bad Design
PPTX
Small Hyper-Productive Teams (IT Brunch)
PDF
Richmond Spin - How To Sell A Traditional Client
PPTX
Agile Practices
Best practices for agile design
Pair Programming (2014)
Pair programming demystified
Introducing Pair Programming
The Smells Of Bad Design
Small Hyper-Productive Teams (IT Brunch)
Richmond Spin - How To Sell A Traditional Client
Agile Practices

What's hot (20)

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

Similar to Arch factory - Agile Design: Best Practices (20)

PPT
Software Development in 21st Century
PPT
Building lean products with distributed agile teams
PPTX
Agile Overview Session
PDF
Agile Software Design
PDF
Friday final test
PDF
It is a sunny day
PDF
Agile Database Development - SDC2012
PPTX
Writing Better Code - Helping Developers make Decisions.pptx
PDF
The 360 Developer
PPTX
Software Engineering Primer
PDF
Audrys Kažukauskas - Introduction into Extreme Programming
PPT
3. Agility and extreme programming OF UNIT-1 PPT
PPTX
Chapter 5
PPT
extreme Programming
PPTX
Best pratice
PDF
Introduction To Agile Refresh Savannah July20 2010 V1 4
PPT
Agile Methodologies And Extreme Programming
PDF
Agile and Secure
PPTX
PDF
Software development is hard
Software Development in 21st Century
Building lean products with distributed agile teams
Agile Overview Session
Agile Software Design
Friday final test
It is a sunny day
Agile Database Development - SDC2012
Writing Better Code - Helping Developers make Decisions.pptx
The 360 Developer
Software Engineering Primer
Audrys Kažukauskas - Introduction into Extreme Programming
3. Agility and extreme programming OF UNIT-1 PPT
Chapter 5
extreme Programming
Best pratice
Introduction To Agile Refresh Savannah July20 2010 V1 4
Agile Methodologies And Extreme Programming
Agile and Secure
Software development is hard
Ad

More from Igor Moochnick (20)

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

Recently uploaded (20)

PDF
solutions_manual_-_materials___processing_in_manufacturing__demargo_.pdf
PPT
Teaching material agriculture food technology
PPTX
Cloud computing and distributed systems.
PDF
Electronic commerce courselecture one. Pdf
PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PDF
Advanced Soft Computing BINUS July 2025.pdf
PDF
CIFDAQ's Market Insight: SEC Turns Pro Crypto
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PDF
Network Security Unit 5.pdf for BCA BBA.
PDF
Review of recent advances in non-invasive hemoglobin estimation
PPTX
MYSQL Presentation for SQL database connectivity
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PDF
GDG Cloud Iasi [PUBLIC] Florian Blaga - Unveiling the Evolution of Cybersecur...
PDF
Spectral efficient network and resource selection model in 5G networks
PDF
cuic standard and advanced reporting.pdf
PDF
Advanced IT Governance
PPTX
Big Data Technologies - Introduction.pptx
solutions_manual_-_materials___processing_in_manufacturing__demargo_.pdf
Teaching material agriculture food technology
Cloud computing and distributed systems.
Electronic commerce courselecture one. Pdf
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
Advanced Soft Computing BINUS July 2025.pdf
CIFDAQ's Market Insight: SEC Turns Pro Crypto
Chapter 3 Spatial Domain Image Processing.pdf
Network Security Unit 5.pdf for BCA BBA.
Review of recent advances in non-invasive hemoglobin estimation
MYSQL Presentation for SQL database connectivity
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Diabetes mellitus diagnosis method based random forest with bat algorithm
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
GDG Cloud Iasi [PUBLIC] Florian Blaga - Unveiling the Evolution of Cybersecur...
Spectral efficient network and resource selection model in 5G networks
cuic standard and advanced reporting.pdf
Advanced IT Governance
Big Data Technologies - Introduction.pptx

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
  • 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 …
  • 46. Thank You Sponsors ! {CodeRight}