Date post: | 07-Apr-2017 |
Category: |
Software |
Upload: | hayim-makabee |
View: | 864 times |
Download: | 0 times |
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