SlideShare una empresa de Scribd logo
1 de 19
Descargar para leer sin conexión
Rouan’s design principles
Software design is the art of
making code easier to understand.
It involves deciding things like
where code is, what it is called and
how it is used.
- Rouan
Design is not
architecture
“To me the term architecture conveys
a notion of the core elements of the
system, the pieces that are difficult to
change. A foundation on which the
rest must be built.”
Martin Fowler
Why does design
matter?
Well-designed software is:
- Easy to understand
- Easy to change
- Easy to extend
- Easy to maintain
- Easy to debug
- Faster to work with
- Cheaper to work with
- More fun to work with
Emergent design is about noticing
the best design while you are looking
at the code.
- Rouan
1. First, it has to
work
Well-designed software is built in
small, incremental steps
BeckDesignRules
https://martinfowler.com/bliki/BeckDesignRules.html
2. Know when to
leave it be
Sometimes the best thing to do is
nothing
● The rule of three
● The danger of premature
abstraction
● The power of talking about an
option and not using it
● The principle of diminishing
returns
● Write code that is easy to delete
3. Do the least
surprising thing
Nobody likes surprises
● Put similar things together: don’t
put your socks in the kitchen
drawer.
● How will someone expect this to
work? Don’t open the crisp
packet from the bottom.
● Single responsibility principle
● Consistency vs correctness
https://en.wikipedia.org/wiki/Principle_of_least_astonishment
4. Favour simplicity
Leave the simplest possible system
behind
https://zen-of-python.info/simple-is-better-than-complex.html#3
5. Complexity comes
from complexity
Get to the bottom of it
● Find the root cause
● Either eliminate it or find a way
to encapsulate it better at its
source
● E.g. Rethink UX requirements
that force you into bad design
● E.g. Rethink system architecture
that forces you into bad design
6. Coding is an
exercise in empathy
Do your best to imagine what will
be easiest for the next person
● The people who read your code
will be different to you
● Coders have different
backgrounds, both technically
and in life
● Even you will be different to you
● Talking to people helps
● Coding with compassion
Some bonus design tips
Accept Entropy
Programming Sucks
Train your eye
learning how to spot
weirdness > learning design
patterns
coding = ∞ permutations
No two design decisions are
ever exactly the same
Refactoring can make problems obvious
This is a good thing
Conway’s law
How your team is organised
influences your design
Feeling ownership
You’re not going to make
changes if you don’t feel like
you can
Rouan’s design principles
1. First, it has to work
2. Know when to leave it be
3. Do the least surprising thing
4. Favour simplicity
5. Complexity comes from complexity
6. Coding is an exercise in empathy

Más contenido relacionado

Similar a Rouan's design principles

Agile Methodologies And Extreme Programming
Agile Methodologies And Extreme ProgrammingAgile Methodologies And Extreme Programming
Agile Methodologies And Extreme ProgrammingUtkarsh Khare
 
5. ch 4-principles that guide practice
5. ch 4-principles that guide practice5. ch 4-principles that guide practice
5. ch 4-principles that guide practiceDelowar hossain
 
Agile Software Development
Agile Software DevelopmentAgile Software Development
Agile Software DevelopmentAhmet Bulut
 
Creating An Incremental Architecture For Your System
Creating An Incremental Architecture For Your SystemCreating An Incremental Architecture For Your System
Creating An Incremental Architecture For Your SystemGiovanni Asproni
 
Best practices for agile design
Best practices for agile designBest practices for agile design
Best practices for agile designIgor Moochnick
 
Computer Programming
Computer ProgrammingComputer Programming
Computer Programmingjosernova
 
Code Craftsmanship Checklist
Code Craftsmanship ChecklistCode Craftsmanship Checklist
Code Craftsmanship ChecklistRyan Polk
 
Software Design Notes
Software Design NotesSoftware Design Notes
Software Design NotesDiego Pacheco
 
"Everybody is a Designer. Deal with it." by Wolfgang Bremer
"Everybody is a Designer. Deal with it." by Wolfgang Bremer"Everybody is a Designer. Deal with it." by Wolfgang Bremer
"Everybody is a Designer. Deal with it." by Wolfgang BremerWolfgang Bremer
 
Architecting Solutions and Systems – Randy’s Secrets to Success
Architecting Solutions and Systems – Randy’s Secrets to SuccessArchitecting Solutions and Systems – Randy’s Secrets to Success
Architecting Solutions and Systems – Randy’s Secrets to SuccessRandy Williams
 
Workshop on software product development the backdrop
Workshop on software product development   the backdropWorkshop on software product development   the backdrop
Workshop on software product development the backdropJoy Prabhakaran
 
The View - 30 proven Lotuscript tips
The View - 30 proven Lotuscript tipsThe View - 30 proven Lotuscript tips
The View - 30 proven Lotuscript tipsBill Buchan
 
Arch factory - Agile Design: Best Practices
Arch factory - Agile Design: Best PracticesArch factory - Agile Design: Best Practices
Arch factory - Agile Design: Best PracticesIgor Moochnick
 
DevOps interview questions and answers
DevOps interview questions and answersDevOps interview questions and answers
DevOps interview questions and answersHopeTutors1
 
WordCamp US: Clean Code
WordCamp US: Clean CodeWordCamp US: Clean Code
WordCamp US: Clean Codemtoppa
 

Similar a Rouan's design principles (20)

Principles that Guide Practice
Principles that Guide PracticePrinciples that Guide Practice
Principles that Guide Practice
 
Agile Methodologies And Extreme Programming
Agile Methodologies And Extreme ProgrammingAgile Methodologies And Extreme Programming
Agile Methodologies And Extreme Programming
 
5. ch 4-principles that guide practice
5. ch 4-principles that guide practice5. ch 4-principles that guide practice
5. ch 4-principles that guide practice
 
What is xp
What is xpWhat is xp
What is xp
 
Agile Software Development
Agile Software DevelopmentAgile Software Development
Agile Software Development
 
Put to the Test
Put to the TestPut to the Test
Put to the Test
 
Best pratice
Best praticeBest pratice
Best pratice
 
Creating An Incremental Architecture For Your System
Creating An Incremental Architecture For Your SystemCreating An Incremental Architecture For Your System
Creating An Incremental Architecture For Your System
 
Best practices for agile design
Best practices for agile designBest practices for agile design
Best practices for agile design
 
Computer Programming
Computer ProgrammingComputer Programming
Computer Programming
 
Code Craftsmanship Checklist
Code Craftsmanship ChecklistCode Craftsmanship Checklist
Code Craftsmanship Checklist
 
Software Design Notes
Software Design NotesSoftware Design Notes
Software Design Notes
 
"Everybody is a Designer. Deal with it." by Wolfgang Bremer
"Everybody is a Designer. Deal with it." by Wolfgang Bremer"Everybody is a Designer. Deal with it." by Wolfgang Bremer
"Everybody is a Designer. Deal with it." by Wolfgang Bremer
 
Old Is the New New
Old Is the New NewOld Is the New New
Old Is the New New
 
Architecting Solutions and Systems – Randy’s Secrets to Success
Architecting Solutions and Systems – Randy’s Secrets to SuccessArchitecting Solutions and Systems – Randy’s Secrets to Success
Architecting Solutions and Systems – Randy’s Secrets to Success
 
Workshop on software product development the backdrop
Workshop on software product development   the backdropWorkshop on software product development   the backdrop
Workshop on software product development the backdrop
 
The View - 30 proven Lotuscript tips
The View - 30 proven Lotuscript tipsThe View - 30 proven Lotuscript tips
The View - 30 proven Lotuscript tips
 
Arch factory - Agile Design: Best Practices
Arch factory - Agile Design: Best PracticesArch factory - Agile Design: Best Practices
Arch factory - Agile Design: Best Practices
 
DevOps interview questions and answers
DevOps interview questions and answersDevOps interview questions and answers
DevOps interview questions and answers
 
WordCamp US: Clean Code
WordCamp US: Clean CodeWordCamp US: Clean Code
WordCamp US: Clean Code
 

Más de rouanw

NDC Security 2023
NDC Security 2023NDC Security 2023
NDC Security 2023rouanw
 
Is this okay!? DevSecCon ⚡ 2022
Is this okay!? DevSecCon ⚡ 2022Is this okay!? DevSecCon ⚡ 2022
Is this okay!? DevSecCon ⚡ 2022rouanw
 
Fail better with QA in Production
Fail better with QA in ProductionFail better with QA in Production
Fail better with QA in Productionrouanw
 
Qa in production singular 2019
Qa in production   singular 2019Qa in production   singular 2019
Qa in production singular 2019rouanw
 
How to review a pull request
How to review a pull requestHow to review a pull request
How to review a pull requestrouanw
 
The curious case of the production incident
The curious case of the production incidentThe curious case of the production incident
The curious case of the production incidentrouanw
 
QA in Production: The tests we never wrote and the production monitoring we u...
QA in Production: The tests we never wrote and the production monitoring we u...QA in Production: The tests we never wrote and the production monitoring we u...
QA in Production: The tests we never wrote and the production monitoring we u...rouanw
 
Organised chaos: real-world JavaScript microservices
Organised chaos: real-world JavaScript microservicesOrganised chaos: real-world JavaScript microservices
Organised chaos: real-world JavaScript microservicesrouanw
 
Contributing to open source is easier than you think
Contributing to open source is easier than you thinkContributing to open source is easier than you think
Contributing to open source is easier than you thinkrouanw
 
How to write a blog post
How to write a blog postHow to write a blog post
How to write a blog postrouanw
 
QA in Production
QA in ProductionQA in Production
QA in Productionrouanw
 
Dashboards: Using data to find out what's really going on
Dashboards: Using data to find out what's really going onDashboards: Using data to find out what's really going on
Dashboards: Using data to find out what's really going onrouanw
 
Tech lead tips
Tech lead tipsTech lead tips
Tech lead tipsrouanw
 
DevOps Culture
DevOps CultureDevOps Culture
DevOps Culturerouanw
 
Techniques for stress free software releases
Techniques for stress free software releasesTechniques for stress free software releases
Techniques for stress free software releasesrouanw
 
Be a polyglot programmer
Be a polyglot programmerBe a polyglot programmer
Be a polyglot programmerrouanw
 
Emergent design - PHP Jo'burg 2015
Emergent design - PHP Jo'burg 2015Emergent design - PHP Jo'burg 2015
Emergent design - PHP Jo'burg 2015rouanw
 
Infrastructure as code
Infrastructure as codeInfrastructure as code
Infrastructure as coderouanw
 
ThoughtWorks Tech radar Jan 2014
ThoughtWorks Tech radar Jan 2014ThoughtWorks Tech radar Jan 2014
ThoughtWorks Tech radar Jan 2014rouanw
 
Continuous Integration
Continuous IntegrationContinuous Integration
Continuous Integrationrouanw
 

Más de rouanw (20)

NDC Security 2023
NDC Security 2023NDC Security 2023
NDC Security 2023
 
Is this okay!? DevSecCon ⚡ 2022
Is this okay!? DevSecCon ⚡ 2022Is this okay!? DevSecCon ⚡ 2022
Is this okay!? DevSecCon ⚡ 2022
 
Fail better with QA in Production
Fail better with QA in ProductionFail better with QA in Production
Fail better with QA in Production
 
Qa in production singular 2019
Qa in production   singular 2019Qa in production   singular 2019
Qa in production singular 2019
 
How to review a pull request
How to review a pull requestHow to review a pull request
How to review a pull request
 
The curious case of the production incident
The curious case of the production incidentThe curious case of the production incident
The curious case of the production incident
 
QA in Production: The tests we never wrote and the production monitoring we u...
QA in Production: The tests we never wrote and the production monitoring we u...QA in Production: The tests we never wrote and the production monitoring we u...
QA in Production: The tests we never wrote and the production monitoring we u...
 
Organised chaos: real-world JavaScript microservices
Organised chaos: real-world JavaScript microservicesOrganised chaos: real-world JavaScript microservices
Organised chaos: real-world JavaScript microservices
 
Contributing to open source is easier than you think
Contributing to open source is easier than you thinkContributing to open source is easier than you think
Contributing to open source is easier than you think
 
How to write a blog post
How to write a blog postHow to write a blog post
How to write a blog post
 
QA in Production
QA in ProductionQA in Production
QA in Production
 
Dashboards: Using data to find out what's really going on
Dashboards: Using data to find out what's really going onDashboards: Using data to find out what's really going on
Dashboards: Using data to find out what's really going on
 
Tech lead tips
Tech lead tipsTech lead tips
Tech lead tips
 
DevOps Culture
DevOps CultureDevOps Culture
DevOps Culture
 
Techniques for stress free software releases
Techniques for stress free software releasesTechniques for stress free software releases
Techniques for stress free software releases
 
Be a polyglot programmer
Be a polyglot programmerBe a polyglot programmer
Be a polyglot programmer
 
Emergent design - PHP Jo'burg 2015
Emergent design - PHP Jo'burg 2015Emergent design - PHP Jo'burg 2015
Emergent design - PHP Jo'burg 2015
 
Infrastructure as code
Infrastructure as codeInfrastructure as code
Infrastructure as code
 
ThoughtWorks Tech radar Jan 2014
ThoughtWorks Tech radar Jan 2014ThoughtWorks Tech radar Jan 2014
ThoughtWorks Tech radar Jan 2014
 
Continuous Integration
Continuous IntegrationContinuous Integration
Continuous Integration
 

Último

What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...Technogeeks
 
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
 
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
 
英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作qr0udbr0
 
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanySuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanyChristoph Pohl
 
PREDICTING RIVER WATER QUALITY ppt presentation
PREDICTING  RIVER  WATER QUALITY  ppt presentationPREDICTING  RIVER  WATER QUALITY  ppt presentation
PREDICTING RIVER WATER QUALITY ppt presentationvaddepallysandeep122
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureDinusha Kumarasiri
 
Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Mater
 
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxKnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxTier1 app
 
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
 
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
 
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Natan Silnitsky
 
Cyber security and its impact on E commerce
Cyber security and its impact on E commerceCyber security and its impact on E commerce
Cyber security and its impact on E commercemanigoyal112
 
MYjobs Presentation Django-based project
MYjobs Presentation Django-based projectMYjobs Presentation Django-based project
MYjobs Presentation Django-based projectAnoyGreter
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmSujith Sukumaran
 
How to Track Employee Performance A Comprehensive Guide.pdf
How to Track Employee Performance A Comprehensive Guide.pdfHow to Track Employee Performance A Comprehensive Guide.pdf
How to Track Employee Performance A Comprehensive Guide.pdfLivetecs LLC
 
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
 
What is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWhat is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWave PLM
 
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
 
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Angel Borroy López
 

Último (20)

What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...
 
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
 
Cloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEECloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEE
 
英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作英国UN学位证,北安普顿大学毕业证书1:1制作
英国UN学位证,北安普顿大学毕业证书1:1制作
 
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanySuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
 
PREDICTING RIVER WATER QUALITY ppt presentation
PREDICTING  RIVER  WATER QUALITY  ppt presentationPREDICTING  RIVER  WATER QUALITY  ppt presentation
PREDICTING RIVER WATER QUALITY ppt presentation
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with Azure
 
Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)
 
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxKnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
 
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
 
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
 
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
 
Cyber security and its impact on E commerce
Cyber security and its impact on E commerceCyber security and its impact on E commerce
Cyber security and its impact on E commerce
 
MYjobs Presentation Django-based project
MYjobs Presentation Django-based projectMYjobs Presentation Django-based project
MYjobs Presentation Django-based project
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalm
 
How to Track Employee Performance A Comprehensive Guide.pdf
How to Track Employee Performance A Comprehensive Guide.pdfHow to Track Employee Performance A Comprehensive Guide.pdf
How to Track Employee Performance A Comprehensive Guide.pdf
 
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...
 
What is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need ItWhat is Fashion PLM and Why Do You Need It
What is Fashion PLM and Why Do You Need It
 
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
 
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
 

Rouan's design principles

  • 2. Software design is the art of making code easier to understand. It involves deciding things like where code is, what it is called and how it is used. - Rouan
  • 3. Design is not architecture “To me the term architecture conveys a notion of the core elements of the system, the pieces that are difficult to change. A foundation on which the rest must be built.” Martin Fowler
  • 4. Why does design matter? Well-designed software is: - Easy to understand - Easy to change - Easy to extend - Easy to maintain - Easy to debug - Faster to work with - Cheaper to work with - More fun to work with
  • 5. Emergent design is about noticing the best design while you are looking at the code. - Rouan
  • 6. 1. First, it has to work Well-designed software is built in small, incremental steps BeckDesignRules https://martinfowler.com/bliki/BeckDesignRules.html
  • 7. 2. Know when to leave it be Sometimes the best thing to do is nothing ● The rule of three ● The danger of premature abstraction ● The power of talking about an option and not using it ● The principle of diminishing returns ● Write code that is easy to delete
  • 8. 3. Do the least surprising thing Nobody likes surprises ● Put similar things together: don’t put your socks in the kitchen drawer. ● How will someone expect this to work? Don’t open the crisp packet from the bottom. ● Single responsibility principle ● Consistency vs correctness https://en.wikipedia.org/wiki/Principle_of_least_astonishment
  • 9. 4. Favour simplicity Leave the simplest possible system behind https://zen-of-python.info/simple-is-better-than-complex.html#3
  • 10. 5. Complexity comes from complexity Get to the bottom of it ● Find the root cause ● Either eliminate it or find a way to encapsulate it better at its source ● E.g. Rethink UX requirements that force you into bad design ● E.g. Rethink system architecture that forces you into bad design
  • 11. 6. Coding is an exercise in empathy Do your best to imagine what will be easiest for the next person ● The people who read your code will be different to you ● Coders have different backgrounds, both technically and in life ● Even you will be different to you ● Talking to people helps ● Coding with compassion
  • 14. Train your eye learning how to spot weirdness > learning design patterns
  • 15. coding = ∞ permutations No two design decisions are ever exactly the same
  • 16. Refactoring can make problems obvious This is a good thing
  • 17. Conway’s law How your team is organised influences your design
  • 18. Feeling ownership You’re not going to make changes if you don’t feel like you can
  • 19. Rouan’s design principles 1. First, it has to work 2. Know when to leave it be 3. Do the least surprising thing 4. Favour simplicity 5. Complexity comes from complexity 6. Coding is an exercise in empathy