19
Reduce cognitive load with your software architechture David Sundelius @davidsundelius

Reduce cognitive load with your software architechture · • Remembering what’simportant. Manual repetative work • Deployability • Testability • Handovers. Environment overload

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Reduce cognitive load with your software architechture · • Remembering what’simportant. Manual repetative work • Deployability • Testability • Handovers. Environment overload

Reduce cognitiveload with yoursoftware architechture

David Sundelius

@davidsundelius

Page 2: Reduce cognitive load with your software architechture · • Remembering what’simportant. Manual repetative work • Deployability • Testability • Handovers. Environment overload

Bad systems

Neglected UI, security, stability, performance andaccessability

Why?

Page 3: Reduce cognitive load with your software architechture · • Remembering what’simportant. Manual repetative work • Deployability • Testability • Handovers. Environment overload

Definition: Cognitive load

”Cognitive load refers to the total amount of mental effortbeing used in the working memory”

• Intrinsic

• Extraneous

• Germane

Page 4: Reduce cognitive load with your software architechture · • Remembering what’simportant. Manual repetative work • Deployability • Testability • Handovers. Environment overload

Cognitive overload

• Resignation

• Stereotypifying

• Psychological issues

• Individual differences

Page 5: Reduce cognitive load with your software architechture · • Remembering what’simportant. Manual repetative work • Deployability • Testability • Handovers. Environment overload

Architecture

• ”…fundamental structures of a software system…”

• Decisions made to optimize certain parts of the software

• Examples on impacts of cognitive load

Page 6: Reduce cognitive load with your software architechture · • Remembering what’simportant. Manual repetative work • Deployability • Testability • Handovers. Environment overload

Too low/high test coverage

• NOT a great way of measuring quality

• Too low: worry about braking vital fuctionality

• Too high: maintaining tests becomes an issue

Page 7: Reduce cognitive load with your software architechture · • Remembering what’simportant. Manual repetative work • Deployability • Testability • Handovers. Environment overload

Overdocumentation

• Is it updated?

• Traceability

• Remembering what’s important

Page 8: Reduce cognitive load with your software architechture · • Remembering what’simportant. Manual repetative work • Deployability • Testability • Handovers. Environment overload

Manual repetative work

• Deployability

• Testability

• Handovers

Page 9: Reduce cognitive load with your software architechture · • Remembering what’simportant. Manual repetative work • Deployability • Testability • Handovers. Environment overload

Environment overload

• In what state is the AT-environment at the moment?

• Is it going to work together with feature X?

• Will this run in production?

AT

ST

Regression

Sandbox

Develop

QA

Production

Pre-prod

Dev Dev

CI

Prod

Page 10: Reduce cognitive load with your software architechture · • Remembering what’simportant. Manual repetative work • Deployability • Testability • Handovers. Environment overload

DRY – Shared code

• What impact will my change have?

• Is it worth the work making a change?

• Overengineering

Page 11: Reduce cognitive load with your software architechture · • Remembering what’simportant. Manual repetative work • Deployability • Testability • Handovers. Environment overload

”Build for the future” - platforms

• Unused code

• Generalization

• Focusing on the future features

Page 12: Reduce cognitive load with your software architechture · • Remembering what’simportant. Manual repetative work • Deployability • Testability • Handovers. Environment overload

Keep good things for later

• Is this used?

• Increases complexity

• Is it safe to change or remove?

Page 13: Reduce cognitive load with your software architechture · • Remembering what’simportant. Manual repetative work • Deployability • Testability • Handovers. Environment overload

Too few/large releases

• Tracking all changes

• Maintenence after release

• Synchronization/communication

Page 14: Reduce cognitive load with your software architechture · • Remembering what’simportant. Manual repetative work • Deployability • Testability • Handovers. Environment overload

Vague or implicit agreements

• Quality standards

• Interfaces

• Decision making

Page 15: Reduce cognitive load with your software architechture · • Remembering what’simportant. Manual repetative work • Deployability • Testability • Handovers. Environment overload

Abstraction overload

• Verbose code

• The metaunderstanding of the abstraction

• Harder to get an overview

Page 16: Reduce cognitive load with your software architechture · • Remembering what’simportant. Manual repetative work • Deployability • Testability • Handovers. Environment overload

What does this have to do withagility?

• ”Simplicity--the art of maximizing the amountof work not done--is essential.”

• ”The best architectures, requirements, and designsemerge from self-organizing teams.”

• ”Continuous attention to technical excellenceand good design enhances agility.”

Page 17: Reduce cognitive load with your software architechture · • Remembering what’simportant. Manual repetative work • Deployability • Testability • Handovers. Environment overload

• Monoliths or microservices

• Cloud based or on-premises servers

• Machine learning or blockchain

Buzzwords

Page 18: Reduce cognitive load with your software architechture · • Remembering what’simportant. Manual repetative work • Deployability • Testability • Handovers. Environment overload

How can we improve?

• Optimize architecture on reducing cognitive load at a team level

• Find the flow of value and organize teams and architecture

• Discuss cognitive load within the team and try experiments to reduce it

• Spread knowledge within the team (business, technical and tools)

• Simplify for the humans, not the machines

• Developers with less cognitive load -> Better quality, more technical agility

Page 19: Reduce cognitive load with your software architechture · • Remembering what’simportant. Manual repetative work • Deployability • Testability • Handovers. Environment overload

Reduce cognitiveload with yoursoftware architechture

David Sundelius

@davidsundelius