SlideShare a Scribd company logo
Software Design Notes
Diego Pacheco
@diego_pacheco
❏ Cat's Father
❏ Principal Software Architect
❏ Agile Coach
❏ SOA/Microservices Expert
❏ DevOps Practitioner
❏ Speaker
❏ Author
diegopacheco
http://diego-pacheco.blogspot.com.br/
About me...
https://diegopacheco.github.io/
Software Design References (for me)
Software Design References (for me)
Best Software Design Book in long time(2018)
Movement vs Anti-Moviment
❏ SOA
❏ Agile
❏ REST
❏ Docker
❏ Clean Code
❏ ...
Strategic VS Tactical
Deep Modules and Simple Interfaces
Notes
- Modules are Deep
- Classes are modules == Classes are Deep
- Deep Modules are better than shallow modules
- Classitis when you have too many classes disease
- FAT classes hide Information, therefore, creates abstractions
- When an interface is similar to implementation means its shallow thus leaking or poor.
- Decorator Pattern creates shallow modules - Therefore should be avoided.
- Global Context Variable instead of pass-through variables.
- Is more important to have a simple interface than a simple implementation
- Shallow/lots of private methods are also bad
- Exceptions are easy to throw but hard to handle
- Better avoid Exceptions as much as possible.
Notes
- Pull Complexity downward not upward(configuration) avoid exposing configs that won't change
- Comment what is not obvious
- Comments are part of the design
- Comment on interfaces should describe just how to use - this should not have comments of the impl.
- Comments need to be close to the code otherwise they will get outdated
- Long Variable Names VS Short Ones(Go prog Style)
- Obscurity is one of the main causes of complexity.
- Solution to obscurity is always written code that makes it obvious.
- Obvious code means:
- Read quickly without much thought
- Easily guess meaning or what it does
- Guess should be write
Notes
- If the Code is not obvious:
- You spend lots of energy to understand.
- So its hard to understand and its likely to increase misunderstanding, therefore, creating more bugs
- Code Review is the best tool to determine if the code is obvious
- Precise and meaningful names make the code more obvious.
- 2 Effect that's is important is consistency; Same names == Same Patterns easy to recognize things.
- Things that make the code less obvious:
- event-driven code
- generic objects == containers
Notes
- OOP = Composition over inheritance.
- Agile could easily lead to tactical programming.
- TDD focus on getting some specific features working rather than have a better design.
- Great risk of design patterns - over-application.
- More Design Patterns don't mean better design.
- Getters / Setters are shallow and should be avoided as much as possible.
Design Principles
Red Flags
Closing Thoughts
❏ The Book is amazing.
❏ It's great that the book challenge ideas/assumptions.
❏ I'm not 100% into Comments.
❏ The Book don't cover Functional programing in detail :(
❏ The Book don't cover DevOps Engineering :(
❏ Some sample examples are not practical: Text Editor.
Software Design Notes
Diego Pacheco

More Related Content

Similar to Software Design Notes (20)

PDF
TDD - Cultivating a Beginner's Mind
Shai Yallin
 
PDF
Software as a craft (February, 2018)
Rachel M. Carmena
 
PDF
WordCamp US: Clean Code
mtoppa
 
PDF
Diagrams as Code
Sakir Temel
 
PDF
Managing a Project the Drupal Way - Drupal Open Days Ireland
Emma Jane Hogbin Westby
 
PDF
Writing Readable Code
eddiehaber
 
PDF
Femmengeeniring_Kateryna Mishchenko.pdf
ssuserc16f90
 
PDF
Put to the Test
Kevlin Henney
 
PPTX
As a Salesforce Developer I will... 7 Ground Rules for Success, Robert Sösemann
CzechDreamin
 
PPTX
Software Development Essential Skills
John Choi
 
PPTX
ITARC15 Workshop - Architecting a Large Software Project - Lessons Learned
João Pedro Martins
 
PDF
Dealing with dependencies in tests
Diego Pacheco
 
PDF
A philosophy of software design
Diego Pacheco
 
PDF
WordCamp Nashville: Clean Code for WordPress
mtoppa
 
PDF
Architecting a Large Software Project - Lessons Learned
João Pedro Martins
 
PDF
Scottish Ruby Conference 2014
michaelag1971
 
ODP
Documenting code yapceu2016
Søren Lund
 
PPT
Development Environment Tips
Adam Culp
 
PDF
Excavating the knowledge of our ancestors
Uwe Friedrichsen
 
PDF
Ad505 dev blast
Bill Buchan
 
TDD - Cultivating a Beginner's Mind
Shai Yallin
 
Software as a craft (February, 2018)
Rachel M. Carmena
 
WordCamp US: Clean Code
mtoppa
 
Diagrams as Code
Sakir Temel
 
Managing a Project the Drupal Way - Drupal Open Days Ireland
Emma Jane Hogbin Westby
 
Writing Readable Code
eddiehaber
 
Femmengeeniring_Kateryna Mishchenko.pdf
ssuserc16f90
 
Put to the Test
Kevlin Henney
 
As a Salesforce Developer I will... 7 Ground Rules for Success, Robert Sösemann
CzechDreamin
 
Software Development Essential Skills
John Choi
 
ITARC15 Workshop - Architecting a Large Software Project - Lessons Learned
João Pedro Martins
 
Dealing with dependencies in tests
Diego Pacheco
 
A philosophy of software design
Diego Pacheco
 
WordCamp Nashville: Clean Code for WordPress
mtoppa
 
Architecting a Large Software Project - Lessons Learned
João Pedro Martins
 
Scottish Ruby Conference 2014
michaelag1971
 
Documenting code yapceu2016
Søren Lund
 
Development Environment Tips
Adam Culp
 
Excavating the knowledge of our ancestors
Uwe Friedrichsen
 
Ad505 dev blast
Bill Buchan
 

More from Diego Pacheco (20)

PDF
Naming Things Book : Simple Book Review!
Diego Pacheco
 
PDF
Continuous Discovery Habits Book Review.pdf
Diego Pacheco
 
PDF
Thoughts about Shape Up
Diego Pacheco
 
PDF
Holacracy
Diego Pacheco
 
PDF
AWS IAM
Diego Pacheco
 
PDF
CDKs
Diego Pacheco
 
PDF
Encryption Deep Dive
Diego Pacheco
 
PDF
Sec 101
Diego Pacheco
 
PDF
Reflections on SCM
Diego Pacheco
 
PDF
Management: Doing the non-obvious! III
Diego Pacheco
 
PDF
Design is not Subjective
Diego Pacheco
 
PDF
Architecture & Engineering : Doing the non-obvious!
Diego Pacheco
 
PDF
Management doing the non-obvious II
Diego Pacheco
 
PDF
Testing in production
Diego Pacheco
 
PDF
Nine lies about work
Diego Pacheco
 
PDF
Management: doing the nonobvious!
Diego Pacheco
 
PDF
AI and the Future
Diego Pacheco
 
PDF
Dealing with dependencies
Diego Pacheco
 
PDF
Kanban 2020
Diego Pacheco
 
PDF
Lean 2020
Diego Pacheco
 
Naming Things Book : Simple Book Review!
Diego Pacheco
 
Continuous Discovery Habits Book Review.pdf
Diego Pacheco
 
Thoughts about Shape Up
Diego Pacheco
 
Holacracy
Diego Pacheco
 
AWS IAM
Diego Pacheco
 
Encryption Deep Dive
Diego Pacheco
 
Sec 101
Diego Pacheco
 
Reflections on SCM
Diego Pacheco
 
Management: Doing the non-obvious! III
Diego Pacheco
 
Design is not Subjective
Diego Pacheco
 
Architecture & Engineering : Doing the non-obvious!
Diego Pacheco
 
Management doing the non-obvious II
Diego Pacheco
 
Testing in production
Diego Pacheco
 
Nine lies about work
Diego Pacheco
 
Management: doing the nonobvious!
Diego Pacheco
 
AI and the Future
Diego Pacheco
 
Dealing with dependencies
Diego Pacheco
 
Kanban 2020
Diego Pacheco
 
Lean 2020
Diego Pacheco
 
Ad

Recently uploaded (20)

PDF
TheFutureIsDynamic-BoxLang witch Luis Majano.pdf
Ortus Solutions, Corp
 
PDF
The 5 Reasons for IT Maintenance - Arna Softech
Arna Softech
 
PPTX
Home Care Tools: Benefits, features and more
Third Rock Techkno
 
PDF
Adobe Premiere Pro Crack / Full Version / Free Download
hashhshs786
 
PPTX
OpenChain @ OSS NA - In From the Cold: Open Source as Part of Mainstream Soft...
Shane Coughlan
 
PDF
IObit Driver Booster Pro 12.4.0.585 Crack Free Download
henryc1122g
 
PPTX
Agentic Automation Journey Session 1/5: Context Grounding and Autopilot for E...
klpathrudu
 
PDF
Driver Easy Pro 6.1.1 Crack Licensce key 2025 FREE
utfefguu
 
PPTX
Empowering Asian Contributions: The Rise of Regional User Groups in Open Sour...
Shane Coughlan
 
PDF
SAP Firmaya İade ABAB Kodları - ABAB ile yazılmıl hazır kod örneği
Salih Küçük
 
PDF
Top Agile Project Management Tools for Teams in 2025
Orangescrum
 
PPTX
Customise Your Correlation Table in IBM SPSS Statistics.pptx
Version 1 Analytics
 
PPTX
Finding Your License Details in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
PPTX
Change Common Properties in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
PDF
AI + DevOps = Smart Automation with devseccops.ai.pdf
Devseccops.ai
 
PDF
MiniTool Partition Wizard Free Crack + Full Free Download 2025
bashirkhan333g
 
PPTX
Homogeneity of Variance Test Options IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
PDF
Download Canva Pro 2025 PC Crack Full Latest Version
bashirkhan333g
 
PDF
Automate Cybersecurity Tasks with Python
VICTOR MAESTRE RAMIREZ
 
PPTX
Foundations of Marketo Engage - Powering Campaigns with Marketo Personalization
bbedford2
 
TheFutureIsDynamic-BoxLang witch Luis Majano.pdf
Ortus Solutions, Corp
 
The 5 Reasons for IT Maintenance - Arna Softech
Arna Softech
 
Home Care Tools: Benefits, features and more
Third Rock Techkno
 
Adobe Premiere Pro Crack / Full Version / Free Download
hashhshs786
 
OpenChain @ OSS NA - In From the Cold: Open Source as Part of Mainstream Soft...
Shane Coughlan
 
IObit Driver Booster Pro 12.4.0.585 Crack Free Download
henryc1122g
 
Agentic Automation Journey Session 1/5: Context Grounding and Autopilot for E...
klpathrudu
 
Driver Easy Pro 6.1.1 Crack Licensce key 2025 FREE
utfefguu
 
Empowering Asian Contributions: The Rise of Regional User Groups in Open Sour...
Shane Coughlan
 
SAP Firmaya İade ABAB Kodları - ABAB ile yazılmıl hazır kod örneği
Salih Küçük
 
Top Agile Project Management Tools for Teams in 2025
Orangescrum
 
Customise Your Correlation Table in IBM SPSS Statistics.pptx
Version 1 Analytics
 
Finding Your License Details in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
Change Common Properties in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
AI + DevOps = Smart Automation with devseccops.ai.pdf
Devseccops.ai
 
MiniTool Partition Wizard Free Crack + Full Free Download 2025
bashirkhan333g
 
Homogeneity of Variance Test Options IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
Download Canva Pro 2025 PC Crack Full Latest Version
bashirkhan333g
 
Automate Cybersecurity Tasks with Python
VICTOR MAESTRE RAMIREZ
 
Foundations of Marketo Engage - Powering Campaigns with Marketo Personalization
bbedford2
 
Ad

Software Design Notes

  • 2. @diego_pacheco ❏ Cat's Father ❏ Principal Software Architect ❏ Agile Coach ❏ SOA/Microservices Expert ❏ DevOps Practitioner ❏ Speaker ❏ Author diegopacheco http://diego-pacheco.blogspot.com.br/ About me... https://diegopacheco.github.io/
  • 5. Best Software Design Book in long time(2018)
  • 6. Movement vs Anti-Moviment ❏ SOA ❏ Agile ❏ REST ❏ Docker ❏ Clean Code ❏ ...
  • 8. Deep Modules and Simple Interfaces
  • 9. Notes - Modules are Deep - Classes are modules == Classes are Deep - Deep Modules are better than shallow modules - Classitis when you have too many classes disease - FAT classes hide Information, therefore, creates abstractions - When an interface is similar to implementation means its shallow thus leaking or poor. - Decorator Pattern creates shallow modules - Therefore should be avoided. - Global Context Variable instead of pass-through variables. - Is more important to have a simple interface than a simple implementation - Shallow/lots of private methods are also bad - Exceptions are easy to throw but hard to handle - Better avoid Exceptions as much as possible.
  • 10. Notes - Pull Complexity downward not upward(configuration) avoid exposing configs that won't change - Comment what is not obvious - Comments are part of the design - Comment on interfaces should describe just how to use - this should not have comments of the impl. - Comments need to be close to the code otherwise they will get outdated - Long Variable Names VS Short Ones(Go prog Style) - Obscurity is one of the main causes of complexity. - Solution to obscurity is always written code that makes it obvious. - Obvious code means: - Read quickly without much thought - Easily guess meaning or what it does - Guess should be write
  • 11. Notes - If the Code is not obvious: - You spend lots of energy to understand. - So its hard to understand and its likely to increase misunderstanding, therefore, creating more bugs - Code Review is the best tool to determine if the code is obvious - Precise and meaningful names make the code more obvious. - 2 Effect that's is important is consistency; Same names == Same Patterns easy to recognize things. - Things that make the code less obvious: - event-driven code - generic objects == containers
  • 12. Notes - OOP = Composition over inheritance. - Agile could easily lead to tactical programming. - TDD focus on getting some specific features working rather than have a better design. - Great risk of design patterns - over-application. - More Design Patterns don't mean better design. - Getters / Setters are shallow and should be avoided as much as possible.
  • 15. Closing Thoughts ❏ The Book is amazing. ❏ It's great that the book challenge ideas/assumptions. ❏ I'm not 100% into Comments. ❏ The Book don't cover Functional programing in detail :( ❏ The Book don't cover DevOps Engineering :( ❏ Some sample examples are not practical: Text Editor.