adaptable designs for agile software development

Post on 07-Apr-2017

865 Views

Category:

Software

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Adaptable Designs forAgile Software Development

Hayim Makabeehttp://EffectiveSoftwareDesign.com

My life in logos:Education:

Experience:

Agile Software DevelopmentIterative, IncrementalExample: Scrum

Build-Measure-LearnBuild-Measure-Learn feedback

loop:

Building a PyramidIncrementally (Wrong)

Building a PyramidIncrementally (Right)

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.

Building a MVP

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”

New development mindsetInstead of planning for software

development, plan for software evolution.

Adaptable DesignAdaptable Software Design: A

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

Manifesto forAgile Software Development

Individuals and interactions overprocesses and tools

Working software overcomprehensive documentationCustomer collaboration over

contract negotiationResponding to change over

following a plan

Manifesto forAdaptable Software Development

Experimentation instead of Specification

Evolution instead of Implementation

Adaptation instead of Modification

Extension instead of Growth

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.

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.

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.

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.

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.

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

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.

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.

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

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

Thanks!

Q&A

http://EffectiveSoftwareDesign.com

top related