SlideShare ist ein Scribd-Unternehmen logo
1 von 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

Weitere ähnliche Inhalte

Ähnlich wie 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
 

Ähnlich wie 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
 

Mehr von 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
 

Mehr von 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...
 

Kürzlich hochgeladen

Asset Management Software - Infographic
Asset Management Software - InfographicAsset Management Software - Infographic
Asset Management Software - InfographicHr365.us smith
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfkalichargn70th171
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdfWave PLM
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVshikhaohhpro
 
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantSalesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantAxelRicardoTrocheRiq
 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataBradBedford3
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)OPEN KNOWLEDGE GmbH
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsAlberto González Trastoy
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxbodapatigopi8531
 
Engage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The UglyEngage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The UglyFrank van der Linden
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providermohitmore19
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Modelsaagamshah0812
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...MyIntelliSource, Inc.
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio, Inc.
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...kellynguyen01
 
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfThe Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfkalichargn70th171
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...stazi3110
 
Introduction to Decentralized Applications (dApps)
Introduction to Decentralized Applications (dApps)Introduction to Decentralized Applications (dApps)
Introduction to Decentralized Applications (dApps)Intelisync
 
why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfwhy an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfjoe51371421
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfkalichargn70th171
 

Kürzlich hochgeladen (20)

Asset Management Software - Infographic
Asset Management Software - InfographicAsset Management Software - Infographic
Asset Management Software - Infographic
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantSalesforce Certified Field Service Consultant
Salesforce Certified Field Service Consultant
 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptx
 
Engage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The UglyEngage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The Ugly
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
 
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfThe Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
 
Introduction to Decentralized Applications (dApps)
Introduction to Decentralized Applications (dApps)Introduction to Decentralized Applications (dApps)
Introduction to Decentralized Applications (dApps)
 
why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfwhy an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdf
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 

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.