adaptable designs for agile software development

24
Adaptable Designs for Agile Software Development Hayim Makabee http://EffectiveSoftwareDesign.com

Upload: hayim-makabee

Post on 07-Apr-2017

865 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Adaptable Designs for Agile  Software Development

Adaptable Designs forAgile Software Development

Hayim Makabeehttp://EffectiveSoftwareDesign.com

Page 2: Adaptable Designs for Agile  Software Development

My life in logos:Education:

Experience:

Page 3: Adaptable Designs for Agile  Software Development

Agile Software DevelopmentIterative, IncrementalExample: Scrum

Page 4: Adaptable Designs for Agile  Software Development

Build-Measure-LearnBuild-Measure-Learn feedback

loop:

Page 5: Adaptable Designs for Agile  Software Development

Building a PyramidIncrementally (Wrong)

Page 6: Adaptable Designs for Agile  Software Development

Building a PyramidIncrementally (Right)

Page 7: Adaptable Designs for Agile  Software Development

Minimum Viable Product (MVP)The MVP is the “version of a new product which allows a team to collect the maximum amount of validated learning about customers with the least effort.” The MVP should have the core features which allow it to be deployed to real customers to get initial feedback, but not more.

Page 8: Adaptable Designs for Agile  Software Development

Building a MVP

Page 9: Adaptable Designs for Agile  Software Development

Adaptability“A system that can cope readily with

a wide range of requirements, will, all other things being equal, have an advantage over one that cannot. Such a system can allow unexpected requirements to be met with little or no reengineering, and allow its more skilled customers to rapidly address novel challenges.” - Brian Foote and Joseph Yoder – “Big Ball of Mud”

Page 10: Adaptable Designs for Agile  Software Development

New development mindsetInstead of planning for software

development, plan for software evolution.

Page 11: Adaptable Designs for Agile  Software Development

Adaptable DesignAdaptable Software Design: A

generic software design for a family of systems which does not need to be changed to accommodate new requirements.

Page 12: Adaptable Designs for Agile  Software Development

Manifesto forAgile Software Development

Individuals and interactions overprocesses and tools

Working software overcomprehensive documentationCustomer collaboration over

contract negotiationResponding to change over

following a plan

Page 13: Adaptable Designs for Agile  Software Development

Manifesto forAdaptable Software Development

Experimentation instead of Specification

Evolution instead of Implementation

Adaptation instead of Modification

Extension instead of Growth

Page 14: Adaptable Designs for Agile  Software Development

Experimentation instead of SpecificationTraditional software

development:◦Detailed specification of system

requirements, functional and non-functional.

Modern software development:◦Allows the discovery of requirements

through experimentation.

Page 15: Adaptable Designs for Agile  Software Development

Evolution instead of ImplementationTraditional software

development:◦Focuses on the prioritized

implementation of features according to specified requirements.

Modern software development:◦Allows the constant evolution of the

system’s functionality to meet the dynamically varying customer needs.

Page 16: Adaptable Designs for Agile  Software Development

Adaptation instead of ModificationTraditional software

development:◦The code must be modified in order

to meet changing requirements.Modern software development:

◦Allows the existing code base to be easily adapted to satisfy any change in requirements.

Page 17: Adaptable Designs for Agile  Software Development

Extension instead of GrowthTraditional software

development:◦The system must grow in order to

accommodate additional requirements.

Modern software development:◦Allows the easy extension of the

system’s functionality through modular features.

Page 18: Adaptable Designs for Agile  Software Development

Architectural needsThe Software Architecture must

support:◦Experimentation◦Evolution◦Adaptation◦Extension

If the Software Architecture is not adaptable, the Agile process will fail.

Consequences: Increasing Technical Debt, endless Refactoring.

Page 19: Adaptable Designs for Agile  Software Development

SOA Principles1. Standardized Service Contracts2. Service Loose Coupling3. Service Abstraction4. Service Reusability5. Service Autonomy6. Service Statelessness7. Service Discoverability8. Service Composability9. Service Interoperability

Page 20: Adaptable Designs for Agile  Software Development

Microservices Practices (I)1. Separated Build:

◦ Each Microservice is built independently and has its own version.

2. Independent Deployment:◦ Each Microservice may be deployed

without affecting the others.3. Separated Data Stores:

◦ Microservices should not share data stores.4. Independence of Platform:

◦ Microservices should be deployed in containers.

Page 21: Adaptable Designs for Agile  Software Development

Microservices Practices (II)5. Individual Technology Choice:

◦Each Microservice may be implemented using a different technology.

6. Confinement of Failure:◦If a failure occurs in a particular

Microservice it should not propagate to the other ones.

7. Independent Scalability:◦It should be possible to scale each

Microservice independently of the others.

Page 22: Adaptable Designs for Agile  Software Development

ConclusionsSoftware systems must evolve over

time.Evolution must be planned and

supported by Adaptable Software Designs.

Adaptable Software Development:◦Experimentation instead of Specification◦Evolution instead of Implementation◦Adaptation instead of Modification◦Extension instead of Growth

Page 23: Adaptable Designs for Agile  Software Development

Adaptability & Evolution“It is not the strongest of the species that survives, nor the most intelligent that survives. It is the one that is the most adaptable to change.” Charles Darwin

Page 24: Adaptable Designs for Agile  Software Development

Thanks!

Q&A

http://EffectiveSoftwareDesign.com