SlideShare a Scribd company logo
1 of 42
Antifragile
Software Design
Hayim Makabee
http://EffectiveSoftwareDesign.com
About Me:
Education:
Experience:
Current:
Antifragile
 This presentation is inspired on the
book “Antifragile” by Nassim Taleb.
The Triad: Antifragility,
Robustness, and Fragility
 Fragile things are exposed
to volatility, so that volatility
is prejudicial to them.
 Robust things are immune
to volatility, so that volatility
does not affect them.
 Antifragile things enjoy
volatility, so that volatility is
beneficial to them.
The Triad Over Time
 Fragile things: Break, erode or deteriorate.
 Robust things: Stay the same.
 Antifragile things: Evolve, improve, get
better.
Antifragility vs. Resilience
 “Antifragility is beyond resilience or
robustness. The resilient resists
shocks and stays the same; the
antifragile gets better.”
Nonpredictive Decision
Making
“Sensitivity to harm from volatility is
tractable, more so than forecasting the
event that would cause the harm.”
Aligned with Agile principle:
“Responding to change over following a
plan.”
Volatility in Software Design
In the case of software systems,
volatility appears in the form of changes
over time.
Changes are unavoidable, as
expressed in the Lehman laws of
software evolution:
“Continuing Change — A software
system must be continually adapted or
it becomes progressively less
satisfactory.”
Changes in Software Design
 Functional changes:
◦ Required to implement new requirements, or
to implement modifications in the
requirements.
◦ Have an impact on the system’s behavior
and functionality.
 Non-functional changes:
◦ Required to improve the quality of the design.
◦ Are normally the result of Refactoring and
focus on the reduction of Technical Debt.
◦ Should not affect the system’s behavior or
functionality.
Barbell Strategy
“Barbell Strategy: A dual strategy, a
combination of two extremes, one safe
and one speculative, deemed more
robust than a ‘monomodal’ strategy.”
Example of Barbell Strategy
“An investment strategy in which half
the portfolio is made up of long-term
bonds and the other half of very short-
term bonds.”
Barbell Strategy in Software
What is the software equivalent of a
Barbell Strategy?
The answer is: Abstraction. Software
systems should have a structure and
organization based on different levels of
abstraction.
The duality of the Barbell Strategy is
expressed as the separation between
high-level abstract elements and
concrete implementation details.
Abstract and Concrete
Elements
 Abstract elements: Are robust, and
should not be easily affected by
changes.
 Concrete implementation details: Are
fragile, directly affected by changes.
 Software systems should be built in
such a way that the volatility
(changes):
◦ Does not affect its structure and
organization, preserving the main, high-
level abstractions.
◦ Requires modifications only on the low-
Applications of the Barbell
Strategy
 Information Hiding
 Encapsulation
 Open/Closed Principle
 TDD
 Inheritance Hierarchies
 Frameworks
Information Hiding
Information Hiding was defined by
David Parnas as a criterion to
decompose a system into modules:
“Every module … is characterized by its
knowledge of a design decision which it
hides from all others. Its interface or
definition was chosen to reveal as little
as possible about its inner workings.”
Encapsulation
The mechanism of Encapsulation in Object
Oriented Programming (OOP) is a direct
application of Information Hiding.
The interface of a class is separated from
its implementation, and thus the
implementation may be changed without
affecting the clients of the class.
Thanks to encapsulation, the clients of a
class become less fragile to changes in its
implementation details.
Open/Closed Principle
The Open-Closed Principle (OCP) was
defined by Bertrand Meyer as:
“Software entities (classes, modules,
functions, etc.) should be open for
extension, but closed for modification.”
The implementation of the OCP
requires the definition of an abstraction,
so that each possible extension is a
specialization of this abstraction.
Strategy Design Pattern
TDD: Test-Driven
Development
The fundamental idea of TDD is to write the
tests before writing the code.
 TDD focuses on the early separation
between abstractions and concrete
implementation details.
 Requires the definition of abstract interfaces
and behavior for the classes being tested.
 Allows the code to be easily refactored,
because the unit tests would catch any
mistake.
 The unit tests are less fragile to volatility
(changes) because they are based on
abstractions.
Inheritance Hierarchies
In OOP, an inheritance
hierarchy organizes classes according to a
generalization-specialization rationale.
Classes near the root of the hierarchy are
more abstract than the classes on the
leaves of the inheritance tree.
The abstract classes should be less fragile
than the concrete classes, meaning that
they should be less subject to impact
caused by volatility, such as changes in
the requirements or changes in the
implementation details.
Frameworks
Frameworks provide reusable code that is
not application-specific, defining
abstractions and the relationships among
them.
The software developer extends the
framework, deriving concrete subclasses,
and writing the implementation details to
satisfy the requirements of a specific
application.
These implementation details are fragile,
but the framework is not, and may be
reused with no changes on many
Robust vs. Fragile
Robust Fragile
Dependency on interface Dependency on
implementation details
Client of encapsulated
class
Client of class with public
members
Class that may be
extended without
modifications
Class that needs to be
modified to be extended
Unit Tests Implementation of the
classes being tested
Abstract Class Concrete Class
Generic Framework Application-specific
extension of the
Conclusions so far
 Software systems are subject to volatility
in the form of changing requirements.
 Concrete implementation details are
fragile and directly affected by these
changes
 A Barbell Strategy defines concrete
details as the specialization of higher-
level abstractions.
 Proper abstractions should be robust,
surviving the impact of changes.
 Details change over time, but the system
structure and organization may be
preserved because it is based on
abstractions.
Antifragile Whole, Fragile
Parts
“The antifragility of the whole often
depends on the fragility of the parts.”
Componentization
It is common knowledge that systems
should be divided into components.
The reaction to a change in the
environment should only affect a few
components, and not the entire system.
Thus, component-based systems are
more robust than monolithic systems.
Antifragility through
Componentization
To be Antifragile, a system must be able
to benefit from changes in the
environment.
Antifragility may be achieved when
several systems share the same
components.
When a specific component is
improved, all systems using this
component can benefit from this
improvement.
Example: Rechargeable
Batteries
All users of traditional AA batteries can
benefit from improved technology of
rechargeable ones.
Coupling and Cohesion
Principles to guide the decomposition of
large software systems into modules:
 Coupling: The degree of dependency
between two modules. We always
want low coupling.
 Cohesion: The measure of how
strongly-related is the set of functions
performed by a module. We always
want high cohesion.
Applications of
Componentization
 DLLs
 ORBs
 SOA
 Microservices
 Software Product Lines
DLL: Dynamic Link Library
“DLLs provide a mechanism for shared code
and data, allowing a developer of shared
code/data to upgrade functionality without
requiring applications to be re-linked or re-
compiled.”
ORB: Object Request Broker
“An ORB acts as a broker between a client
request for a service from a distributed object
or component and the completion of that
request.”
SOA: Service-Oriented
Architecture
SOA Principles
1. Standardized Service Contracts
2. Service Loose Coupling
3. Service Abstraction
4. Service Reusability
5. Service Autonomy
6. Service Statelessness
7. Service Discoverability
8. Service Composability
9. Service Interoperability
Service Reusability
“Services contain and express agnostic
logic and can be positioned as reusable
enterprise resources.”
“Logic is divided into services with the
intent of maximizing reuse.”
Thus services should not be part of a
single system, they should be reused in
multiple systems.
Microservices
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.
Systems, Services and
Antifragility
At any point in time it is possible to deploy
an enhanced version of one of the
services without affecting the other ones.
If there are several systems based on
shared services, each time one of these
services is improved all the systems will be
able to immediately benefit from the
improvement.
While each system is robust, the collection
of systems is Antifragile, because they
benefit from the same changes at no
added cost.
Software Product Lines
In a Software Product Line (SPL), a
series of software products are based
on the same components and differ only
on their configuration.
In the case of SPLs there may be
several coexisting versions for each
component.
Each time a new component version is
created, all the products using previous
versions may benefit through simple
configuration updates.
Antifragile vs. Fragile
Antifragile Fragile
Several programs linking
to the same DLLs
A specific version of a
Dynamic Link Library
Several Client objects
calling the same Servant
object
The implementation
details of a specific
Servant object
Several Systems
accessing the same
Services
The implementation
details of a specific
Service
Several Applications using
shared Microservices
The implementation
details of a specific
Microservice
Several Products based A specific version of a
Conclusions
 A simple strategy for Antifragility is:
Build component-based systems with
shared components.
 When one of the shared components
is improved all the systems will be
able to benefit from this improvement
at no additional cost.
Thanks!
Q&A
http://EffectiveSoftwareDesign.com

More Related Content

What's hot

SAFe® - scaled agile framework in practice
SAFe® - scaled agile framework in practiceSAFe® - scaled agile framework in practice
SAFe® - scaled agile framework in practiceIntland Software GmbH
 
Managing Infrastructure as a Product - Introduction to Platform Engineering
Managing Infrastructure as a Product - Introduction to Platform EngineeringManaging Infrastructure as a Product - Introduction to Platform Engineering
Managing Infrastructure as a Product - Introduction to Platform EngineeringAdityo Pratomo
 
Drive business outcomes using Azure Devops
Drive business outcomes using Azure DevopsDrive business outcomes using Azure Devops
Drive business outcomes using Azure DevopsBelatrix Software
 
Azure Devops Build Tools for Powerapps
Azure Devops Build Tools for PowerappsAzure Devops Build Tools for Powerapps
Azure Devops Build Tools for PowerappsJoost Veldhuis, MSc
 
Flow efficiency Kanban Boards
Flow efficiency Kanban BoardsFlow efficiency Kanban Boards
Flow efficiency Kanban BoardsAgile Montréal
 
InnerSource - Using open source best practices to help your company
InnerSource - Using open source best practices to help your companyInnerSource - Using open source best practices to help your company
InnerSource - Using open source best practices to help your companyEric Caron
 
Devops Strategy Roadmap Lifecycle Ppt Powerpoint Presentation Slides Complete...
Devops Strategy Roadmap Lifecycle Ppt Powerpoint Presentation Slides Complete...Devops Strategy Roadmap Lifecycle Ppt Powerpoint Presentation Slides Complete...
Devops Strategy Roadmap Lifecycle Ppt Powerpoint Presentation Slides Complete...SlideTeam
 
Agile vs Waterfall | Difference between Agile and Waterfall | Edureka
Agile vs Waterfall | Difference between Agile and Waterfall | EdurekaAgile vs Waterfall | Difference between Agile and Waterfall | Edureka
Agile vs Waterfall | Difference between Agile and Waterfall | EdurekaEdureka!
 
How to Grow a Serverless Team in an Enterprise
How to Grow a Serverless Team in an EnterpriseHow to Grow a Serverless Team in an Enterprise
How to Grow a Serverless Team in an EnterpriseSheenBrisals
 
Technical Webinar: By the (Play) Book: The Agile Practice at OutSystems
Technical Webinar: By the (Play) Book: The Agile Practice at OutSystemsTechnical Webinar: By the (Play) Book: The Agile Practice at OutSystems
Technical Webinar: By the (Play) Book: The Agile Practice at OutSystemsOutSystems
 
Best Practices - Software Engineering
Best Practices - Software EngineeringBest Practices - Software Engineering
Best Practices - Software Engineering3Quill Softwares
 
scaling-agile-spotify
 scaling-agile-spotify scaling-agile-spotify
scaling-agile-spotifyJohn Tian
 
DevSecOps Fundamentals and the Scars to Prove it.
DevSecOps Fundamentals and the Scars to Prove it.DevSecOps Fundamentals and the Scars to Prove it.
DevSecOps Fundamentals and the Scars to Prove it.Matt Tesauro
 
An Introduction to Scaled Agile Framework (SAFe)
An Introduction to Scaled Agile Framework (SAFe)An Introduction to Scaled Agile Framework (SAFe)
An Introduction to Scaled Agile Framework (SAFe)CA Technologies
 
Backstage at CNCF Madison.pptx
Backstage at CNCF Madison.pptxBackstage at CNCF Madison.pptx
Backstage at CNCF Madison.pptxBrandenTimm1
 

What's hot (20)

SAFe® - scaled agile framework in practice
SAFe® - scaled agile framework in practiceSAFe® - scaled agile framework in practice
SAFe® - scaled agile framework in practice
 
Managing Infrastructure as a Product - Introduction to Platform Engineering
Managing Infrastructure as a Product - Introduction to Platform EngineeringManaging Infrastructure as a Product - Introduction to Platform Engineering
Managing Infrastructure as a Product - Introduction to Platform Engineering
 
Drive business outcomes using Azure Devops
Drive business outcomes using Azure DevopsDrive business outcomes using Azure Devops
Drive business outcomes using Azure Devops
 
Azure Devops Build Tools for Powerapps
Azure Devops Build Tools for PowerappsAzure Devops Build Tools for Powerapps
Azure Devops Build Tools for Powerapps
 
Introduction to Amazon DynamoDB
Introduction to Amazon DynamoDBIntroduction to Amazon DynamoDB
Introduction to Amazon DynamoDB
 
Flow efficiency Kanban Boards
Flow efficiency Kanban BoardsFlow efficiency Kanban Boards
Flow efficiency Kanban Boards
 
InnerSource - Using open source best practices to help your company
InnerSource - Using open source best practices to help your companyInnerSource - Using open source best practices to help your company
InnerSource - Using open source best practices to help your company
 
Devops Strategy Roadmap Lifecycle Ppt Powerpoint Presentation Slides Complete...
Devops Strategy Roadmap Lifecycle Ppt Powerpoint Presentation Slides Complete...Devops Strategy Roadmap Lifecycle Ppt Powerpoint Presentation Slides Complete...
Devops Strategy Roadmap Lifecycle Ppt Powerpoint Presentation Slides Complete...
 
Azure DevOps
Azure DevOpsAzure DevOps
Azure DevOps
 
Agile vs Waterfall | Difference between Agile and Waterfall | Edureka
Agile vs Waterfall | Difference between Agile and Waterfall | EdurekaAgile vs Waterfall | Difference between Agile and Waterfall | Edureka
Agile vs Waterfall | Difference between Agile and Waterfall | Edureka
 
How to Grow a Serverless Team in an Enterprise
How to Grow a Serverless Team in an EnterpriseHow to Grow a Serverless Team in an Enterprise
How to Grow a Serverless Team in an Enterprise
 
The Challenges of Agile Adoption
The Challenges of Agile AdoptionThe Challenges of Agile Adoption
The Challenges of Agile Adoption
 
Technical Webinar: By the (Play) Book: The Agile Practice at OutSystems
Technical Webinar: By the (Play) Book: The Agile Practice at OutSystemsTechnical Webinar: By the (Play) Book: The Agile Practice at OutSystems
Technical Webinar: By the (Play) Book: The Agile Practice at OutSystems
 
DevEx Essentials
DevEx EssentialsDevEx Essentials
DevEx Essentials
 
Agile Methodology
Agile MethodologyAgile Methodology
Agile Methodology
 
Best Practices - Software Engineering
Best Practices - Software EngineeringBest Practices - Software Engineering
Best Practices - Software Engineering
 
scaling-agile-spotify
 scaling-agile-spotify scaling-agile-spotify
scaling-agile-spotify
 
DevSecOps Fundamentals and the Scars to Prove it.
DevSecOps Fundamentals and the Scars to Prove it.DevSecOps Fundamentals and the Scars to Prove it.
DevSecOps Fundamentals and the Scars to Prove it.
 
An Introduction to Scaled Agile Framework (SAFe)
An Introduction to Scaled Agile Framework (SAFe)An Introduction to Scaled Agile Framework (SAFe)
An Introduction to Scaled Agile Framework (SAFe)
 
Backstage at CNCF Madison.pptx
Backstage at CNCF Madison.pptxBackstage at CNCF Madison.pptx
Backstage at CNCF Madison.pptx
 

Similar to Antifragile Software Design

Software engineering Questions and Answers
Software engineering Questions and AnswersSoftware engineering Questions and Answers
Software engineering Questions and AnswersBala Ganesh
 
Software design principles - jinal desai
Software design principles - jinal desaiSoftware design principles - jinal desai
Software design principles - jinal desaijinaldesailive
 
effective modular design.pptx
effective modular design.pptxeffective modular design.pptx
effective modular design.pptxDr.Shweta
 
Reactive Architecture
Reactive ArchitectureReactive Architecture
Reactive ArchitectureKnoldus Inc.
 
Reactive - Is it really a Magic Pill?
Reactive - Is it really a Magic Pill?Reactive - Is it really a Magic Pill?
Reactive - Is it really a Magic Pill?Tech Triveni
 
Ports adapters architecture (hexagonal architecture)
Ports adapters architecture (hexagonal architecture)Ports adapters architecture (hexagonal architecture)
Ports adapters architecture (hexagonal architecture)Farhad Taran
 
RESILIENT VOTING MECHANISMS FOR MISSION SURVIVABILITY IN CYBERSPACE: COMBININ...
RESILIENT VOTING MECHANISMS FOR MISSION SURVIVABILITY IN CYBERSPACE: COMBININ...RESILIENT VOTING MECHANISMS FOR MISSION SURVIVABILITY IN CYBERSPACE: COMBININ...
RESILIENT VOTING MECHANISMS FOR MISSION SURVIVABILITY IN CYBERSPACE: COMBININ...IJNSA Journal
 
System design process.pptx
System design process.pptxSystem design process.pptx
System design process.pptxNajibMuhammad16
 
Clean Code .Net Cheetsheets
Clean Code .Net CheetsheetsClean Code .Net Cheetsheets
Clean Code .Net CheetsheetsNikitaGoncharuk1
 
Software Design abtic.pptx
Software Design abtic.pptxSoftware Design abtic.pptx
Software Design abtic.pptxssuser8c0d24
 
Nina Grantcharova - Approach to Separation of Concerns via Design Patterns
Nina Grantcharova - Approach to Separation of Concerns via Design PatternsNina Grantcharova - Approach to Separation of Concerns via Design Patterns
Nina Grantcharova - Approach to Separation of Concerns via Design Patternsiasaglobal
 
Lecture 11
Lecture 11Lecture 11
Lecture 11Rana Ali
 
Requirement Engineering for Dependable Systems
Requirement Engineering for Dependable SystemsRequirement Engineering for Dependable Systems
Requirement Engineering for Dependable SystemsKamalika Guha Roy
 
An ultimate guide to SOLID Principles, developers must know.
An ultimate guide to SOLID Principles, developers must know.An ultimate guide to SOLID Principles, developers must know.
An ultimate guide to SOLID Principles, developers must know.ONE BCG
 
The Clean Architecture
The Clean ArchitectureThe Clean Architecture
The Clean ArchitectureDmytro Turskyi
 
Software Engineering with Objects (M363) Final Revision By Kuwait10
Software Engineering with Objects (M363) Final Revision By Kuwait10Software Engineering with Objects (M363) Final Revision By Kuwait10
Software Engineering with Objects (M363) Final Revision By Kuwait10Kuwait10
 

Similar to Antifragile Software Design (20)

Software engineering Questions and Answers
Software engineering Questions and AnswersSoftware engineering Questions and Answers
Software engineering Questions and Answers
 
Software design principles - jinal desai
Software design principles - jinal desaiSoftware design principles - jinal desai
Software design principles - jinal desai
 
effective modular design.pptx
effective modular design.pptxeffective modular design.pptx
effective modular design.pptx
 
Reactive Architecture
Reactive ArchitectureReactive Architecture
Reactive Architecture
 
Reactive - Is it really a Magic Pill?
Reactive - Is it really a Magic Pill?Reactive - Is it really a Magic Pill?
Reactive - Is it really a Magic Pill?
 
Ports adapters architecture (hexagonal architecture)
Ports adapters architecture (hexagonal architecture)Ports adapters architecture (hexagonal architecture)
Ports adapters architecture (hexagonal architecture)
 
RESILIENT VOTING MECHANISMS FOR MISSION SURVIVABILITY IN CYBERSPACE: COMBININ...
RESILIENT VOTING MECHANISMS FOR MISSION SURVIVABILITY IN CYBERSPACE: COMBININ...RESILIENT VOTING MECHANISMS FOR MISSION SURVIVABILITY IN CYBERSPACE: COMBININ...
RESILIENT VOTING MECHANISMS FOR MISSION SURVIVABILITY IN CYBERSPACE: COMBININ...
 
114 425-433
114 425-433114 425-433
114 425-433
 
5. oose design new copy
5. oose design new   copy5. oose design new   copy
5. oose design new copy
 
System design process.pptx
System design process.pptxSystem design process.pptx
System design process.pptx
 
Clean Code .Net Cheetsheets
Clean Code .Net CheetsheetsClean Code .Net Cheetsheets
Clean Code .Net Cheetsheets
 
Software Design abtic.pptx
Software Design abtic.pptxSoftware Design abtic.pptx
Software Design abtic.pptx
 
dist_systems.pdf
dist_systems.pdfdist_systems.pdf
dist_systems.pdf
 
Nina Grantcharova - Approach to Separation of Concerns via Design Patterns
Nina Grantcharova - Approach to Separation of Concerns via Design PatternsNina Grantcharova - Approach to Separation of Concerns via Design Patterns
Nina Grantcharova - Approach to Separation of Concerns via Design Patterns
 
Software Engineering CSE/IT.pptx
 Software Engineering CSE/IT.pptx Software Engineering CSE/IT.pptx
Software Engineering CSE/IT.pptx
 
Lecture 11
Lecture 11Lecture 11
Lecture 11
 
Requirement Engineering for Dependable Systems
Requirement Engineering for Dependable SystemsRequirement Engineering for Dependable Systems
Requirement Engineering for Dependable Systems
 
An ultimate guide to SOLID Principles, developers must know.
An ultimate guide to SOLID Principles, developers must know.An ultimate guide to SOLID Principles, developers must know.
An ultimate guide to SOLID Principles, developers must know.
 
The Clean Architecture
The Clean ArchitectureThe Clean Architecture
The Clean Architecture
 
Software Engineering with Objects (M363) Final Revision By Kuwait10
Software Engineering with Objects (M363) Final Revision By Kuwait10Software Engineering with Objects (M363) Final Revision By Kuwait10
Software Engineering with Objects (M363) Final Revision By Kuwait10
 

More from Hayim Makabee

Managing your Reputation
Managing your ReputationManaging your Reputation
Managing your ReputationHayim Makabee
 
Applications of Machine Learning - INDT Webinar
Applications of Machine Learning - INDT WebinarApplications of Machine Learning - INDT Webinar
Applications of Machine Learning - INDT WebinarHayim Makabee
 
Applications of Machine Learning
Applications of Machine LearningApplications of Machine Learning
Applications of Machine LearningHayim Makabee
 
Blue Ocean Strategy: KashKlik Use Case
Blue Ocean Strategy: KashKlik Use CaseBlue Ocean Strategy: KashKlik Use Case
Blue Ocean Strategy: KashKlik Use CaseHayim Makabee
 
Managing your Reputation Gvahim Webinar
Managing your Reputation Gvahim WebinarManaging your Reputation Gvahim Webinar
Managing your Reputation Gvahim WebinarHayim Makabee
 
Explainable Machine Learning (Explainable ML)
Explainable Machine Learning (Explainable ML)Explainable Machine Learning (Explainable ML)
Explainable Machine Learning (Explainable ML)Hayim Makabee
 
Automated Machine Learning (Auto ML)
Automated Machine Learning (Auto ML)Automated Machine Learning (Auto ML)
Automated Machine Learning (Auto ML)Hayim Makabee
 
Managing your Reputation
Managing your ReputationManaging your Reputation
Managing your ReputationHayim Makabee
 
The Story of a Young Oleh (Immigrant in Israel)
The Story of a Young Oleh (Immigrant in Israel)The Story of a Young Oleh (Immigrant in Israel)
The Story of a Young Oleh (Immigrant in Israel)Hayim Makabee
 
Software Architecture for Agile Development
Software Architecture for Agile DevelopmentSoftware Architecture for Agile Development
Software Architecture for Agile DevelopmentHayim Makabee
 
Adaptable Designs for Agile Software Development
Adaptable Designs for Agile  Software DevelopmentAdaptable Designs for Agile  Software Development
Adaptable Designs for Agile Software DevelopmentHayim Makabee
 
Applications of Machine Learning
Applications of Machine LearningApplications of Machine Learning
Applications of Machine LearningHayim Makabee
 
To document or not to document? An exploratory study on developers' motivatio...
To document or not to document? An exploratory study on developers' motivatio...To document or not to document? An exploratory study on developers' motivatio...
To document or not to document? An exploratory study on developers' motivatio...Hayim Makabee
 
To document or not to document? An exploratory study on developers' motivatio...
To document or not to document? An exploratory study on developers' motivatio...To document or not to document? An exploratory study on developers' motivatio...
To document or not to document? An exploratory study on developers' motivatio...Hayim Makabee
 
The SOLID Principles Illustrated by Design Patterns
The SOLID Principles Illustrated by Design PatternsThe SOLID Principles Illustrated by Design Patterns
The SOLID Principles Illustrated by Design PatternsHayim Makabee
 
Aliyah: Looking for a hi-tech job in Israel
Aliyah: Looking for a hi-tech job in IsraelAliyah: Looking for a hi-tech job in Israel
Aliyah: Looking for a hi-tech job in IsraelHayim Makabee
 
The Role of the Software Architect (short version)
The Role of the Software Architect (short version)The Role of the Software Architect (short version)
The Role of the Software Architect (short version)Hayim Makabee
 
Software Quality Attributes
Software Quality AttributesSoftware Quality Attributes
Software Quality AttributesHayim Makabee
 
The Role of the Software Architect
The Role of the Software ArchitectThe Role of the Software Architect
The Role of the Software ArchitectHayim Makabee
 
Reducing Technical Debt: Using Persuasive Technology for Encouraging Software...
Reducing Technical Debt: Using Persuasive Technology for Encouraging Software...Reducing Technical Debt: Using Persuasive Technology for Encouraging Software...
Reducing Technical Debt: Using Persuasive Technology for Encouraging Software...Hayim Makabee
 

More from Hayim Makabee (20)

Managing your Reputation
Managing your ReputationManaging your Reputation
Managing your Reputation
 
Applications of Machine Learning - INDT Webinar
Applications of Machine Learning - INDT WebinarApplications of Machine Learning - INDT Webinar
Applications of Machine Learning - INDT Webinar
 
Applications of Machine Learning
Applications of Machine LearningApplications of Machine Learning
Applications of Machine Learning
 
Blue Ocean Strategy: KashKlik Use Case
Blue Ocean Strategy: KashKlik Use CaseBlue Ocean Strategy: KashKlik Use Case
Blue Ocean Strategy: KashKlik Use Case
 
Managing your Reputation Gvahim Webinar
Managing your Reputation Gvahim WebinarManaging your Reputation Gvahim Webinar
Managing your Reputation Gvahim Webinar
 
Explainable Machine Learning (Explainable ML)
Explainable Machine Learning (Explainable ML)Explainable Machine Learning (Explainable ML)
Explainable Machine Learning (Explainable ML)
 
Automated Machine Learning (Auto ML)
Automated Machine Learning (Auto ML)Automated Machine Learning (Auto ML)
Automated Machine Learning (Auto ML)
 
Managing your Reputation
Managing your ReputationManaging your Reputation
Managing your Reputation
 
The Story of a Young Oleh (Immigrant in Israel)
The Story of a Young Oleh (Immigrant in Israel)The Story of a Young Oleh (Immigrant in Israel)
The Story of a Young Oleh (Immigrant in Israel)
 
Software Architecture for Agile Development
Software Architecture for Agile DevelopmentSoftware Architecture for Agile Development
Software Architecture for Agile Development
 
Adaptable Designs for Agile Software Development
Adaptable Designs for Agile  Software DevelopmentAdaptable Designs for Agile  Software Development
Adaptable Designs for Agile Software Development
 
Applications of Machine Learning
Applications of Machine LearningApplications of Machine Learning
Applications of Machine Learning
 
To document or not to document? An exploratory study on developers' motivatio...
To document or not to document? An exploratory study on developers' motivatio...To document or not to document? An exploratory study on developers' motivatio...
To document or not to document? An exploratory study on developers' motivatio...
 
To document or not to document? An exploratory study on developers' motivatio...
To document or not to document? An exploratory study on developers' motivatio...To document or not to document? An exploratory study on developers' motivatio...
To document or not to document? An exploratory study on developers' motivatio...
 
The SOLID Principles Illustrated by Design Patterns
The SOLID Principles Illustrated by Design PatternsThe SOLID Principles Illustrated by Design Patterns
The SOLID Principles Illustrated by Design Patterns
 
Aliyah: Looking for a hi-tech job in Israel
Aliyah: Looking for a hi-tech job in IsraelAliyah: Looking for a hi-tech job in Israel
Aliyah: Looking for a hi-tech job in Israel
 
The Role of the Software Architect (short version)
The Role of the Software Architect (short version)The Role of the Software Architect (short version)
The Role of the Software Architect (short version)
 
Software Quality Attributes
Software Quality AttributesSoftware Quality Attributes
Software Quality Attributes
 
The Role of the Software Architect
The Role of the Software ArchitectThe Role of the Software Architect
The Role of the Software Architect
 
Reducing Technical Debt: Using Persuasive Technology for Encouraging Software...
Reducing Technical Debt: Using Persuasive Technology for Encouraging Software...Reducing Technical Debt: Using Persuasive Technology for Encouraging Software...
Reducing Technical Debt: Using Persuasive Technology for Encouraging Software...
 

Recently uploaded

UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxUI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxAndreas Kunz
 
Introduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfIntroduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfFerryKemperman
 
Xen Safety Embedded OSS Summit April 2024 v4.pdf
Xen Safety Embedded OSS Summit April 2024 v4.pdfXen Safety Embedded OSS Summit April 2024 v4.pdf
Xen Safety Embedded OSS Summit April 2024 v4.pdfStefano Stabellini
 
Understanding Flamingo - DeepMind's VLM Architecture
Understanding Flamingo - DeepMind's VLM ArchitectureUnderstanding Flamingo - DeepMind's VLM Architecture
Understanding Flamingo - DeepMind's VLM Architecturerahul_net
 
How to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationHow to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationBradBedford3
 
Sending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdfSending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdf31events.com
 
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptxReal-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptxRTS corp
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...OnePlan Solutions
 
Cloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEECloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEEVICTOR MAESTRE RAMIREZ
 
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Matt Ray
 
Odoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 EnterpriseOdoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 Enterprisepreethippts
 
20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...
20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...
20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...Akihiro Suda
 
React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaHanief Utama
 
英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作qr0udbr0
 
Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...Rob Geurden
 
Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesŁukasz Chruściel
 
CRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceCRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceBrainSell Technologies
 

Recently uploaded (20)

UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxUI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
 
Introduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfIntroduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdf
 
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort ServiceHot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
 
Xen Safety Embedded OSS Summit April 2024 v4.pdf
Xen Safety Embedded OSS Summit April 2024 v4.pdfXen Safety Embedded OSS Summit April 2024 v4.pdf
Xen Safety Embedded OSS Summit April 2024 v4.pdf
 
Understanding Flamingo - DeepMind's VLM Architecture
Understanding Flamingo - DeepMind's VLM ArchitectureUnderstanding Flamingo - DeepMind's VLM Architecture
Understanding Flamingo - DeepMind's VLM Architecture
 
How to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationHow to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion Application
 
Sending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdfSending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdf
 
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptxReal-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
 
Cloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEECloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEE
 
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
 
Odoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 EnterpriseOdoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 Enterprise
 
20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...
20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...
20240415 [Container Plumbing Days] Usernetes Gen2 - Kubernetes in Rootless Do...
 
React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief Utama
 
英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作
 
Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...
 
Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New Features
 
Advantages of Odoo ERP 17 for Your Business
Advantages of Odoo ERP 17 for Your BusinessAdvantages of Odoo ERP 17 for Your Business
Advantages of Odoo ERP 17 for Your Business
 
CRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceCRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. Salesforce
 
2.pdf Ejercicios de programación competitiva
2.pdf Ejercicios de programación competitiva2.pdf Ejercicios de programación competitiva
2.pdf Ejercicios de programación competitiva
 

Antifragile Software Design

  • 3. Antifragile  This presentation is inspired on the book “Antifragile” by Nassim Taleb.
  • 4. The Triad: Antifragility, Robustness, and Fragility  Fragile things are exposed to volatility, so that volatility is prejudicial to them.  Robust things are immune to volatility, so that volatility does not affect them.  Antifragile things enjoy volatility, so that volatility is beneficial to them.
  • 5. The Triad Over Time  Fragile things: Break, erode or deteriorate.  Robust things: Stay the same.  Antifragile things: Evolve, improve, get better.
  • 6. Antifragility vs. Resilience  “Antifragility is beyond resilience or robustness. The resilient resists shocks and stays the same; the antifragile gets better.”
  • 7. Nonpredictive Decision Making “Sensitivity to harm from volatility is tractable, more so than forecasting the event that would cause the harm.” Aligned with Agile principle: “Responding to change over following a plan.”
  • 8. Volatility in Software Design In the case of software systems, volatility appears in the form of changes over time. Changes are unavoidable, as expressed in the Lehman laws of software evolution: “Continuing Change — A software system must be continually adapted or it becomes progressively less satisfactory.”
  • 9. Changes in Software Design  Functional changes: ◦ Required to implement new requirements, or to implement modifications in the requirements. ◦ Have an impact on the system’s behavior and functionality.  Non-functional changes: ◦ Required to improve the quality of the design. ◦ Are normally the result of Refactoring and focus on the reduction of Technical Debt. ◦ Should not affect the system’s behavior or functionality.
  • 10. Barbell Strategy “Barbell Strategy: A dual strategy, a combination of two extremes, one safe and one speculative, deemed more robust than a ‘monomodal’ strategy.”
  • 11. Example of Barbell Strategy “An investment strategy in which half the portfolio is made up of long-term bonds and the other half of very short- term bonds.”
  • 12. Barbell Strategy in Software What is the software equivalent of a Barbell Strategy? The answer is: Abstraction. Software systems should have a structure and organization based on different levels of abstraction. The duality of the Barbell Strategy is expressed as the separation between high-level abstract elements and concrete implementation details.
  • 13. Abstract and Concrete Elements  Abstract elements: Are robust, and should not be easily affected by changes.  Concrete implementation details: Are fragile, directly affected by changes.  Software systems should be built in such a way that the volatility (changes): ◦ Does not affect its structure and organization, preserving the main, high- level abstractions. ◦ Requires modifications only on the low-
  • 14. Applications of the Barbell Strategy  Information Hiding  Encapsulation  Open/Closed Principle  TDD  Inheritance Hierarchies  Frameworks
  • 15. Information Hiding Information Hiding was defined by David Parnas as a criterion to decompose a system into modules: “Every module … is characterized by its knowledge of a design decision which it hides from all others. Its interface or definition was chosen to reveal as little as possible about its inner workings.”
  • 16. Encapsulation The mechanism of Encapsulation in Object Oriented Programming (OOP) is a direct application of Information Hiding. The interface of a class is separated from its implementation, and thus the implementation may be changed without affecting the clients of the class. Thanks to encapsulation, the clients of a class become less fragile to changes in its implementation details.
  • 17. Open/Closed Principle The Open-Closed Principle (OCP) was defined by Bertrand Meyer as: “Software entities (classes, modules, functions, etc.) should be open for extension, but closed for modification.” The implementation of the OCP requires the definition of an abstraction, so that each possible extension is a specialization of this abstraction.
  • 19. TDD: Test-Driven Development The fundamental idea of TDD is to write the tests before writing the code.  TDD focuses on the early separation between abstractions and concrete implementation details.  Requires the definition of abstract interfaces and behavior for the classes being tested.  Allows the code to be easily refactored, because the unit tests would catch any mistake.  The unit tests are less fragile to volatility (changes) because they are based on abstractions.
  • 20. Inheritance Hierarchies In OOP, an inheritance hierarchy organizes classes according to a generalization-specialization rationale. Classes near the root of the hierarchy are more abstract than the classes on the leaves of the inheritance tree. The abstract classes should be less fragile than the concrete classes, meaning that they should be less subject to impact caused by volatility, such as changes in the requirements or changes in the implementation details.
  • 21. Frameworks Frameworks provide reusable code that is not application-specific, defining abstractions and the relationships among them. The software developer extends the framework, deriving concrete subclasses, and writing the implementation details to satisfy the requirements of a specific application. These implementation details are fragile, but the framework is not, and may be reused with no changes on many
  • 22. Robust vs. Fragile Robust Fragile Dependency on interface Dependency on implementation details Client of encapsulated class Client of class with public members Class that may be extended without modifications Class that needs to be modified to be extended Unit Tests Implementation of the classes being tested Abstract Class Concrete Class Generic Framework Application-specific extension of the
  • 23. Conclusions so far  Software systems are subject to volatility in the form of changing requirements.  Concrete implementation details are fragile and directly affected by these changes  A Barbell Strategy defines concrete details as the specialization of higher- level abstractions.  Proper abstractions should be robust, surviving the impact of changes.  Details change over time, but the system structure and organization may be preserved because it is based on abstractions.
  • 24. Antifragile Whole, Fragile Parts “The antifragility of the whole often depends on the fragility of the parts.”
  • 25. Componentization It is common knowledge that systems should be divided into components. The reaction to a change in the environment should only affect a few components, and not the entire system. Thus, component-based systems are more robust than monolithic systems.
  • 26. Antifragility through Componentization To be Antifragile, a system must be able to benefit from changes in the environment. Antifragility may be achieved when several systems share the same components. When a specific component is improved, all systems using this component can benefit from this improvement.
  • 27. Example: Rechargeable Batteries All users of traditional AA batteries can benefit from improved technology of rechargeable ones.
  • 28. Coupling and Cohesion Principles to guide the decomposition of large software systems into modules:  Coupling: The degree of dependency between two modules. We always want low coupling.  Cohesion: The measure of how strongly-related is the set of functions performed by a module. We always want high cohesion.
  • 29. Applications of Componentization  DLLs  ORBs  SOA  Microservices  Software Product Lines
  • 30. DLL: Dynamic Link Library “DLLs provide a mechanism for shared code and data, allowing a developer of shared code/data to upgrade functionality without requiring applications to be re-linked or re- compiled.”
  • 31. ORB: Object Request Broker “An ORB acts as a broker between a client request for a service from a distributed object or component and the completion of that request.”
  • 33. SOA Principles 1. Standardized Service Contracts 2. Service Loose Coupling 3. Service Abstraction 4. Service Reusability 5. Service Autonomy 6. Service Statelessness 7. Service Discoverability 8. Service Composability 9. Service Interoperability
  • 34. Service Reusability “Services contain and express agnostic logic and can be positioned as reusable enterprise resources.” “Logic is divided into services with the intent of maximizing reuse.” Thus services should not be part of a single system, they should be reused in multiple systems.
  • 36. 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.
  • 37. 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.
  • 38. Systems, Services and Antifragility At any point in time it is possible to deploy an enhanced version of one of the services without affecting the other ones. If there are several systems based on shared services, each time one of these services is improved all the systems will be able to immediately benefit from the improvement. While each system is robust, the collection of systems is Antifragile, because they benefit from the same changes at no added cost.
  • 39. Software Product Lines In a Software Product Line (SPL), a series of software products are based on the same components and differ only on their configuration. In the case of SPLs there may be several coexisting versions for each component. Each time a new component version is created, all the products using previous versions may benefit through simple configuration updates.
  • 40. Antifragile vs. Fragile Antifragile Fragile Several programs linking to the same DLLs A specific version of a Dynamic Link Library Several Client objects calling the same Servant object The implementation details of a specific Servant object Several Systems accessing the same Services The implementation details of a specific Service Several Applications using shared Microservices The implementation details of a specific Microservice Several Products based A specific version of a
  • 41. Conclusions  A simple strategy for Antifragility is: Build component-based systems with shared components.  When one of the shared components is improved all the systems will be able to benefit from this improvement at no additional cost.