SlideShare a Scribd company logo
Software design
Write SOLID software with the IDEAL CHALK

Company

LOGO
Alejandro Claro Mosqueda
What is all this stuff?!

K.I.S.S
.

Information
hiding
What is software design?

“[...] software design means the
conception, invention, or
contrivance of a scheme for
turning a specification for a
computer program into an
operational program.”
- Steve McConnell,
Code Complete (2004)
Programmer's approach to software engineering

Skip requirements engineering and design phases;

START WRITING CODE!!
●

We need to show something to the customer real quick.

●

We are judged by the amount of LOC/month.

●

We expect or know that the schedule is too tight.

●

Design is a waste of time.
Architect's approach to software engineering

Don't write a single line of code until analysis and design
phases are over;

I WANT TO SEE UML DIAGRAMS FIRST!!
●

Implementation is a peace of cake after UML diagrams are done.

●

We can not fail if complete system design is ready first.
Software development is a “wicked” problem

●

It is nondeterministic (There is no definite formulation).

●

There is no stopping rule.

●

Solutions are not true-or-false, but good or bad.

●

It is a sloppy process.

●

It is a heuristic process (trial-and-error).

●

It is about tradeoffs and priorities.

●

It involves restrictions.

●

It is emergent.
Where is the design?

Technical specifications documents?

UML diagrams document?
Some thing are better done than described

“[...] you should tend to view
requirements gathering, design
and implementation as different
facets of the same process – the
delivery of a quality system.”
- Andrew Hunt,
The pragmatic programmer (2000)
Where is the design?

VS
.
Where is the design?

“Martin’s First Law of
Documentation: Produce no
document unless its need is
immediate and significant.”
- Robert Martin,
Agile Software Development (2002)
Where is the design?

“[...] the design of a
software project is
documented primarily by
its source code.”
- Robert Martin,
Agile Software Development (2002)
Where is the design?

“The source code
IS the design!”
- Jack Reeves,
What is software design? (1992)
Separation of Concerns
“no one’s skull is really big enough to contain a modern
computer program.” - Dijkstra (1972)

Don't let plumbing code pollute your software.
Information hiding
“Primary criteria for system modularization should concern the
hiding of critical design decisions.” - David Parnas (1972)
Levels of design
●

System

●

Modules

●

Classes

●

Functions/Methods
Top-down / Stepwise refinement or bottom-up design?
High Cohesion
“Cohesion is a measure of the strength of association of the
elements inside a module.” - Tom DeMarco (1979)

What about doing just one thing and do it well?!
Low Coupling
“[...]; It is a measure of the strength of interconnection.”

- Structured Design, Edward Yourdon (1979)
Desirable characteristics
Bad smells

Do you really know when your code stinks?
Rigidity

.

Software difficult to change.
Fragility

Tendency to break in many places when a single change is made.
Immobility

Hard to reuse.
Viscosity

Doing thing wrong is easier than doing things right.
Needless complexity

Over-design! or elements not currently useful.
Needless repetition

Copy/Paste is useful text editing, but disastrous for code editing.
Opacity

Difficult to understand!
What is really a design smell?

It is a symptom. A
violation of
principles.
SOLID principles (Classes/Functions)

Software development is not a Jenga game!
Single responsibility principle

Just because you can, doesn't mean you should
Open/Close principle

Open chest surgery is not needed when putting on a coat
Liskov substitution principle

If it looks like a duck, quacks like a duck, but needs batteries
Probably have the wrong abstraction!
Interface segregation principle

You want me to plug this in, where?
Dependency inversion principle

Would you solder a lamp directly to the electrical wiring in a wall?
IDEAL CHALK

Write SOLID software with the IDEAL CHALK
Program to Interface NOT Implementation

Think what to do; no who does it!
DRY principle

Changes shall be made only at one place!
Encapsulate what varies

Don't let tomatoes spoil potatoes!
Depend on abstractions, NOT concrete classes

Be generic not specific!
Least Knowledge Principle

Demeter's Law – Talk to friends not strangers
Favour Composition Over Inheritance

Hang the clock; don't embed in the wall.
Hollywood Principle

Don't call us; We will call you!
Apply Design Pattern wherever possible

Don't reinvent the wheel!
Design patterns

●

Provides solution to a recurring problem.

●

Documents well-prove design experience.

●

Abstraction above the level of a single component.

●

Provides common vocabulary and understanding.

●

Are a means of documentation.

●

Supports construction of software with defined properties.
Strive for Loosely Coupled System

Don't get entangled!
KISS - Keep It Small and Simple

If only there were an easier way!
More principles (System/Modules)

Next time...
Granularity (Modules Cohesion)
●

REP: Reuse-Release equivalence principle.

●

CCP: Common-Closure principle.

●

CRP: Common-Reuse principle.

Stability (Modules Coupling)
●

ADP: Acyclic-Dependencies principle.

●

SDP: Stable-Dependencies principle.

●

SAP: Stable-Abstractions principle.
Lets Talk!

“Simple things should be simple and
complex things should be possible.”

More Related Content

PPTX
We Don't Type for a Living: Plural Programming Practices for Productivity and...
PPTX
No Silver Bullet - Essence and Accidents of Software Engineering
PPTX
Getting Started with Architecture Decision Records
PPTX
10x programmers - What lies beneath
PDF
An Ode To Boring Technology
PPT
Audrys Kažukauskas: Big Up Front Design is dead. Long live Emergent Design
PDF
Use The Source Join The Force by Mark Steve Samson | DevCon Summit 2015 #GoO...
PDF
BBOM-AgilePT-2010
We Don't Type for a Living: Plural Programming Practices for Productivity and...
No Silver Bullet - Essence and Accidents of Software Engineering
Getting Started with Architecture Decision Records
10x programmers - What lies beneath
An Ode To Boring Technology
Audrys Kažukauskas: Big Up Front Design is dead. Long live Emergent Design
Use The Source Join The Force by Mark Steve Samson | DevCon Summit 2015 #GoO...
BBOM-AgilePT-2010

What's hot (19)

PDF
Taming Big Balls of Mud with Diligence, Agile Practices, and Hard Work
PPTX
Tdd 4 everyone full version
PPT
Software Development in 21st Century
PPTX
Taming scary production code that nobody wants to touch
PPTX
Innoslate the Gateway to SysML 2.0 and Beyond
PDF
Software quality
PDF
The Automated Requirements Engineer: utopia or dystopia
KEY
What is open source?
PPTX
What's New in Innoslate 4.4?
PDF
Understanding Technical Debt: A Primer for Product Owners and Founders
PPTX
The Software Craftsman (2nd edition)
PPTX
The Software Craftsman
PDF
Nok Final Presentation
PPTX
Don't be too hard for agile; How to go lean with hardware
PDF
Prerequisites for evolutionary architecture
PPTX
What are Model-Based Reviews
PDF
Lean Engineering: Engineering for Learning & Experimentation in the Enterpris...
PDF
How'd we get here? A guide to Architectural Decision Records
PDF
The Latest in DevOps: Elite Performance, Productivity, and Scaling - Google
Taming Big Balls of Mud with Diligence, Agile Practices, and Hard Work
Tdd 4 everyone full version
Software Development in 21st Century
Taming scary production code that nobody wants to touch
Innoslate the Gateway to SysML 2.0 and Beyond
Software quality
The Automated Requirements Engineer: utopia or dystopia
What is open source?
What's New in Innoslate 4.4?
Understanding Technical Debt: A Primer for Product Owners and Founders
The Software Craftsman (2nd edition)
The Software Craftsman
Nok Final Presentation
Don't be too hard for agile; How to go lean with hardware
Prerequisites for evolutionary architecture
What are Model-Based Reviews
Lean Engineering: Engineering for Learning & Experimentation in the Enterpris...
How'd we get here? A guide to Architectural Decision Records
The Latest in DevOps: Elite Performance, Productivity, and Scaling - Google
Ad

Viewers also liked (20)

DOC
Resourceslab fixed
PDF
2013 lean supplier chain_4_asq
PPTX
Lean Benchmarking and value chain optimisation
PDF
2012 Lean Toolbox 20120322 4 Asqn Nsec1
PPTX
Clase3 herramientas
PPTX
Clase 1 herramientas
PPTX
virus informatico
PDF
PDF
Argentina unidentified flying objects 2
PPTX
BLOG ESTUDIANTIL PRODUCTOS ADIDAS
PPTX
Presentation_NEW.PPTX
PPT
Survivor Afia
PDF
Presentacion derecho adminsitrativo 2 concetto corindia saia a
DOCX
English
PDF
Presentacion desarrollo turistico playa lipe
PDF
Assistant engineer jobs Indian oil ltd
PPT
Social Media for Small Business
PPTX
How To Get Results From Maintenance Systems Montreal2012
PPTX
Derecho civil obligaciones
Resourceslab fixed
2013 lean supplier chain_4_asq
Lean Benchmarking and value chain optimisation
2012 Lean Toolbox 20120322 4 Asqn Nsec1
Clase3 herramientas
Clase 1 herramientas
virus informatico
Argentina unidentified flying objects 2
BLOG ESTUDIANTIL PRODUCTOS ADIDAS
Presentation_NEW.PPTX
Survivor Afia
Presentacion derecho adminsitrativo 2 concetto corindia saia a
English
Presentacion desarrollo turistico playa lipe
Assistant engineer jobs Indian oil ltd
Social Media for Small Business
How To Get Results From Maintenance Systems Montreal2012
Derecho civil obligaciones
Ad

Similar to Software design - Write solid software with the ideal chalk (20)

PPTX
The Fundamentals of Continuous Software Design
PDF
Excavating the knowledge of our ancestors
PDF
Agile Architecture
PPTX
Software Development Essential Skills
PPT
Arch factory - Agile Design: Best Practices
PDF
Friday final test
PDF
It is a sunny day
PDF
Object Oriented Design Principles
PPTX
2015.01.09 - Writing Modern Applications for Mobile and Web
PDF
TDD - Cultivating a Beginner's Mind
PDF
L21 Architecture and Agile
PPT
Contemporary Software Engineering Practices Together With Enterprise
PPTX
Agile Architecture and Modeling - Where are we Today
PPT
Best practices for agile design
PDF
Create first android app with MVVM Architecture
PDF
From dev to ops and beyond - getting it done
PPT
The OO Design Principles
PDF
Go Best Practices – Interfaces, Packages and APIs
PPT
Agile Methodologies And Extreme Programming
The Fundamentals of Continuous Software Design
Excavating the knowledge of our ancestors
Agile Architecture
Software Development Essential Skills
Arch factory - Agile Design: Best Practices
Friday final test
It is a sunny day
Object Oriented Design Principles
2015.01.09 - Writing Modern Applications for Mobile and Web
TDD - Cultivating a Beginner's Mind
L21 Architecture and Agile
Contemporary Software Engineering Practices Together With Enterprise
Agile Architecture and Modeling - Where are we Today
Best practices for agile design
Create first android app with MVVM Architecture
From dev to ops and beyond - getting it done
The OO Design Principles
Go Best Practices – Interfaces, Packages and APIs
Agile Methodologies And Extreme Programming

More from Alejandro Claro Mosqueda (6)

PDF
Metodos de monte carlo en mecánica estadistica
PPT
Introducción a los solitones - Presentación de algunas soluciones solitónicas
PDF
Tunelaje de solitones
PDF
Algoritmos aproximados - El problema de la mochila 0-1
PDF
Unit testing - An introduction
PDF
Lean thinking and the agile culture
Metodos de monte carlo en mecánica estadistica
Introducción a los solitones - Presentación de algunas soluciones solitónicas
Tunelaje de solitones
Algoritmos aproximados - El problema de la mochila 0-1
Unit testing - An introduction
Lean thinking and the agile culture

Recently uploaded (20)

PDF
Encapsulation theory and applications.pdf
PDF
Machine learning based COVID-19 study performance prediction
PDF
Encapsulation_ Review paper, used for researhc scholars
PDF
A comparative analysis of optical character recognition models for extracting...
PPTX
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PDF
Assigned Numbers - 2025 - Bluetooth® Document
DOCX
The AUB Centre for AI in Media Proposal.docx
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PDF
Network Security Unit 5.pdf for BCA BBA.
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PPTX
Spectroscopy.pptx food analysis technology
PDF
Electronic commerce courselecture one. Pdf
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PPT
Teaching material agriculture food technology
PDF
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
Encapsulation theory and applications.pdf
Machine learning based COVID-19 study performance prediction
Encapsulation_ Review paper, used for researhc scholars
A comparative analysis of optical character recognition models for extracting...
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
Digital-Transformation-Roadmap-for-Companies.pptx
Chapter 3 Spatial Domain Image Processing.pdf
Assigned Numbers - 2025 - Bluetooth® Document
The AUB Centre for AI in Media Proposal.docx
The Rise and Fall of 3GPP – Time for a Sabbatical?
Network Security Unit 5.pdf for BCA BBA.
Reach Out and Touch Someone: Haptics and Empathic Computing
Spectroscopy.pptx food analysis technology
Electronic commerce courselecture one. Pdf
Mobile App Security Testing_ A Comprehensive Guide.pdf
Agricultural_Statistics_at_a_Glance_2022_0.pdf
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
Teaching material agriculture food technology
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton

Software design - Write solid software with the ideal chalk